LVS简介及基于Keepalive实现LVS高可用集群

一、LVS简介
LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器,是一个由章文嵩博士发起的自由软件项目,官方站点是:http://www.linuxvirtualserver.org。现在LVS已经是Linux标准内核的一部分,在Linux2.4内核以前,使用LVS时必须重新编译内核以支持LVS功能模块,但是从Linux2.4内核心之后,已经完全内置了LVS的各个功能模块,无需给内核打任何补丁,可以直接使用LVS提供的各种功能。
使用LVS技术要达到的目标是:通过LVS提供的负载均衡技术和Linux操作系统实现一个高性能,高可用的服务器群集,它具有良好的可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的服务性能。

二、LVS体系架构
使用LVS架设的服务器集群系统有三个部分组成:最前端的负载均衡层(Loader Balancer),中间的服务器群组层,用Server Array表示,最底层的数据共享存储层,用Shared Storage表示。在用户看来所有的应用都是透明的,用户只是在使用一个虚拟服务器提供的高性能服务。

三、LVS基本工作原理
1、当用户向负载均衡调度器(Director Server)发起请求,调度器将请求发往至内核空间
2、 PREROUTING链首先会接收到用户请求,判断目标IP确定是本机IP,将数据包发往INPUT链
3、 IPVS是工作在INPUT链上的,当用户请求到达INPUT时,IPVS会将用户请求和自己已定义好的集群服务进行比对,如果用户请求的就是定义的集群服务,那么此时IPVS会强行修改数据包里的目标IP地址及端口,并将新的数据包发往POSTROUTING链
4、 POSTROUTING链接收数据包后发现目标IP地址刚好是自己的后端服务器,那么此时通过选路,将数据包最终发送给后端的服务器

四、LVS相关术语
1、 DS:Director Server。指的是前端负载均衡器节点。
2、 RS:Real Server。后端真实的工作服务器。
3、 VIP:向外部直接面向用户请求,作为用户请求的目标的IP地址。
4、 DIP:Director Server IP,主要用于和内部主机通讯的IP地址。
5、 RIP:Real Server IP,后端服务器的IP地址。
6、 CIP:Client IP,访问客户端的IP地址

五、三种模式及原理
一)LVS-NAT原理和特点
多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和PORT实现转发
1.当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP
2. PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链
3. IPVS比对数据包请求的服务是否为集群服务,若是,修改数据包的目标IP地址为后端服务器IP,后将数据包发至POSTROUTING链。 此时报文的源IP为CIP,目标IP为RIP
4. POSTROUTING链通过选路,将数据包发送给Real Server
5. Real Server比对发现目标为自己的IP,开始构建响应报文发回给Director Server。 此时报文的源IP为RIP,目标IP为CIP
6. Director Server在响应客户端前,此时会将源IP地址修改为自己的VIP地址,然后响应给客户端。 此时报文的源IP为VIP,目标IP为CIP
LVS-NAT模式的特性
(1) RS应该和DIP应该使用私网地址,且RS的网关要指向DIP;
(2) 请求和响应报文都要经由director转发;极高负载的场景中,director可能会成为系统瓶颈;
(3) 支持端口映射;
(4) RS可以使用任意OS;
(5) RS的RIP和Director的DIP必须在同一IP网络;
缺陷:对Director Server压力会比较大,请求和响应都需经过director server

二)LVS-DR原理和特点
通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目标IP/PORT均保持不变;
1、当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP
2、PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链
3、 IPVS比对数据包请求的服务是否为集群服务,若是,将请求报文中的源MAC地址修改为DIP的MAC地址,将目标MAC地址修改RIP的MAC地址,然后将数据包发至POSTROUTING链。 此时的源IP和目的IP均未修改,仅修改了源MAC地址为DIP的MAC地址,目标MAC地址为RIP的MAC地址
4、 由于DS和RS在同一个网络中,所以是通过二层来传输。POSTROUTING链检查目标MAC地址为RIP的MAC地址,那么此时数据包将会发至Real Server。
5、 RS发现请求报文的MAC地址是自己的MAC地址,就接收此报文。处理完成之后,将响应报文通过lo接口传送给eth0网卡然后向外发出。 此时的源IP地址为VIP,目标IP为CIP
6、 响应报文最终送达至客户端
LVS-DR模式的特性
(1) 确保前端路由器将目标IP为VIP的请求报文发往Director:
(a) 在前端网关做静态绑定;
(b) 在RS上使用arptables;
© 在RS上修改内核参数以限制arp通告及应答级别;
修改RS上内核参数(arp_ignore和arp_announce)将RS上的VIP配置在lo接口的别名上,并限制其不能响应对VIP地址解析请求。
(2) RS的RIP可以使用私网地址,也可以是公网地址;RIP与DIP在同一IP网络;RIP的网关不能指向DIP,以确保响应报文不会经由Director;
(3) RS跟Director要在同一个物理网络;
(4) 请求报文要经由Director,但响应不能经由Director,而是由RS直接发往Client;
(5) 不支持端口映射;
缺陷:RS和DS必须在同一机房中

