Nginx负载均衡器的优点:
实现看弹性化操作的架构,压力增大的时候可以临时添加后端Web服务器;
upstream具有负载均衡能力 (默认使用轮询) ,可以自动判断下面的机器,并且自动踢出不能正常提供服务的机器;
Keepalvied加Nginx监测脚本可保证单个nginx负载均衡器的有效性,避免单点故障
IP地址
nginx( 主LB ):192.168.1 5.132
nginx( 备LB ):192.168.15.133
VIP 地址 :192.168.15.135
Real 的 IP:192.168.1 5.128
Real 2 的 IP:192.168.1 5.130
部署整个环境用到的软件为 :
nginx-1.6.3.tar.gz
prce-8.38.tar.gzzlib-1.2.8.tar.gz
① 2 台 Web 主机(Ubuntu)上部署环境 , 安装 Nginx+PHP-FPM+MySQL
② 分别在二台 Nginx 负载均衡器上安装 Nginx 及配置
安装GCC编译器等工具:
yum install -y gcc gcc-c++ autoconf automake libtool make openssl openssl-devel
安装 Nginx:
wget http://exim.mirror.fr/pcre/pcre-8.38.tar.gz
tar -zxvf pcre-8.38.tar.gz
cd pcre-8.38
./configure
make && make install
wget http://zlib.net/zlib-1.2.8.tar.gz
tar -zxvf zlib-1.2.8.tar.gz
cd zlib-1.2.8
./configure
make && make install
wget http://nginx.org/download/nginx-1.6.3.tar.gz
tar -zxvf nginx-1.6.3.tar.gz
cd nginx-1.6.3/./configure --prefix=/usr/local/nginx
--sbin-path=/usr/local/nginx/sbin/nginx
--conf-path=/usr/local/nginx/conf/nginx.conf
--pid-path=/usr/local/nginx/logs/nginx.pid /
--with-http_ssl_module /
--with-http_stub_status_module /
--with-http_gzip_static_module /
make && make install
 注:查询"./configure --help"相关模块,按需求指定启用    
   
Nginx.conf 配置文件 , 二个 nginx 负载均衡器的文件一样
user  www-data www-data; worker_processes  1; error_log  /usr/local/nginx/logs/error.log notice; pid        /usr/local/nginx/logs/nginx.pid; worker_rlimit_nofile 51200; events {     use epoll;     worker_connections  51200; } http {     include       mime.types;     default_type  application/octet-stream;     log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '                       '$status $body_bytes_sent "$http_referer" '                       '"$http_user_agent" "$http_x_forwarded_for"';     access_log  logs/access.log  main;     server_names_hash_bucket_size 128;     client_header_buffer_size 32k;     large_client_header_buffers 4 32k;     client_max_body_size 8m;     sendfile        on;     tcp_nopush     on;     server_tokens off;     keepalive_timeout  60;     fastcgi_connect_timeout 300;     fastcgi_send_timeout 300;     fastcgi_read_timeout 300;     fastcgi_buffer_size 64k;     fastcgi_buffers 4 64k;     fastcgi_busy_buffers_size 128k;     fastcgi_temp_file_write_size 128k;     gzip  on;     upstream backend     {     server 192.168.15.128;     server 192.168.15.130;     }     server {         listen       80;         server_name  192.168.15.135;         location / {             root   html;             index  index.php index.html index.htm;             proxy_redirect off;             proxy_set_header Host $host;             proxy_set_header X-Real-IP $remote_addr;             #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;             proxy_pass http://backend;         }         error_page   500 502 503 504  /50x.html;         location = /50x.html {             root   html;         }                  location /nginx_status {             stub_status on;              auth_basic "NginxStatus";             auth_basic_user_file /usr/local/nginx/htpasswd;             #allow 127.0.0.1;             #deny all;         }         location ~* /.(ini|docx|txt|doc|pdf)$ {         #禁止访问文档性文件         root /usr/share/nginx/html;         deny all;         }         location ~ .*/.(gif|jpg|jpeg|png|bmp|swf|js|html|htm|css)$ {         root /home/image;         proxy_store on;         proxy_store_access user:rw group:rw all:rw;         proxy_temp_path /home/image;         if ( !-e $request_filename) {            proxy_pass  http://backend;         }     } } }   ③ 在二台 Nginx 上安装及配置 keepali ved:
wget http://www.keepalived.org/software/keepalived-1.2.15.tar.gz
tar -zxvf keepalived-1.2.15.tar.gz
cd keepalived-1.2.15
./configure --sysconf=/etc/ --with-kernel-dir=/usr/src/kernels/2.6.32-573.8.1.el6.x86_64
make && make install
ln -s /usr/local/sbin/keepalived /sbin/
#这一步很重要,不执行ln -s会报错“Starting keepalived: /bin/bash: keepalived: command not found”
service keepalived start
二台 Nginx 上 keepalived.conf 配置文件如下 , 配置完成后分别 service keepalived start 启动 。 检验 keepalived配置 是否成功
主:
global_defs {    notification_email {      test@163.com    }    notification_email_from keepalived@localhost     smtp_server 127.0.0.1    smtp_connect_timeout 30    router_id LVS_MASTER } vrrp_script chk_http_port { script "/usr/local/src/check_nginx_pid.sh" interval 2                           #(检测脚本执行的间隔) weight 2 } vrrp_instance VI_1 {     state MASTER     interface bond0     virtual_router_id 51     priority 100     advert_int 1     authentication {         auth_type PASS         auth_pass 1111 } track_script { chk_http_port            #(调用检测脚本) }     virtual_ipaddress {         192.168.15.135     } }   备:
global_defs {    notification_email {      test@163.com    }    notification_email_from keepalived@localhost     smtp_server 127.0.0.1    smtp_connect_timeout 30    router_id LVS_BACKUP } vrrp_script chk_http_port { script "/usr/local/src/check_nginx_pid.sh" interval 2                           #(检测脚本执行的间隔) weight 2 } vrrp_instance VI_1 {     state BACKUP     interface bond0     virtual_router_id 51     priority 66     advert_int 1     authentication {         auth_type PASS         auth_pass 1111 } track_script { chk_http_port            #(调用检测脚本) }     virtual_ipaddress {         192.168.15.135     } }   以下是针对nginx状态进行检测的脚本,第一次nginx服务死掉时,会重新启动,如果Nginx服务无法正常启动,则杀掉keepalived进程
vim /usr/local/src/check_nginx_pid.sh
#!/bin/bash A=`ps -C nginx --no-header |wc -l` if [ $A -eq 0 ];then /usr/local/nginx/sbin/nginx if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then killall keepalived fi fi
Ok,开始nginx 负载均衡测试, 停掉其中一台的任何服务, 不影响整个系统的运作 。
注:两台LBServer也可分别添加一个VIP①②(Keepalived心跳监控,服务不可用或者宕机,VIP①被备LBServer接管),外部使用智能DNS轮询两个VIP①②, 提高硬件资源利用率 。