美文网首页
简述LVS调度方案及应用场景

简述LVS调度方案及应用场景

作者: 任总 | 来源:发表于2018-07-24 13:48 被阅读12次

    一、基于FireWall Mark防火墙标记调度

    1、FireWall Mark防火墙标记调度

    • 借助于防火墙标记来分类报文,而后基于标记定义集群服务;可将多个不同的应用使用同一个集群服务进行调度;
    • 打标记方法(在Director主机):
      格式: iptables -t mangle -A PREROUTING -d vip -pproto --dport $port -j MARK --set-mark NUMBER
    • 基于标记定义集群服务:
      格式: ipvsadm -A -f NUMBER [options]

    2、应用场景和实现

    • 基于防火墙标记调度实现两种请求,一个服务响应方案
      客户端浏览http和https,请求80和443端口响应,场景要求不管访问那个,都由一个服务响应。
    设置vs调度服务器:
    • vs调度服务器关闭selinux和防火墙
      因为要用到https协议,所以把vs安装CA成服务器
    [root@vs ~]# cd /etc/pki/CA#切换到ca目录
    [root@vs CA]# (umask 077; openssl genrsa -out private/cakey.pem 2048)#生成自签证书
    [root@vs CA]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 365#生成自签证书
    [root@vs CA]# ll #查询是否生成
    -rw-r--r--  1 root root 1318 7月  16 23:27 cacert.pem
    ...
    [root@vs CA]# touch index.txt
    [root@vs CA]# echo 01 > serial
    [root@vs CA]# cd
    [root@vs ~]# openssl genrsa -out httpd.key 2048#生成本机公钥
    [root@vs ~]# chmod 600 httpd.key #设置权限
    [root@vs ~]# openssl req -new -key httpd.key -out httpd.csr#生成一个证书
    [root@vs ~]# openssl ca -in httpd.csr -out httpd.crt -days 365#签署证书
    [root@vs ~]# ll  #查询
    -rw-r--r--  1 root root 4452 7月  16 23:36 httpd.crt
    -rw-r--r--  1 root root 1005 7月  16 23:32 httpd.csr
    -rw-------  1 root root 1675 7月  16 23:29 httpd.key
    [root@vs ~]# scp -p httpd.crt httpd.key 192.168.1.11:/etc/httpd/conf.d/#拷贝证书到rs1
    [root@vs ~]# scp -p httpd.crt httpd.key 192.168.1.12:/etc/httpd/conf.d/#拷贝证书到rs2
    [root@vs ~]# vim /etc/hosts          #设置解析
         192.168.1.99     www.hehe.com  
    
    
    [root@vs ~]# ifconfig ens33:0 192.168.1.99 netmask 255.255.255.255 broadcast 192.168.1.99 up#设置广播地址
    [root@vs ~]# ifconfig #查询IP地址配置
    .......
    ens33:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 192.168.1.99  netmask 255.255.255.255  broadcast 192.168.1.99
            ether 00:0c:29:8e:29:6a  txqueuelen 1000  (Ethernet)
    
    ......
    [root@vs ~]# yum -y install ipvsadm#安装lvs
    [root@vs ~]# iptables -t mangle -A PREROUTING -d 192.168.1.99 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 3   #设定防火墙规则,标记为3
    [root@vs ~]#  iptables -t mangle -vnL#查询
    
    Chain PREROUTING (policy ACCEPT 7213 packets, 1062K bytes)
     pkts bytes target     prot opt in     out     source               destination         
       93  5088 MARK       tcp  --  *      *       0.0.0.0/0            192.168.1.99         multiport dports 80,443 MARK set 0x3
    
    [root@vs ~]# ipvsadm -A -f 3 -s sh#引用防火墙标记生成调度规则,sh绑定跟踪源地址算法
    [root@vs ~]# ipvsadm -a -f 3 -r 192.168.1.11 -g#把rs1服务器加入调度规则
    [root@vs ~]# ipvsadm -a -f 3 -r 192.168.1.12 -g#把rs1服务器加入调度规则
    [root@vs ~]# ipvsadm -ln#查询
    
    IP Virtual Server version 1.2.1 (size=4096)
    Prot LocalAddress:Port Scheduler Flags
      -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
    FWM  3 sh
      -> 192.168.1.11:0               Route   1      0          0         
      -> 192.168.1.12:0               Route   1      0          0 
    
    rs1服务器配置
    • rs1和rs2分别关闭防火墙,安装httpd.server,更改ip地址,网关指向路由器。
    配置测试页面:
    [root@rs1 ~]# yum -y install mod_ssl #安装ssl模块
    [root@rs1 ~]# cd /etc/httpd/conf.d/
    [root@rs1 conf.d]# ls #查看是否有.key文件
    autoindex.conf  httpd.key  README    userdir.conf
    httpd.crt       php.conf   ssl.conf  welcome.conf
    [root@rs1 conf.d]# vim  /etc/httpd/conf.d/ssl.conf#编辑ssl配置文件
    
    # General setup for the virtual host, inherited from global configuration
    DocumentRoot "/var/www/html"
    ServerName www.hehe.com      #修改服务名
    #   Server Certificate:
    SSLCertificateFile /etc/httpd/conf.d/httpd.crt  #修改目录
    #   Server Private Key:
    SSLCertificateKeyFile /etc/httpd/conf.d/httpd.key  #修改目录
    
    [root@rs1 conf.d]# httpd -t #语法检查
    [root@rs1 conf.d]# systemctl restart httpd
    [root@rs1 conf.d]# ss -tnl #查询433端口是否打开
    State       Recv-Q Send-Q Local Address:Port                                 
    LISTEN      0      128            :::443                        :::*                  
    [root@rs1 conf.d]# scp ssl.conf 192.168.1.12:/etc/httpd/conf.d/#ssl配置文件拷贝到rs2服务器上
    
    
    [root@rs1 ~]# vim /var/www/html/test.html#rs1服务器测试页
    <h1>RS1 172.16.1.11</h1> 
    [root@rs1 ~]# vim setparam.sh#编辑脚本
    #!/bin/bash
    #
    vip=192.168.1.99
    mask='255.255.255.255'
    
    case $1 in
    start)#开始设置值
    echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
    echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
    echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
    echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
    
    ifconfig lo:0 $vip netmask $mask broadcast $vip up
    route add -host $vip dev lo:0#设置本地地址广播
    
    ;;
    stop)#停止还原成0值
    ifconfig lo:0 down
    echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
    echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
    echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
    echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce
    
    ;;
    *)#其他
    echo "Usage $(basename $0) start|stop"
    exit 1
    ;;
    esac
    [root@rs1 ~]# bash -n setparam.sh #检查脚本语法
    [root@rs1 ~]# bash -x setparam.sh start#启动脚本
    + vip=192.168.1.99
    + mask=255.255.255.255
    + case $1 in
    + echo 1
    + echo 1
    + echo 2
    + echo 2
    + ifconfig lo:0 192.168.1.99 netmask 255.255.255.255 broadcast 192.168.1.99 up
    + route add -host 192.168.1.99 dev lo:0
    
    [root@rs1 ~]# scp setparam.sh 192.168.1.12:/tmp#把脚本传给rs2服务器
    [root@rs1 ~]#systemctl start httpd
    
    
    rs2服务器配置
    [root@rs2 ~]# yum -y install mod_ssl #安装ssl模块
    
    [root@rs2 ~]# vim /var/www/html/test.html#rs2服务器
    <h1>RS2 172.16.1.12</h1> 
    [root@rs2 ~]# cd /tmp
    [root@rs2 tmp]# ls
    setparam.sh
    [root@rs2 tmp]# bash -x setparam.sh start#执行脚本
    + vip=192.168.1.99
    + mask=255.255.255.255
    + case $1 in
    + echo 1
    + echo 1
    + echo 2
    + echo 2
    + ifconfig lo:0 192.168.1.99 netmask 255.255.255.255 broadcast 192.168.1.99 up
    + route add -host 192.168.1.99 dev lo:0
    
    
    [root@rs2 ~]#systemctl start httpd
    

    客户端测试:


    http请求测试 https请求测试

    二、lvs persistence:持久连接

    1、持久连接

    • 持久连接模板:实现无论使用任何调度算法,在一段时间内,能够实现将来自同一个地址的请求始终发往同一个RS;

    格式:ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]

    port Affinity:
    每端口持久:每个端口对应定义为一个集群服务,每集群服务单独调度;

    [root@vs ~]# ipvsadm -E -f 3 -s rr -p
    [root@vs ~]# ipvsadm -ln
    IP Virtual Server version 1.2.1 (size=4096)
    Prot LocalAddress:Port Scheduler Flags
      -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
    FWM  3 rr persistent 360         #持久连接默认360秒
      -> 192.168.1.11:0               Route   1      0          0         
      -> 192.168.1.12:0               Route   1      0          0  
    

    每防火墙标记持久:基于防火墙标记定义集群服务;可实现将多个端口上的应用统一调度,即所谓的port Affinity;
    每客户端持久:基于0端口定义集群服务,即将客户端对所有应用的请求统统调度至后端主机,必须定义为持久模式;

    2、保存及重载规则:

    保存:建议保存至/etc/sysconfig/ipvsadm
    ipvsadm-save > /PATH/TO/IPVSADM_FILE
    ipvsadm -S > /PATH/TO/IPVSADM_FILE
    systemctl stop ipvsadm.service

    3、重载:

    ipvsadm-restore < /PATH/FROM/IPVSADM_FILE
    ipvsadm -R < /PATH/FROM/IPVSADM_FILE
    systemctl restart ipvsadm.service

    相关文章

      网友评论

          本文标题:简述LVS调度方案及应用场景

          本文链接:https://www.haomeiwen.com/subject/aiempftx.html