Ubuntu安装keepalived
Ubuntu安装nginx并配置负载均衡
在Ubuntu下使用keepalived和nginx搭建高可用性负载均衡。keepalived虚拟IP为192.168.229.130,两台服务器的IP地址分别为192.168.229.128,192.168.229.129。两台服务器中81端口模拟网站,80端口为负载均衡端口。负载均衡的配置详情请参见《Ubuntu安装nginx并配置负载均衡》
Ubuntu 20.04.2 LTS 桌面版(192.168.229.128)
Ubuntu 20.04.2 LTS 服务器版(192.168.229.129)
《Ubuntu安装nginx并配置负载均衡》中,配置完成了一台服务器(192.168.229.128)的负载均衡,参照文章继续配置192.168.229.129服务器的负载均衡:
sudo vim /etc/nginx/conf.d/ningx.conf
保存后,重启 nginx。
测试192.168.229.129服务器的负载均衡:
至此,192.168.229.128,192.168.229.129两台服务器的负载均衡全部配置完成。
参照Ubuntu安装keepalived
sudo apt-get install keepalived
/etc/rc.local
文件sudo vim /etc/rc.local
在文件中增加一行service keepalived start &
:
#!/bin/sh -e
# 上面一行不要删除
# 服务类要以 & 结尾一行,表示不要等待运行结束
service keepalived start &
#文末必须以exit 0结束
exit 0
编辑配置文件:
sudo vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
#检测到realserver或者负载均衡出现故障后, 通知的邮箱地址
notification_email {
[email protected]
[email protected]
[email protected]
}
#发送通知的邮箱的地址
notification_email_from [email protected]
#利用的stmp服务器地址
smtp_server 192.168.200.1
smtp_connect_timeout 30
#自定义主机名,建议使用IP地址
router_id 192.168.229.128
vrrp_skip_check_adv_addr
vrrp_iptables
vrrp_garp_interval 0
vrrp_gna_interval 0
}
#预先定义一个脚本,方便后面调用,也可以定义多个,方便选择;
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_chk.sh" #具体脚本路径
interval 2 #脚本循环运行间隔,s
}
#一个虚拟路由器组的物理实例, 同一组KA里的实例不能重名
vrrp_instance VI_1{
#当前节点在此虚拟路由器上的初始状态,状态为MASTER或者BACKUP
state MASTER
#非抢占模式;如果开启非抢占模式,上面的state需要都配置城BACKUP,利用优先级确定谁是MASTER
#nopreempt
#绑定为当前虚拟路由器使用的物理接口,需要据实查询填写
interface ens33
#当前虚拟路由器惟一标识,也叫做分组名称,该组内的设备需要相同,范围是0-255
virtual_router_id 100
#当前物理节点在此虚拟路由器中的优先级,值越大优先级越大;范围1-254
priority 101
#vrrp通告的时间间隔,默认1s, 谁的优先级高, vip跑在哪个节点上, 就由哪个节点发送通告, backup节点接收通告。组内要一致
advert_int 1
#设置验证信息,组内一致
authentication {
#有PASS 和 AH 两种,常用 PASS
auth_type PASS
#仅前8位字符有效, 每一组负载均衡器使用相同的密码即可
auth_pass 1111
}
#虚拟IP, 要和服务器在同一个网段, 能和服务器网关进行通信的, 而且是没有被占用的
#可以设置多个IP
virtual_ipaddress {
192.168.229.130
}
#使用在这个域中使用预先定义的脚本,上面定义的
track_script {
chk_nginx
}
#当前节点成为主节点时触发的脚本
#notify_master |
#当前节点称为备用节点时触发的脚本
#notify_backup |
#当前节点转为“失败”状态时触发的脚本
# 一般不会使用, 一般一个节点不是master就是backup状态,
#很少出现fault, 除非是ip地址冲突或者资源不足, 导致角色切换失败会出现fault状态
#notify_fault |
#通用格式的通知触发机制,一个脚本可完成以上三种状态的转换时的通知
#notify |
}
global_defs {
router_id 192.168.229.128
}
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_chk.sh"
interval 2
}
vrrp_instance VI_1{
state MASTER
interface ens33
virtual_router_id 100
priority 101
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.229.130
}
track_script {
chk_nginx
}
}
global_defs {
router_id 192.168.229.129
}
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_chk.sh"
interval 2
}
vrrp_instance VI_1{
state BACKUP
interface ens33
virtual_router_id 100
priority 101
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.229.130
}
track_script {
chk_nginx
}
}
interface
参数的值ens33
要通过ifconfig
指令查询,找到要进行虚拟化的物理网卡的名称。ifconfig
/etc/keepalived/nginx_chk.sh
用于检查nginx相关服务器是否启动,如果没有启动则重启。如果重启不成功,则杀死keepalived服务,切换到备用服务#!/bin/bash
#上面这句注释不可删除
#检查是否有nginx相关的进程
A=`ps -C nginx --no-header |wc -l`
#如果没有
if [ $A -eq 0 ];then
# 重启nginx,延迟2秒
service nginx restart
sleep 2
# 重新检查是否有nginx相关的进程
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
# 仍然没有nginx相关的进程,杀死当前keepalived,切换到备用机
killall keepalived
fi
fi
sudo chmod +x /etc/keepalived/nginx_chk.sh
cd /etc/keepalived
./nginx_chk.sh
sudo service keepalived restart
systemctl status keepalived.service
ip a
192.168.229.128的虚拟IP已经设置进来了:
192.168.229.129(BACKUP)上没有虚拟IP:
停掉Master的keepalived再检查
sudo service keepalived stop
ip a
Master的虚拟IP没有了:
backup上有了虚拟IP:
sudo service keepalived start
sudo service nginx stop
高可用性负载均衡配置成功
Keepalived安装和基础功能实现
centos7安装keepalived记录最新版踩坑
Nginx+keepalived双机热备(主从模式)
Ubuntu下运行.sh文件