配置nginx+keepalived的双主机双机热备,这种配置下有两个Virtual IP,两个机器互为主备,最后我们把域名DNS服务器解析至两个Virtual IP即可。
两台服务器
Server1:192.168.30.61
Server2:192.168.30.62
要设置的两个虚拟IP
Virtual IP1:192.168.30.51
Virtual IP2:192.168.30.52
将DNS域名解析至两个虚拟IP: 192.168.30.51、192.168.30.52
第一台服务器ip为192.168.30.61
vi /etc/keepalived/keepalived.conf
配置内容如下:
global_defs
{
notification_email
{
[email protected]
}
notification_email_from [email protected]
smtp_server 127.0.0.1
stmp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script Monitor_Nginx {
script "/usr/local/keepalived/scripts/monitor_nginx.sh"
interval 2
weight 2
}
# 虚拟IP1, 本机作为Master
vrrp_instance VI_1 {
state MASTER
interface enp0s3
virtual_router_id 51
priority 100
advert_int 1
track_interface {
enp0s3
}
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
192.168.30.51
}i
track_script {
Monitor_Nginx
}
}
# 虚拟IP2, 本机作为Backup
vrrp_instance VI_2 {
state BACKUP
interface enp0s3
virtual_router_id 52
priority 100
advert_int 1
track_interface {
enp0s3
}
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
192.168.30.52
}
track_script {
Monitor_Nginx
}
}
第二台服务器ip为192.168.30.62
vi /etc/keepalived/keepalived.conf
配置内容如下:
global_defs
{
notification_email
{
[email protected]
}
notification_email_from [email protected]
smtp_server 127.0.0.1
stmp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script Monitor_Nginx {
script "/usr/local/keepalived/scripts/monitor_nginx.sh"
interval 2
weight 2
}
# 虚拟IP1, 本机作为BACKUP
vrrp_instance VI_1 {
state BACKUP
interface enp0s3
virtual_router_id 51
priority 100
advert_int 1
track_interface {
enp0s3
}
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
192.168.30.51
}
track_script {
Monitor_Nginx
}
}
# 虚拟IP2, 本机作为Master
vrrp_instance VI_2 {
state MASTER
interface enp0s3
virtual_router_id 52
priority 100
advert_int 1
track_interface {
enp0s3
}
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
192.168.30.52
}
track_script {
Monitor_Nginx
}
}
和之前的监控脚本一样
# 监控nginx进程,若nginx主进程不存在则启动nginx
# 若5s后nginx进程还是不存在的话kill掉keepalived进程,防止nginx没运行该主机的keepalived还接管虚拟IP
#!/bin/bash
if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ]
then
/usr/local/nginx/sbin/nginx
sleep 5
if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ]
then
killall keepalived
fi
fi
# nginx 默认访问页面
$NGINX_HOME/html/index.html
修改server1的页,加入IP: 192.168.30.61
Welcome to nginx!
Welcome to nginx! 192.168.30.61
If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.
For online documentation and support please refer to
nginx.org.
Commercial support is available at
nginx.com.
Thank you for using nginx.
server2同理
两个机器都启动keepalived和nginx
在浏览器输入192.168.30.51进入访问页面
在浏览器输入192.168.30.52进入访问页面
证明两个VIP都起效果了
Kill掉server2的keepalived
pkill keepalived
证明了server1为server2的备机,server2 down掉后server1接管server1的nginx访问
Kill掉server1机器的keepalived,启动server2机器的keepalived
证明了server2为server1的备机,server1 down掉后server1接管server1的nginx访问
有关nginx和keepalived的安装可参考
- Linux下安装nginx
- 使用keepalived来实现nginx的高可用