9.7任务

18.11 LVS DR模式搭建

生产环境中IP Tunnel用到的场景几乎没有,这里我们就不介绍了。

DR模式准备工作,只需要一个网段,一个网卡即可。

还是三台机器做测试,

  1. 分发器,也叫调度器(dir) 192.168.127.101
  2. rs1                                      192.168.127.102
  3. rs2                                      192.168.127.103

做实验之前一定记得把clone2、clone3的网关改过来。

我们的vip(192.168.127.199)要绑定所有的机器。

dir上脚本如下:

[root@localhost: ~]# vim /usr/local/sbin//lvs_dr.sh

#! /bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward
ipv=/usr/sbin/ipvsadm
vip=192.168.127.199
rs1=192.168.127.102
rs2=192.168.127.103
#注意这里的网卡名字
ifdown ens37
ifup ens37 #防止重复执行脚本带来ip冲突
ifconfig ens37:2 $vip broadcast $vip netmask 255.255.255.255 up #设置虚拟网卡
route add -host $vip dev ens37:2
$ipv -C
$ipv -A -t $vip:80 -s wrr
$ipv -a -t $vip:80 -r $rs1:80 -g -w 1 #-g就是DR模式
$ipv -a -t $vip:80 -r $rs2:80 -g -w 1

执行脚本,ifdown/ifup会打印信息,不是报错。

[root@localhost: ~]# sh /usr/local/sbin/lvs_dr.sh 
Device 'ens37' successfully disconnected.
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/3)
[root@localhost: ~]# echo $?
0

两台rs也需要编写脚本,这里也可以先关掉lo在打开。

[root@clone2: ~]# cat /usr/local/sbin/lvs_rs.sh 
#/bin/bash
vip=192.168.127.199
#把vip绑定在lo上,是为了实现rs直接把结果返回给客户端
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 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 #通过arp协议用mac通信

可以看到rs上的网卡

lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 192.168.127.199  netmask 255.255.255.255
        loop  txqueuelen 1000  (Local Loopback)
[root@clone3: ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.127.2   0.0.0.0         UG    100    0        0 ens37
192.168.127.0   0.0.0.0         255.255.255.0   U     100    0        0 ens37
192.168.127.199 0.0.0.0         255.255.255.255 UH    0      0        0 lo

我们用浏览器测试一下。

6cefb2fe6811e256762dc22f5ee9c769dc3.jpg

32f1caf85ec123fb3183e14cd6d35f20fc1.jpg

表示测试成功了。

配置是不难的只需要写一个脚本就好了,但是要记住每一步,理解才是重要的。

 

18.12 keepalived + LVS

lvs做分发器,如果挂掉那整个服务就瘫痪了,所以和keepalived做高可用是有必要的。

还有一种情况,后端rs即使宕机,也会把请求转发过去。这是lvs不智能的地方。

完整架构需要两台服务器(角色为dir)分别安装keepalived软件,目的是实现高可用,但keepalived本身也有负载均衡的功能,所以本次实验可以只安装一台keepalived。
keepalived内置了ipvsadm的功能,所以不需要再安装ipvsadm包,也不用编写和执行那个lvs_dir的脚本。
准备工作:

  1. dir,安装keepalived           192.168.127.101
  2. rs1                                      192.168.127.102
  3. rs2                                      192.168.127.103

编辑keepalived的配置文件

cat /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.127.199
    }
}
virtual_server 192.168.127.199 80 {
    #(每隔10秒查询realserver状态)
    delay_loop 10
    #(lvs 算法)
    lb_algo wlc
    #(DR模式)
    lb_kind DR
    #(同一IP的连接60秒内被分配到同一台realserver)
    persistence_timeout 0
    #(用TCP协议检查realserver状态)
    protocol TCP

    real_server 192.168.127.102 80 {
        #(权重)
        weight 100
        TCP_CHECK {
        #(10秒无响应超时)
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
    }
    real_server 192.168.127.103 80 {
        weight 100
        TCP_CHECK {
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
     }
}

启动keepalived

[root@localhost: ~]# systemctl start keepalived.service 
[root@localhost: ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 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: ens33: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
    link/ether 00:0c:29:18:28:6e brd ff:ff:ff:ff:ff:ff
    inet 192.168.239.147/24 brd 192.168.239.255 scope global ens33
       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:18:28:78 brd ff:ff:ff:ff:ff:ff
    inet 192.168.127.101/24 brd 192.168.127.255 scope global ens37
       valid_lft forever preferred_lft forever
    inet 192.168.127.199/32 brd 192.168.127.199 scope global ens37:2
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe18:2878/64 scope link 
       valid_lft forever preferred_lft forever

停掉clone2,可以看到rs1被移除

[root@localhost: ~]# 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.127.199:80 wrr
  -> 192.168.127.102:80           Route   1      0          0         
  -> 192.168.127.103:80           Route   1      0          0    

[root@clone2: ~]# systemctl stop nginx.service 
     
[root@localhost: ~]# 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.127.199:80 wrr
  -> 192.168.127.103:80           Route   1      0          0 

重启之后,就会恢复了。

注意事项:

执行ipvsadm -C  把之前的ipvsadm规则清空掉。
systemctl restart network 可以把之前的vip清空掉。
两台rs上,依然要执行/usr/local/sbin/lvs_rs.sh脚本。但是dir上只需要打开路由转发功能即可。

#keepalived有一个比较好的功能,可以在一台rs宕机时,不再把请求转发过去。
 

扩展

 

haproxy+keepalived 

 

nginx、lvs、haproxy比较 

 

keepalived中自定义脚本 vrrp_script 

 

lvs dr模式只使用一个公网ip的实现方法 

转载于:https://my.oschina.net/u/3866688/blog/2049903

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值