keepalived应用

Keepalived 是一个基于 VRRP(虚拟路由冗余协议)实现的高可用解决方案,常用于构建高可用性的服务器集群,特别是在负载均衡场景中,可确保服务的不间断运行。以下为你详细介绍它:

0主要功能

  • 高可用性:借助 VRRP 协议,Keepalived 能在多台服务器间自动切换,当主服务器出现故障时,备用服务器可迅速接替工作,保障服务的持续可用。
  • 负载均衡:Keepalived 可与 LVS(Linux 虚拟服务器)集成,实现对多台服务器的负载均衡,依据预设的算法将客户端请求分发到不同的服务器上。
  • 健康检查:它能对服务器的健康状况进行检查,实时监测服务器的服务状态,一旦发现服务器异常,就会将其从服务列表中移除,待恢复正常后再添加回来。

Keepalived 的工作原理主要基于 VRRP 协议。VRRP 将多台路由器(或服务器)组成一个虚拟路由器,这个虚拟路由器有一个唯一的虚拟 IP 地址(VIP)。在这个虚拟路由器中,有一个主路由器(Master)和多个备用路由器(Backup)。

  • 主路由器:承担处理客户端请求的任务,同时定期发送 VRRP 通告给备用路由器,告知它们自己的存活状态。
  • 备用路由器:处于监听状态,接收主路由器发送的 VRRP 通告。若在一定时间内未收到通告,备用路由器会认为主路由器出现故障,然后通过选举机制选出新的主路由器,并接管虚拟 IP 地址,继续提供服务。

1环境准备

IP地址 主机名 软件 节点
192.168.72.30 master keepalived, nginx 主节点
192.168.72.32 backup keepalived, nginx 从节点
192.168.72.100 Vip地址

1.1前期准备

1.1.1修改IP

#master

root@master \~\]# nmcli c modify ens160 ipv4.method manual ipv4.addresses 192.168.33.30/24 ipv4.gateway 192.168.33.30 ipv4.dns 223.5.5.5 connection.autoconnect yes \[root@master \~\]# nmcli c up ens160 #backup \[root@master \~\]# nmcli c modify ens160 ipv4.method manual ipv4.addresses 192.168.33.30/24 ipv4.gateway 192.168.33.30 ipv4.dns 223.5.5.5 connection.autoconnect yes \[root@master \~\]# nmcli c up ens160

1.1.2关闭防火墙

root@master \~\]# systemctl stop firewalld \[root@backup \~\]# systemctl stop firewalld

1.1.3安装nginx服务

#master

