当前位置: 首页 > article >正文

LVS-DR模式配置脚本

LVS-DR模式配置脚本

  • 实验环境,需要4台虚拟机

    IP说明
    172.25.254.101客户端
    172.25.254.102负载均衡器DS
    172.25.254.103真实服务器RS
    172.25.254.104真实服务器RS

    VIP:172.25.254.255/32

  • 系统必须有ipvsadm和ifconfig命令

    dnf install ipvsadm
    dnf install net-tools
    
  • ipvsadm命令

    • -A 添加虚拟服务器
    • -t 设置群集地址(VIP,Virtual IP)
    • -s 指定负载调度算法
    • -a 添加真实服务器
    • -d 删除真实服务器
    • -r 指定真实服务器(Real Server)的地址
    • -m 使用NAT模式;-g、-i分别对应DR、TUN模式
    • -w 为节点服务器设置权重,默认为1
    • -L 列出当前 IPVS 规则的详细信息,包括虚拟服务和真实服务器的配置。
    • -n 和其他子命令搭配使用,主要功能是让输出结果以数字形式呈现 IP 地址和端口号,而非解析成域名和服务名
  • 在DS上编写LVS-DR服务脚本

# /etc/init.d 目录是存放系统初始化脚本的常用位置,这些脚本用于在系统启动、停止或运行过程中管理服务
[root@Rocky ~]# vim /etc/init.d/lvs_dr

#!/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		#定义锁文件的路径,用于标记 LVS 是否正在运行。
VIP=172.25.254.225		#制定和虚拟IP地址
RIP1=172.25.254.103		#定义真实服务器的IP地址
RIP2=192.168.95.104		
DipName=ens160		#指定网络设备名
. /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
# 给服务脚本可执行权限
[root@Rocky ~]# chmod +x /etc/init.d/lvs_dr
# 将指定的服务脚本(lvs_dr)添加到 chkconfig 的管理列表中
[root@Rocky ~]# chkconfig --add lvs_dr
# 设置服务在所有运行级别自动启动
[root@Rocky ~]# chkconfig  lvs_dr on
  • 测试服务脚本lvs_dr

[root@Rocky ~]# systemctl start lvs_dr
[root@Rocky ~]# systemctl status lvs_dr
● lvs_dr.service - LSB: Initialise the Linux Virtual Server
   Loaded: loaded (/etc/rc.d/init.d/lvs_dr; generated)
   Active: active (exited) since Sat 2025-03-22 16:13:25 CST; 5s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 13295 ExecStart=/etc/rc.d/init.d/lvs_dr start (code=exited, status=0/SUCCESS)

Mar 22 16:13:25 Rocky lvs_dr[13304]:     eui64 (Generic EUI-64)
Mar 22 16:13:25 Rocky lvs_dr[13304]:   <AF>=Address family. Default: inet
Mar 22 16:13:25 Rocky lvs_dr[13304]:   List of possible address families:
Mar 22 16:13:25 Rocky lvs_dr[13304]:     unix (UNIX Domain) inet (DARPA Internet) inet6 (IPv6)
Mar 22 16:13:25 Rocky lvs_dr[13304]:     ax25 (AMPR AX.25) netrom (AMPR NET/ROM) rose (AMPR ROSE)
Mar 22 16:13:25 Rocky lvs_dr[13304]:     ipx (Novell IPX) ddp (Appletalk DDP) ash (Ash)
Mar 22 16:13:25 Rocky lvs_dr[13304]:     x25 (CCITT X.25)
Mar 22 16:13:25 Rocky lvs_dr[13305]: /etc/rc.d/init.d/lvs_dr: line 30: 255.255.255.255: command not found
Mar 22 16:13:25 Rocky lvs_dr[13295]: starting LVS-DR Server is ok !
Mar 22 16:13:25 Rocky systemd[1]: Started LSB: Initialise the Linux Virtual Server.
[root@Rocky ~]# systemctl stop lvs_dr
[root@Rocky ~]# systemctl status lvs_dr
● lvs_dr.service - LSB: Initialise the Linux Virtual Server
   Loaded: loaded (/etc/rc.d/init.d/lvs_dr; generated)
   Active: inactive (dead) since Sat 2025-03-22 16:13:42 CST; 2s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 13317 ExecStop=/etc/rc.d/init.d/lvs_dr stop (code=exited, status=0/SUCCESS)
  Process: 13295 ExecStart=/etc/rc.d/init.d/lvs_dr start (code=exited, status=0/SUCCESS)

Mar 22 16:13:25 Rocky lvs_dr[13304]:     ax25 (AMPR AX.25) netrom (AMPR NET/ROM) rose (AMPR ROSE)
Mar 22 16:13:25 Rocky lvs_dr[13304]:     ipx (Novell IPX) ddp (Appletalk DDP) ash (Ash)
Mar 22 16:13:25 Rocky lvs_dr[13304]:     x25 (CCITT X.25)
Mar 22 16:13:25 Rocky lvs_dr[13305]: /etc/rc.d/init.d/lvs_dr: line 30: 255.255.255.255: command not found
Mar 22 16:13:25 Rocky lvs_dr[13295]: starting LVS-DR Server is ok !
Mar 22 16:13:25 Rocky systemd[1]: Started LSB: Initialise the Linux Virtual Server.
Mar 22 16:13:42 Rocky systemd[1]: Stopping LSB: Initialise the Linux Virtual Server...
Mar 22 16:13:42 Rocky lvs_dr[13317]: stopping LVS-DR server is ok !
Mar 22 16:13:42 Rocky systemd[1]: lvs_dr.service: Succeeded.
Mar 22 16:13:42 Rocky systemd[1]: Stopped LSB: Initialise the Linux Virtual Server.
[root@Rocky ~]# systemctl restart lvs_dr
[root@Rocky ~]# systemctl status lvs_dr
● lvs_dr.service - LSB: Initialise the Linux Virtual Server
   Loaded: loaded (/etc/rc.d/init.d/lvs_dr; generated)
   Active: active (exited) since Sat 2025-03-22 16:13:59 CST; 1s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 13317 ExecStop=/etc/rc.d/init.d/lvs_dr stop (code=exited, status=0/SUCCESS)
  Process: 13332 ExecStart=/etc/rc.d/init.d/lvs_dr start (code=exited, status=0/SUCCESS)

