共计 4357 个字符,预计需要花费 11 分钟才能阅读完成。
keepalived
Keepalived 是一个基于 VRRP 协议来实现的 LVS 服务高可用方案,可以利用其来避免单点故障。一个 MySQL 或 lvs 或 nginx 服务会有 2 台服务器运行 Keepalived,一台为主服务器(MASTER),一台为备份服务器(BACKUP),但是对外表现为一个虚拟 IP,主服务器会发送特定的消息给备份服务器,当备份服务器收不到这个消息的时候,即主服务器宕机的时候,备份服务器就会接管虚拟 IP,继续提供服务,从而保证了高可用性。
vrrp 协议完成地址流动;
为 vip 地址所在的节点生成 ipvs 规则(在配置文件中预先定义);
为 ipvs 集群的各 RS 做健康状态检测;
基于脚本调用接口通过执行脚本完成脚本中定义的功能,进而影响集群事务;
HA Cluster 配置前提:
(1) 各节点时间必须同步;
ntp, chrony
(2) 确保 iptables 及 selinux 不会成为阻碍;
(3) 各节点之间可通过主机名互相通信(对 KA 并非必须);
建议使用 /etc/hosts 文件实现;
(4) 各节点之间的 root 用户可以基于密钥认证的 ssh 服务完成互相通信;(并非必须)
安装 keepalived
CentOS 6.4 以后再 base 仓库中就已经提供了 keepalived 软件包,因此可直接使用 yum -y install keepalived 安装即可
程序环境:
配置文件:/etc/keepalived/keepalived.conf
主程序:/usr/sbin/keepalived
配置文件讲解
keepalived 有三类配置区域, 注意不是三种配置文件,是一个配置文件里面三种不同类别的配置区域,全局配置(Global Configuration)、VRRPD 配置、LVS 配置
################### 全局配置 ###################
global_defs {
notification_email {
root@localhost #指定 keepalived 在发生故障切换时需要发送的 Email 地址,可定义多个
}
notification_email_from keepalived@localhost #指定故障切换时的发件人地址
smtp_server 127.0.0.1 #指定 smtp 服务器地址
smtp_connect_timeout 30 #指定 smtp 连接超时时间
router_id LVS_DEVEL #运行 keepalived 机器的一个标识
vrrp_mcast_group4 224.0.0.9 #指定 ipv4 组播地址
}
###################VRRP 配置 ###################
vrrp_instance VI_1 {
state MASTER #指定在当前 VRRP 示例的状态 MASTER|BACKUP,如果设置了 nopreempt 这个值不起作用,主备靠 priority 决定
interface eth0 #设置实例绑定的网卡
virtual_router_id 51 ##VRID 标记 , 路由 ID,可通过 #tcpdump vrrp 查看
priority 100 #优先级,高优先级竞选为 master
advert_int 1 #检查间隔,默认 1 秒
nopreempt #非抢占(因为默认如果 master 挂的时候,backup 会顶上,当 master 再好的时候,会再切回去,这样就会造成两次
#断开,加上 nopreempt 的时候,及时 master 又好了,依旧不会切换,但是要注意两个 state 都要是 backup)
preempt_delay 300 #抢占式模式下,节点上线后触发新选举操作的延迟时长;
authentication {#设置认证
auth_type PASS #认证方式
auth_pass 1111 #认证密码
}
virtual_ipaddress {#设置 vip
192.168.200.16
192.168.200.17
192.168.200.18
}
track_interface {#配置要监控的接口,一旦出现故障则转为 FAULT 状态
eth0
eth1
…
}
notify_master <STRING>|<QUOTED-STRING> #当前节点成为主节点时触发的脚本;
notify_backup <STRING>|<QUOTED-STRING> #当前节点转为备节点时触发的脚本;
notify_fault <STRING>|<QUOTED-STRING> #当前节点转为“失败”状态时触发的脚本;
}
###################LVS 配置 ###################
virtual_server 192.168.200.100 443 {#VIP 端口
delay_loop 6 #健康检查时间间隔
lb_algo rr #lvs 调度算法 lrr|wrr|lc|wlc|lblc|sh|dh
lb_kind NAT #负载均衡转发规则 NAT|DR|TUN
nat_mask 255.255.255.0 #nat 掩码
persistence_timeout 50 #会话保持时间
protocol TCP #使用的协议
sorry_server <IPADDR> <PORT> #备用服务器地址,所有 realserver 失效后启用
real_server 192.168.201.100 443 {#RIP 地址,端口
weight 1 #权重,默认为 1,0 失效
inhibit_on_failure ## 在服务器健康检查失效时,将其设为 0,而不是直接从 ipvs 中删除
notify_up <STRING>|<QUOTED-STRING> #在检测到 server up 后执行脚本
notify_down <STRING>|<QUOTED-STRING> #在检测到 server down 后执行脚本
HTTP_GET|SSL_GET {
url {
path <URL_PATH> #定义要监控的 URL
status_code <INT> #判断上述检测机制为健康状态的响应码
digest <STRING> #判断上述检测机制为健康状态的响应的内容的校验码;
}
connect_timeout <INTEGER> #连接请求的超时时长
nb_get_retry <INT> #重试次数
delay_before_retry <INT> #重试之前的延迟时长
connect_ip <IP ADDRESS> #向当前 RS 的哪个 IP 地址发起健康状态检测请求
connect_port <PORT> #向当前 RS 的哪个 PORT 发起健康状态检测请求
bindto <IP ADDRESS> #发出健康状态检测请求时使用的源地址
bind_port <PORT> #发出健康状态检测请求时使用的源端口
}
TCP_CHECK {
connect_ip <IP ADDRESS> #向当前 RS 的哪个 IP 地址发起健康状态检测请求
connect_port <PORT> #向当前 RS 的哪个 PORT 发起健康状态检测请求
bindto <IP ADDRESS> #发出健康状态检测请求时使用的源地址;
bind_port <PORT> #发出健康状态检测请求时使用的源端口;
connect_timeout <INTEGER> #连接请求的超时时长;
}
}
}
一些关于 Keepalived 相关教程集合:
CentOS 7 下 Keepalived + HAProxy 搭建配置详解 http://www.linuxidc.com/Linux/2017-03/141593.htm
Keepalived 高可用集群应用场景与配置 http://www.linuxidc.com/Linux/2017-03/141866.htm
Nginx+Keepalived 实现站点高可用 http://www.linuxidc.com/Linux/2016-12/137883.htm
Nginx+Keepalived 实现站点高可用(负载均衡) http://www.linuxidc.com/Linux/2016-12/138221.htm
构建高可用集群 Keepalived+Haproxy 负载均衡 http://www.linuxidc.com/Linux/2016-12/138917.htm
CentOS6.5 下 Keepalived 高可用服务单实例配置 http://www.linuxidc.com/Linux/2016-12/138110.htm
Keepalived 安装与配置 http://www.linuxidc.com/Linux/2017-02/140421.htm
Linux 下 Keepalived 服务安装文档 http://www.linuxidc.com/Linux/2017-03/141441.htm
本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-03/142234.htm