文章目录
keepalived 是什么
keepalived 是集群管理中保证集群高可用的一个服务软件, 用来防止单点故障。
keepalived 工作原理
keepalived 是以 VRRP 协议为实现基础的,VRRP 全称 Virtual Router Redundancy Protocol,即虚拟路由冗余协议。
虚拟路由冗余协议,可以认为是实现路由器高可用的协议, 即将 N 台提供相同功能的路由器组成一个路由器组,这个组 里面有一个 master 和多个 backup,master 上面有一个对外 提供服务的 vip(该路由器所在局域网内其他机器的默认路 由为该 vip),master 会发组播,当 backup 收不到 vrrp 包时就认为 master 宕掉了,这时就需要根据 VRRP 的优先级来选 举一个 backup 当 master。这样的话就可以保证路由器的高 可用了。
keepalived 主要有三个模块,分别是 core、check 和 vrrp。 core 模块为 keepalived 的核心,负责主进程的启动、维护以 及全局配置文件的加载和解析。check 负责健康检查,包括 常见的各种检查方式。 vrrp 模块是来实现 VRRP 协议的。
双主上配置keepalived
以mysql01安装为例,mysql02一样
安装依赖包
[root@mysql01 src]# yum -y install libnl libnl-devel openssl-devel gcc
解压
[root@mysql01 src]# tar -zxvf keepalived-2.0.20.tar.gz
编译安装
[root@mysql01 keepalived-2.0.20]# ./configure --prefix=/usr/local/keepalived
[root@mysql01 keepalived-2.0.20]# make && make install
拷贝文件到默认启动位置
[root@mysql01 keepalived-2.0.20]# mkdir /etc/keepalived
[root@mysql01 keepalived-2.0.20]# cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/ # 必须
[root@mysql01 keepalived-2.0.20]# cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/ # 必须
[root@mysql01 keepalived-2.0.20]# ln -s /usr/local/keepalived/sbin/keepalived /usr/sbin/ # 必须
查看是否加入服务,并设置开机启动
[root@mysql01 keepalived-2.0.20]# systemctl list-unit-files | grep keepalived
[root@mysql01 keepalived-2.0.20]# systemctl enable keepalived
查看服务配置
[root@mysql01 keepalived-2.0.20]# cat /usr/lib/systemd/system/keepalived.service
[Unit]
Description=LVS and VRRP High Availability Monitor
After=network-online.target syslog.target
Wants=network-online.target
[Service]
Type=forking
PIDFile=/run/keepalived.pid # 默认的pid文件路径
KillMode=process
EnvironmentFile=-/usr/local/keepalived/etc/sysconfig/keepalived
ExecStart=/usr/local/keepalived/sbin/keepalived $KEEPALIVED_OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target
创建脚本
[root@mysql01 keepalived]# touch /usr/local/keepalived/kill_keepalived.sh
[root@mysql01 keepalived]# vi /usr/local/keepalived/kill_keepalived.sh
#!/bin/bash
kill -9 $(cat /run/keepalived.pid)
[root@mysql01 keepalived]# chmod +x /usr/local/keepalived/kill_keepalived.sh
修改配置文件
[root@mysql01 keepalived]# vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id mysql01 # 建议设置为主机名
}
vrrp_instance VI_1 {
state BACKUP # MASTER或BACKUP,为了防止脑裂现象,主备均需要设置为backup模式,master模式会抢占VIP
interface ens33 # 网卡接口名
virtual_router_id 51 # 一个组中router_id必须一致
priority 100 # 优先级,同一个vrrp_instance的MASTER优先级必须比BACKUP高
nopreempt # 非抢占,只能运行在BACKUP上,配合backup,防止切换后,主库服务恢复正常后,IP漂移过来
advert_int 1 # MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位为秒
authentication {
auth_type PASS # 验证类型为PASS
auth_pass 000000 # 设置密码
}
virtual_ipaddress {
192.168.17.130 # 虚拟ip地址,可以有多个地址,每个地址占一行,不需要子网掩码
}
}
virtual_server 192.168.17.130 3306 {
delay_loop 6 # 健康检查间隔,单位为秒
persistence_timeout 50 # 会话保持时间,就是把用户请求转发给同一个服务器
protocol TCP # 转发协议,有TCP和UDP两种,一般用TCP
real_server 192.168.17.131 3306 {
notify_down /usr/local/keepalived/kill_keepalived.sh
TCP_CHECK { # 健康检查的意思是:如果192.168.17.131的3306端口挂掉了,就会触发kill_keepalived.sh脚本
connect_timeout 3 # 连接超时时间
nb_get_retry 3 # 重连次数
delay_before_retry 3 # 重连时间间隔
connect_port 3306 # 检测端口
}
}
}
启动keepalived
[root@mysql01 keepalived-2.0.20]# systemctl start keepalived
配置双主
配置过程略,查看前面文章。