承接上文《利用Keepalived 搭建Nginx双机主备模式》的部署步骤

    本文主要记录利用Keepalived 搭建Nginx双机主备模式的部署过程。

部署准备

nginx-1.12.2

keepalived-1.2.24

CentOS 6.8

部署架构


    Nginx做为反向代理服务器,负责后端的WEB应用服务的代理,即终端用户的Http请求,将由Nginx的负载均衡策略,转发到不同的Web服务器(Tomcat)上处理。
    当然,在一些互联网应用中,Nginx也可以作为http服务器,专门负责静态资源的处理(html,css,js等),这样的部署架构虽然性能有所提升,但相对我们实际项目的部署能力、运维能力来说,增加了不少复杂度,容易发生一些莫名其妙的更新失败的错误,所以不建议在我们的实际项目中将静态资源单独部署到Nginx中。
    上述架构中,Nginx共部署了2台服务器,分为Mater(主)和Slave(备),两台服务器的Nginx配置一致,但因为是单活模式,所以同一时间,只有一台Nginx参与工作。主备模式是为了保证Nginx的高可用(HA)。
    Nginx的高可用是通过Keepalived来保障的。Keepalived在每台Nginx服务器中都需部署。每台服务器的Keepalived负责监控本地的Nginx服务是否正常,一旦发现异常则会执行相应的处理脚本(sh),完成Nginx主备的切换。
