利用Nginx+Keepalived实现web负载均衡

去年,尝试使用了Nginx和Keepalived实现web负载均衡,现将部署心得总结一下

1.安装Linux

2. 为了确保能在Nginx 中使用正则表达式进行更灵活的配置,需要先安装Pcre。依次执行下列命令完成安装

# tar zxvf pcre-8.10.tar.gz
# cd pcre-8.10
#./configure
# make
# make install

需要将libpcre.a和libpcre.la拷到.lib目录下

# mkdir /usr/local/lib/.libs
# cp /usr/local/lib/libpcre.a  /usr/local/lib/.libs/libpcre.a
# cp /usr/local/lib/libpcre.la  /usr/local/lib/.libs/libpcre.la

4.安装配置Nginx

(1)安装Nginx。依次执行下列命令

# tar zxvf nginx-0.7.67.tar.gz
# cd nginx-0.7.67
# ./configure --with-pcre=/usr/local/lib/ --with-http_stub_status_module
打开/root/nginx-0.7.67/objs/makefile,删除./configure --disable-shared行
# make
# make install

(2)修改Nginx配置文件

       worker_processes配置为cpu核数

       events节点修改如下:

events {
                use epoll;
                worker_connections  20480;
}

upstream节点修改如下,其中192.168.1.1和192.168.1.2为2台web服务器:

  upstream 192.168.0.1 {
         ip_hash; 
         server 192.168.1.1:80 max_fails=2 fail_timeout=60s; 
         server 192.168.1.2:80 max_fails=2 fail_timeout=60s;
 }

server节点修改如下:

 server {
       listen                  80;
       server_name          192.168.0.1;
       access_log  logs/web.log;  #main;
       location / {
              proxy_pass http://192.168.0.1;# 反向代理
           proxy_set_header        X-Real-IP       $remote_addr;
              proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
       }       
       location  /nginxstatus { 
              stub_status on; #Nginx 状态监控配置
           access_log off; 
       } 
}

(3)执行/usr/local/nginx/sbin/nginx –t验证配置文件是否正确

(4)执行/usr/local/nginx/sbin/nginx启动Nginx,此时可通过执行

ps –ef | grep nginx 命令查看Nginx进程,在浏览器输入

http://192.168.0.1/nginxstatus,可以查看Nginx活动状态,其中nginxstatus必须与配置文件中配置的完全一致(包括大小写)。

 

(5)将Nginx安装成Linux服务

       1.将nginx文件拷到/etc/init.d目录中 

       2.为该脚本增加启动权限

# chmod 755 /etc/init.d/nginx

3.加为系统服务,自动启动

# chkconfig --level 2345 nginx on

4.手动启动

# service nginx start

(6)切割Nginx日志,避免日志文件过大

创建切割Nginx日志的shell脚本 ,修改logs_path和logs_names两段

# !/bin/bash   
# by heui   
# Nginx logs path   
logs_path="/usr/local/nginx/logs/"  
# Nginx logs names here   
logs_names=(web)   
  
mkdir -p ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/   
num=${#logs_names[@]}   
for((i=0;i<num;i++));do   
mv ${logs_path}${logs_names[i]}.log ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/${logs_names[i]}_$(date -d "yesterday" +"%Y%m%d").log   
done   
  
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`

执行crontab -e

输入以下内容并保存

00 00 * * * /bin/bash /usr/local/nginx/cut_nginx_log.sh

5. 安装配置Keepalived消除Nginx单点故障

(1)安装Keepalived。依次执行下列命令完成安装

# tar zxvf keepalived-1.1.20.tar.gz
# cd keepalived-1.1.20
#./configure --prefix=/usr/local/keepalived
# make
# make install

(2)修改Keepalived配置文件,其中192.168.1.1为Nginx服务器

! Configuration File for keepalived
         vrrp_sync_group VGB {
           group {
                  VI_1
                       }
         }
 
         vrrp_instance VI_1 {
           state MASTER                                      #后备机改为BACKUP
           interface eth0
           virtual_router_id 51
           mcast_src_ip 192.168.2.1           priority 100                                            #后备机该值要小于主机,如50
           advert_int 1
           authentication {
                      auth_type PASS
                      auth_pass 1111
           }
           virtual_ipaddress {
                      192.168.0.1

            }
         }

(3)将Keepalived安装成Linux服务。依次执行下列命令

#cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/  
#cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/  
#mkdir /etc/keepalived  
#cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/  
#cp /usr/local/keepalived/sbin/keepalived /usr/sbin/ 
# chkconfig --level 2345 keepalived on
#service keepalived start

(4)禁用iptables,否则Keepalived故障转移会失效

执行service iptables stop关闭iptables服务

执行chkconfig iptables off取消iptables服务自动启动

posted @ 2014-05-10 23:00  [九狐科技]keheng  阅读(223)  评论(0编辑  收藏  举报