zoukankan      html  css  js  c++  java
  • LINUX负载均衡LVS-DR搭建

    1.搭建前的规划工作

    这里从lvs官方网站找了一个nat模型的图,如下:

    我这里使用虚拟机模拟出了4台rhel6机器。一台服务器作为lvs调度器(和宿主机桥接),3台服务器作为具体的web服务器(使用桥接模式),我本是的宿主机就是作为web测试机器。

    具体配置如下

    机器名称 eth0 eth0:0 备注信息
    lvs调度器 192.168.168.200 192.168.168.20  
    RS1 192.168.168.201    
    RS2 192.168.168.202    
    RS3 192.168.168.203    
    宿主机  192.168.168.10(windows)    

    2.检查操作系统支持lvs情况

    [root@localhost ~]# grep -i 'vs' /boot/config-2.6.32-279.el6.i686      #有输出说明支持,我们使用的rhel6,默认的编译就有lvs模块。

    3.安装ipvsadm工具

    [root@localhost ~]# yum -y install ipvsadm

    4.ipvsadm工具的简单使用

    复制代码
    ipvsadm:
        管理集群服务
            添加:-A -t|u|f service-address [-s scheduler]
                -t: TCP协议的集群 
                -u: UDP协议的集群
                    service-address:     IP:PORT
                -f: FWM: 防火墙标记 
                    service-address: Mark Number
            修改:-E
            删除:-D -t|u|f service-address
    
            # ipvsadm -A -t 172.16.100.1:80 -s rr
    
        管理集群服务中的RS
            添加:-a -t|u|f service-address -r server-address [-g|i|m] [-w weight]
                -t|u|f service-address:事先定义好的某集群服务
                -r server-address: 某RS的地址,在NAT模型中,可使用IP:PORT实现端口映射;
                [-g|i|m]: LVS类型    
                    -g: DR模型
                    -i: TUN模型
                    -m: NAT模型
                [-w weight]: 定义服务器权重
            修改:-e
            删除:-d -t|u|f service-address -r server-address
    
            # ipvsadm -a -t 172.16.100.1:80 -r 192.168.10.8 -m 
            # ipvsadm -a -t 172.16.100.1:80 -r 192.168.10.9 -m
        查看
            -L|l
                -n: 数字格式显示主机地址和端口
                --stats:统计数据
                --rate: 速率
                --timeout: 显示tcp、tcpfin和udp的会话超时时长
                -c: 显示当前的ipvs连接状况
    
        删除所有集群服务
            -C:清空ipvs规则
        保存规则
            -S 
            # ipvsadm -S > /path/to/somefile
        载入此前的规则:
            -R
            # ipvsadm -R < /path/form/somefile
    复制代码

    5.设置arp响应配置并配置VIP

    #下面的四个都需要在三个rs服务器上执行。
    [root@localhost ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce [root@localhost ~]# echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce [root@localhost ~]# echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore [root@localhost ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
    [root@localhost ~]# ifconfig lo:0 192.168.168.200 broadcast 192.168.168.200 netmask 255.255.255.255 up

    6.测试arp配置正确性

    在宿主机上,我们执行

    C:Windowssystem32>ping 192.168.168.200             #先ping下
    
    正在 Ping 192.168.168.200 具有 32 字节的数据:
    来自 192.168.168.200 的回复: 字节=32 时间<1ms TTL=64
    来自 192.168.168.200 的回复: 字节=32 时间<1ms TTL=64
    来自 192.168.168.200 的回复: 字节=32 时间<1ms TTL=64
    来自 192.168.168.200 的回复: 字节=32 时间<1ms TTL=64
    
    192.168.168.200 的 Ping 统计信息:
        数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
    往返行程的估计时间(以毫秒为单位):
        最短 = 0ms,最长 = 0ms,平均 = 0ms
    C:Windowssystem32>arp -a 192.168.168.200        #这里查看下arp解析的mac地址是不是和lvs的mac地址一致,而不是3个rs服务器上的mac地址。
    
    接口: 192.168.168.10 --- 0x18
      Internet 地址         物理地址              类型
      192.168.168.200       00-0c-29-d7-4a-43     动态
    
    C:Windowssystem32>arp -d #情况arp解析信息。 我们这里清空,确保每次都是可以获取的是lvs的mac地址,而不是3个rs的mac地址

    C:Windowssystem32>ping 192.168.168.200 #ping下

    正在 Ping 192.168.168.200 具有 32 字节的数据:
    来自 192.168.168.200 的回复: 字节=32 时间<1ms TTL=64
    来自 192.168.168.200 的回复: 字节=32 时间<1ms TTL=64
    来自 192.168.168.200 的回复: 字节=32 时间<1ms TTL=64
    来自 192.168.168.200 的回复: 字节=32 时间<1ms TTL=64

    192.168.168.200 的 Ping 统计信息:
        数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
    往返行程的估计时间(以毫秒为单位):
        最短 = 0ms,最长 = 0ms,平均 = 0ms
    C:Windowssystem32>arp -a 192.168.168.200 #查看arp信息,这里可以看到,每次的结果都是lvs的mac地址是一致的。
    接口: 192.168.168.10 --- 0x18
      Internet 地址         物理地址              类型
      192.168.168.200       00-0c-29-d7-4a-43     动态

     7.添加路由信息

    #三个rs服务器都需要添加如下的路由信息
    [root@localhost ~]# route add -host 192.168.168.200 dev lo:0
    #lvs服务器上添加
    [root@localhost ~]# route add -host 192.168.168.200 dev eth0:0

    8.给那个RS服务器安装http服务并测试

    复制代码
    [root@localhost ntpstats]# yum install httpd              #每个rs服务器都安装httpd服务
    [root@localhost ntpstats]# service httpd restart          #每个rs服务器都重新启动
    [root@localhost ntpstats]# echo rs1> /var/www/html/index.html  #给rs1服务器创建一个主页,只在rs1上执行
    [root@localhost ntpstats]# echo rs2> /var/www/html/index.html  #给rs2服务器创建一个主页,只在rs2上执行
    [root@localhost ntpstats]# echo rs2> /var/www/html/index.html  #给rs3服务器创建一个主页,只在rs3上执行
    #接下来使用在调度器lvs服务器先测试下各个页面是否可以正常访问
    [root@localhost ~]# elinks -source 192.168.40.201
    rs1
    [root@localhost ~]# elinks -source 192.168.40.202
    rs2
    [root@localhost ~]# elinks -source 192.168.40.203
    rs3
    复制代码

    9.创建LVS

    [root@localhost ~]# ipvsadm -A -t 192.168.168.200:80 -s rr              #创建一个集群服务,调度算法rr,
    [root@localhost ~]# ipvsadm -a -t 192.168.168.200:80 -r 192.168.40.201 -g    #添加rs1 dr方式
    [root@localhost ~]# ipvsadm -a -t 192.168.168.200:80 -r 192.168.40.202 -g    #添加rs2 dr方式
    [root@localhost ~]# ipvsadm -a -t 192.168.168.200:80 -r 192.168.40.203 -g    #添加rs3 dr方式

    10.我们使用宿主机进行测试

    浏览器输入http://192.168.168.200,不断刷新,就可以看到如下的三个图片信息。测试成功后,就可以把三个RS服务器页面做成一样的啦。

    11.在最后,给出一个脚本吧。 是马永亮老师讲课整理的脚本

    Director脚本:
    #!/bin/bash
    #
    # LVS script for VS/DR
    #
    . /etc/rc.d/init.d/functions
    #
    VIP=192.168.0.210
    RIP1=192.168.0.221
    RIP2=192.168.0.222
    PORT=80
    
    #
    case "$1" in
    start)           
    
      /sbin/ifconfig eth0:1 $VIP broadcast $VIP netmask 255.255.255.255 up
      /sbin/route add -host $VIP dev eth0:1
    
    # Since this is the Director we must be able to forward packets
      echo 1 > /proc/sys/net/ipv4/ip_forward
    
    # Clear all iptables rules.
      /sbin/iptables -F
    
    # Reset iptables counters.
      /sbin/iptables -Z
    
    # Clear all ipvsadm rules/services.
      /sbin/ipvsadm -C
    
    # Add an IP virtual service for VIP 192.168.0.219 port 80
    # In this recipe, we will use the round-robin scheduling method. 
    # In production, however, you should use a weighted, dynamic scheduling method. 
      /sbin/ipvsadm -A -t $VIP:80 -s wlc
    
    # Now direct packets for this VIP to
    # the real server IP (RIP) inside the cluster
      /sbin/ipvsadm -a -t $VIP:80 -r $RIP1 -g -w 1
      /sbin/ipvsadm -a -t $VIP:80 -r $RIP2 -g -w 2
    
      /bin/touch /var/lock/subsys/ipvsadm &> /dev/null
    ;; 
    
    stop)
    # Stop forwarding packets
      echo 0 > /proc/sys/net/ipv4/ip_forward
    
    # Reset ipvsadm
      /sbin/ipvsadm -C
    
    # Bring down the VIP interface
      /sbin/ifconfig eth0:1 down
      /sbin/route del $VIP
      
      /bin/rm -f /var/lock/subsys/ipvsadm
      
      echo "ipvs is stopped..."
    ;;
    
    status)
      if [ ! -e /var/lock/subsys/ipvsadm ]; then
        echo "ipvsadm is stopped ..."
      else
        echo "ipvs is running ..."
        ipvsadm -L -n
      fi
    ;;
    *)
      echo "Usage: $0 {start|stop|status}"
    ;;
    esac
    
    
    RealServer脚本:
    
    #!/bin/bash
    #
    # Script to start LVS DR real server.
    # description: LVS DR real server
    #
    .  /etc/rc.d/init.d/functions
    
    VIP=192.168.0.219
    host=`/bin/hostname`
    
    case "$1" in
    start)
           # Start LVS-DR real server on this machine.
            /sbin/ifconfig lo down
            /sbin/ifconfig lo up
            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/all/arp_ignore
            echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
    
            /sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
            /sbin/route add -host $VIP dev lo:0
    
    ;;
    stop)
    
            # Stop LVS-DR real server loopback device(s).
            /sbin/ifconfig lo:0 down
            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/all/arp_ignore
            echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
    
    ;;
    status)
    
            # Status of LVS-DR real server.
            islothere=`/sbin/ifconfig lo:0 | grep $VIP`
            isrothere=`netstat -rn | grep "lo:0" | grep $VIP`
            if [ ! "$islothere" -o ! "isrothere" ];then
                # Either the route or the lo:0 device
                # not found.
                echo "LVS-DR real server Stopped."
            else
                echo "LVS-DR real server Running."
            fi
    ;;
    *)
                # Invalid entry.
                echo "$0: Usage: $0 {start|status|stop}"
                exit 1
    ;;
    esac
  • 相关阅读:
    PL/SQL中的 not
    正则12和\1的理解
    eclipse/myeclipse注释模板的修改
    jboss修改内存
    myEclipse开发内存溢出解决办法myEclipse调整jvm内存大小 java.lang.OutOfMemoryError: PermGen space及其解决方法
    MyEclipse 启动报错:'Building workspace' has encountered a problem解决方法
    jboss 7.1.1.final 报错 set the maxParameterCount attribute on the Connector
    在 Ubuntu/Debian 下安装 PHP7.3 教程
    mariadb新安装解决远程访问以及root登录
    Docker 探索安装WordPress+Mysql8.0
  • 原文地址:https://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_linux_022_lvsdr.html
Copyright © 2011-2022 走看看