root@master \~\]# systemctl stop firewalld \[root@master \~\]# mount /dev/sr0 /mnt mount: /mnt: WARNING: source write-protected, mounted read-only. \[root@master \~\]# dnf install nginx -y Updating Subscription Management repositories. Unable to read consumer identity This system is not registered with an entitlement server. You can use "rhc" or "subscription-manager" to register. BaseOS 757 kB/s \| 2.7 kB 00:00 AppStream 1.3 MB/s \| 3.2 kB 00:00 baseos 2.7 MB/s \| 2.7 kB 00:00 appstream 3.1 MB/s \| 3.2 kB 00:00 Dependencies resolved. ================================================= Package Arch Version Repo Size ================================================= Installing: nginx x86_64 2:1.20.1-20.el9 AppStream 40 k Installing dependencies: nginx-core x86_64 2:1.20.1-20.el9 AppStream 574 k Transaction Summary ================================================= Install 2 Packages Total size: 614 k Installed size: 1.7 M Downloading Packages: Running transaction check Transaction check succeeded. Running transaction test Transaction test succeeded. Running transaction Preparing : 1/1 Installing : nginx-core-2:1.20.1-2 1/2 Installing : nginx-2:1.20.1-20.el9 2/2 Running scriptlet: nginx-2:1.20.1-20.el9 2/2 Verifying : nginx-2:1.20.1-20.el9 1/2 Verifying : nginx-core-2:1.20.1-2 2/2 Installed products updated. Installed: nginx-2:1.20.1-20.el9.x86_64 nginx-core-2:1.20.1-20.el9.x86_64 Complete! #backup \[root@backup \~\]# mount /dev/sr0 /mnt mount: /mnt: WARNING: source write-protected, mounted read-only. \[root@backup \~\]# dnf install nginx -y Updating Subscription Management repositories. Unable to read consumer identity This system is not registered with an entitlement server. You can use "rhc" or "subscription-manager" to register. BaseOS 1.4 MB/s \| 2.7 kB 00:00 AppStream 1.4 MB/s \| 3.2 kB 00:00 baseos 2.7 MB/s \| 2.7 kB 00:00 appstream 3.1 MB/s \| 3.2 kB 00:00 Dependencies resolved. ============================================= Package Arch Version Repo Size ============================================= Installing: nginx x86_64 2:1.20.1-20.el9 AppStream 40 k Installing dependencies: nginx-core x86_64 2:1.20.1-20.el9 AppStream 574 k Transaction Summary ============================================= Install 2 Packages Total size: 614 k Installed size: 1.7 M Downloading Packages: Running transaction check Transaction check succeeded. Running transaction test Transaction test succeeded. Running transaction Preparing : 1/1 Installing : nginx-core-2:1.20 1/2 Installing : nginx-2:1.20.1-20 2/2 Running scriptlet: nginx-2:1.20.1-20 2/2 Verifying : nginx-2:1.20.1-20 1/2 Verifying : nginx-core-2:1.20 2/2 Installed products updated. Installed: nginx-2:1.20.1-20.el9.x86_64 nginx-core-2:1.20.1-20.el9.x86_64 Complete! #区分页面 \[root@master \~\]# echo "hello master" \> /usr/share/nginx/html/index.html \[root@backup \~\]# echo "hello backup" \> /usr/share/nginx/html/index.html #启动服务 \[root@master \~\]# systemctl start nginx \[root@backup \~\]# systemctl start nginx #测试 \[root@master \~\]# curl 192.168.33.30 hello master \[root@backup \~\]# curl 192.168.33.32 hello backup

2keepalived配置

2.1下载keepalived

#master

root@master \~\]# dnf install keepalived -y Updating Subscription Management repositories. Unable to read consumer identity This system is not registered with an entitlement server. You can use "rhc" or "subscription-manager" to register. Last metadata expiration check: 0:08:59 ago on Tue 18 Mar 2025 07:25:43 PM CST. Dependencies resolved. ================================================= Package Arch Version Repo Size ================================================= Installing: keepalived x86_64 2.2.8-3.el9 AppStream 564 k Transaction Summary ================================================= Install 1 Package Total size: 564 k Installed size: 1.6 M Downloading Packages: Running transaction check Transaction check succeeded. Running transaction test Transaction test succeeded. Running transaction Preparing : 1/1 Installing : keepalived-2.2.8-3.el 1/1 Running scriptlet: keepalived-2.2.8-3.el 1/1 Verifying : keepalived-2.2.8-3.el 1/1 Installed products updated. Installed: keepalived-2.2.8-3.el9.x86_64 Complete! #backup \[root@backup \~\]# dnf install keepalived -y Updating Subscription Management repositories. Unable to read consumer identity This system is not registered with an entitlement server. You can use "rhc" or "subscription-manager" to register. Last metadata expiration check: 0:08:59 ago on Tue 18 Mar 2025 07:25:43 PM CST. Dependencies resolved. ============================================= Package Arch Version Repo Size ============================================= Installing: keepalived x86_64 2.2.8-3.el9 AppStream 564 k Transaction Summary ============================================= Install 1 Package Total size: 564 k Installed size: 1.6 M Downloading Packages: Running transaction check Transaction check succeeded. Running transaction test Transaction test succeeded. Running transaction Preparing : 1/1 Installing : keepalived-2.2.8- 1/1 Running scriptlet: keepalived-2.2.8- 1/1 Verifying : keepalived-2.2.8- 1/1 Installed products updated. Installed: keepalived-2.2.8-3.el9.x86_64 Complete!

