keepalived实现nginx的负载均衡和高可用

keepalived实现nginx的高可用

注意:这里nginx以及keepalived已经装好了,如果没有装好请参考我的安装部署文档

1、修改 Keepalived 配置文件(keepalived.conf)

(1) MASTER 节点配置文件(192.168.44.71)
 vim /etc/keepalived/keepalived.conf
先查一下本机 IP 地址所在的网络接口相同, 我的是 eth0,后面用得着

以下两张图片分开截的

! Configuration File for keepalived

global_defs {
router_id 192.168.44.71  ## 标识本节点的字条串,通常为 hostname
}
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh" ## 检测 nginx 状态的脚本路径
interval 2 ## 检测时间间隔
weight -20 ## 如果条件成立,权重-20
}


vrrp_instance VI_1 {
state MASTER   ## 主节点为 MASTER, 对应的备份节点为 BACKUP
interface eth0  ## 绑定虚拟 IP 的网络接口,与本机 IP 地址所在的网络接口相同, 我的是 eth0
virtual_router_id 71  ## 虚拟路由的 ID 号, 两个节点设置必须一样, 可选 IP 最后一段使用, 相同的 VRID 为一个组,他将决定多播的 MAC 地址
mcast_src_ip 192.168.44.71 ## 本机 IP 地址
priority 100  ## 节点优先级, 值范围 0-254, MASTER 要比 BACKUP 高
nopreempt ## 优先级高的设置 nopreempt 解决异常恢复后再次抢占的问题
advert_int 1  ## 组播信息发送间隔,两个节点设置必须一样, 默认 1s


authentication {
    auth_type PASS
	
    auth_pass 1111
}

track_script {
	chk_nginx ## 执行 Nginx 监控的服务
} 

virtual_ipaddress {
    192.168.44.70  ## 虚拟 ip,可以定义多个
}

}

(2)BACKUP 节点配置文件(192.168.44.73) 
vim /etc/keepalived/keepalived.conf
先查一下本机 IP 地址所在的网络接口相同, 我的是 eth0,后面用得着

! Configuration File for keepalived

global_defs {
router_id 192.168.44.73  ## 标识本节点的字条串,通常为 hostname
}

vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh"
interval 2
weight -20
}

vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 71
mcast_src_ip 192.168.44.73 ## 本机 IP 地址
priority 90
advert_int 1
authentication {
    auth_type PASS
    auth_pass 1111
}

## 将 track_script 块加入 instance 配置块
track_script {
	chk_nginx ## 执行 Nginx 监控的服务
} 

# 虚拟 IP 池, 两个节点设置必须一样
virtual_ipaddress {
    192.168.44.70
  }
}

2、编写 Nginx 状态检测脚本 主从服务器上都要,所以两份

编写 Nginx 状态检测脚本 /etc/keepalived/nginx_check.sh (已在 keepalived.conf 中配置)脚本要求:如果 nginx 停止运行,尝试启动,如果无法启动则杀死本机的 keepalived 进程, keepalied将虚拟 ip 绑定到 BACKUP 机器上。 内容如下:

vim /etc/keepalived/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

保存后,给脚本赋执行权限: 
chmod +x /etc/keepalived/nginx_check.sh

3、启动 Keepalived nginx

/usr/local/nginx/sbin/nginx -s reload
service keepalived start

4、Keepalived+Nginx 的高可用测试

同时启动192.168.44.71和192.168.44.73上的Nginx和Keepalived,我们通过VIP(192.168.44.70)来访问Nginx,如下:
注意:我这里由于网络原因配置隧道转发,所以用127.0.0.1分别配置了端口号!!!

1)启动192.168.44.71来访问Nginx

2)启动192.168.44.73来访问Nginx

3)启动192.168.44.70来访问Nginx

5、开始测试

我们关闭192.168.44.71(主)上的Keepalived和Nginx
cd /usr/local/nginx/sbin/
./nginx -s stop
pkill keepalived

此时,我们再通过VIP(192.168.44.70)来访问Nginx,如下

我们再开启192.168.44.71上的Keepalived和Nginx

在192.168.44.71执行如下命令:
./nginx -s reload
service keepalived start

因为我们写了脚本nginx_check.sh,这个脚本会为我们自动自动Nginx。
此时,我们再通过VIP(192.168.44.70)来访问Nginx,如下

6、至此,Keepalived + Nginx 实现高可用 Web 负载均衡搭建完毕 ##。

猜你喜欢

转载自blog.csdn.net/qq_41606459/article/details/84550656