CentOS 7 构建 LVS-DR 群集

一、LVS-DR集群摘要

LVS(Linux Virtual Server)是一个用于构建可扩展和高可用性的负载均衡集群的软件。它基于Linux操作系统,并提供了一种将网络流量分发到多个后端服务器的机制。

二、基本工作原理

  1. 配置负载均衡器:在LVS集群中,首先需要配置一个或多个负载均衡器(Load Balancer)。负载均衡器是集群的前端,它接收来自客户端的请求,并将它们分发给后端服务器。
  2. 选择负载均衡调度算法:负载均衡器使用调度算法来决定将请求分发给哪个后端服务器。常见的调度算法包括轮询(Round Robin)、加权轮询(Weighted Round Robin)、最少连接(Least Connection)等。
  3. 监听网络流量:负载均衡器通过监听网络流量来接收客户端的请求。它可以使用虚拟IP地址(Virtual IP Address)来作为前端的入口,客户端将请求发送到这个虚拟IP地址上。
  4. 请求分发:当负载均衡器接收到客户端的请求后,它将使用调度算法选择一个后端服务器,并将请求转发给该服务器。
  5. 后端服务器处理请求:被选中的后端服务器接收到请求后,根据请求的内容进行相应的处理,并将处理结果返回给负载均衡器。
  6. 返回响应给客户端:负载均衡器接收到后端服务器返回的响应后,将它们发送给相应的客户端。
  7. 健康检查:LVS还提供了健康检查机制,用于监测后端服务器的可用性。通过定期发送检查请求,负载均衡器可以确定后端服务器的状态,并根据需要调整请求分发策略,以实现负载均衡和故障恢复。

总结:LVS通过将客户端请求分发到多个后端服务器,实现了负载均衡和高可用性。它能够提高系统的性能和可靠性,确保用户请求得到有效处理,并在后端服务器故障时自动切换到其他可用服务器。

三、LVS-DR模式集群构建

环境准备四台主机,一台负载均衡机lvs,两台web集群,一台server做测试

1.LVS端配置
1)安装ipvsadm
nginx 复制代码
[root@node1 ~]# yum install ipvsadm
2)配置LVS虚拟ip
nginx 复制代码
[root@node1 ~]# ifconfig ens33:100 192.168.136.100/24
3)手工执行配置添加LVS服务并增加两台RS
nginx 复制代码
[root@node1 ~]# ipvsadm -A -t 192.168.136.100:80 -s rr
[root@node1 ~]# ipvsadm -a -t 192.168.136.100:80 -r 192.168.136.162:80 -g
[root@node1 ~]# ipvsadm -a -t 192.168.136.100:80 -r 192.168.136.163:80 -g
# -A:表示添加一个新的虚拟服务器。
# -t 192.168.136.100:80:指定虚拟服务器的监听地址和端
# rr --调度算法即使用轮询(Round Robin)算法
# -g:表示使用直接路由模式(gatewaying mode)
4)查看配置
nginx 复制代码
[root@node1 ~]# 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.136.100:80 rr
  -> 192.168.136.162:80           Route   1      0          0         
  -> 192.168.136.163:80           Route   1      0          0   
2.配置RS
1)安装http服务
nginx 复制代码
[root@node2 ~]# yum install httpd
[root@node2 ~]# systemctl start httpd  启动http服务
2)输入一段文本到index主页中
nginx 复制代码
[root@node2 ~]# echo "web test page ,ip is `hostname -I`" >/var/www/html/index.html
3)手工在RS端绑定VIP
nginx 复制代码
[root@node2 ~]# ifconfig lo:100 192.168.136.100 netmask 255.255.255.255
4)添加本地访问vip路由
nginx 复制代码
[root@node2 ~]# route add -host 192.168.136.100 dev lo
5)手工在RS端抑制ARP响应
nginx 复制代码
[root@node2 ~]# echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@node2 ~]# echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@node2 ~]# echo "1" > /proc/sys/net/ipv4/conf/ens33/arp_ignore
[root@node2 ~]# echo "2" > /proc/sys/net/ipv4/conf/ens33/arp_announce

四、使用客户端测试

nginx 复制代码
[root@server ~]# for ((i=1;i<=6;i++)); do curl 192.168.136.100; done
web test page ,ip is 192.168.136.163 
web test page ,ip is 192.168.136.162 
web test page ,ip is 192.168.136.163 
web test page ,ip is 192.168.136.162 
web test page ,ip is 192.168.136.163 
web test page ,ip is 192.168.136.162 
五、有兴趣可以使用shell脚本

lvs director 上的脚本

