您的位置:首页 > 其它

负载均衡集群 之 LVS (2) DR模式搭建 和 keepalived+lvs

2018-04-01 00:00 1406 查看

4. LVS DR模式搭建

为什么不使用IP TUNNEL模式呢?

在生产环境中用的比较多的情况就是DR模式,NAT模式用的也不是太多,因为我们也说到了NAT的瓶颈问题。

如果规模在10台以内访问量不是很大且硬件配置+网络环境都可以的话建议使用NAT模式,可以节省公网IP,因为公网IP的成本也比较高。

另外一种方案就是搭建内网的LVS,全部的server均使用内网IP,我们使用一个公网IP端口映射到内网VIP的80端口即可,从而达到节省IP资源。

4.1 准备工作

三台模拟服务器

主机名IP地址角色
yt-01192.168.2.131Director
yt-02192.168.2.132Real server 1
yt-03192.168.2.133Real server 2
192.168.2.200VIP

4.2 确保每台机器已经安装了ipvsadm服务

[root@yt-01 ~]# yum install -y ipvsadm
[root@yt-02 ~]# yum install -y ipvsadm
[root@yt-03 ~]# yum install -y ipvsadm

4.3 在Director上面编写脚本

[root@yt-01 ~]# vim /usr/local/sbin/lvs_dr.sh

#! /bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward
ipv=/usr/sbin/ipvsadm
vip=192.168.2.200
rs1=192.168.2.122
rs2=192.168.2.123
#注意这里的网卡名字
ifdown ens33
ifup ens33
ifconfig ens33:2 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip dev ens33:2
$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

4.4 运行DR上lvs_dr脚本

[root@yt-01 ~]# sh /usr/local/sbin/lvs_dr.sh
成功断开设备 'ens33'。
成功激活的连接(D-Bus 激活路径:/org/freedesktop/NetworkManager/ActiveConnection/3)

4.5 每台Real Server上也编写脚本

[root@yt-02 ~]# vim /usr/local/sbin/lvs_dr.sh

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

4.6 每台Real Server上运行脚本

[root@yt-02 ~]# sh /usr/local/sbin/lvs_rs.sh
[root@yt-03 ~]# sh /usr/local/sbin/lvs_rs.sh

# 查看一下每台real server的router -n
[root@zhdy-02 ~]# route -n
Kernel IP routing table
Destination    Gateway        Genmask        Flags Metric Ref    Use Iface
0.0.0.0        192.168.2.2    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.200  0.0.0.0        255.255.255.255 UH    0      0        0 lo

# 查看IP是否已经绑在lo卡上
[root@yt-02 ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
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.200/32 brd 192.168.2.200 scope global lo:0

4.7 测试

测试前一定要全部关闭iptables

# systemctl stop firewalld
# systemctl disable firewalld


修改2个RS的nginx主页内容,以便区分

[root@yt-02 ~]# echo "rs1rs1" >/usr/share/nginx/html/index.html
[root@yt-03 ~]# echo "rs2rs2" >/usr/share/nginx/html/index.html


用浏览器测试VIP,多试几次

[root@zhdy-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.200:80 wrr
-> 192.168.2.122:80            Route  1      1          9
-> 192.168.2.123:80            Route  1      1          8

5. keepalived + LVS

LVS有个关键的点,也是致命点。所有的请求都会通过Director去转发到Real server 如果Director宕机,我们的所有服务均会被停止掉。所以我们会把keepalived放在这儿,实现DR的高可用,这样就会完美的解决问题!

完整架构需要两台服务器(角色为dir)分别安装keepalived软件,目的是实现高可用,但keepalived本身也有负载均衡的功能,所以本次实验可以只安装一台keepalived。

5.1 准备工作

主机名IP地址角色
yt-01192.168.2.131Director,安装keepalived
yt-02192.168.2.132Real server 1
yt-03192.168.2.133Real server 2
192.168.2.300VIP

5.2 配置director

[root@yt-01 ~]# yum install -y keepalived

# 自定义Keepalived配置文件
[root@yt-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 123456
}
virtual_ipaddress {
192.168.2.300
}
}
virtual_server 192.168.2.300 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.2.132 80 {
#(权重)
weight 100
TCP_CHECK {
#(10秒无响应超时)
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.1682.133 80 {
weight 100
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}

# 启动Keepalived服务
[root@yt-01 ~]# systemctl start keepalived

查看网卡信息:
[root@yt-01 ~]# ip add
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:be:0e:17 brd ff:ff:ff:ff:ff:ff
inet 192.168.2.131/24 brd 192.168.2.255 scope global ens33
valid_lft forever preferred_lft forever
inet 192.168.2.300/32 scope global ens33
valid_lft forever preferred_lft forever
inet6 fe80::592f:39cc:1b50:1d07/64 scope link
valid_lft forever preferred_lft forever
#虚拟IP(VIP)在ens33网卡上

# 查看ipvsadm规则
[root@director ~]# 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.300:80 wlc
-> 192.168.2.132:80            Route  100    0          0
-> 192.168.2.133:80            Route  100    0          0

5.3 配置Real Server

# 编辑路由转发脚本
[root@yt-02 ~]# vim /usr/local/sbin/lvs_rs.sh

#/bin/bash
vip=192.168.2.300
#把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

# 运行脚本
[root@yt-02 ~]# sh /usr/local/sbin/lvs_rs.sh

RS3上同上

配置完成

5.4 测试

在浏览器访问VIP:192.168.2.300,刷新网页,访问结果由RS1、RS2交替回复,停掉任意一台RS服务器,网页不会中断。

5.5 Keepalived+LVS作用

Keepalived搭建高可用保证LVS中director宕机后服务器不瘫痪(用多台Director)

如果只使用LVS,那么当LVS架构中某个real server宕机后,director仍然会继续向其发送请求,添加Keepalived后会自动将宕机的real server清除出rs列表。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  lvs