负载均衡集群 之 LVS (2) DR模式搭建 和 keepalived+lvs
程序员文章站
2022-07-12 17:08:24
...
4. LVS DR模式搭建
为什么不使用IP TUNNEL模式呢?
在生产环境中用的比较多的情况就是DR模式,NAT模式用的也不是太多,因为我们也说到了NAT的瓶颈问题。
如果规模在10台以内访问量不是很大且硬件配置+网络环境都可以的话建议使用NAT模式,可以节省公网IP,因为公网IP的成本也比较高。
另外一种方案就是搭建内网的LVS,全部的server均使用内网IP,我们使用一个公网IP端口映射到内网VIP的80端口即可,从而达到节省IP资源。
4.1 准备工作
三台模拟服务器
主机名 | IP地址 | 角色 |
---|---|---|
yt-01 | 192.168.2.131 | Director |
yt-02 | 192.168.2.132 | Real server 1 |
yt-03 | 192.168.2.133 | Real server 2 |
192.168.2.200 | VIP |
4.2 确保每台机器已经安装了ipvsadm服务
[[email protected] ~]# yum install -y ipvsadm
[[email protected] ~]# yum install -y ipvsadm
[[email protected] ~]# yum install -y ipvsadm
4.3 在Director上面编写脚本
[[email protected] ~]# 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脚本
[[email protected] ~]# sh /usr/local/sbin/lvs_dr.sh
成功断开设备 'ens33'。
成功**的连接(D-Bus **路径:/org/freedesktop/NetworkManager/ActiveConnection/3)
4.5 每台Real Server上也编写脚本
[[email protected] ~]# 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上运行脚本
[[email protected] ~]# sh /usr/local/sbin/lvs_rs.sh
[[email protected] ~]# sh /usr/local/sbin/lvs_rs.sh
# 查看一下每台real server的router -n
[[email protected] ~]# 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卡上
[[email protected] ~]# 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主页内容,以便区分
[[email protected] ~]# echo "rs1rs1" >/usr/share/nginx/html/index.html
[[email protected] ~]# echo "rs2rs2" >/usr/share/nginx/html/index.html
- 用浏览器测试VIP,多试几次
[[email protected] ~]# 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-01 | 192.168.2.131 | Director,安装keepalived |
yt-02 | 192.168.2.132 | Real server 1 |
yt-03 | 192.168.2.133 | Real server 2 |
无 | 192.168.2.300 | VIP |
5.2 配置director
[[email protected] ~]# yum install -y keepalived
# 自定义Keepalived配置文件
[[email protected] ~]# vim /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {
#备用服务器上为 BACKUP
state MASTER
#绑定vip的网卡为ens33,你的网卡可能不一样,这里需要你改一下
interface ens33
virtual_router_id 51
#备用服务器上为90
priority 100
#设置为不抢占,只在优先级高的机器上设置即可,优先级低的机器不设置,如果高的被down掉后,又起来,这样不会抢占。
nopreempt ##备用服务器不用写这句
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服务
[[email protected] ~]# systemctl start keepalived
查看网卡信息:
[[email protected] ~]# 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规则
[[email protected] ~]# 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
# 编辑路由转发脚本
[[email protected] ~]# 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
# 运行脚本
[[email protected] ~]# 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列表。
转载于:https://my.oschina.net/zhouyuntai/blog/1788219