keepalived+nginx负载均衡
- 环境:
centos7.6
nginx 1.16.0
keepalived v1.3.5
ip:
master-nginx-ip:192.168.117.146
slave-nginx-ip:192.168.117.147
vip:192.168.117.152
- 安装nginx和keepalived
- 1.安装 yum 源:
sudo rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
检查是否将yum源安装成功: sudo yum repolist
- 2.安装nginx
yum install nginx -y
- 3.防火墙处理
关闭防火墙: systemctl stop firewalld
或者
映射到指定端口:
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --reload
打开网页输入ip和端口测试一下是否是nginx界面
- 3.安装keepalived
yum install keepalived -y
- 4.备注:
1.本人习惯yum安装,你可以选择编译安装。
2.nginx相关启动命令:systemctl start|stop|restart|status nginx
3.keepalived相关启动命令:systemctl start|stop|restart|status keepalived
- 配置keepalived
! Configuration File for keepalived
global_defs {
router_id 146 ## 标识本节点的字条串,通常为 hostname
}
vrrp_script nginx_check {
script "/etc/keepalived/nginx_check.sh" ## 检测 nginx 状态的脚本路径
interval 2 ## 检测时间间隔
weight -20 ## 如果条件成立,权重-20
}
vrrp_instance VI_1 {
state MASTER ## 主节点为 MASTER, 对应的备份节点为 BACKUP
interface ens33 ## 绑定虚拟 IP 的网络接口,与本机 IP 地址所在的网络接口相同,通过ifconfig或者ip 查看
virtual_router_id 51 ## 虚拟路由的 ID 号, 两个节点设置必须一样
mcast_src_ip 192.168.117.146
priority 100 ## 节点优先级
nopreempt ## 优先级高的设置 nopreempt
advert_int 1 ## 组播信息发送间隔
authentication {
auth_type PASS
auth_pass 1111 ## 真实生产,按需求对应该过来
}
track_script {
nginx_check ## 执行 Nginx 监控的服务
}
virtual_ipaddress {
192.168.117.152 ## 虚拟 ip,可以定义多个
}
}
- 备注:
1.此配置文件为master配置文件,slave配置需要将 :
state MASTER-> state BACKUP
priority 100 -> priority 90 (slave优先级要低于master)
mcast_src_ip 192.168.117.146 -> mcast_src_ip 192.168.117.147
2.脚本nginx_check.sh脚本见底部
- 启动keepalived(见上文启动命令)
systemctl start keepalived
- 检查是否配置成功
- 输入ip add
[root@hdp3 log]# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:ae:3f:fd brd ff:ff:ff:ff:ff:ff
inet 192.168.117.146/24 brd 192.168.117.255 scope global noprefixroute dynamic ens33
valid_lft 1105sec preferred_lft 1105sec
inet 192.168.117.152/32 scope global ens33 ## 代表启动成功
valid_lft forever preferred_lft forever
inet6 fe80::6d95:5754:b4d2:44ed/64 scope link noprefixroute
valid_lft forever preferred_lft forever
- 测试是否高可用
- 关闭master,systemctl stop keepalived ,查看日志
Jul 30 16:45:50 hdp4 Keepalived_healthcheckers[7066]: Opening file '/etc/keepalived/keepalived.conf'.
Jul 30 16:45:51 hdp4 Keepalived_vrrp[7067]: VRRP_Instance(VI_1) Changing effective priority from 100 to 80
Jul 30 16:45:52 hdp4 Keepalived_vrrp[7067]: /etc/keepalived/nginx_check.sh exited due to signal 15
Jul 30 16:45:53 hdp4 Keepalived_vrrp[7067]: VRRP_Instance(VI_1) Transition to MASTER STATE
Jul 30 16:45:54 hdp4 Keepalived_vrrp[7067]: /etc/keepalived/nginx_check.sh exited due to signal 15
Jul 30 16:45:54 hdp4 Keepalived_vrrp[7067]: VRRP_Instance(VI_1) Entering MASTER STATE
Jul 30 16:45:54 hdp4 Keepalived_vrrp[7067]: VRRP_Instance(VI_1) setting protocol VIPs.
Jul 30 16:45:54 hdp4 Keepalived_vrrp[7067]: Sending gratuitous ARP on ens33 for 192.168.117.152
Jul 30 16:45:54 hdp4 Keepalived_vrrp[7067]: VRRP_Instance(VI_1) Sending/queueing gratuitous ARPs on ens33 for 192.168.117.152
Jul 30 16:45:54 hdp4 Keepalived_vrrp[7067]: Sending gratuitous ARP on ens33 for 192.168.117.152
Jul 30 16:45:54 hdp4 Keepalived_vrrp[7067]: Sending gratuitous ARP on ens33 for 192.168.117.152
Jul 30 16:45:54 hdp4 Keepalived_vrrp[7067]: Sending gratuitous ARP on ens33 for 192.168.117.152
Jul 30 16:45:54 hdp4 Keepalived_vrrp[7067]: Sending gratuitous ARP on ens33 for 192.168.117.152
Jul 30 16:45:56 hdp4 Keepalived_vrrp[7067]: /etc/keepalived/nginx_check.sh exited due to signal 15
Jul 30 16:45:58 hdp4 Keepalived_vrrp[7067]: /etc/keepalived/nginx_check.sh exited due to signal 15
Jul 30 16:45:59 hdp4 Keepalived_vrrp[7067]: Sending gratuitous ARP on ens33 for 192.168.117.152
Jul 30 16:45:59 hdp4 Keepalived_vrrp[7067]: VRRP_Instance(VI_1) Sending/queueing gratuitous ARPs on ens33 for 192.168.117.152
Jul 30 16:45:59 hdp4 Keepalived_vrrp[7067]: Sending gratuitous ARP on ens33 for 192.168.117.152
Jul 30 16:45:59 hdp4 Keepalived_vrrp[7067]: Sending gratuitous ARP on ens33 for 192.168.117.152
Jul 30 16:45:59 hdp4 Keepalived_vrrp[7067]: Sending gratuitous ARP on ens33 for 192.168.117.152
Jul 30 16:45:59 hdp4 Keepalived_vrrp[7067]: Sending gratuitous ARP on ens33 for 192.168.117.152
nginx_check.sh脚本
# 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