Keeplived是在Linux服务器中实现负载均衡和故障转移的软件,支持在多个服务器之间共享虚拟IP地址,并通过VRRP协议检测主服务器的可用性,实现高可用性和负载均衡。
参考安装连接:
https://blog.csdn.net/u011181989/article/details/120147404
下面是在Linux离线安装Keeplived的大致步骤:
- 在一台联网的Linux服务器上,从Keeplived官网下载Keeplived的RPM包,例如:
wget https://www.keepalived.org/software/keepalived-2.1.5.tar.gz
- 把下载下来的压缩包传输到离线的Linux服务器上,例如使用scp命令:
scp keepalived-2.1.5.tar.gz username@remote_ip:/path/to/local/folder
- 解压压缩包,进入目录执行以下命令进行编译和安装 Keeplived:
tar zxvf keepalived-2.1.5.tar.gz
cd keepalived-2.1.5
./configure
make
make install
- 上述命令会将Keeplived安装在系统默认路径
/usr/local/sbin/keepalived
下。执行以下命令启动Keeplived:
/usr/local/sbin/keepalived -D #其中,参数`-D`用来指定以守护进程模式启动Keeplived。
还可以将该文件拷贝到/etc/init.d/keepalived 可是使用systemctl start keepalived 方式启动
- 启动完成后,可以通过执行以下命令查看Keeplived的运行状态:
ps -ef | grep keepalived
keepalived配置文件参考
! Configuration File for keepalived
global_defs {
# 全局唯一的主机标识
router_id server_a
}
vrrp_instance VI_1 {
# 标识是主节点还是备用节点,值为 MASTER 或 BACKUP
state MASTER
# 绑定的网卡(一定绑定正确的网卡,不然keepalived无法使用)
interface ens33
# 虚拟路由id,保证主备节点是一致的
virtual_router_id 51
# 权重
priority 100
# 同步检查时间,间隔默认1秒
advert_int 1
# 认证授权的密码,所有主备需要一样
authentication {
auth_type PASS
auth_pass 1111
}
# 虚拟IP
virtual_ipaddress {
192.168.6.152
}
}
以上步骤描述的是Keeplived的简单离线安装流程,具体根据实际情况调整。需要注意的是,在安装时需要安装相关的依赖包,如libnl、libnl-devel、gcc、openssl-devel等,以确保程序顺利编译运行。
下面是我自己测试环境中使用的配置文件
参考配置文件内容(master):
! Configuration File for keepalived
global_defs {
# 全局唯一的主机标识
router_id server_a
}
#监听haproxy(只要当前服务器中该服务没有运行,就会放弃虚拟ip控制权)
vrrp_script haproxy_check {
script "/usr/bin/systemctl is-active haproxy.service" #注意这里只能监测 systemctl status haproxy的服务
interval 2
}
#监听nginx(只要当前服务器中该服务没有运行,就会放弃虚拟ip控制权)
vrrp_script nginx_check {
script "/usr/bin/systemctl is-active nginx.service" #注意这里只能监测 systemctl status nginx的服务
interval 2
}
vrrp_instance VI_1 {
# 标识是主节点还是备用节点,值为 MASTER 或 BACKUP
state MASTER
# 绑定的网卡
interface ens33
# 虚拟路由id,保证主备节点是一致的
virtual_router_id 51
# 权重
priority 100
# 同步检查时间,间隔默认1秒
advert_int 1
# 认证授权的密码,所有主备需要一样
authentication {
auth_type PASS
auth_pass 1111
}
# 虚拟IP
virtual_ipaddress {
192.168.6.152
}
#调用脚本
track_script {
haproxy_check
nginx_check
}
#keepalived代理tcp端口
virtual_server 192.168.6.152 3307 {
delay_loop 6 #定义每次检查之间的延迟时间(秒)。
lb_algo rr #定义负载均衡算法。支持的算法有roundrobin、leastconn、source和uri。
lb_kind DR #定义负载均衡器类型。支持的类型有NAT、DR和TUN。
persistence_timeout 0 #定义持久性会话的超时时间(秒)。
protocol TCP #定义虚拟服务器使用的协议类型。支持的协议有TCP和UDP。
real_server 192.168.6.140 3307 { #定义实际服务器的IP地址和端口,以及它们的权重和检查配置。
weight 1
TCP_CHECK {
connect_timeout 3 #定义连接超时时间(秒)。
nb_get_retry 3 #定义在标记服务器为不可用之前尝试重新连接的次数。
delay_before_retry 3 #定义在尝试重新连接失败的服务器之前等待的时间(秒)。
connect_port 3307 #定义要使用的端口号。
}
}
real_server 192.168.6.141 3307 { #定义实际服务器的IP地址和端口,以及它们的权重和检查配置。
weight 1
TCP_CHECK {
connect_timeout 3 #定义连接超时时间(秒)。
nb_get_retry 3 #定义在标记服务器为不可用之前尝试重新连接的次数。
delay_before_retry 3 #定义在尝试重新连接失败的服务器之前等待的时间(秒)。
connect_port 3307 #定义要使用的端口号。
}
}
}
#keepalived代理HTTP端口
virtual_server 192.168.6.152 8085 {
delay_loop 6 #定义每次检查之间的延迟时间(秒)。
lb_algo rr #定义负载均衡算法。支持的算法有roundrobin、leastconn、source和uri。
lb_kind DR #定义负载均衡器类型。支持的类型有NAT、DR和TUN。
persistence_timeout 0 #定义持久性会话的超时时间(秒)。
protocol http #定义虚拟服务器使用的协议类型。支持的协议有TCP和UDP。
real_server 192.168.6.140 8085 { #定义实际服务器的IP地址和端口,以及它们的权重和检查配置。
weight 1
TCP_CHECK {
connect_timeout 3 #定义连接超时时间(秒)。
nb_get_retry 3 #定义在标记服务器为不可用之前尝试重新连接的次数。
delay_before_retry 3 #定义在尝试重新连接失败的服务器之前等待的时间(秒)。
connect_port 8085 #定义要使用的端口号。
}
}
real_server 192.168.6.141 8085 { #定义实际服务器的IP地址和端口,以及它们的权重和检查配置。
weight 1
TCP_CHECK {
connect_timeout 3 #定义连接超时时间(秒)。
nb_get_retry 3 #定义在标记服务器为不可用之前尝试重新连接的次数。
delay_before_retry 3 #定义在尝试重新连接失败的服务器之前等待的时间(秒)。
connect_port 8085 #定义要使用的端口号。
}
}
}
}
参考配置(backup):
! Configuration File for keepalived
global_defs {
router_id server_b
}
#监听haproxy
vrrp_script haproxy_check {
script "/usr/bin/systemctl is-active haproxy.service" #注意这里只能监测 systemctl status haproxy的服务
interval 2
}
#监听nginx
vrrp_script nginx_check {
script "/usr/bin/systemctl is-active nginx.service" #注意这里只能监测 systemctl status nginx的服务
interval 2
}
vrrp_instance VI_1 {
# 设置为备机
state BACKUP
interface ens33
virtual_router_id 51
# 权重设置的要比主机低
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
# 虚拟IP需要主备设置成一样
virtual_ipaddress {
192.168.6.152
}
#调用脚本
track_script {
haproxy_check
nginx_check
}
#keepalived代理TCP端口(我这里要转发haproxy下3307端口所代理的3306数据库,平台如果直接使用152.168.6.152:3307会无法访问到,所以需要映射一波)
virtual_server 192.168.6.152 3307 {
delay_loop 6 #定义每次检查之间的延迟时间(秒)。
lb_algo rr #定义负载均衡算法。支持的算法有roundrobin、leastconn、source和uri。
lb_kind DR #定义负载均衡器类型。支持的类型有NAT、DR和TUN。
persistence_timeout 0 #定义持久性会话的超时时间(秒)。
protocol TCP #定义虚拟服务器使用的协议类型。支持的协议有TCP和UDP。
real_server 192.168.6.140 3307 { #定义实际服务器的IP地址和端口,以及它们的权重和检查配置。
weight 1
TCP_CHECK {
connect_timeout 3 #定义连接超时时间(秒)。
nb_get_retry 3 #定义在标记服务器为不可用之前尝试重新连接的次数。
delay_before_retry 3 #定义在尝试重新连接失败的服务器之前等待的时间(秒)。
connect_port 3307 #定义要使用的端口号。
}
}
real_server 192.168.6.141 3307 { #定义实际服务器的IP地址和端口,以及它们的权重和检查配置。
weight 1 #权重
TCP_CHECK {
connect_timeout 3 #定义连接超时时间(秒)。
nb_get_retry 3 #定义在标记服务器为不可用之前尝试重新连接的次数。
delay_before_retry 3 #定义在尝试重新连接失败的服务器之前等待的时间(秒)。
connect_port 3307 #定义要使用的端口号。
}
}
}
#keepalived代理HTTP端口(我这里要转发haproxy下8085端口所代理的9001minio文件存储服务,平台如果直接使用152.168.6.152:8085会无法访问到,所以需要映射一波)
virtual_server 192.168.6.152 8085 {
delay_loop 6 #定义每次检查之间的延迟时间(秒)。
lb_algo rr #定义负载均衡算法。支持的算法有roundrobin、leastconn、source和uri。
lb_kind DR #定义负载均衡器类型。支持的类型有NAT、DR和TUN。
persistence_timeout 0 #定义持久性会话的超时时间(秒)。
protocol HTTP #定义虚拟服务器使用的协议类型。支持的协议有TCP和UDP。
real_server 192.168.6.140 8085 { #定义实际服务器的IP地址和端口,以及它们的权重和检查配置。
weight 1
TCP_CHECK {
connect_timeout 3 #定义连接超时时间(秒)。
nb_get_retry 3 #定义在标记服务器为不可用之前尝试重新连接的次数。
delay_before_retry 3 #定义在尝试重新连接失败的服务器之前等待的时间(秒)。
connect_port 8085 #定义要使用的端口号。
}
}
real_server 192.168.6.141 8085 { #定义实际服务器的IP地址和端口,以及它们的权重和检查配置。
weight 1 #权重
TCP_CHECK {
connect_timeout 3 #定义连接超时时间(秒)。
nb_get_retry 3 #定义在标记服务器为不可用之前尝试重新连接的次数。
delay_before_retry 3 #定义在尝试重新连接失败的服务器之前等待的时间(秒)。
connect_port 8085 #定义要使用的端口号。
}
}
}
}