目前有两台服务器,ip分别是:
192.168.1.10
192.168.1.20
两台服务器均安装了apache,php。也同时配置好了网站。
目前网址绑定到192.168.1.10。
目前希望实现如下功能:
在用户通过域名访问时,随机访问到这两台服务器中的一台,达到分流的目的,减轻服务器的压力。
目前想到的方案是,通过nginx来实现负载均衡,即:把请求转发到对应服务器。用户在其中一台服务器中上传了文件时,需要立即同步到另一台服务器,具体办法可以参照上一篇文章:《linux中inotify+unison实现数据双向实时同步》
1.安装Nginx(注:以下是在centos6.5上安装的,其他版本可能略有不同)
(1)安装PCRE库
cd /home
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.40.tar.gz
tar -zxvf pcre-8.40.tar.gz
cd pcre-8.40
./configure
make
make install
(2)安装zlib库
yum y install zlib*
(3)安装ssl(某些vps默认没装ssl)
cd /home
wget http://www.openssl.org/source/openssl-fips-2.0.14.tar.gz
tar -zxvf openssl-fips-2.0.14.tar.gz
yum -y install openssl openssl-devel
(4)安装nginx
注意:nginx的默认安装路径是 /usr/local/nginx 其运行文件在其/usr/local/nginx/sbin目录下面
cd /home
wget http://nginx.org/download/nginx-1.4.2.tar.gz
tar -zxvf nginx-1.4.2.tar.gz
cd nginx-1.4.2
./configure
make
make install
(5)nginx配置负载均衡
修改nginx配置文件:
vi /usr/local/nginx/conf/nginx.conf
如果不知道nginx.conf的位置,可以通过find / -name nginx.conf来查找
关键内容如下:
http {
#设定mime类型,类型由mime.type文件定义
include /etc/nginx/mime.types;
default_type application/octet-stream;
#设定日志格式
access_log /var/log/nginx/access.log;
#设定负载均衡的服务器列表
upstream load_balance_server {
#weigth参数表示权值,权值越高被分配到的几率越大
server 192.168.1.10:8080 weight=5;
server 192.168.1.20:80 weight=1;
}
#HTTP服务器
server {
#侦听80端口
listen 80;
#定义使用www.xx.com访问
server_name www.helloworld.com;
#对所有请求进行负载均衡请求
location / {
root /root; #定义服务器的默认网站根目录位置
index index.html index.htm; #定义首页索引文件的名称
proxy_pass http://load_balance_server; #请求转向load_balance_server 定义的服务器列表
#以下是一些反向代理的配置(可选择性配置)
#proxy_redirect off;
#后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
proxy_set_header host $host;
proxy_set_header X-forwarded-for $proxy_add_x_forwarded_for;
proxy_set_header X-real-ip $remote_addr;
proxy_connect_timeout 90; #nginx跟后端服务器连接超时时间(代理连接超时)
proxy_send_timeout 90; #后端服务器数据回传时间(代理发送超时)
proxy_read_timeout 90; #连接成功后,后端服务器响应时间(代理接收超时)
proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)
proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传
client_max_body_size 10m; #允许客户端请求的最大单文件字节数
client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数
}
}
}
(6)修改apache配置
由于nginx需要占用80端口,所以需要修改原先apache的端口,例如将apache的端口由80改为8080
查找httpd.conf的位置:
find / -name httpd.conf
vi /etc/httpd/conf/httpd.conf
将里面的Listen 80改为Listen 8080,
ServerName 127.0.0.1:80改为ServerName 127.0.0.1:8080
保持配置后,重启httpd服务
service httpd restart
(7)启动及重启nginx
nginx启动:
/usr/local/nginx/sbin/nginx
重启:
/usr/local/nginx/sbin/nginx -s reload
(8)观察效果
编辑php文件,内容如下:
echo 'ip:'.$_SERVER['SERVER_ADDR'];
将该文件分别上传到两台服务器的根目录下,通过域名访问该文件,可以看到实际访问的ip地址。如果ip地址在变化,说明负载均衡配置成功。
Nginx负载均衡的集中方式介绍
轮询
轮询方式是Nginx负载默认的方式,顾名思义,所有请求都按照时间顺序分配到不同的服务上,如果服务Down掉,可以自动剔除,如下配置后轮训10001服务和10002服务。
upstream dedemao-server {
server localhost:10001;
server localhost:10002;
}
权重
指定每个服务的权重比例,weight和访问比率成正比,通常用于后端服务机器性能不统一,将性能好的分配权重高来发挥服务器最大性能,如下配置后10002服务的访问比率会是10001服务的二倍。
upstream dedemao-server {
server localhost:10001 weight=1;
server localhost:10002 weight=2;
}
iphash
每个请求都根据访问ip的hash结果分配,经过这样的处理,每个访客固定访问一个后端服务,如下配置(ip_hash可以和weight配合使用)。
upstream dedemao-server {
ip_hash;
server localhost:10001 weight=1;
server localhost:10002 weight=2;
}
最少连接
将请求分配到连接数最少的服务上。
upstream dedemao-server {
least_conn;
server localhost:10001 weight=1;
server localhost:10002 weight=2;
}
fair
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream dedemao-server {
server localhost:10001 weight=1;
server localhost:10002 weight=2;
fair;
}