lvs+keepalived

2020-05-02  本文已影响0人  jamas

lvs四种集群特点及使用场景

LVS-DR工作原理,并配置实现。

其原理是数据包在director上被二层重写成被调度的RS的mac。
因所有RS上都配有相同VIP,故所有RS上都需要关闭ARP相应及通告。

#!/bin/bash
#
vip='172.16.2.200'  #设置VIP
iface='lo:1'         #VIP绑定网卡label
mask='255.255.255.255'  #掩码
port='80'          #端口
rs1='172.16.2.135'  #设置rip
rs2='172.16.2.136'
scheduler='rr'   #调度算法
type='-g'       #集群类型
rpm -q ipvsadm &> /dev/null || yum -y install ipvsadm &> /dev/null   #安装ipvsadm工具

case $1 in
start)
    #添加VIP
    ifconfig $iface $vip netmask $mask #broadcast $vip up
    #清空防火墙
    iptables -F
    #添加ipvs规则
    ipvsadm -A -t ${vip}:${port} -s $scheduler
    ipvsadm -a -t ${vip}:${port} -r ${rs1} $type
    ipvsadm -a -t ${vip}:${port} -r ${rs2} $type
    echo "The VS Server is Ready!"
    ;;
stop)
    # 清空ipvs规则
    ipvsadm -C
    ifconfig $iface down
    echo "The VS Server is Canceled!"
    ;;
*)
    echo "Usage: $(basename $0) start|stop"
    exit 1
    ;;
esac

启动脚本

[root@node1 ~]# bash lvs_dr_vs.sh start
#!/bin/bash
vip=172.16.2.200  #设置VIP
mask='255.255.255.255'  #掩码
dev=lo:1   #VIP绑定网卡label
#安装httpd服务并启动
rpm -q httpd &> /dev/null || yum -y install httpd &>/dev/null
service httpd start &> /dev/null && echo "The httpd Server is Ready!"    
#生成index文件
echo "<h1>172.16.2.136</h1>" > /var/www/html/index.html

case $1 in
start)
    #关闭ARP相应
    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
    #添加VIP
    ifconfig $dev $vip netmask $mask #broadcast $vip up
    #route add -host $vip dev $dev
    echo "The RS Server is Ready!"
    ;;
stop)
    #还原配置
    ifconfig $dev 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 "The RS Server is Canceled!"
    ;;
*)
    echo "Usage: $(basename $0) start|stop"
    exit 1
    ;;
esac

启动脚本

[root@centos8-node1 ~]# bash lvs_dr_rs.sh start
[root@centos6 ~]# ip a

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    link/ether 00:0c:29:21:75:ba brd ff:ff:ff:ff:ff:ff
    inet 172.16.98.200/24 brd 172.16.98.255 scope global eth0
    inet6 fe80::20c:29ff:fe21:75ba/64 scope link
       valid_lft forever preferred_lft forever

[root@centos6 ~]# while true;do curl 172.16.2.200;sleep 0.5;done
<h1>172.16.2.136</h1>
<h1>172.16.2.135</h1>
<h1>172.16.2.136</h1>
<h1>172.16.2.135</h1>
<h1>172.16.2.136</h1>
<h1>172.16.2.135</h1>
<h1>172.16.2.136</h1>
<h1>172.16.2.135</h1>
<h1>172.16.2.136</h1>
<h1>172.16.2.135</h1>
<h1>172.16.2.136</h1>

LVS+Keepalived高可用

#!/bin/bash
vip=172.16.2.200
mask='255.255.255.255'
dev=lo:1
rpm -q httpd &> /dev/null || yum -y install httpd &>/dev/null
service httpd start &> /dev/null && echo "The httpd Server is Ready!"
echo "<h1>172.16.2.135</h1>" > /var/www/html/index.html

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 $dev $vip netmask $mask #broadcast $vip up
    #route add -host $vip dev $dev
    echo "The RS Server is Ready!"
    ;;
stop)
    ifconfig $dev 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 "The RS Server is Canceled!"
    ;;
*)
    echo "Usage: $(basename $0) start|stop"
    exit 1
    ;;
esac
[root@node1 ~]# yum install -y keepalived

配置sorry server

[root@node1 ~]# yum install -y httpd
[root@node1 ~]# echo sorry server > /var/www/html/index.html
[root@node1 ~]# systemctl start httpd

编辑keepalived配置文件