六. Keepalived的概述
6.1 Keepalived的功能
keepalived 主要是用来提供故障切换和健康检查功能-----判断LVS负载调度器,节点服务器的可用性,及时隔离并替换为新的服务器,当故障主机恢复后将其重新加入集群。

6.2 Keepalived 的热备方式
keepalivefd 采用VRRP(虚拟路由冗余协议)热备份协议,以软件的方式实现linux服务器的多机热备功能。
注意:使用Keepalived时,漂移IP地址不需要手动建立虚接口配置文件如(ens33:0),而是由Keepalived 根据配置文件自动管理。

七. LVS + Keepalived 高可用集群配置
7.1 LVS + Keepalived 高可用集群的意义
Keepalived 的设计目的是构建高可用的LVS负载均衡群集,可以调用ipvsadm工具来创建虚拟服务器,管理服务器池,而不仅仅用作双机热备。使用Keepalived 构建LVS群集更加简便易用,主要优势体现在:对LVS负载均衡调度器实现热备切换,提高可用性;对服务器池中的节点进行健康检查,自动移除失效节点,恢复后再重新加入。
注意:使用Keepalived 构建LVS集群时,也需要用到ipvsadm管理工具,但大部分工作会由Keepalived 自动完成,不需要手动执行ipvsadm(除了查看和监控集群以外)

7.2 Keepalived + LVS 高可用集群实验规划
主调度器: IP:20.0.0.23 VIP:20.0.0.100
从调度器: IP:20.0.0.24 VIP:20.0.0.100
web节点服务器1:IP:20.0.0.26 lo:0: 20.0.0.100
web节点服务器2:IP: 20.0.0.27 lo:0: 20.0.0.100
存储服务器: IP: 20.0.0.28

7.3 配置主服务器
7.31 调整/proc响应参数
对于DR群集模式来说,由于LVS负载调度器和各节点需要共用VIP地址,应该关闭Linux 内核的重定向参数。

[root@localhost network-scripts]# vi /etc/sysctl.conf
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0

[root@localhost network-scripts]# sysctl -p ###生效
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0

7.32 配置Keepalived 配置文件
全局配置,热备配置
首先应从主,从调度器实现热备功能,漂移地址使用LVS群集的VIP地址。Keepalived的配置文件中,使用“global_defs {…}" 区段来指定全局参数,使用“vrrp_instance 实例名称 {…}” 区段指定VRRP热备参数,注释文字以“!”符号开头

[root@localhost etc]# yum -y install keepalived ipvsadm
[root@localhost keepalived]# vi /etc/keepalived/keepalived.conf
global_defs {
router_id HA_TEST_R1 //主调度器的名称
}
vrrp_instance VI_1 { //定义VRRP热备实例
state MASTER //主调度器的热备状态
interface ens33 //承载VIP接口的物理接口
virtual_router_id 1 //虚拟路由器的ID号,每个热备组保持一致
priority 100 //主调度器的优先级,越大越优先
advert_int 1 //通告间隔秒数(心跳频率)
authentication { //主从热备认证信息
auth_type PASS //认证类型
auth_pass 123456 //密码子串
}
virtual_ipaddress { //指定群集VIP地址
20.0.0.100
}
}

WEB服务器池配置
在Keepalived 的热备配置基础上,添加“virtual_server VIP 端口 {…} " 区段来配置虚拟服务器,主要包括对负载调度算法,集群工作模式,健康检查间隔,真实服务器地址等参数的设置。

virtual_server 20.0.0.100 80 { //虚拟服务器地址(VIP),端口
delay_loop 15 //健康检查的间隔时间(秒)
lb_algo rr //轮询调度算法(rr)
lb_kind DR //直接路由(DR)群集工作模式
!rsistence 60 //连接保持时间(秒),启用需要去掉!号
protocol TCP //应用服务采用的是TCP协议
real_server 20.0.0.27 80 { //第一个web节点的地址端口
weight 1 //节点的权重
TCP_CHECK { //健康检查的方式
connect_port 80 //检查的目标端口
connect_timeout 3 //连接超时(秒)
nb_get_retry 3 //重试次数
delay_before_retry 4 //充实间隔(秒)
}
}

  real_server 20.0.0.26 80 {   //第二个web节点服务器的地址,端口
    weight 1
    TCP_CHECK {
        connect_port 80
        connect_timeout 3
        nb_get_retry 3
        delay_before_retry 4
    }
}

}

启动keepalived服务
[root@localhost keepalived]# systemctl start keepalived
[root@localhost keepalived]# systemctl enable keepalived

###查看VIP地址###
[root@localhost etc]# ip addr show ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:09:d7:1f brd ff:ff:ff:ff:ff:ff
inet 20.0.0.23/24 brd 20.0.0.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet 20.0.0.100/32 scope global ens33
valid_lft forever preferred_lft forever
inet6 fe80::d11b:e35b:5200:54ba/64 scope link noprefixroute
valid_lft forever preferred_lft forever