所有的Keepalived服务(主&备)均设置了同一个虚拟IP,终端用户即通过此虚拟IP访问WEB系统。这样一旦服务器端发生了故障切换,但对于终端用户而言,他们是感觉不到的,因为系统访问的IP地址(虚拟IP)并没有变(会有短暂的404错误或其他错误,约3秒钟,刷新即可)。Keepalived虚拟IP的工作原理为VRRP协议(虚拟路由冗余协议http://blog.csdn.net/u010391029/article/details/48311699),想了解工作原理的同学可自行百度Keepalived工作原理或VRRP协议内容。简而言之,Keepalived的虚拟IP类似于ARP欺骗,如果你经历或者了解过ARP攻击,相信不难理解。


部署及维护

下述Keepalived & Nginx的安装部署均以CentOS6为例 ,因为二者均没有官方支持的Windows版本,Nginx虽有windows的实现,但并非原开源团队维护,且不保证稳定性。
http://nginx.org/en/docs/windows.html
Due to this and some other known issues version of nginx for Windows is considered to be a beta version.

Nginx

关闭防火墙
#停止防火墙服务
servcie iptables stop
#设置防火墙不启用,放置机器重启后重新启动
chkconfig iptables off
当然,如果你不厌其烦的配置防火墙的开放端口也是可以的,但一般防火墙策略均由机房防火墙硬件统一配置。在我们的项目中,通常服务器的软件防火墙都设置为关闭状态。
安装依赖包
yum install gcc gcc-c++ make automake autoconf libtool pcre pcre-devel zlib zlib-devel openssl openssl-devel
修改Linux连接数限制
ulimit -n 102400
#默认值为1024
安装Nginx
将上述部署包解压、编译、安装,假定安装目录为/usr/local
cd /usr/local
tar -zxvf nginx-1.12.2.tar.gz
cd nginx-1.12.2
./configure
make
make install
上述命令执行完毕后,如果没有报错,应该会在/usr/local 目录下自动生成了一个nginx目录,这就是我们安装的nginx server了,此时我们可以将/usr/local/nginx-1.2.24目录删除或重命名,以免在后续的运维过程当中,误认为此目录为Nginx安装目录。
配置文件
配置文件位置:/usr/local/nginx/conf/nginx.conf
配置项详细说明:http://blog.csdn.net/tjcyjd/article/details/50695922

这里有一份典型的配置文件,供参考
 
需要说明的几点如下:
1.nginx所有变量命名采用_连接符号,并且为小写(bpmServer此类名称不符合规则,可能会配置错误)
2.工作进程设置
一般进程数<=CPU核心数,一个4核CPU的典型配置如下
worker_processes  4;
worker_cpu_affinity 0001 0010 0100 1000;
一个8核CPU的配置如下
worker_processes  8;
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
这个很重要,默认值为1,在多核CPU烂大街的时下,效率很低。我在好几个使用了Nginx做负载均衡的项目中,均发现此参数没有做任何修改,这是一个低级的错误。
3.修改nginx服务监听端口、servername
server {
#侦听8011端口
listen       8011;

#定义使用 localhost访问,多地址用空格分隔
server_name  localhost 127.0.0.1;
...
}
4.定义应用集群,具体访问规则查看配置文件,轮询(默认)|权重(weight)|响应时间(fair)|ip_hash(访问ip)|url_hash(第三方)等
upstream web_server {
ip_hash;
server 192.168.3.161:7000;
server 192.168.3.160:7000;
}
5.代理参数设置
location /websjzx/ {
    proxy_pass http://web_server;
    proxy_set_header Host $host:$server_port;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header REMOTE-HOST $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass_request_headers on;
        }
6.更多优化,请参考
http://blog.csdn.net/moxiaomomo/article/details/19442737

维护
启动服务
/usr/local/nginx/sbin/nginx
停止服务
/usr/local/nginx/sbin/nginx -s stop

Keepalived

关闭防火墙
#停止防火墙服务
servcie iptables stop
#设置防火墙不启用,放置机器重启后重新启动
chkconfig iptables off
当然,如果你不厌其烦的配置防火墙的开放端口也是可以的,但一般防火墙策略均由机房防火墙硬件统一配置。在我们的项目中,通常服务器的软件防火墙都设置为关闭状态。
安装依赖包
如果你已经按照上述nginx的安装步骤,安装了Nginx的依赖包,则此处不需要安装其余依赖,因为二者依赖重复。
如果没有安装nginx的依赖包,请参考nginx安装依赖包
注:环境不同,需要安装的依赖不同,如还需其他依赖包,请按照报错信息安装。笔者的环境为CentOS 6.8 最小安装版本,安装了Nginx依赖包后,无需安装其他依赖包。
安装Keepalived
将上述部署包解压、编译、安装,假定安装目录为/usr/local/keepalived

shell> tar -zxvf keepalived-1.2.24.tar.gz
shell> cd keepalived-1.2.24
shell> ./configure --prefix=/usr/local/keepalived
shell> make && make install
配置
1.Copy配置文件到相应目录
shell> mkdir /etc/keepalived
shell> cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf
shell> cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/keepalived
shell> cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/keepalived
2.链接文件
在命令行中,执行 keepalived
如果报错如下 keepalived: command not found
则需要ln文件,执行如下命令
ln -s /usr/local/keepalived/sbin/keepalived /usr/sbin/
3.配置文件
配置文件目录为第一步中Copy的.conf文件,具体目录为
/etc/keepalived/keepalived.conf
如下为一份配置样例(内有注释,聪明的你一看就明白)
 
样例配置中的nginx检测脚本如下(脚本中的命令,不明白的可以自行百度,因为笔者也是从百度上抄的)
script “/usr/local/keepalived/nginx_pid.sh” ####检测nginx状态的脚本路径
 
Keepalived配置很丰富,更多说明,请参考
http://blog.csdn.net/xyang81/article/details/52554398 (上述链接中 keepalived.conf配置文件说明)
维护
shell> chkconfig keepalived on #设置服务开机自启或将启动该命令添加到开机启动中
shell> service keepalived start   #启动服务
shell> service keepalived stop    #停止服务
shell> service keepalived restart #重启服务
问题排查
因为nginx的负载均衡策略设置为ip_hash是极为方便和常用的一种策略,即粘性SESSION。Nginx会根据请求来源IP,通过一定hash算法,将其所有请求固定转发到某台后端WEB服务器上。
用Loadrunner做压力测试的时候,模拟多线程并发访问Web时,需在Loadrunner中设置IP欺骗,否则所有并发请求,均会采用通一个客户端IP,会造成所有请求都会固定转发到其中一台WEB服务器的尴尬。
Loadrunner IP欺骗参考:
https://www.cnblogs.com/fnng/archive/2013/03/02/2940284.html
Nginx开机自启
https://www.cnblogs.com/whatmiss/p/7091220.html


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值