Keepalived
编译安装
下载安装包 从keepalived官网或者github下载安装包,官网下载地址:www.keepalived.org/download.ht…
# 编译安装
tar -zxvf keepalived.tar.gz
cd keepalived
./configure --prefix=/usr/local/keepalived --sysconf=/etc
make && make install
# 注册服务
cd keepalived/etc && cp init.d/keepalived /etc/init.d/ && cp sysconfig/keepalived /etc/sysconfig/
systemctl daemon-reload
配置文件
keepalived的配置为/etc/keepalived/keepalived,完整的keepalived配置主要包含三大块。
- 全局定义块是必配置项。
- VRRP 实例定义块主要用于虚拟路由节点定义。
- 虚拟服务器定义块用于健康监测、流量分发(作用类似于 F5 或者 nginx),与 nginx 等反向代理服务的区别是,keepalived 用于四层流量分发,nginx 做七层负载,能够制定更为灵活的正则表达式规则。如果 keepalived 只是用于 HA 高可用,则虚拟服务器定义块是可配置项。
! Configuration File for keepalived
#全局定义块
global_defs {
...
}
#VRRP 实例定义块
vrrp_instance VI_1 {
...
}
#虚拟服务器定义块
virtual_server 10.10.10.2 1358 {
...
}
! Configuration File for keepalived
global_defs {
notification_email { # 邮箱服务器,服务故障时执行邮件报警,不建议使用
xxx@gmail.com
}
notification_email_from xxx@gmail.com # 发件人,可选配置
smtp_server 192.168.200.1 # smtp服务器地址,可选配置
smtp_connect_timeout 30 # 连接smtp的超时时间,可选配置
router_id LVS_DEVEL # 用户标识本节点的名称,通常配置为主机名
vrrp_skip_check_adv_addr # 所有报文都检查比较消耗性能,此配置为如果当前报文和上一条报文是同一路由器发送,则跳过此次报文中的源地址
vrrp_strict # 严格遵守VRRP协议,不允许出现情况:1.没有VIP虚拟地址;2.配置了单播邻居;3.在VRRP版本2中有IPv6地址
vrrp_garp_interval 0 # ARP报文发送延迟时间
vrrp_gna_interval 0 # ARP消息发送延迟时间
}
vrrp_instance VI_1 { # 定义VRRP实例名(VT_1),建议默认配置
state MASTER # 当前节点的主备初始状态,一般情况给BACKUP,因为初始状态最终是由两个节点的priority比较决定
interface ens33 # 绑定虚拟路由器使用的物理接口,在当前节点的可用网卡中选择
virtual_router_id 51 # 虚拟路由id,唯一标识,主备节点该值相同,0~255
priority 100 # 节点初始优先级,不同节点该值不同,节点间选举主备依靠priority+weight进行,weight根据节点当前状态变化,priority值域:0~255
advert_int 1 # vrrp通告优先级时间间隔
authentication { # 认证机制
auth_type PASS # AH(不推荐)或PASS
auth_pass xxx # 预共享密钥,前8位有效,同一虚拟路由器下的多个keepalived节点必须一致
}
virtual_ipaddress { # 虚拟IP,可配置多个VIP,按如下格式配置
192.168.200.16 # 指定VIP,不指定网卡和掩码,默认为eth0和32位掩码
192.168.200.17/24 eth1 # 指定VIP,指定网卡eth1,掩码24位
192.168.200.18/24 eth2 label eth2:1 # 指定VIP,指定网卡eth2,掩码24位,label位eth2:1
}
}
global_defs {
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state BACKUP
nopreempt
interface ens33
virtual_router_id 80
mcast_src_ip 192.168.77.129
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass xxxx
}
virtual_ipaddress {
192.168.77.77
}
}
virtual_server 192.168.77.77 6443 {
delay_loop 6
lb_algo loadbalance
lb_kind DR
net_mask 255.255.255.0
persistence_timeout 0
protocol TCP
real_server 192.168.77.129 6443 {
weight 1
SSL_GET {
url {
path /healthz
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.77.130 6443 {
weight 1
SSL_GET {
url {
path /healthz
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.123.131 6443 {
weight 1
SSL_GET {
url {
path /healthz
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}