2.2配置keepalived

#备份配置文件

root@master \~\]# rpm -qc keepalived /etc/keepalived/keepalived.conf /etc/sysconfig/keepalived \[root@master \~\]# cp /etc/keepalived//keepalived.conf{,.bak} \[root@backup \~\]# rpm -qc keepalived /etc/keepalived/keepalived.conf /etc/sysconfig/keepalived \[root@backup \~\]# cp /etc/keepalived//keepalived.conf{,.bak} #master \[root@master \~\]# cat /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { router_id master } vrrp_instance VI_1 { state MASTER interface ens160 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.33.100 } } #backup \[root@backup \~\]# vim /etc/keepalived/keepalived.conf \[root@backup \~\]# cat /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { router_id master } vrrp_instance VI_1 { state MASTER interface ens160 virtual_router_id 51 priority 90 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.33.100 } } #启动keepalived服务 \[root@master \~\]# systemctl start keepalived \[root@backup \~\]# systemctl start keepalived #IP查看 \[root@master \~\]# ip add 1: lo: \ mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens160: \ mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 00:0c:29:7b:ad:14 brd ff:ff:ff:ff:ff:ff altname enp3s0 inet 192.168.33.30/24 brd 192.168.33.255 scope global noprefixroute ens160 valid_lft forever preferred_lft forever inet 192.168.33.100/32 scope global ens160 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fe7b:ad14/64 scope link noprefixroute valid_lft forever preferred_lft forever \[root@backup \~\]# ip add 1: lo: \ mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens160: \ mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 00:0c:29:0f:fe:20 brd ff:ff:ff:ff:ff:ff altname enp3s0 inet 192.168.33.32/24 brd 192.168.33.255 scope global noprefixroute ens160 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fe0f:fe20/64 scope link noprefixroute valid_lft forever preferred_lft forever # #暂停服务,虚拟ip消失 \[root@master \~\]# systemctl stop keepalived.service \[root@master \~\]# ip add 1: lo: \ mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens160: \ mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 00:0c:29:7b:ad:14 brd ff:ff:ff:ff:ff:ff altname enp3s0 inet 192.168.33.30/24 brd 192.168.33.255 scope global noprefixroute ens160 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fe7b:ad14/64 scope link noprefixroute valid_lft forever preferred_lft forever \[root@backup \~\]# ip add 1: lo: \ mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens160: \ mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 00:0c:29:0f:fe:20 brd ff:ff:ff:ff:ff:ff altname enp3s0 inet 192.168.33.32/24 brd 192.168.33.255 scope global noprefixroute ens160 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fe0f:fe20/64 scope link noprefixroute valid_lft forever preferred_lft forever

实验完成!!!

相关推荐
猫咪-95277 分钟前
Mysql数据类型
数据库·mysql
月熊10 分钟前
MySQL单表查询
数据库·mysql
Starshime10 分钟前
【MySQL】MySQL登录,访问,退出操作
数据库·mysql·adb
不会搬砖的淡水鱼14 分钟前
Redis GeoHash 详解
数据库·redis·bootstrap
kunkun10119 分钟前
关于redis中的分布式锁
数据库·redis·分布式
Zayn~19 分钟前
Redis原理--持久化
数据库·redis·缓存
deadknight925 分钟前
Oracle 19C分区表索引小结
数据库·oracle
StevenLdh27 分钟前
SQL Server数据库慢SQL调优
数据库·sql
一只蒟蒻ovo35 分钟前
计算机网络 第一章:计算机网络和因特网(1)
服务器·网络·计算机网络
开开心心就好39 分钟前
实现鼠标键盘动作录制与重复播放的工具
java·服务器·python·pdf·计算机外设·电脑·powerpoint