您的位置:首页 > 娱乐 > 明星 > 网上购物最实惠的网站_齐鲁人才网泰安最新招聘网_事件营销的经典案例_视频优化软件

网上购物最实惠的网站_齐鲁人才网泰安最新招聘网_事件营销的经典案例_视频优化软件

2025/7/2 22:36:51 来源:https://blog.csdn.net/ashina_01/article/details/145920074  浏览:    关键词:网上购物最实惠的网站_齐鲁人才网泰安最新招聘网_事件营销的经典案例_视频优化软件
网上购物最实惠的网站_齐鲁人才网泰安最新招聘网_事件营销的经典案例_视频优化软件

高可用集群( High Availability Cluster, HA 集群),其中高可用的含义是最大限度地可以使用。从集群 的名字上可以看出,此类集群实现的功能是保障用户的应用程序持久、不间断地提供服务。 当应用程序出现故障或者系统硬件、网络出现故障时,应用可以自动、快速从一个节点切换到另一个节 点,从而保证应用持续、不间断地对外提供服务,这就是高可用集群实现的功能

我们常说的双机热备、双机互备、多机互备等都属于高可用集群的范畴,这类集群一般都由两个或两个 以上节点组成。典型的双机热备结构如下图所示 :

本次实验通过配置keepalived的心跳检测和健康检查达到LVS集群高可用的目的

 本次实战用到的环境:

系统Linux Rocky8.10×4台,VIP:192.168.118.110,Master:192.168.118.128,Backup:192.168.118.130,web服务:192.168.118.131/129(nginx)

1.另外额外添加一块网卡用于主备之间的的心跳检测,模拟用网线直连的效果。

2.本实验会试着用到两种不同的心跳检测方式和健康检测方式

环境搭建

主备服务器上

本实验前端会用到keepalived和ipvsadm软件:

#查看本地相关包的信息
[root@localhost ~]# yum list keepalived
Available Packages
keepalived.x86_64                      2.1.5-10.el8_10                       appstream
[root@localhost ~]# yum list ipvsadm
Available Packages
ipvsadm.x86_64                          1.31-1.el8                          @appstream#安装
yum install keepalived ipvsadm -y

由于前端的两台主备服务器需要多用到一块网卡用于心跳检测:

 新增的网卡不能也是NAT模式的,主备上新增的网卡建议是仅主机模式

然后进入终端中,添加该网卡和设置IP地址

#输入ifconfig命令发现新增加了一块网卡
[root@localhost ~]# ifconfig
...
ens224: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.40.128  netmask 255.255.255.0  broadcast 192.168.40.255
        inet6 fe80::41fd:2148:d284:d782  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:d9:b7:55  txqueuelen 1000  (Ethernet)
        RX packets 2  bytes 128 (128.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 21  bytes 1346 (1.3 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
...

 注意:配置主备上用于心跳检测的IP应该属于同一网段,且必须要要指明其网段为24网段(要不然不能互通)

#Master server
nmcli dev con ens224
nmcli con mod ens224 ipv4.method manual ipv4.ipaddresses 192.168.40.128/24
nmcli con up ens224
#backup server
nmcli dev con ens224
nmcli con mod ens224 ipv4.method manual ipv4.ipaddresses 192.168.40.130/24
nmcli con up ens224

 测试能否ping通

[root@localhost ~]# ping 192.168.40.130
PING 192.168.40.130 (192.168.40.130) 56(84) bytes of data.
64 bytes from 192.168.40.130: icmp_seq=1 ttl=64 time=1.12 ms
64 bytes from 192.168.40.130: icmp_seq=2 ttl=64 time=1.04 ms
^C
--- 192.168.40.130 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 1.041/1.081/1.121/0.040 ms

 配置了两块网卡,我们就还需要开启路由转发功能

#永久配置
vim /etc/sysctl.conf
net.ipv4.ip_forward=1sysctl -p
#零时配置
sysctl net.ipv4.ip_forward=1
sysctl -p

 web端配置

测试页面:

yum install nginx -ysystemctl stop firewalld 
echo "This is a test page which from IP:$(hostname -I)" > /usr/share/nginx/html/index.html
systemctl restart nginx

 LVS后端是需要关闭arp功能的,因为在DR模式下客户端给的请求会通过DS通过负载均衡算法之后给到RS服务器,此时数据包中的源IP不动,修改目标IP为RIP。RS服务收到处理完数据之后返直接返回给客户端,将之前收到的数据包源IP改为目标IP,将VIP设置为现在的源IP。所以RS是能给客户端通信的,为了避免客户端对VIP的arp响应,需要关闭对VIP的arp功能

建议使用脚本的形式,便于控制:下面的逻辑就是通过创建一个锁来判断是否关闭的arp功能,关闭则为启用了LVSRS功能。读者只需要修改VIP地址和DevName即可

#!/bin/sh
#chkconfig: - 28 72
#description: Initialise the Linux Virtual Server for DR
#Provides: ipvsadm
#Required-Start: $local_fs $network $named
#Required-Stop: $local_fs $network $remote_fs
LOCK=/var/local/ipvsadm.lock
VIP=192.168.118.110
DevName=ens160
. /etc/rc.d/init.d/functions
start(){PID=$(ifconfig | grep lo:10 | wc -l)if [ $PID -ne 0 ]thenecho "The LVS_DR_RIP Server is already running!"else/sbin/ifconfig lo:10 $VIP broadcast $VIP netmask 255.255.255.255 up/sbin/route add -host $VIP dev lo:10echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignoreecho "2" >/proc/sys/net/ipv4/conf/lo/arp_announceecho "1" >/proc/sys/net/ipv4/conf/${DevName}/arp_ignoreecho "2" >/proc/sys/net/ipv4/conf/${DevName}/arp_announce/bin/touch $LOCKecho "Starting LVS-DR-RIP Server is ok!"fi
}stop(){sbin/route del -host $VIP dev lo:10/sbin/ifconfig lo:10 down  >/dev/nullecho "0" >/proc/sys/net/ipv4/conf/lo/arp_ignoreecho "0" >/proc/sys/net/ipv4/conf/lo/arp_announceecho "0" >/proc/sys/net/ipv4/conf/${DevName}/arp_ignoreecho "0" >/proc/sys/net/ipv4/conf/${DevName}/arp_announcerm -rf $LOCKecho "stopping LVS-DR-RIP server is ok !"
}status() {if [ -e $LOCK ];thenecho "The LVS-DR-RIP Server is already running !"elseecho "The LVS-DR-RIP Server is not running !"fi}
case "$1" instart)start;;stop)stop;;restart)stopstart;;status)status;;*)echo "Usage: $1 {start|stop|restart|status}"exit 1esacexit 0

 以上基本的前后端就配置完成,接下来,配置keepalived

