Keepalived安装部署
- 下载地址:点击下载:https://www.keepalived.org/download.html
- 把压缩包上传到服务器,再对keepalived进行解压 :
tar -zxvf keepalived-2.0.18.tar.gz
得到源文件要解压编译和安装。 - 解压后进入到解压出来的目录,看到会有 configure文件 ,那么就可以做配置了(配置安装和nginx一模一样)
- 配置keepalived 的安装目录和核心配置目录
./configure --prefix=/var/temp/keepalived --sysconf=/etc
prefix 为 安装目录地址 sysconf 为核心配置目录,我们keepalived的配置就到etc下。注意一定要配置到etc下,不然后期配置时可能会出现配置文件找不到等情况。 - 配置好后,使用
make && make install
来编译和安装。 - 看到/var/temp/keepalived/有bin、sbin、share 和/etc/keepalived下有 keepalived.conf、samples 表示安装成功!
主从配置 Keepalived
配置主从时特别注意
- vrrp_instance 下的state 只有一个主为MASTER ,其他都是 BACKUP
- global_defs 下的 router_id 相当于这台机器的唯一标志,不能重复
- vrrp_instance 下的interface 网卡名称必须检查是否和自己网卡一样(ip addr 检查)
- vrrp_instance 下的 priority 权重必须小于MASTER 的权重,选举谁高选谁
- vrrp_instance 下的 authentication 和 virtual_router_id 所有节点都保持一致即可
- vrrp_instance 下的 virtual_ipaddress 是虚拟ip地址,设置一个即可,它会出现在MASTER 上运行,当MASTER 宕机则会转移到权重高的BACKUP上,来维持高可用,当MASTER 恢复,虚拟ip网关转移到MASTER节点上。
下面为 主Keepalived配置
通过命令 vim keepalived.conf 打开配置文件
! Configuration File for keepalived
global_defs {
#其他都是邮件警告发邮件的
#notification_email {
# acassen@firewall.loc
# failover@firewall.loc
# sysadmin@firewall.loc
#}
#notification_email_from Alexandre.Cassen@firewall.loc
#smtp_server 192.168.200.1
#smtp_connect_timeout 30
# 路由id:当前安装keepalived的节点主机标识符,保证全局唯一 246可以为你的公网ip结尾来区分
router_id keepa_master_246
# vrrp_skip_check_adv_addr
# vrrp_strict
# vrrp_garp_interval 0
# vrrp_gna_interval 0
}
#实例组
vrrp_instance VI_1 {
## 表示状态是MASTER主机还是备用机BACKUP
state MASTER
# 该实例绑定的网卡 (查询你的网卡信息 ip addr)
interface eth0
# 保证主备节点一致即可
virtual_router_id 51
# 权重,master权重一般高于backup,如果有多个,那就是选举,谁的权重高,谁就当选
priority 100
# 主备之间同步检查时间间隔,单位秒 心跳
advert_int 1
# 认证权限密码,防止非法节点进入
authentication {
auth_type PASS
auth_pass 1111
}
# 虚拟出来的ip,可以有多个(vip)
virtual_ipaddress {
# 注意:主备两台的vip都是一样的,绑定到同一个vip
192.168.1.180
}
}
#默认配置中下面还有配置删除即可
# .....
下面为 从Keepalived配置 (一般为另一台服务器中重新上面的操作)
通过命令 vim keepalived.conf 打开配置文件
! Configuration File for keepalived
global_defs {
#其他都是邮件警告发邮件的
#notification_email {
# acassen@firewall.loc
# failover@firewall.loc
# sysadmin@firewall.loc
#}
#notification_email_from Alexandre.Cassen@firewall.loc
#smtp_server 192.168.200.1
#smtp_connect_timeout 30
# 路由id:当前安装keepalived的节点主机标识符,保证全局唯一 246可以为你的公网ip结尾来区分
router_id keepa_backup_293
# vrrp_skip_check_adv_addr
# vrrp_strict
# vrrp_garp_interval 0
# vrrp_gna_interval 0
}
vrrp_instance VI_1 {
## 表示状态是MASTER主机还是备用机BACKUP
state BACKUP
# 该实例绑定的网卡 (查询你的网卡信息 ip addr)
interface ens33
# 保证主备节点一致即可
virtual_router_id 51
# 权重,master权重一般高于backup,如果有多个,那就是选举,谁的权重高,谁就当选
priority 80
# 主备之间同步检查时间间隔,单位秒 心跳
advert_int 1
# 认证权限密码,防止非法节点进入
authentication {
auth_type PASS
auth_pass 1111
}
# 虚拟出来的ip,可以有多个(vip)
virtual_ipaddress {
# 注意:主备两台的vip都是一样的,绑定到同一个vip
192.168.1.180
}
}
#默认配置中下面还有配置删除即可
# .....
双机主备Keepalived配置文件完成后实现高可用
1.分别启动Keepalived
进入你的安装目录 /var/temp/keepalived/sbin 下 ./keepalived
来启动
2.检查启动成功没有
到你的MASTER服务器上输入ip addr
你会发现多了你的虚拟ip的网关,网卡也是你设置的,这说明已经成功了!,到这里已经可以完成Keepalived高可用保证。
开始使用Keepalived追踪nginx实现高可用
我们先要写一个shell脚本重启nginx 先创建vim restart_nginx.sh
文件
#/var/temp/nginx/sbin/nginx 为nginx启动地址
A=`ps -C nginx --no-header |wc -l`
#判断nginx是的宕机,如果宕机了,重试重启
if [ $A -eq 0 ];then
/var/temp/nginx/sbin/nginx
#等待一会时间再检查是否重启了,nginx如果还没还有重启这停止keepalived,开启备用机
sleep 3
if [ $A -eq 0 ];then
killall keepalived
fi
fi
保存之后可能会出现权限不够 -bash: ./restart_nginx.sh: Permission denied
我们通过chmod +x restart_nginx.sh
赋予权限后运行试试,可以先把nginx关闭再使用脚本运行。前后测试一下是否可以启动nginx。
设置重启脚本到keepalived.conf
到keepalived添加vrrp_script 设置脚本
#vrrp_script 设置脚本
vrrp_script restart_nginx_alive{
#要运行脚本地址
script "/etc/keepalived/restart_nginx.sh"
interval 2 #每隔两秒运行上一行脚本
weight 10 #如果脚本运行成功,则升权 +10
#weight -10 #如果脚本运行失败,则升权 -10
}
#vrrp_instance 中添加调用 track_script
vrrp_instance VI_1 {
#追踪script中脚本
track_script{
restart_nginx_alive
}
}
添加到配置
重启Keepalived使得配置文件生效
systemctl restart keepalived
你可以去主动尝试关闭nginx, keepalived它会自动帮你重新启动nginx.
双主热备方案更加节约资源
结构图:
通过云解析dns 把虚拟ip 配置到dns上,配置二个一样的解析规则,来搭建dns轮训。
第一台服务器
! Configuration File for keepalived
global_defs {
# 路由id:当前安装keepalived的节点主机标识符,保证全局唯一 246可以为你的公网ip结尾来区分
router_id keepa_293
}
#一组实例
vrrp_instance VI_1 {
## 表示状态是MASTER主机还是备用机BACKUP
state BACKUP
# 该实例绑定的网卡 (查询你的网卡信息 ip addr)
interface ens33
# 保证主备节点一致即可
virtual_router_id 51
# 权重,master权重一般高于backup,如果有多个,那就是选举,谁的权重高,谁就当选
priority 80
# 主备之间同步检查时间间隔,单位秒 心跳
advert_int 1
# 认证权限密码,防止非法节点进入
authentication {
auth_type PASS
auth_pass 1111
}
# 虚拟出来的ip,可以有多个(vip)
virtual_ipaddress {
# 注意:主备两台的vip都是一样的,绑定到同一个vip
192.168.1.180
}
}
#二组实例
vrrp_instance VI_2 {
## 表示状态是MASTER主机还是备用机BACKUP
state MASTER #改变
# 该实例绑定的网卡 (查询你的网卡信息 ip addr)
interface ens33
# 保证主备节点一致即可
virtual_router_id 52 #改变
# 权重,master权重一般高于backup,如果有多个,那就是选举,谁的权重高,谁就当选
priority 100 #改变
# 主备之间同步检查时间间隔,单位秒 心跳
advert_int 1
# 认证权限密码,防止非法节点进入
authentication {
auth_type PASS
auth_pass 1111
}
# 虚拟出来的ip,可以有多个(vip)
virtual_ipaddress {
# 注意:主备两台的vip都是一样的,绑定到同一个vip
192.168.1.181 #改变
}
}
第二台服务器
! Configuration File for keepalived
global_defs {
# 路由id:当前安装keepalived的节点主机标识符,保证全局唯一 246可以为你的公网ip结尾来区分
router_id keepa_252
}
#一组实例
vrrp_instance VI_1 {
## 表示状态是MASTER主机还是备用机BACKUP
state MASTER
# 该实例绑定的网卡 (查询你的网卡信息 ip addr)
interface ens33
# 保证主备节点一致即可
virtual_router_id 51
# 权重,master权重一般高于backup,如果有多个,那就是选举,谁的权重高,谁就当选
priority 100
# 主备之间同步检查时间间隔,单位秒 心跳
advert_int 1
# 认证权限密码,防止非法节点进入
authentication {
auth_type PASS
auth_pass 1111
}
# 虚拟出来的ip,可以有多个(vip)
virtual_ipaddress {
# 注意:主备两台的vip都是一样的,绑定到同一个vip
192.168.1.180
}
}
#二组实例
vrrp_instance VI_2 {
## 表示状态是MASTER主机还是备用机BACKUP
state BACKUP #改变
# 该实例绑定的网卡 (查询你的网卡信息 ip addr)
interface ens33
# 保证主备节点一致即可
virtual_router_id 52 #改变
# 权重,master权重一般高于backup,如果有多个,那就是选举,谁的权重高,谁就当选
priority 80 #改变
# 主备之间同步检查时间间隔,单位秒 心跳
advert_int 1
# 认证权限密码,防止非法节点进入
authentication {
auth_type PASS
auth_pass 1111
}
# 虚拟出来的ip,可以有多个(vip)
virtual_ipaddress {
# 注意:主备两台的vip都是一样的,绑定到同一个vip
192.168.1.181 #改变
}
}
其实就是多出来一个vrrp_instance 实例配置 二个机器实例相互互为主备关系,
如 171机器VI_1为主 ,VI_2 为备,195机器VI_1为备,VI_2 为主,dns解析配置的是这二台机器的虚拟vip进行轮训减少资源的浪费