nginx 复制代码
#!/bin/sh
#
# Startup script handle the initialisation of LVS
# chkconfig: - 28 72
# description: Initialise the Linux Virtual Server for DR
#
### BEGIN INIT INFO
# Provides: ipvsadm
# Required-Start: $local_fs $network $named
# Required-Stop: $local_fs $remote_fs $network
# Short-Description: Initialise the Linux Virtual Server
# Description: The Linux Virtual Server is a highly scalable and highly
#  available server built on a cluster of real servers, with the load
#  balancer running on Linux.
# description: start LVS of DR
LOCK=/var/lock/ipvsadm.lock
VIP=192.168.95.10
RIP1=192.168.95.11
RIP2=192.168.95.12
DipName=ens33
. /etc/rc.d/init.d/functions
start() {
  PID=`ipvsadm -Ln | grep ${VIP} | wc -l`
  if  [ $PID -gt 0 ];
  then
     echo "The LVS-DR Server is already running !"
  else
     #Set the Virtual IP Address
     /sbin/ifconfig ${DipName}:10 $VIP broadcast $VIP netmask
255.255.255.255 up
     /sbin/route add -host $VIP dev ${DipName}:10
     #Clear IPVS Table
     /sbin/ipvsadm -C
     #Set Lvs
     /sbin/ipvsadm -At $VIP:80 -s rr
     /sbin/ipvsadm -at $VIP:80 -r $RIP1:80 -g
     /sbin/ipvsadm -at $VIP:80 -r $RIP2:80 -g
     /bin/touch $LOCK
     #Run Lvs
     echo "starting LVS-DR Server is ok !"   
  fi
}
stop()  {
     #clear Lvs and vip
     /sbin/ipvsadm -C
     /sbin/route del -host $VIP dev ${DipName}:10
     /sbin/ifconfig ${DipName}:10 down >/dev/null
     rm -rf $LOCK
     echo "stopping LVS-DR server is ok !"
}
status() {
  if [ -e $LOCK ];
  then
    echo "The LVS-DR Server is already running !"
  else
    echo "The LVS-DR Server is not running !"
  fi
}
case "$1" in
  start)
    start
   ;;
 stop)
    stop
   ;;
 restart)
    stop
    start
   ;;
status)
   status
   ;;
*)
    echo "Usage: $1 {start|stop|restart|status}"
    exit 1
esac
exit 0

RS上的脚本

nginx 复制代码
#!/bin/sh
#
# Startup script handle the initialisation of LVS
# chkconfig: - 28 72
# description: Initialise the Linux Virtual Server for DR
#
### BEGIN INIT INFO
# Provides: ipvsadm
# Required-Start: $local_fs $network $named
# Required-Stop: $local_fs $remote_fs $network
# Short-Description: Initialise the Linux Virtual Server
# Description: The Linux Virtual Server is a highly scalable and highly
#  available server built on a cluster of real servers, with the load
#  balancer running on Linux.
# description: start LVS of DR-RIP
LOCK=/var/lock/ipvsadm.lock
VIP=192.168.95.10
. /etc/rc.d/init.d/functions
start() {
  PID=`ifconfig | grep lo:10 | wc -l`
  if [ $PID -ne 0 ];
  then
    echo "The LVS-DR-RIP Server is already running !"
  else
    /sbin/ifconfig lo:10 $VIP netmask 255.255.255.255 broadcast $VIP up
    /sbin/route add -host $VIP dev lo:10
    echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
    echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
    echo "1" >/proc/sys/net/ipv4/conf/eth0/arp_ignore
    echo "2" >/proc/sys/net/ipv4/conf/eth0/arp_announce
    echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
相关推荐
l1x1n04 小时前
Vim 编辑器常用操作详解(新手快速上手指南)
linux·编辑器·vim
ajassi20006 小时前
开源 python 应用 开发(三)python语法介绍
linux·python·开源·自动化
o不ok!6 小时前
Linux面试问题-软件测试
linux·运维·服务器
DaxiaLeeSuper6 小时前
Prometheus+Grafana+node_exporter监控linux服务器资源的方案
linux·grafana·prometheus
尽兴-7 小时前
如何将多个.sql文件合并成一个:Windows和Linux/Mac详细指南
linux·数据库·windows·sql·macos
kfepiza7 小时前
Netplan 中 bridges、bonds、ethernets、vlans 之间的关系 笔记250711
linux·tcp/ip·shell
小小不董8 小时前
深入理解oracle ADG和RAC
linux·服务器·数据库·oracle·dba
GZ8manage8 小时前
高亚科技签约奕源金属,助力打造高效智能化采购管理体系
云计算
杰夫贾维斯9 小时前
CentOS Linux 8 的系统部署 Qwen2.5-7B -Instruct-AWQ
linux·运维·人工智能·机器学习·centos
宛西南浪漫戈命9 小时前
Centos 7下使用C++使用Rdkafka库实现生产者消费者
c++·centos·linq