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
相关推荐
遇到困难睡大觉哈哈21 分钟前
hexo+GitHub Pages搭建个人博客完整教程
github
陈阳羽33 分钟前
云服务器Ubuntu安装宝塔面板MongoDB修改配置文件本地连接
服务器·mongodb·ubuntu
uhakadotcom1 小时前
快速构建交互式数据应用:Streamlit入门指南
后端·面试·github
想躺在地上晒成地瓜干1 小时前
树莓派超全系列文档--(14)无需交互使用raspi-config工具其一
linux·树莓派·raspberrypi·树莓派教程
Shier833_Ww1 小时前
目标识别与双目测距(1)环境搭建:Ubuntu+yolov5+pcl库
linux·yolo·ubuntu
无名之逆1 小时前
hyperlane:Rust HTTP 服务器开发的不二之选
服务器·开发语言·前端·后端·安全·http·rust
Kendra9191 小时前
Keepalive+LVS+Nginx+NFS高可用架构
nginx·架构·lvs
苏十八1 小时前
计算机网络相关知识小结
服务器·网络·计算机网络
laugh123211 小时前
GitLab 服务器宕机时的项目代码恢复方法
服务器·git·gitlab·数据恢复
唐青枫2 小时前
Linux 历史命令操作教程
linux