[root@node1 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {   #全局通用配置
   notification_email {
     root@localhost
   }
   notification_email_from keepalived@localhost
   smtp_server 127.0.0.1  #邮件服务器IP
   smtp_connect_timeout 30   #邮件发送超时时间
   router_id node1     #本机id标识 BACKUP应为其id
   #vrrp_strict     #此设置应注销,否则会添加iptables规则使主机无法通行
   vrrp_skip_check_adv_addr
   rrrp_garp_interval 0
   vrrp_gna_interval 0
   vrrp_mcast_group4 239.1.1.1 # vrrp组播侦听地址,默认为224.0.0.18
}

vrrp_instance VI_1 {   #配置vrrp实例
    state MASTER   #设置主从 从服务器应为BACKUP
    interface ens160  #使用的网卡名称
    virtual_router_id 66  #识别同一个虚拟路由,一个实例内服务器应相同
    priority 100   #优先级,MASTER比BACKUP
    advert_int 1
    authentication {  #配置认证
        auth_type PASS
        auth_pass 6666
    }
    virtual_ipaddress {  #虚拟IP
        172.16.2.200/24
    }
}


virtual_server 172.16.2.200 80 {   #VS配置
    delay_loop 3  
    lb_algo rr  #定义调度算法
    lb_kind DR  #集群类型
    #persistence_timeout 50  #持久连接,为实验效果已注释
    protocol TCP  #服务协议
    real_server 172.16.2.135 80 { #配置RS
        weight 1
        HTTP_GET {   #健康检测
            url {
              path /
              status_code 200
            }
            connect_timeout 1  
            nb_get_retry 3
            delay_before_retry 3

        }
    }
    real_server 172.16.2.136 80 {
        weight 1
        HTTP_GET {
            url {
              path /
              status_code 200
            }
            connect_timeout 1
            nb_get_retry 3
            delay_before_retry 1

        }
    }
}

启动服务

[root@node1 ~]# systemctl start keepalived
[root@node1 ~]# 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
    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:db:0a:d3 brd ff:ff:ff:ff:ff:ff
    inet 172.16.2.131/24 brd 172.16.2.255 scope global noprefixroute ens160
       valid_lft forever preferred_lft forever
    inet 172.16.2.200/24 scope global secondary ens160  #VIP上线
       valid_lft forever preferred_lft forever
    inet6 fe80::52b4:adde:49fc:1544/64 scope link tentative noprefixroute dadfailed
       valid_lft forever preferred_lft forever
    inet6 fe80::8e34:700b:215e:e13c/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

查看ipvs规则

[root@node1 ~]# ipvsadm -Ln  #ipvs规则已生成
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.16.2.200:80 rr
  -> 172.16.2.135:80              Route   1      0          0
  -> 172.16.2.136:80              Route   1      0          0

尝试关闭MASTER节点keepalived服务,验证VIP是否漂移至BACKUP节点

[root@node1 ~]# systemctl stop keepalived
[root@node2 ~]# 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
    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:c9:0a:a2 brd ff:ff:ff:ff:ff:ff
    inet 172.16.2.132/24 brd 172.16.2.255 scope global noprefixroute ens160
       valid_lft forever preferred_lft forever
    inet 172.16.2.200/32 scope global ens160
       valid_lft forever preferred_lft forever
    inet6 fe80::52b4:adde:49fc:1544/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

[root@node2 ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.16.2.200:80 rr
  -> 172.16.2.135:80              Route   1      0          0
  -> 172.16.2.136:80              Route   1      0          0
[root@centos6 ~]# while true;do curl 172.16.2.200 ;sleep 0.5;done
<h1>172.16.2.136</h1>
<h1>172.16.2.135</h1>
<h1>172.16.2.136</h1>
<h1>172.16.2.135</h1>
<h1>172.16.2.136</h1>
<h1>172.16.2.135</h1>
<h1>172.16.2.136</h1>
<h1>172.16.2.135</h1>
<h1>172.16.2.136</h1>
<h1>172.16.2.135</h1>
<h1>172.16.2.136</h1>
<h1>172.16.2.135</h1>
<h1>172.16.2.136</h1>
<h1>172.16.2.135</h1>
<h1>172.16.2.136</h1>
<h1>172.16.2.135</h1>
<h1>172.16.2.136</h1>
<h1>172.16.2.135</h1>
<h1>172.16.2.136</h1>
<h1>172.16.2.135</h1>
<h1>172.16.2.136</h1>
<h1>172.16.2.135</h1>
<h1>172.16.2.136</h1>
<h1>172.16.2.135</h1>
<h1>172.16.2.136</h1>
<h1>172.16.2.135</h1>
<h1>172.16.2.136</h1>
<h1>172.16.2.135</h1>
<h1>172.16.2.136</h1>
<h1>172.16.2.135</h1>
<h1>172.16.2.136</h1>
<h1>172.16.2.135</h1>
<h1>172.16.2.136</h1>
<h1>172.16.2.135</h1>
上一篇 下一篇

猜你喜欢

热点阅读