Keepalived是一款开源的、免费的高可用软件。
原理
通过自动检测服务器的健康状态,将故障服务器从系统中剔除,并使用其他服务器接替其工作,确保服务的高可用性。
第1/4步:安装Keepalived
在线安装
(推荐)Ubuntu
apt-get update
apt-get install keepalived
CentOS
yum update
yum install -y keepalived
离线安装
下载安装包
上传并解压安装包
tar -zxvf 离线安装包.tar.gz
安装依赖库
yum install -y gcc openssl-devel libnl libnl-devel libnfnetlink-devel net-tools vim
apt-get install -y curl gcc libssl-dev libnl-3-dev libnl-genl-3-dev libsnmp-dev
编译安装
cd 离线安装包解压目录
./configure --prefix=/usr/local/keepalived
make && make install
配置环境变量
💡 提示
编辑 ~/.bashrc
或 /etc/profile
文件,在文件内添加keepalived的二进制文件路径。
export PATH=/usr/local/keepalived/sbin:$PATH
应用环境变量
💡 提示
编辑 ~/.bashrc
或 /etc/profile
文件,在文件内添加keepalived的二进制文件路径。
source /etc/profile
source ~/.bashrc
第2/4步:配置Keepalived
1/4:创建目录
⚠️ 提示
确保目录/etc/keepalived存在。
mkdir -p /etc/keepalived
2/4:创建配置文件
💡 提示
配置文件中的中文结合自身情况替换。
💡 提示
需要将文本【集群内节点间可相互访问的本节点IP】替换为当前节点IP后执行命令。
例如:192.168.1.235
💡 提示
需要将文本【当前节点权重(主节点必须高于从节点),取值范围:1-254。】更新后执行命令。
集群内所有节点priority的值唯一且不一样。
例如:240
💡 提示
需要将文本【高可用对外提供服务的虚拟IP】替换为保障高可用的虚拟IP后执行命令。
例如:192.168.1.240/24。
⚠️ 提示
【高可用对外提供服务的虚拟IP】的子网掩码必须与服务器节点的子网掩码一致。
💡 提示
需要将文本【与虚拟IP绑定的网卡名】替换为当前服务节点的网卡名称后执行命令。
例如:eth0、ens33等。
tee /etc/keepalived/keepalived.conf <<-'EOF'
! Configuration File for keepalived
global_defs {
router_id 集群内节点间可相互访问的本节点IP
vrrp_skip_check_adv_addr
script_user root
enable_script_security
}
vrrp_script check_vrrp {
script "killall -0 postgres" #名为nginx的进程是否存在
interval 9 #检查间隔,单位:秒。值必须大于脚本执行时间,否则提示【exited due to signal 15】超时
user root #执行监测脚本的用户或组
init_fail #设置默认标记为失败状态,监测成功之后再转换为成功状态
weight -20 #默认为0,取值范围:-254~254
fall 3 #脚本连续几次都执行失败,则把服务器标记为失败
rise 2 #脚本连续几次都执行成功,则把服务器标记为成功
}
vrrp_instance thingskit {
state BACKUP
priority 当前节点权重(主节点必须高于从节点),取值范围:1-254。
virtual_ipaddress {
高可用对外提供服务的公网IP
}
interface 与虚拟IP绑定的网卡名
virtual_router_id 133
advert_int 1
authentication {
auth_type PASS
auth_pass thingskit
}
nopreempt
track_script {
check_vrrp
}
notify_master "/etc/keepalived/keepalived_master.sh" #切换到MASTER时,执行的脚本(自定义操作)。例如:邮件通知
notify_backup "/etc/keepalived/keepalived_backup.sh" #切换到BACKUP时,执行的脚本(自定义操作)
}
EOF
3/5:创建脚本文件
tee /etc/keepalived/keepalived_master.sh <<-'EOF'
#!/bin/bash
#数据库管理工具
systemctl start pgpool
EOF
tee /etc/keepalived/keepalived_backup.sh <<-'EOF'
#!/bin/bash
#数据库管理工具
systemctl stop pgpool
PGDATA="/app/postgresql-15.2/data" # PostgreSQL 数据目录路径
PGCTL="/app/postgresql-15.2/bin/pg_ctl" # PostgreSQL 启动脚本路径
#/app/postgresql-15.2/bin/psql -h localhost -p 5432 -U pgpool postgres -c "select * from pg_stat_replication;"
if $PGCTL status -D $PGDATA > /dev/null 2>&1; then
echo "PostgreSQL is running."
# exit 0
else
echo "PostgreSQL is not running. Attempting to start it..."
su - postgres -c "/app/pgpool2-4.5.5/bin/pcp_recovery_node -h localhost -p 9898 -U pgpool -n 0" #从节点数据恢复
fi
EOF
4/5:配置文件权限修正
⚠️ 提示
配置文件【/etc/keepalived/keepalived.conf】权限要求严格。
1、配置文件所有者只能属于root。
2、配置文件执行权限只能为644。
chown root /etc/keepalived/keepalived.conf
chmod 644 /etc/keepalived/keepalived.conf
chmod 744 /etc/keepalived/keepalived*.sh
5/5:配置文件有效性检测
keepalived -t -f /etc/keepalived/keepalived.conf
第3/4步:启动Keepalived服务
[Service]
Type=notify
EnvironmentFile=-/etc/default/keepalived
ExecStart=/usr/sbin/keepalived --dont-fork $DAEMON_ARGS -l -D
ExecReload=/bin/kill -HUP $MAINPID
# 将标准输出和错误重定向到文件
StandardOutput=append:/var/log/keepalived.log
StandardError=append:/var/log/keepalived.log
[Install]
sudo systemctl daemon-reload
使用systemctl命令启动Keepalived服务,并设置开机自启动。
sudo systemctl restart keepalived.service
第4/4步:检查服务状态
⚠️ 提示
Keepalived软件正常工作所需要的服务器数量不能低于2台。
sudo systemctl status keepalived.service