keepalived配置

注意关闭防火墙:systemctl stop firewalld或者添加放行网卡到trusted区域,否则会出现脑裂现象

firewall-cmd --permanent --add-interface=ens224 --zone=trusted
firewall-cmd --reload

默认配置文件地址:/etc/keepalived/keepalived.conf

! Configuration File for keepalived
global_defs {router_id LVS_1
}vrrp_instance VI_1 {#VIP实例state MASTER#状态为masterinterface ens160#DIP的网卡lvs_sync_daemon_interface ens224#以守护进程进行的心跳检测的网卡virtual_router_id 51#同一个主备的IP需要相同priority 100#优先级advert_int 1#健康检擦间隔时间1sauthentication {#认证信息auth_type PASSauth_pass 1111}virtual_ipaddress {#VIP地址,会绑定到上面的interface参数的网卡上192.168.118.110}
}
virtual_server 192.168.118.110 80 {#虚拟IP绑定后端信息及本身的设置delay_loop 6#延迟6slb_algo rr#负载均衡算法lb_kind DR#模式为LVS_DR#persistence_timeout 50protocol TCP#协议为TCP检测real_server 192.168.118.131 80 {#VIP的参数weight 1#权重为1TCP_CHECK {#健康检测的配置信息connect_timeout 3#超时时间retry 3#错误次数为3则去掉该后端IPdelay_before_retry 3#延时时间3sconnect_port 80#端口为80}}real_server 192.168.118.129 80 {weight 1TCP_CHECK {connect_timeout 3retry 3delay_before_retry 3connect_port 80}}
}

这里配置的是基于抢占的基于TCP的健康检测,如果想要配置非抢占的只需要将主从都修改state BACKUP,额外再添加上nopreempt这一行内容即可

backup只需修改state和router_id标识以及优先级(小于master)

这里的心跳检测还有一种方法,可以不用新增一块网卡:

mcast_src_ip DIP

将原来的lvs_sync_daemon_interface ens224注释掉,改为上面内容,会基于本身的DIP地址进行心跳检测

效果检测

#master server
[root@localhost ~]# [root@localhost ~]# ip a | grep 110inet 192.168.118.110/32 scope global ens160[root@localhost ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.118.110:80 rr-> 192.168.118.129:80           Route   1      0          0-> 192.168.118.131:80           Route   1      0          0

同时监控ipvsadm和日志信息,试着断开后端其中一个web服务