注意:MASTER的主服务器将ens33接口自动添加VIP地址,通过ip命令可以查看(ifconfig命令看不到)
7.4 配置从调度器
7.41 调整/proc响应参数
对于DR群集模式来说,由于LVS负载调度器和各节点需要共用VIP地址,应该关闭Linux 内核的重定向参数。

[root@localhost network-scripts]# vi /etc/sysctl.conf
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0

[root@localhost network-scripts]# sysctl -p ###生效
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0

7.42 修改从调度器配置文件
从调度器的配置文件与主调度器的配置文件基本相同,也包括全局配置,热备配置,服务器池配置。只需要调整route_id, state, priority 参数即可,其余内容完全相同。

[root@localhost etc]# yum -y install keepalived ipvsadm
[root@localhost keepalived]# vi /etc/keepalived/keepalived.conf
global_defs {
router_id HA_TEST_R2 //从调度器的名称
}
vrrp_instance VI_1 { //定义VRRP热备实例
state BACKUP //从调度器的热备状态
interface ens33 //承载VIP接口的物理接口
virtual_router_id 1 //虚拟路由器的ID号,每个热备组保持一致
priority 99 //主调度器的优先级,越大越优先
… //省略部分信息
}
virtual_server 20.0.0.100 80 {

}

7.43 开启keepalived 服务
[root@localhost keepalived]# systemctl start keepalived
[root@localhost keepalived]# systemctl enable keepalived

###查看VIP地址###
[root@localhost ~]# ip addr show ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:7c:68:da brd ff:ff:ff:ff:ff:ff
inet 20.0.0.24/24 brd 20.0.0.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet6 fe80::dc5:de30:9e5:aac/64 scope link noprefixroute
valid_lft forever preferred_lft forever

注意:主调度器没有发生故障,在从调度器里是查看不了VIP地址的,当主调度器down掉时可查看漂移地址。

7.5 配置节点服务器 (20.0.0.26)
2.51 配置虚拟IP地址
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-lo ifcfg-lo:0
[root@localhost network-scripts]# vi ifcfg-lo:0
DEVICE=lo:0
IPADDR=20.0.0.100
NETMASK=255.255.255.255
ONBOOT=yes
[root@localhost network-scripts]# ifup lo:0

7.52 调整/proc响应参数
[root@localhost network-scripts]# vi /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2

[root@localhost network-scripts]# sysctl -p

7.53 为虚拟接口lo:0配置VIP地址
DR模式,除了需要调整/proc系统的ARP相应参数以外,还需要为虚拟接口lo:0配置VIP地址,并添加一条VIP的本地路由。

[root@localhost network-scripts]# vi /etc/rc.local
/sbin/route add -host 20.0.0.100 dev lo:0

[root@localhost network-scripts]# route add -host 20.0.0.100 dev lo:0

7.54 挂载共享存储服务器
网站首页目录与存储服务器进行挂载

[root@localhost ~]# yum -y install nfs-utils
[root@localhost ~]# showmount -e 192.168.100.44 ####如果还没发布,请到存储服务器发布下
[root@localhost ~]# yum -y install httpd
[root@localhost ~]# mount 192.168.100.44:/opt/51xit /var/www/html/
[root@localhost ~]# vi /etc/fstab
192.168.100.44:/opt/51xit/ /var/www/html/ nfs defaults,_netdev 0 0

[root@localhost ~]# systemctl start httpd
[root@localhost ~]# systemctl enable httpd
[root@localhost ~]# systemctl start rpcbind nfs
[root@localhost ~]# systemctl enable rpcbind nfs

7.6 配置节点服务器 (20.0.0.27)
20.0.0.27节点服务器的配置与20.0.0.26节点服务器的配置几乎完全一致,参考节点服务器20.0.0.26进行配置,这里不作叙述。

7.7 配置存储服务器
[root@localhost ~]# yum -y install nfs-utils
[root@localhost ~]# yum -y install rpcbind
[root@localhost ~]# systemctl start rpcbind
[root@localhost ~]# systemctl start nfs

[root@localhost ~]# vi /etc/exports
/opt/51xit 192.168.100.0/24 (rw,sync)
/opt/52xit 192.168.100.0/24 (rw,sync)

[root@localhost ~]# systemctl restart nfs
[root@localhost ~]# systemctl restart rpcbind
[root@localhost ~]# systemctl enable nfs
[root@localhost ~]# systemctl enable rpcbind
[root@localhost ~]# mkdir /opt/51xit /opt/52xit
[root@localhost ~]# echo “this is 51xit” >/opt/51xit/index.html
[root@localhost ~]# echo “this is 52xit” >/opt/52xit/index.html

测试LVS(DR模式)+ Keepalived 高可用集群

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值