Keepalived简介

Keepalived基于VRRP协议在服务器之间建立了主备关系,通常称之为高可用对。VRRP中文叫虚拟路由冗余协议,目的是解决静态路由的单点故障问题。高可用对之间通过IP多播的方式进行通信,通过竞争机制确定主备关系,优先级高的为主服务器,主服务优先获得资源提供服务,备服务器处于等待状态,主节点不断向备节点发送VRRP数据包,当主服务器宕机时,备节点接收不到数据包,于是接管所有资源(VIP),对外提供服务。VRRP实现了主备关系建立和高可用对之间的故障切换,VIP实现了IP地址的热迁移,无需重启网卡,从而使得切换更加迅速。

安装Keepalived

yum install keepalived -y
rpm -qa keepalived

单实例VIP自动漂移

===lb01===

vim /etc/keepalived/keepalived.conf 

! Configuration File for keepalived

global_defs {
notification_email {
asdftttt@163.com
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id lb01
} vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 55
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.12/24 dev eth0 label eth0:1
}
} /etc/init.d/keepalived start
ip addr | grep 10.0.0.12 ===lb02=== vim /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs {
notification_email {
asdftttt@163.com
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id lb02
} vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 55
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.12/24 dev eth0 label eth0:1
}
} /etc/init.d/keepalived start
ip addr | grep 10.0.0.12

备份服务器创建裂脑检测脚本

裂脑指的是主备服务器上同时存在相同的VIP,原因通常是线路或防火墙导致的无法通信,备份服务器收不到主服务器发送的VRRP数据包即心跳信息,于是接管了服务。

vim /server/scripts/check_split_brain.sh

#!/bin/bash
#原理:Ping主节点,如果Master没有宕机而Slave出现了VIP,发送裂脑警告。
#收到警告后第一时间查看Master中Keepalived服务是否正常。
#有可能只是keepalived服务宕掉了
lb01_vip=10.0.0.12
lb01_ip=172.16.1.5
while true
do
ping -c 2 -W 3 $lb01_ip &> /dev/null
if [ $? -eq 0 -a `ip addr | grep "$lb01_vip" | wc -l` -eq 1 ];then
echo "ha is split brain.warning"
else echo "ha is ok"
fi
sleep 5
done 这个脚本的局限在于当线路问题导致裂脑时,该脚本无法判断,最好在监控服务器上也进行监控

配置Keepalived和服务相关联

vim /server/scripts/chk_nginx_proxy.sh

#!/bin/bash
#keepalived通常只针对服务器,不针对服务,该脚本解决此问题
#当nginx proxy停止,keepalived也停止
if [ `netstat -nutlp | grep nginx | wc -l` -ne 1 ];then
/etc/init.d/keepalived stop
fi chmod u+x /server/scripts/chk_nginx_proxy.sh vim /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs {
notification_email {
asdftttt@163.com
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id lb01
} vrrp_script chk_nginx_proxy {
script "/server/scripts/chk_nginx_proxy.sh"
interval 2
weight 2
} vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 55
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.12/24 dev eth0 label eth0:1
}
track_script {
chk_nginx_proxy
}
} /etc/init.d/keepalived reload
/application/nginx/sbin/nginx -s stop
/etc/init.d/keepalived status

配置多播地址

同一网段有多个高可用对,需要配置不同的多播地址

vim /etc/keepalived/keepalived.conf 

! Configuration File for keepalived

global_defs {
notification_email {
asdftttt@163.com
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id lb01
vrrp_mcast_group4 224.0.0.19
}

配置指定文件记录日志

vim /etc/sysconfig/keepalived 

KEEPALIVED_OPTIONS="-D -d -S 0"
#-D 详细日志 -d 导出备份 -S 0 指定syslog设备为local0 vim /etc/rsyslog.conf 42 *.info;mail.none;authpriv.none;cron.none;local0.none /var/log/messages
81 local0.* /var/log/keepalived.log /etc/init.d/rsyslog restart

最新文章

  1. IIS同时实现网站部分使用https协议访问另一部分http访问
  2. BFS
  3. Android图书应用-西游记
  4. (三)SQL入门 数据库规格化简介
  5. 前端相关js
  6. 一步一步写miscdevice的驱动模块
  7. ASP.NET获取IP的6种方法
  8. 实例对比剖析c#引用参数的用法
  9. Nginx+Center OS 7.2 开机启动设置(转载)
  10. QLGame 2d Engine 搭建2d游戏原理
  11. IIS URLReWrite URL 重写模块 下载地址
  12. Net分布式系统之六:微服务之API网关
  13. 阿里云服务器+ftp文件操作+基于Centos7的vsftpd配置
  14. angular7 DOM操作 及 @ViewChild
  15. 让 Odoo POS 支持廉价小票打印机
  16. VMware14 安装CentOS7及其配置;CentOS7配置网桥,做远程连接;
  17. Navicat---使用SSH远程连接到MySql,报错80070007: SSH Tunnel: Server does not support diffie-hellman-group1-sha1 for keyexchange
  18. kafka消费者如何才能从头开始消费某个topic的全量数据
  19. hive数据导入导出和常用操作
  20. python flask的request模块以及在flask编程中遇到的坑

热门文章

  1. [洛谷P4092][HEOI2016/TJOI2016]树
  2. [CQOI2014]数三角形 组合数 + 容斥 + gcd
  3. 【图论】tarjan的离线LCA算法
  4. mybatis逆向工程生成mapper报错
  5. c#知识梳理
  6. HDU1522 稳定婚姻匹配 模板
  7. 关于深度学习(deep learning)的常见疑问 --- 谷歌大脑科学家 Caffe缔造者 贾扬清
  8. CMDB资产管理系统开发【day27】:cmdb API安全认证
  9. angularJs $resource自定义方法(待完善)
  10. BZOJ2733:使用并查集维护连通性之后用线段树维护+线段树合并(动态开点)