LVS DR模式搭建、 keepalived + LVS
LVS DR模式搭建、 keepalived + LVS
Linux_Anna 发表于3个月前
LVS DR模式搭建、 keepalived + LVS
  • 发表于 3个月前
  • 阅读 13
  • 收藏 1
  • 点赞 0
  • 评论 0

18.11 LVS DR模式搭建

1.1 DR模式搭建 --准备工作

  • 准备三台机器  只需要一个网卡和一个IP
    第1台分发器IP:192.168.2.179
    第2台Real Server IP:192.168.2.180
    第3台Real Server IP:192.168.2.181
  • 原本在NAT模式192.168.2.179是作为一个内网IP
    现在在DR模式192.168.2.179是作为一个公网IP

1.2  把两台Real Server 网关更改回原来

[root@root-02 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eno16777736

TYPE="Ethernet"
BOOTPROTO="static"
DEFROUTE="yes"
PEERDNS="yes"
PEERROUTES="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_PEERDNS="yes"
IPV6_PEERROUTES="yes"
IPV6_FAILURE_FATAL="no"
NAME="eno16777736"
UUID="b82b23b3-06a7-4752-b2e6-05fef87d4917"
DEVICE="eno16777736"
ONBOOT="yes"
IPADDR=192.168.2.180
NETMASK=255.255.255.0
GATEWAY=192.168.2.1
DNS1=119.29.29.29

[root@root-02 ~]# systemctl restart network


[root@root-03 ~]#  vim /etc/sysconfig/network-scripts/ifcfg-ens33 

TYPE="Ethernet"
BOOTPROTO="static"
DEFROUTE="yes"
PEERDNS="yes"
PEERROUTES="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_PEERDNS="yes"
IPV6_PEERROUTES="yes"
IPV6_FAILURE_FATAL="no"
NAME="ens33"
UUID="b82b23b3-06a7-4752-b2e6-05fef87d4917"
DEVICE="ens33"
ONBOOT="yes"
IPADDR=192.168.2.181
NETMASK=255.255.255.0
GATEWAY=192.168.2.1
DNS1=119.29.29.29

[root@root-03 ~]# systemctl restart network

 注:在做NAT模式的时候GATEWAY 设置为192.168.2.179,现在改回原来的192.168.2.1


1.3 在分发器写一个执行脚本

#! /bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward
ipv=/usr/sbin/ipvsadm
vip=192.168.2.190
rs1=192.168.2.180
rs2=192.168.2.181
#注意这里的网卡名字,设置虚拟网卡,绑定VIP
ifdown eno16777736
ifup eno16777736
ifconfig eno16777736:1 $vip broadcast $vip netmask 255.255.255.0 up
route add -host $vip dev eno16777736:1
$ipv -C
$ipv -A -t $vip:80 -s wrr
$ipv -a -t $vip:80 -r $rs1:80 -g -w 1
$ipv -a -t $vip:80 -r $rs2:80 -g -w 1



注: -g -- DR模式
    
    -r -- 跟rs的IP  

    ps 若不加-r 选项会提示错误 :
    unexpected argument 192.168.2.180:80
    unexpected argument 192.168.2.181:80


1.4 两台Real Server 都需要写一个执行脚本

#rs1 上
[root@root-02 ~]# vim /usr/local/sbin/lvs_rs.sh

#! /bin/bash
vip=192.168.2.190
#把vip绑定在lo上,是为了实现rs直接把结果返回给客户端
ifdown lo
ifup lo
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.0 up
route add -host $vip lo:0
#以下操作为更改arp内核参数,目的是为了让rs顺利发送mac地址给客户端
#参考文档www.cnblogs.com/lgfeng/archive/2012/10/16/2726308.html
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


#rs2 上
[root@root-03 ~]# vim /usr/local/sbin/lvs_rs.sh

#!/bin/bash
vip=192.168.2.190
#把vip绑定在lo上,是为了实现rs直接把结果返回给客户端
ifdown lo
ifup lo
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip dev lo:0
#以下操作为更改arp内核参数,目的是为了让rs顺利发送mac地址给客户端
#参考文档www.cnblogs.com/lgfeng/archive/2012/10/16/2726308.html
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


特别提示:
        这两台机器在写完脚本后,在执行的时候都提示无法载入文件
        但是是成功的,使用route -n 命令查看,是有VIP的路由. 
        并且使用ip add 也可以看到lo 网卡是绑定VIP的.
        再者也可以去分发器那台机器上使用ip add 是否有VIP的IP号.

[root@root-03 ~]# sh /usr/local/sbin/lvs_rs.sh
无法载入文件 '/etc/sysconfig/network-scripts/ifcfg-lo'
无法载入文件 '/etc/sysconfig/network-scripts/ifcfg-lo'
无法载入文件 '/etc/sysconfig/network-scripts/ifcfg-lo'
无法载入文件 '/etc/sysconfig/network-scripts/ifcfg-lo'
无法载入文件 '/etc/sysconfig/network-scripts/ifcfg-lo'
无法载入文件 '/etc/sysconfig/network-scripts/ifcfg-lo'
无法载入文件 '/etc/sysconfig/network-scripts/ifcfg-lo'
无法载入文件 '/etc/sysconfig/network-scripts/ifcfg-lo'
[root@root-03 ~]# echo $?
0
[root@root-03 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.2.1     0.0.0.0         UG    100    0        0 ens33
192.168.2.0     0.0.0.0         255.255.255.0   U     100    0        0 ens33
192.168.2.190   0.0.0.0         255.255.255.255 UH    0      0        0 lo


[root@root-03 ~]# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    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 192.168.2.190/32 brd 192.168.2.190 scope global lo:0
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:67:89:9e brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.180/24 brd 192.168.2.255 scope global eno16777736
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe67:899e/64 scope link 
       valid_lft forever preferred_lft forever


1.5 测试访问

说明:在网页上测试访问,第一次访问会在rs1上,第二次访问会在rs2 ,以此类推...均衡轮询


 

18.12 keepalived + LVS 

1. 介绍keepalived +LVS

1.2 接下来介绍keepalived是如何实现负载均衡的功能,keepalived内置了LVS的功能,是如何内置的? 是如何实现的,还需不需要安装ipvsadm呢?

现在来分析一下为什么需要keepalived,把keepalived加入到LVS当中来,,目的是什么呢?
 有两个原因:第一个原因是LVS有个很关键的角色--directory(分发器),如果这个分发器down 机了,那所有的访问都将会被终止,因为所有的入口都在这个分发器上,所以说我们可以把这个分发器做一个高可用,把keepalived 用在分发器上就很完美,并且keepalived还有负载均衡的作用.
  第二个原因是 在使用LVS的时候,没有其他额外的操作的话,把rs2 的Nginx服务停掉,在去网页上访问的时候, 当访问到down 机的 rs2上就会出问题, 还是一样会把请求转发这台rs2上,那么rs2 都已经down机了,肯定是无法提供服务的. keepalived 出现就是为了解决这个问题,即使说rs2 已经down机了,rs1还可以保证服务正常提供. keepalived 可以检测到后面的某台rs 已经down 机,就不会继续把请求转发到这台down 机的rs上. 
现在分发器上可以不需要安装ipvsadm,若已经安装甚至可以卸载掉

# 第2个原因 的演示
[root@root-03 ~]# /etc/init.d/nginx stop
Stopping nginx (via systemctl):                            [  确定  ]
[root@root-03 ~]# ipvsadm -ln
-bash: ipvsadm: 未找到命令
[root@root-03 ~]# ps aux | grep nginx
root       3060  0.0  0.0 112660   964 pts/0    S+   15:30   0:00 grep --color=auto nginx



[root@root-01 ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.2.190:80 wrr
  -> 192.168.2.180:80             Route   1      2          2         
  -> 192.168.2.181:80             Route   1      0          4  


1.2 编辑keepalived的配置文件

说明:把keepalived.conf 全部清空,然后到这个网址复制内容粘贴进去                   

复制内容的网址:https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/lvs_keepalived.conf

[root@root-01 ~]# vim /etc/keepalived/keepalived.conf

vrrp_instance VI_1 {
    #备用服务器上为 BACKUP
    state MASTER
    #绑定vip的网卡为ens33,你的网卡和阿铭的可能不一样,这里需要你改一下
    interface ens33
    virtual_router_id 51
    #备用服务器上为90
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass aminglinux
    }
    virtual_ipaddress {
        192.168.2.190
    }
}
virtual_server 192.168.2.190 80 {
    #(每隔10秒查询realserver状态)
    delay_loop 10
    #(lvs 算法)
    lb_algo wlc
    #(DR模式)
    lb_kind DR
    #(同一IP的连接60秒内被分配到同一台realserver)
    persistence_timeout 60
    #(用TCP协议检查realserver状态)
    protocol TCP
    real_server 192.168.2.180 80 {
        #(权重)
        weight 100
        TCP_CHECK {
        #(10秒无响应超时)
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
    }
    real_server 192.168.2.181 80 {
        weight 100
        TCP_CHECK {
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
     }
}


1.3 清空ipvsadm 之前的规则

[root@root-01 ~]# ipvsadm -C


1.4 启动keepalived 服务

[root@root-01 ~]# systemctl start keepalived
[root@root-01 ~]# ps aux |grep keepalived
root       3515  0.0  0.1 111700  1312 ?        Ss   16:06   0:00 /usr/sbin/keepalived -D
root       3516  0.0  0.3 120556  3124 ?        S    16:06   0:00 /usr/sbin/keepalived -D
root       3517  0.0  0.2 120428  2404 ?        S    16:06   0:00 /usr/sbin/keepalived -D
root       3522  0.0  0.0 112660   964 pts/0    S+   16:06   0:00 grep --color=auto keepalived


#启动keepalived之后就可以查看到这些规则
[root@root-01 ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.2.190:80 wlc
  -> 192.168.2.180:80             Route   100    0          0         
  -> 192.168.2.181:80             Route   100    0          0   

# 若把其中一台rs 停掉,再使用 ipvsadm -ln 命令查看,那么就只有一台rs,说明keepalived会把down 掉的rs 剔除掉.

[root@root-03 ~]# /etc/init.d/nginx stop
Stopping nginx (via systemctl):                            [  确定  ]
[root@root-03 ~]# ps aux |grep nginx 
root       3126  0.0  0.0 112660   960 pts/0    S+   16:16   0:00 grep --color=auto nginx


[root@root-01 ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.2.190:80 wlc
  -> 192.168.2.180:80             Route   100    0          0     


1.5 需要注意的是:两台rs上 的/usr/local/sbin/lvs_rs.sh 脚本一样要是执行的.

#rs1 上
[root@root-02 ~]# vim /usr/local/sbin/lvs_rs.sh

#! /bin/bash
vip=192.168.2.190
#把vip绑定在lo上,是为了实现rs直接把结果返回给客户端
ifdown lo
ifup lo
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.0 up
route add -host $vip lo:0
#以下操作为更改arp内核参数,目的是为了让rs顺利发送mac地址给客户端
#参考文档www.cnblogs.com/lgfeng/archive/2012/10/16/2726308.html
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


#rs2 上
[root@root-03 ~]# vim /usr/local/sbin/lvs_rs.sh

#!/bin/bash
vip=192.168.2.190
#把vip绑定在lo上,是为了实现rs直接把结果返回给客户端
ifdown lo
ifup lo
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip dev lo:0
#以下操作为更改arp内核参数,目的是为了让rs顺利发送mac地址给客户端
#参考文档www.cnblogs.com/lgfeng/archive/2012/10/16/2726308.html
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


特别提示:
        这两台机器在写完脚本后,在执行的时候都提示无法载入文件
        但是是成功的,使用ipvsadm 命令查看,是有VIP的路由. 
        并且使用ip add 也可以看到分发器上是绑定了 VIP的.
 

[root@root-03 ~]# sh /usr/local/sbin/lvs_rs.sh
无法载入文件 '/etc/sysconfig/network-scripts/ifcfg-lo'
无法载入文件 '/etc/sysconfig/network-scripts/ifcfg-lo'
无法载入文件 '/etc/sysconfig/network-scripts/ifcfg-lo'
无法载入文件 '/etc/sysconfig/network-scripts/ifcfg-lo'
无法载入文件 '/etc/sysconfig/network-scripts/ifcfg-lo'
无法载入文件 '/etc/sysconfig/network-scripts/ifcfg-lo'
无法载入文件 '/etc/sysconfig/network-scripts/ifcfg-lo'
无法载入文件 '/etc/sysconfig/network-scripts/ifcfg-lo'

[root@root-01 ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.2.190:80 wlc
  -> 192.168.2.180:80             Route   100    0          0    


[root@root-01 ~]# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    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: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:a0:0f:93 brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.179/24 brd 192.168.2.255 scope global eno16777736
       valid_lft forever preferred_lft forever
    inet 192.168.2.190/32 brd 192.168.2.190 scope global eno16777736:1
       valid_lft forever preferred_lft forever
    inet 192.168.2.100/24 brd 192.168.2.255 scope global secondary eno16777736:0
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fea0:f93/64 scope link 
       valid_lft forever preferred_lft forever
3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:a0:0f:9d brd ff:ff:ff:ff:ff:ff
    inet 192.168.18.128/24 brd 192.168.18.255 scope global dynamic ens37
       valid_lft 1447sec preferred_lft 1447sec
    inet6 fe80::20c:29ff:fea0:f9d/64 scope link 
       valid_lft forever preferred_lft forever

 

1.6 测试访问

说明:在网页上测试访问,第一次访问会在rs1上,第二次访问会在rs2 ,以此类推...均衡轮询

共有 人打赏支持
粉丝 4
博文 63
码字总数 114622
×
Linux_Anna
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: