介绍:
由于nginx集群下,每台nginx相对独立无法交流,因此不知道何时何地那一台的nginx会突然宕机,导致整个服务无法使用。为解决这个问题,使用keepalived能解决该问题。原理:通过设置虚拟ip,在同一组内监听keepalived进程当某个nginx宕机执行脚本将keepalivedkill掉,此时会将虚拟ip转移至备用机上。
安装(在linux下):
1.yum install keepalived –y
2.安装之后,使用命令rpm -q -a keepalived查看是否安装成功
配置:
主设备(修改/etc/keepalived/keepalivec.conf配置文件):
global_defs {
#设置 keepalived 在发生事件(比如切换)的时候,需要发送到的email地址,可以设置多个,每行一个。
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服务器。(key加#注释不使用)
smtp_connect_timeout 30 #设置smtp连接超时时间,单位为秒。
router_id LVS_DEVEL #是运行keepalived的一个表示,多个集群设置不同。
} #(非关键配置,可以注释,不使用)
vrrp_script chk_http_port {
script "/usr/local/src/nginx_check.sh" #nginx宕机时执行的脚本,存放的路径和名称
interval 2 #(检测脚本执行的间隔)
weight 2
}
vrrp_instance VI_1 {
state MASTER # 备份服务器上将 MASTER 改为 BACKUP (关键配置)
interface ens33 #网卡名称(用ifconfig命令查看) (关键配置)
virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同 (关键配置)
priority 100 # 主、备机取不同的优先级,主机值较大,备份机值较小 (关键配置)
advert_int 1 #检查的时间间隔,默认1s (关键配置)
authentication {
auth_type PASS #认证方式,支持PASS和AH,官方建议使用PASS
auth_pass 1111 #认证的密码
}
virtual_ipaddress {
192.168.17.50 # 设置虚拟地址 (关键配置)
}
}
从设备(修改/etc/keepalived/keepalivec.conf配置文件):
global_defs {
#设置 keepalived 在发生事件(比如切换)的时候,需要发送到的email地址,可以设置多个,每行一个。
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服务器。(key加#注释不使用)
smtp_connect_timeout 30 #设置smtp连接超时时间,单位为秒。
router_id LVS_DEVEL #是运行keepalived的一个表示,多个集群设置不同。
} #(非关键配置,可以注释,不使用)
vrrp_script chk_http_port {
script "/usr/local/src/nginx_check.sh" #nginx宕机时执行的脚本,存放的路径和名称
interval 2 #(检测脚本执行的间隔)
weight 2
}
vrrp_instance VI_1 {
state BACKUP# 备份服务器上将 MASTER 改为 BACKUP (关键配置)
interface ens33 #网卡名称(用ifconfig命令查看) (关键配置)
virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同 (关键配置)
priority 80 # 主、备机取不同的优先级,主机值较大,备份机值较小 (关键配置)
advert_int 1 #检查的时间间隔,默认1s (关键配置)
authentication {
auth_type PASS #认证方式,支持PASS和AH,官方建议使用PASS
auth_pass 1111 #认证的密码
}
virtual_ipaddress {
192.168.17.50 # 设置虚拟地址 (关键配置)
}
}
脚本(在/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
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
启用nginx和keepalived:
启动 Nginx: ./nginx
启动 keepalived: systemctl start keepalived.service