简单lvs+keepalived的搭建和使用

xiaoxiao2021-02-28  105

搭建LVS和Keepalived,使用包版本为ipvsadm-1.26和keepalived-1.3.5,环境:CentOS7

安装ipvsadm:

*需要机器支持且加载ipvs模块,通过lsmod|grep ip_vs  查看是否有相关模块,如果没有可以通过modprobe ip_vs动态加载,不过每次重启失效,想要永久生效就在/etc/sysconfig/modules下增加脚本ip_vs.modules并且chmod 755 ip_vs.modules

#!/bin/sh /sbin/modinfo -F filename ip_vs >/dev/null 2>&1 if [ $? -eq 0 ];then /sbin/modprobe ip_vs fi

需要安装的依赖包有,libnl,libnl-devel,popt,popt-devel,popt-static,部分yum源没有popt-static,通过rpm包安装popt-static,然后直接make和make install

安装keepalived:

需要openssl,openssl-devel,libnfnetlink,libnfnetlink-devel,同样是部分源没有这个包,可以通过下载tar包安装,然后./configure --prefix=/usr/local/keepalived  &&  make  &&  make install

稍微讲一下概念,LVS是指Linux Virtual Server,虚拟服务器,主要用于服务器集群的负载均衡,[集群的机器把对外的服务绑定在某个Virtual IP(简称VIP)]就是客户端访问的,而后端提供服务的是Real IP(简称RIP),对应的服务器称为Virtual Server(LVS)和Real Server(RS)]。

LVS有两种模式:

NAT模式:NAT(Network Address Translation)是一种外网和内网地址映射的技术。NAT模式下,网络数据报的进出都要经过LVS的处理。LVS需要作为RS(真实服务器)的网关。当包到达LVS时,LVS做目标地址转换(DNAT),将目标IP改为RS的IP。RS接收到包以后,仿佛是客户端直接发给它的一样。RS处理完,返回响应时,源IP是RS IP,目标IP是客户端的IP。这时RS的包通过网关(LVS)中转,LVS会做源地址转换(SNAT),将包的源地址改为VIP,这样,这个包对客户端看起来就仿佛是LVS直接返回给它的。客户端无法感知到后端RS的存在。

DR模式:

DR模式下需要LVS和RS集群绑定同一个VIP(RS通过将VIP绑定在loopback实现),但与NAT的不同点在于:请求由LVS接受,由真实提供服务的服务器(RS)直接返回给用户,返回的时候不经过LVS。详细来看,一个请求过来时,LVS只需要将网络帧的MAC地址修改为某一台RS的MAC,该包就会被转发到相应的RS处理,注意此时的源IP和目标IP都没变,LVS只是做了一下移花接木。RS收到LVS转发来的包时,链路层发现MAC是自己的,到上面的网络层,发现IP也是自己的,于是这个包被合法地接受,RS感知不到前面有LVS的存在。而当RS返回响应时,只要直接向源IP(即用户的IP)返回即可,不再经过LVS。

开始搭建LVS+Keepalived

配置RS:

网上有提供对应的启动脚本,比较方便,这里稍微介绍脚本

VIP=192.168.100.20 #对外提供服务的ip地址 case "$1" in start) ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP #通过lo:0网卡别名绑定vip地址 /sbin/route add -host $VIP dev lo:0 #添加路由 echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore #这四句是为了关闭arp广播响应[下文详讲] 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 sysctl -p >/dev/null 2>&1 echo "RealServer Start OK" ;; stop) ifconfig lo:0 down /sbin/route del $VIP >/dev/null 2>&1 echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce echo "RealServer Stoped" ;; *) echo "Usage: $0 {start|stop}" exit 1 esac exit 0

关于关闭arp广播响应:

arp_ignore:定义对目标地址为本地ip的arp询问不同的应答模式0 

0 - (默认值): 回应任何网络接口上对任何本地ip地址的arp查询请求 

1 - 只回答目标ip地址是来访网络接口本地地址的arp查询请求 

2 -只回答目标ip地址是来访网络接口本地地址的arp查询请求,且来访ip必须在该网络接口的子网段内 

3 - 不回应该网络界面的arp请求,而只对设置的唯一和连接地址做出回应 

4-7 - 保留未使用 

8 -不回应所有(本地地址)的arp查询

arp_announce:对网络接口上,本地ip地址的发出的,arp回应,作出相应级别的限制: 确定不同程度的限制,宣布对来自本地源ip地址发出arp请求的接口 

0 - (默认) 在任意网络接口(eth0,eth1,lo)上的任何本地地址 

1 -尽量避免不在该网络接口子网段的本地地址做出arp回应,当发起arp请求的源ip地址是被设置应该经由路由达到此网络接口的时候很有用,此时会检查来访ip是否为所有接口上的子网段内ip之一,如果改来访ip不属于各个网络接口上的子网段内,那么将采用级别2的方式来进行处理

2 - 对查询目标使用最适当的本地地址.在此模式下将忽略这个ip数据包的源地址并尝试选择与能与该地址通信的本地地址,首要是选择所有的网络接口的子网中外出访问子网中包含该目标ip地址的本地地址,如果没有合适的地址被发现,将选择当前的发送网络接口或其他的有可能接受到该arp回应的网络接口来进行发送

Keepalived配置(MASTER):

以下是一个简单的配置方案

global_defs { notification_email { admin@youngyuyeah.com #出现keepalived告警时,邮件通知此邮箱 } notification_email_from root@youngyuyeah.com #发件人名称 smtp_server 192.168.100.2 #发邮服务器的ip smtp_connection_timeout 30 #连接发邮服务器的时间 router_id LVS_DEVEL #设置lvs的id,唯一标识符 } vrrp_instance VI_1 { #定义一个vrrp域 state MASTER #指定keepalived的为MASTER(需要大写) interface eth0 #指定VIP绑定网卡 virtual_router_id 51 #虚拟路由编号,同一vrrp域内MASTER和BACKUP要相同 priority 100 #优先级,数字越大,优先级越高,主必须大于从 advert_int 1 #检查间隔,默认为1s authentication { #主从间通讯密码 auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.100.20 #定义VIP为192.168.100.20,可以有多个,换行写 } } virtual_server 192.168.100.20 80 { delay_loop 6 #设置健康检查时间,单位是秒 lb_algo wrr #设置负载调度的算法为wlc lb_kind DR #设置LVS实现负载的机制,有NAT、TUN、DR三个模式 nat_mask 255.255.255.0 persistence_timeout 0 protocol TCP real_server 192.168.100.21 80 { #指定RS的IP地址 weight 3 #配置节点权值,数字越大权重越高 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } real_server 192.168.100.22 80 { #另一个RS的IP地址 weight 3 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } 而Keepalived(BACKUP)的配置可以在MASTER的基础上修改几个地方即可: vrrp_instance VI_1 { state BACKUP #这里改为BACKUP interface eth0 virtual_router_id 51 priority 99 #这里改为99,master优先级是100 nopreempt #[如果需要backup机器切换之后维持主的身份,可以添加这个项] advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.100.20 } }

最后测试:

①启动两台机器,通过ipvsadm -L -n 是否已经有对应RIP的均衡池,

②访问VIP看是否正常(两台keepalived只有一台能有VIP,同时出现是有异常的)

③停止其中RS的web服务,看是否会切换至另一个RS

④模拟MASTER宕机,通过ifconfig查看VIP是否漂移至BACKUP上。

更多的使用方法,后期再继续补充

转载请注明原文地址: https://www.6miu.com/read-63243.html

最新回复(0)