keepalived+nginx
一、nginx高可用
在nginx作为反向代理或者作为http服务器的时候, 如果单台nginx服务器出现问题,则服务就会出现问题;此时需要多台nginx去完成反向代理工作,nginx服务器需要建立一个集群;
二、keepalived+nginx
准备工作
- 两台nginx服务器
- 安装keepalived
- 对外的一个虚拟IP
- 关闭firewalld、selinux
操作
安装nginx
#安装依赖包
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
#下载pcre,编译安装
cd /usr/local/src/
wget http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz
tar -xvf pcre-8.35.tar.gz
cd pcre-8.35
./configure
make && make install
#下载nginx,编译安装
wget http://nginx.org/download/nginx-1.6.2.tar.gz
tar -xvf nginx-1.6.2.tar.gz
cd nginx-1.6.2/
./configure
make && make install
#启动nginx
cd /usr/local/nginx/sbin
./nginx
安装keepalived
yum install keepalived
修改keepalived配置
#keepalived检测脚本
cat /usr/local/src/nginx_check.sh
#!/bin/bash
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx &> /dev/null
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
#修改脚本权限
chmod u+x /usr/local/src/nginx_check.sh
#主用设备的keepalived配置
# cat /etc/keepalived/keepalived.conf
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.17.129
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script nginx_check {
script /usr/local/src/nginx_check.sh
interval 2 #(检测脚本执行的间隔)
weight -30 #脚本检测失败后优先级-30
fail 2 #检测两次则表示失败
}
vrrp_instance VI_1 {
state MASTER # 备份服务器上将 MASTER 改为 BACKUP
interface ens33 //网卡
virtual_router_id 51 # 主、备机的virtual_router_id必须相同
priority 120 # 主、备机取不同的优先级,主机值较大,备份机值较小
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.16.200.251
}
track_script {
nginx_check
}
}
#备用设备的keepalived配置
# cat /etc/keepalived/keepalived.conf
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.17.129
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script nginx_check {
script /usr/local/src/nginx_check.sh
interval 2 #(检测脚本执行的间隔)
}
vrrp_instance VI_1 {
state BACKUP # 备份服务器上将 MASTER 改为 BACKUP
interface ens33 //网卡
virtual_router_id 51 # 主、备机的virtual_router_id必须相同
priority 100 # 主、备机取不同的优先级,主机值较大,备份机值较小
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.16.200.251
}
track_script {
nginx_check
}
}
启动nginx、启动keepalived
/usr/local/nginx/sbin/nginx
systemctl start keepalived
systemctl enable keepalived
测试
#访问VIP,查看VIP所在的设备
#暂停主用的nginx,查看keepalived的脚本是否将服务拉起来
#可以看到主备未发生切换
#修改nginx配置,kill掉nginx进程,让keepalived脚本无法拉起nginx服务,切换到备机
#删除localhost末尾的; kill掉nginx进程,让keeplived的脚本无法拉起nginx;
#查看keepalived日志,可以看到脚本传递了信号,主备发生了切换
#备机的keepalived日志
#VIP切换到备机
#服务依然能够访问
#将主机进程nginx进程起来,查看keepalive日志,查看VIP
总结
keepalived即高可用软件,两台发布相同服务的服务器,组成一个高可用集群,对外通过一个虚拟的VIP来进行通信,通过VRRP协议实现;
由两台nginx服务器组成VRRP一主一备,当主用服务器出现问题时,备用服务器能够接管业务;