Keepalived+LVS-DR 高可用负载均衡搭建
配置环境采用的是 Ubuntu 系统
LVS简介
LVS集群采用IP[负载均衡技术]和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的[虚拟服务器]。整个[服务器集群]的结构对客户是透明的,而且无需修改客户端和服务器端的程序。为此,在设计时需要考虑系统的透明性、可伸缩性、高可用性和易管理性。
NAT模式
通过网络地址转换的方法来实现调度的。首先调度器(LB)接收到客户的请求数据包时(请求的目的IP为VIP),根据调度算法决定将请求发送给哪个后端的真实服务器(RS)。然后调度就把客户端发送的请求数据包的目标IP地址及端口改成后端真实服务器的IP地址(RIP),这样真实服务器(RS)就能够接收到客户的请求数据包了。真实服务器响应完请求后,查看默认路由(NAT模式下我们需要把RS的默认路由设置为LB服务器。)把响应后的数据包发送给LB,LB再接收到响应包后,把包的源地址改成虚拟地址(VIP)然后发送回给客户端。
TUN模式(隧道模式)
调度器(LB)接收到客户请求包,进行IP Tunnel封装。即在原有的包头加上IP Tunnel的包头。然后通过IP隧道转发到真实的服务器。真实的服务器RS节点服务器根据IP Tunnel包头信息(此时就有一种逻辑上的隐形隧道,只有LB和RS之间懂)收到请求包,然后解开IP Tunnel包头信息将响应处理后的数据直接返回给客户端。
DR模式(直接路由模式)
DR模式是通过改写请求报文的目标MAC地址,将请求发给真实服务器的,而真实服务器响应后的处理结果直接返回给客户端用户。同TUN模式一样,DR模式可以极大的提高集群系统的伸缩性。而且DR模式没有IP隧道的开销,对集群中的真实服务器也没有必要必须支持IP隧道协议的要求。但是要求调度器LB与真实服务器RS都有一块网卡连接到同一物理网段上,必须在同一个局域网环境。
FULLNAT转发模式
针对淘宝业务开发的一种转发模式,FULLNAT转发数据包是类似NAT模式,IN和OUT数据包都是经过LVS;唯一的区别:后端RealServer 或者交换机不需要做任何配置。
Keepalived 安装及配置
LVS安装分为LB服务器的安装,以及客户端的安装配置,其中LB服务器(主备)安装keepalived需要对主备服务器进行不同配置。
LB服务器安装 (192.168.73.120(主)192.168.73.121(备))
1、安装keepalived
sudo apt-get install keepalived
2、(LB主服务器master 配置)创建或修改配置文件/etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs { #全局配置
# notification_email { #指定keepalived在发生切换时需要发送email到的对象,一行一个
# root@localhost #指定收件人邮箱
# }
# notification_email_from keepalived@localhost #指定发件人
# smtp_server 127.0.0.1 #指定smtp服务器地址
# smtp_connect_timeout 30 #指定smtp连接超时时间
router_id keepalived01 #此处注意router_id为负载均衡标识,在局域网内应该是唯一的。
}
vrrp_instance VI_1 {
state MASTER #指定那个为master,那个为backup,如果设置了nopreempt这个值不起作用,主备考priority决定
interface ens33 #设置实例绑定的网卡
virtual_router_id 51 #VPID标记
priority 100 #优先级,高优先级竞选为master
advert_int 1 #检查间隔,默认1秒
authentication { #设置认证
auth_type PASS
auth_pass 111333
}
virtual_ipaddress {
192.168.73.200
}
}
virtual_server 192.168.73.200 80 {
delay_loop 2
lb_algo wrr
lb_kind DR
protocol TCP
sorry_server 127.0.0.1 80
real_server 192.168.73.128 80 {
weight 3
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 1
nb_get_retry 3
delay_before_retry 1
}
}
real_server 192.168.73.129 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 1
nb_get_retry 3
delay_before_retry 1
}
}
}
3、(LB主服务器backup配置)创建或修改配置文件/etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs { #全局配置
# notification_email { #指定keepalived在发生切换时需要发送email到的对象,一行一个
# root@localhost #指定收件人邮箱
# }
# notification_email_from keepalived@localhost #指定发件人
# smtp_server 127.0.0.1 #指定smtp服务器地址
# smtp_connect_timeout 30 #指定smtp连接超时时间
router_id keepalived01 #此处注意router_id为负载均衡标识,在局域网内应该是唯一的。
}
vrrp_instance VI_1 {
state BACKUP #指定那个为master,那个为backup,如果设置了nopreempt这个值不起作用,主备考priority决定
interface ens33 #设置实例绑定的网卡
virtual_router_id 51 #VPID标记
priority 90 #优先级,高优先级竞选为master,此处设置需低于master
advert_int 1 #检查间隔,默认1秒
authentication { #设置认证
auth_type PASS
auth_pass 111333
}
virtual_ipaddress {
192.168.73.200
}
}
virtual_server 192.168.73.200 80 {
delay_loop 2
lb_algo wrr
lb_kind DR
protocol TCP
sorry_server 127.0.0.1 80
real_server 192.168.73.128 80 {
weight 3
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 1
nb_get_retry 3
delay_before_retry 1
}
}
real_server 192.168.73.129 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 1
nb_get_retry 3
delay_before_retry 1
}
}
}
4、启动keepalived服务
service keepalived start
5、查看keepalived服务状态
service keepalived status
RS客户服务器配置
1、设置虚拟IP地址(注意客户端netmask是4个255)
sudo ifconfig lo:0 172.0.1.10 netmask 255.255.255.255 broadcast 172.0.1.10
sudo ip a (查看设置是否生效)
2、将虚拟IP添加到路由表
sudo route add -host 172.0.1.10 dev lo:0
sudo route -n (查看设置是否生效)
3、抑制ARP抢包设置
sudo echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
sudo echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
sudo echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
sudo echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
arp_ignore 参数说明
0:默认值,回应任务网络接口上对任何本地IP地址的arp查询请求
1:只回答目标IP地址是来访网络接口本地地址的ARP查询请求
2:只回答目标IP地址是来访网络接口本地地址的ARP查询请求,且来访IP必须在该网络接口的子网段内。
3:不回应该网络界面的ARP请求,而只对设置的唯一和链接地址做出回应。
4-7:保留未使用。
8:不回应所有(本地地址)的arp查询。
arp_announce 参数说明
对网络接口上,本地IP地址发出的ARP回应作出相应级别的限制,确定不同程度的限制,对来自本地源IP地址发出ARP请求的接口。
0:默认,在任意网络接口上的任何本地地址。
1:进来避免不在该网络接口子网段的本地地址作出ARP回应,当发起ARP请求的源IP地址是被设置应该经由路由达到此网络接口的时候很有用。此时会检查来访IP是否为所有接口上的子网段内IP之一。如果该来访IP不属于各网络接口上的子网段内,那么将采用级别2的方式来进行处理。
2:对查询目标使用最适当的本地地址,在此模式下降忽略这个IP数据包的源地址并尝试选择能与该地址通信的本地地址,首要是选择所有的网络接口的子网中外出访问子网中包含该目标IP地址的本地地址。如果没有合适的地址呗发现,将选择当前的发送网络接口或其他的有可能接受到该ARP回应的网络接口来进行发送,限制了使用本地的VIP地址作为优先的网络接口。
4、设置开机启动虚拟IP有效(添加至 /etc/rc.local ,插入到 exit 0 之前)
ifconfig lo:0 172.0.1.10 netmask 255.255.255.255 broadcast 172.0.1.10
LVS 服务测试 (确保RS客户服务机上有web服务,且端口为80)
测试web服务请在 LB服务器及RS服务器上统一安装nginx(或其他web)服务。
LB服务器访问返回index.html 内容设置为
master(192.168.73.120):【主】RS服务器已全部下线
backup(192.168.73.121):【备】RS服务器已全部下线
RS服务器访问返回index.html 内容设置为
RS1(192.168.73.128): RS128 服务
RS2(192.168.73.129): RS129 服务
独立服务器访问测试
1、测试LB服务器(主)
curl http://192.168.73.120
返回显示 : 【主】RS服务器已全部下线
表示主LB服务器WEB服务正常
2、测试LB服务器(备)
curl http://192.168.73.120
返回显示 : 【备】RS服务器已全部下线
表示备LB服务器WEB服务正常
3、测试RS128服务器
curl http://192.168.73.128
返回显示 : RS128 服务
表示RS128服务器WEB服务正常
4、测试RS129服务器
curl http://192.168.73.129
返回显示 : RS129 服务
表示RS129服务器WEB服务正常
5、测试访问虚拟IP
curl http://192.168.73.200
返回显示 : RS129 服务
或返回显示 : RS128 服务
刷新访问地址,可见循环更换RS服务上显示的web内容
则表示lvs配置基本正常
6、深度测试虚拟IP访问
1、关闭RS128 web服务后
curl http://192.168.73.200
一直刷新访问地址
只返回显示:RS129 服务
2、继续关闭RS129 web服务
curl http://192.168.73.200
刷新访问地址
只返回显示:【主】RS服务器已全部下线
3、继续关闭主RS keepalived服务
curl http://192.168.73.200
刷新访问地址
只返回显示:【备】RS服务器已全部下线
。。。。
一下类似模拟测试