Mar 22 16:13:59 Rocky lvs_dr[13341]:     eui64 (Generic EUI-64)
Mar 22 16:13:59 Rocky lvs_dr[13341]:   <AF>=Address family. Default: inet
Mar 22 16:13:59 Rocky lvs_dr[13341]:   List of possible address families:
Mar 22 16:13:59 Rocky lvs_dr[13341]:     unix (UNIX Domain) inet (DARPA Internet) inet6 (IPv6)
Mar 22 16:13:59 Rocky lvs_dr[13341]:     ax25 (AMPR AX.25) netrom (AMPR NET/ROM) rose (AMPR ROSE)
Mar 22 16:13:59 Rocky lvs_dr[13341]:     ipx (Novell IPX) ddp (Appletalk DDP) ash (Ash)
Mar 22 16:13:59 Rocky lvs_dr[13341]:     x25 (CCITT X.25)
Mar 22 16:13:59 Rocky lvs_dr[13342]: /etc/rc.d/init.d/lvs_dr: line 30: 255.255.255.255: command not found
Mar 22 16:13:59 Rocky lvs_dr[13332]: starting LVS-DR Server is ok !
Mar 22 16:13:59 Rocky systemd[1]: Started LSB: Initialise the Linux Virtual Server.

  • 在RS上编写脚本

    [root@Rocky ~]# vim /etc/init.d/lvs_rs
    #!/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=172.25.254.225
    . /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/ens160/arp_ignore
    		echo "2" >/proc/sys/net/ipv4/conf/ens160/arp_announce
    		echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
    		echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
    		/bin/touch $LOCK
    		echo "starting LVS-DR-RIP server is ok !"
    	fi
    }
    stop() {
    	/sbin/route del -host $VIP dev lo:10
    	/sbin/ifconfig lo:10 down >/dev/null
    	echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
    	echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
    	echo "0" >/proc/sys/net/ipv4/conf/ens160/arp_ignore
    	echo "0" >/proc/sys/net/ipv4/conf/ens160/arp_announce
    	echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
    	echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
    	rm -rf $LOCK
    	echo "stopping LVS-DR-RIP server is ok !"
    }
    status() {
    	if [ -e $LOCK ];then
    		echo "The LVS-DR-RIP Server is already running !"
    	else
    		echo "The LVS-DR-RIP 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
    
    [root@Rocky ~]# chmod +x /etc/init.d/lvs_rs
    [root@Rocky ~]# chkconfig --add lvs_rs
    [root@Rocky ~]# chkconfig  lvs_rs on
    
  • 检验是否配置成功

    [root@Rocky ~]# ip a
    1: lo: <LOOPBACK,UP,LOWER_UP> 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
        inet 172.25.254.225/32 brd 172.25.254.225 scope global lo:10
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host
           valid_lft forever preferred_lft forever
    2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
        link/ether 00:0c:29:d5:05:95 brd ff:ff:ff:ff:ff:ff
        altname enp3s0
        inet 172.25.254.103/24 brd 172.25.254.255 scope global noprefixroute ens160
           valid_lft forever preferred_lft forever
        inet6 fe80::20c:29ff:fed5:595/64 scope link noprefixroute
           valid_lft forever preferred_lft forever
    [root@Rocky ~]# route -n
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    0.0.0.0         172.25.254.2    0.0.0.0         UG    100    0        0 ens160
    172.25.254.0    0.0.0.0         255.255.255.0   U     100    0        0 ens160
    172.25.254.225  0.0.0.0         255.255.255.255 UH    0      0        0 lo
    [root@Rocky ~]# cat /proc/sys/net/ipv4/conf/lo/arp_ignore
    1
    [root@Rocky ~]# cat /proc/sys/net/ipv4/conf/ens160/arp_ignore
    1
    
    

http://www.kler.cn/a/599271.html

相关文章:

  • 5.4 位运算专题:LeetCode 137. 只出现一次的数字 II
  • 模糊推理规则生成方法详解
  • CentOS8 安装 Docker-CE
  • FPGA中串行执行方式之流水线(Pipeline)
  • Spring MVC配置详解:从历史到实战
  • Node.js系列(6)--安全实践指南
  • 基于PySide6与pycatia的CATIA绘图文本批量处理工具开发实践
  • 永久禁用 firewalld: systemctl disable firewalld
  • C++类与对象的第二个简单的实战练习-3.24笔记
  • MobaXterm配置ssh端口转发autodl服务器网页页面
  • UNIX网络编程笔记:TCP、UDP、SCTP编程的区别
  • 机器视觉工程师如何看机器视觉展会,有些机器视觉兄弟参加机器视觉展会,真的是参加了?重在参与?
  • 【机器学习/大模型/八股文 面经 (一)】
  • 如何扩展 Linux 中 ext4 文件系统的大小
  • 补Java基础之重生(13)类与对象(补充版)+面向对象综合案例
  • 智算中心系统化建设与运营框架
  • Netty源码—5.Pipeline和Handler一
  • 2000-2019年各省地方财政耕地占用税数据
  • Tailwind CSS 学习笔记(四)
  • 免费试用优化指南:提升转化率的关键策略