#master server新开两个终端
watch ipvsadm -Ln
tail -f /var/log/messages

 大约9s之后就会从ipvsadm中去掉这条路由,启用的话大约会3s左右(时间与我们配置的重复次数和delay时间有关)

 新开一个终端

for ((i=1;1<=6;i++)); do curl 192.168.118.110; done

 

改进

以上配置确实可以通过健康检擦来判断后端web服务是否tcp/80开放,但是当nginx服务本身出问题的时候,就没法及时的处理了,比如404。所以我们需要将tcp健康检擦改为HTTP检擦,而且不应该简单的通过状态码来判断(比如300是重定向)。这里还介绍几种健康检擦方式:HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHECK 几种健康检测方式

TCP_CHECK:工作在第4层,keepalived向后端服务器发起一个tcp连接请求,如果后端服务器没有响应或 超时,那么这个后端将从服务器池中移除。

HTTP_GET:工作在第5层,向指定的URL执行http请求,将得到的结果用md5加密并与指定的md5值比较看是 否匹配,不匹配则从服务器池中移除;此外还可以指定http返回码来判断检测是否成功。

HTTP_GET可以指定 多个URL用于检测,这个一台服务器有多个虚拟主机的情况下比较好用。 SSL_GET:跟上面的HTTP_GET相似,不同的只是用SSL连接 MISC_CHECK:用脚本来检测,脚本如果带有参数,需将脚本和参数放入双引号内。脚本的返回值需为: 0) 检测成功 1) 检测失败,将从服务器池中移除 2-255)检测成功;如果有设置misc_dynamic,权重自动调整为 退出码-2,如退出码为200, 权重自动调整为198=200-2。

SMTP_CHECK:用来检测邮件服务的smtp的

这里使用脚本检测的方式:

使用到工具nmap扫描:yum install nmap -y

在/etc/keepalived目录下创建这个脚本

脚本内容:

#!/bin/bash# Check for correct number of parameters (host and port)
if [ $# -ne 2 ]; thenecho "Error: Usage: $0 <host> <port>"exit 1
fi
host="$1"
port="$2"
# Perform the nmap scan and parse the result
nmap_result=$(nmap -p "$port" "$host" | grep "$2\/tcp" | awk '{print $2}'# Check the result
if [[ "$nmap_result" == "open" ]]; thenexit 0
elseexit 1
fi

增加执行权限:chmod +x /etc/keepalived/test.sh

修改keepalived.conf配置

    real_server 192.168.118.131 80 {weight 1MISC_CHECK {misc_path "/etc/keepalived/test.sh 192.168.118.131 80"misc_timeout 3}}real_server 192.168.118.129 80 {weight 1MISC_CHECK {misc_path "/etc/keepalived/test.sh 192.168.118.129 80"misc_timeout 3}}

 重启:systemctl restart keepalived.service  注意关闭selinux:setenforce 0

[root@localhost keepalived]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.118.110:80 rr-> 192.168.118.129:80           Route   1      0          0-> 192.168.118.131:80           Route   1      0          0

 当一台web服务器开启防火墙时:(129服务器),直接访问可能是404(没有放行情况下)

 效果达成!

这里还介绍一种健康检测方式:HTTP_GET,会使用到genhash,keepalived自带的

[root@localhost keepalived]# yum whatprivodes */genhash
No such command: whatprivodes. Please use /usr/bin/yum --help
It could be a YUM plugin command, try: "yum install 'dnf-command(whatprivodes)'"
[root@localhost keepalived]# yum whatprovides */genhash
Repository 'baseos' is missing name in configuration, using id.
Repository baseos is listed more than once in the configuration
Last metadata expiration check: 2:32:06 ago on Sat 01 Mar 2025 09:28:03 AM CST.
keepalived-2.1.5-9.el8.x86_64 : High Availability monitor built upon LVS, VRRP and
                              : service pollers
Repo        : appstream
Matched from:
Filename    : /usr/bin/genhash

keepalived-2.1.5-10.el8_10.x86_64 : High Availability monitor built upon LVS, VRRP and
                                  : service pollers
Repo        : @System
Matched from:
Filename    : /usr/bin/genhash

keepalived-2.1.5-10.el8_10.x86_64 : High Availability monitor built upon LVS, VRRP and
                                  : service pollers
Repo        : appstream
Matched from:
Filename    : /usr/bin/genhash

 对应的RS进行修改即可

[root@localhost keepalived]# genhash -s192.168.118.129 -p 80 -u /
MD5SUM = 3740e2380a02b0ee94b02ba7016606e6HTTP_GET {url {path /digest 3740e2380a02b0ee94b02ba7016606e6status_code 200}

 以上就是通过LVS(DR模式)+Keepalived心跳检查和健康检查达到高可用高性能负载实战的配置流程及内容

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com