图3.7.1 nginx环境架构图
命令:
#yum -y install gcc pcre-devel zlib-devel openssl-devel
将nginx-1.6.2.tar.gz和keepalived-1.2.12.tar.gz上传到两台负载均衡服务器/app目录下。
1. 解压安装包,命令:
#tar –zxvf nginx-1.6.2.tar.gz
2. 进入nginx-1.6.2文件夹,命令:
#cd /app/nginx-1.6.2
3.配置安装软件,命令:
#./configure --with-http_stub_status_module
4.编译及安装,命令:
#make && make install
1. 解压安装包,命令:
# tar –zxvf keepalived-1.2.12.tar.gz
2. 进入nginx-1.6.2文件夹,命令:
# cd keepalived-1.2.12
3. 配置安装软件,命令:
#./configure
4.编译及安装,命令:
#make && make install
5. 新增keepalived服务,命令:
#cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
#cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
#mkdir /etc/keepalived
#cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/
#cp /usr/local/sbin/keepalived /usr/sbin/
两台接入服务器的NginX的配置完全一样,修改如下nginx.conf配置文件并替换至服务器usr/local/nginx/conf目录下的nginx.conf文件。
注意:
负载均衡配置为HTTP、Web Services协议,主要包括Portal访问IP及端口和系统HTTP、Web Services协议使用的DIP IP和端口。
当DIP和Nginx部署同一台服务器时,请注意保持Nginx代理端口和DIP端口的不一致,即Nginx配置文件中upstream和server配置部分的端口不能一致。
安装服务器分为主服务器和从服务器,主从两台服务器的keepalived配置文件有所不同。
1.配置主服务器的配置文件
修改如下keepalived-master.conf配置文件内容及更改文件名称为keepalived.conf,然后替换master服务器/etc/keepalived目录下keepalived.conf。
2.配置从服务器的配置文件
修改如下keepalived-backup.conf配置文件内容及更改文件名称为keepalived.conf,然后替换master服务器/etc/keepalived目录下keepalived.conf。
3.验证
(1)先后在主、从服务器上启动keepalived: #/etc/init.d/keepalived start
(2)在主服务器上查看是否已经绑定了虚拟IP: #ip addr,如图3.7.7-1所示,192.168.0.63为绑定的虚拟IP地址。
图3.7.7-1 绑定虚拟IP地址
(3)停止主服务器上的keepalived: #/etc/init.d/keepalived stop 然后在从服务器上查看是否已经绑定了虚拟IP。
(4)启动主服务器上的keepalived,看看主服务器能否重新接管虚拟IP
Keepalived支持配置监控脚本,监控Nginx状态。这里使用nmap检查nginx端口来判断nginx的状态。
1.安装nmap软件,命令:
上传nmap-4.76-1.x86_64.rpm至两台服务器的/app目录
安装软件:#rpm –ivh nmap-4.76-1.x86_64.rpm
2.修改如下chk_nginx.sh监控脚本,并上传至两台服务器的/opt目录下。
1.分别启动主、从服务器的nginx和keepalived服务。注意先启动nginx服务,后启动keepalived服务,命令:
进入/usr/local/nginx/sbin目录,#cd /usr/local/nginx/sbin
启动nginx服务,#./nginx
启动keepalived服务,#/etc/init.d/keepalived start
2. 主服务器测试
(1)VIP访问Portal:谷歌浏览器地址栏输入地址:http://VIP:端口/integrator/index.shtml。如keepalived配置文件配置的VIP为192.168.0.63,nginx配置监听端口为8080,则访问地址为:http://192.168.0.63:8080/integrator/index.shtml,查看是否能够成功加载Portal首页,若能成功加载则nginx+keepalived配置成功;
(2)VIP访问DIP:系统配置一条HTTP-LOCAL的流程,并成功部署。用火狐插件httprequest或者soapui,推送报文。推送HTTP URL为http://VIP:通讯网关配置端口/通道配置路径。观察报文监控,是否有成功处理,若成功处理,则nginx+keepalived配置dip负载均衡部分配置成功。
3.从服务器测试
停止主服务器的nginx服务,同3.7.9 2.主服务器测试。若均能访问,则说明当nginx主服务器挂掉时,能自动成功切换至从服务器的nginx,且监控脚本起作用。
附件:
1、ngnix配置文件
#启动进程,通常设置成和cpu的数量相等
worker_processes 1;
#工作模式及连接数上限
events {
use epoll; #epoll是多路复用IO(I/O Multiplexing)中的一种方式,但是仅用于linux2.6以上内核,可以大大提高nginx的性能
worker_connections 1024; #单个后台worker process进程的最大并发链接数
}
#设定http服务器,利用它的反向代理功能提供负载均衡支持
http {
#设定mime类型,类型由mime.type文件定义
include mime.types;
default_type application/octet-stream;
#sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用,
#必须设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,以平衡磁盘与网络I/O处理速度,降低系统的uptime.
sendfile on;
#tcp_nopush on;
#连接超时时间
#keepalive_timeout 0;
keepalive_timeout 65;
#设定负载均衡的服务器列表
upstream portal {
ip_hash; #将IP请求定向至同一台后端。
#本机开启端口
server 192.168.80.2:8080;
server 192.168.80.3:8080;
}
server {
#侦听8081端口
listen 8081;
#定义使用www.xx.com访问
server_name b2b.integrator.com;
#默认请求
location / {
proxy_set_header Host $host:8081;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://portal; #请求转向portal定义的服务器列表,名称需唯一
}
}
}
global_defs {
notification_email { #指定keepalived在发生切换时需要发送email到的对象,一行一个
[email protected]
}
notification_email_from [email protected] #指定发件人
smtp_server smtp.sinoservices.com #指定smtp服务器地址
smtp_connect_timeout 30 #指定smtp连接超时时间
router_id nginx_master #运行keepalived机器的一个标识
}
#前面定义的后备的负载均衡服务器名称
vrrp_instance VI_1 {
#只有MASTER和BACKUP 两种状态,都必须大写。
state MASTER
#进行通信的端口
interface eth0
#同一个vrrp实例的唯一标识。即同一个vrrp_stance,MASTER和BACKUP的virtual_router_id是一致的。在整个vrrp内也唯一。
virtual_router_id 51
#权重,数值越大,权重越大。MASTER大于SLAVE
priority 101
#MASTER和SLAVE负载均衡器之间同步检查的时间间隔。单位是:秒
advert_int 1
#MASTER和SLAVE的认证方式
authentication {
auth_type PASS
auth_pass 1111
}
#VIP
virtual_ipaddress {
192.168.80.6
}
}
virtual_server 192.168.80.6 8080 {
delay_loop 2 #每个2秒检查一次real_server状态
lb_algo wrr #LVS算法
lb_kind DR #LVS模式
persistence_timeout 60 #会话保持时间
protocol TCP
real_server 192.168.0.75 8081 {
weight 3
notify_down /opt/chk_nginx.sh #检测到服务down后执行的脚本
TCP_CHECK {
connect_timeout 10 #连接超时时间
nb_get_retry 3 #重连次数
delay_before_retry 3 #重连间隔时间
connect_port 8080 #健康检查端口
}
}
}
global_defs {
notification_email { #指定keepalived在发生切换时需要发送email到的对象,一行一个
[email protected]
}
notification_email_from [email protected] #指定发件人
smtp_server smtp.sinoservices.com #指定smtp服务器地址
smtp_connect_timeout 30 #指定smtp连接超时时间
router_id nginx_backup #运行keepalived机器的一个标识
}
#前面定义的后备的负载均衡服务器名称
vrrp_instance VI_1 {
#只有MASTER和BACKUP 两种状态,都必须大写。
state BACKUP
#进行通信的端口
interface eth0
#同一个vrrp实例的唯一标识。即同一个vrrp_stance,MASTER和BACKUP的virtual_router_id是一致的。在整个vrrp内也唯一。
virtual_router_id 51
#权重,数值越大,权重越大。MASTER大于SLAVE
priority 99
#MASTER和SLAVE负载均衡器之间同步检查的时间间隔。单位是:秒
advert_int 1
#MASTER和SLAVE的认证方式
authentication {
auth_type PASS
auth_pass 1111
}
#VIP
virtual_ipaddress {
192.168.80.6
}
}
virtual_server 192.168.80.6 8080 {
delay_loop 2 #每个2秒检查一次real_server状态
lb_algo wrr #LVS算法
lb_kind DR #LVS模式
persistence_timeout 60 #会话保持时间
protocol TCP
real_server 从nginx服务器IP 对应服务端口 {
weight 3
notify_down /opt/chk_nginx.sh #检测到服务down后执行的脚本
TCP_CHECK {
connect_timeout 10 #连接超时时间
nb_get_retry 3 #重连次数
delay_before_retry 3 #重连间隔时间
connect_port 从nginx服务对应端口 #健康检查端口
}
}
}