keeepalived介绍
Keepalived的作用是检测服务器的状态, 如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器
keepalived基于VRRP(Virtual Router Redundancy Protocol)虚拟路由冗余协议,解决静态网关单点故障风险,它能够保证当个别节点宕机时,整个网络可以不间断地运行协议的软件实现,原生设计目的为了高可用 ipvs IP虚拟服务器(IP Virtual Server,简写为IPVS)服务,也就是产生虚拟ip,并且可以解决单点故障
官网:https://www.keepalived.org/
VRRP技术
工作方式
- 抢占模式:在抢占模式下,如果Backup设备的优先级比当前Master设备的优先级高,则主动将自己切换成Master。
- 非抢占模式:在非抢占模式下,只要Master设备没有出现故障,Backup设备即使随后被配置了更高的优先级也不会成为Master设备。
安全认证
- 无认证:不进行任何VRRP报文的合法性认证,不提供安全性保障
- 简单字符认证:预共享密钥,在一个有可能受到安全威胁的网络中,可以将认证方式设置为简单字符认证
- MD5认证:在一个非常不安全的网络中,可以将认证方式设置为MD5认证
keepalived架构
- vrrp stack:VIP消息通告
- checkers:监测real server
- system call:实现 vrrp 协议状态转换时调用脚本的功能
- SMTP:邮件组件
- IPVS wrapper:生成IPVS规则
- Netlink Reflector:网络接口
- WatchDog:监控进程
keepalived安装
上传下载好的安装包
https://www.keepalived.org/download.html
解压压缩包并进入目录
tar -zxvf keepalived-2.1.5.tar.gz
进行配置命令
./configure --prefix=/usr/local/keepalived
报错openssl问题
yum install openssl-devel
可采用yum install openssl-devel 命令安装openssl依赖,如果是离线无网安装,需要下载openssl依赖并执行安装rpm文件。
rpm -Uvh *.rpm --nodeps --force
再次执行配置命令./configure --prefix=/usr/local/keepalived即可
编译安装
make && make install
添加service启动方式
cp /usr/local/sbin/keepalived /etc/init.d/keepalived
复制配置文件到/etc/keepalived/keepalived.conf
别忘记给keepalived.conf授权,必须是644,777不好用,这个鬼东西
chmod 644 /etc/keepalived/keepalived.conf
启动keepalived
systemctl start keepalived
如果启动报错,查看日志
journalctl -xe
根据报错调整,一般是配置文件找不到和配置文件无法执行的错误,下面是启动成功的
keepalived配置文件
#根据以下信息对自己的配置文件进行修改
global_defs {# 路由id:当前安装keepalived的节点主机标识符,保证全局唯一router_id keep_104
}
vrrp_instance VI_1 {# 表示状态是MASTER主机还是备用机BACKUPstate MASTER# 该实例绑定的网卡名称interface ens34 #我的100网段对应的是ens34# 保证主备节点一致即可virtual_router_id 51# 权重,master权重一般高于backup,如果有多个,那就是选举,谁的权重高,谁就当选priority 100# 主备之间同步检查时间间隔,单位秒advert_int 2# 认证权限密码,防止非法节点进入authentication {auth_type PASSauth_pass 1111}# 虚拟出来的ip,可以有多个(vip)virtual_ipaddress {192.168.100.16 #这里我弄的100.16}
}
其中priority是比较重要的部分,keepalived默认配置比较多,需要精简一下到这样就可以啦,至于发送邮件有需要的可以选择配置
定义执行脚本配置
如果需要定制执行脚本,监听某一服务状态,需要增加如下配置
# 定义chk_nginx脚本,脚本执行间隔10秒,权重-10,检测nginx服务是否在运行。有很多方式,比如进程,用脚本检测等等
vrrp_script chk_nginx { #这里通过脚本监测 script "脚本位置xxnginx_.sh" #脚本执行间隔,每2s检测一次interval 2 #脚本结果导致的优先级变更,检测失败(脚本返回非0)则优先级 -5 weight -10 #检测连续2次失败才算确定是真失败。会用weight减少优先级(1-255之间) fall 2 #检测1次成功就算成功。但不修改优先级 rise 1
}
检测nginx脚本
count=`ps -C nginx --no-header |wc -l` if [ "${count}" -eq 0 ];then /usr/local/nginx/sbin/nginxsleep 5count=`ps -C nginx --no-header |wc -l` if [ "${count}" -eq 0 ] thensystemctl stop keepalived fi
fi