设为首页 收藏本站
查看: 1304|回复: 0

[经验分享] LVS DR NAT keepalived

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-8-24 08:56:52 | 显示全部楼层 |阅读模式
LVS 架构
LVS是一个实现负载均衡集群的开源软件项目,LVS架构从逻辑上可分为调度层(Director)、server集群层(Real server)和共享存储层。
wKiom1XZ5ZOjVVHEAAEp3YOrOYY406.jpg

LVS-DR
DR(调度器将请求来的数据包的目标mac地址改为real server的mac地址,返回的时候也不经过调度器,直接返回给客户端),其实该过程就就是利用“以太网”通讯是通过mac地址的原理,从而让realserver将数据直接返回给目标地址,而不经过DR返回数据 wKioL1XZ58jxtt-oAAFCDduseQo883.jpg
案例lvs-dr

第一步:完成IP地址的配置以及网络配置


第二步:安装相应软件
在RS-1和RS-2上安装nginx,方便测试
yum -y install nginx
Director上安装ipvsadm
yum -yinstall ipvsadm

第三步:配置DR

vim /usr/local/sbin/lvs_dr.sh
#! /bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward             #启动路由转发功能
ipv=/sbin/ipvsadm
vip=172.16.1.100
rs1=172.16.1.2
rs2=172.16.1.3
ifconfig eth1:0 $vipbroadcast $vip netmask 255.255.255.255 up
route add -host $vip dev eth1:0
$ipv -C                                         #清除ipvsadm的规则
$ipv -A -t $vip:80 -s wrr                          #加权轮训算法
#-A 在内核的虚拟服务器表中添加一条新的虚拟服务器记录。也就是增加一台新的虚拟服务器。
#-a
#-s 表示使用的调度算法,有这样几个选项rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,默认的调度算法是: wlc
#调度算法

$ipv -a -t $vip:80 -r $rs1:80 -g -w 1
$ipv -a -t $vip:80 -r $rs2:80 -g -w 1

#-a 在内核虚拟服务器表的一条记录里添加一条新的真实服务器记录。也就是在一个虚拟服务器中增加一台新的真实服务器
#-t 说明虚拟服务器提供的是tcp的服务[vip:port] or[real-server-ip:port]
#-r 真实的服务器[Real-Server:port]
#-g 指定LVS 的工作模式为直接路由模式
#-w 真实服务器的权值,如上的配置,两天服务器的权重一样,如访问两次服务,那么一次在rs1上,一次在rs2上。


第四步:配置RS
两台rs上:vim /usr/local/sbin/lvs_dr_rs.sh
#! /bin/bash
vip=172.16.1.100
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip 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

第五步:启动脚本
然后director上执行: bash /usr/local/sbin/lvs_dr.sh
两台rs上执行: bash/usr/local/sbin/lvs_dr_rs.sh

第六步:在RS-1和RS-2上配置用于测定的web页面,web.html

RS-1上的配置: echo "rs1 web server" >/usr/share/nginx/html/web.html
RS-2上的配置: echo "rs2 web server" >/usr/share/nginx/html/web.html

注意:需启动nginx

第7步:通过curl 172.16.1.100/web.html,其执行结果如下

wKiom1XZ5dzRek7ZAAD-zOzxgbw291.jpg

第8步:在DR上通过ipvsadm可以查看到如下的InActConn为7:7与其定义的 wrr调度方式一致。
wKioL1XZ5_zRJCWoAACUeTk6SwA943.jpg

其中在这三种IP负载均衡的技术中,DR和TUN模式都需要在真实服务器上对arp_ignore和arp_announce参数进行配置,主要是实现禁止响应对VIP的ARP请求。

在lvs环境中,需要设定以下的参数

echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore

echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore

echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce

echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce


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回应的网络接口来进行发送.



三、调度算法
LVS主要的调度算法
轮询调度-加权轮询调度-最小连接调度-加权最小连接调度-基于局部性的最少连接-
带复制的基于局部性的最少连接-目标地址散列调度-源地址散列调度

1:轮询算法(RR)就是按依次循环的方式将请求调度到不同的服务器上,该算法最大的特点就是实现简单。轮询算法假设所有的服务器处理请求的能力都是一样的,调度器会将所有的请求平均分配给每个真实服务器
2:加权轮询算法(WRR)主要是对轮询算法的一种优化与补充,LVS会考虑每台服务器的性能,并给每台服务器添加一个权值,如果服务器A的权值为1,服务器B的权值为2,则调度到服务器B的请求会是服务器A的两倍。权值越高的服务器,处理的请求越多。
3:最小连接调度算法(LC)将把请求调度到连续数量最小的服务器上,
4:加权最小连接算法(WLC)则是给每台服务器一个权值,调度器会尽可能保持服务器连接数量与权值之间的平衡
5:基于局部性的最少连接调度算法(lblc)是请求数据包的目标IP地址的一种调度算法,该算法先根据请求的目标IP地址寻找最近的该目标IP地址所有使用的服务器,如果这台服务器依然可用,并且用能力处理该请求,调度器会尽量选择相同的服务器,否则会继续选择其他可行的服务器。
6:带复杂的基于局部性最少的连接算法(lblcr)激励的不是一个目标IP与一台服务器之间的连接记录,他会维护一个目标IP到一组服务器之间的映射关系,防止单点服务器负责过高
7:目标地址散列调度算法(DH)也是根据目标IP地址通过散列函数将目标IP与服务器建立映射关系,出现服务器不可用或负载过高的情况下,发往该目标IP的请求会固定发给该服务器。
8:源地址散列调度算法(SH)与目标地址散列调度算法类似,但它是根据源地址散列算法进行静态分配固定的服务器资源

LVS+keeplived
ipvsadm的缺陷是不能判断realserver是否存活,从而导致数据还是会根据dr的调度,发送到存在问题的服务器上。而keepalived就存在检查机制,一单检测到realserver出现故障,就在ipvsadm的表中删除映射关系,从而保证数据的有效性。
keepalived会根据keepalived的配置,自动完成dr的配置,不用单独配置ipvsadm。

wKioL1XZ6BuxjVmDAAEAFzku-Uw044.jpg

本实验主要针对master进行配置,用于测试是否可以完成负载

注意:前面虽然我们已经配置过一些操作,但是下面我们使用keepalived操作和之前的操作是有些冲突的,所以若是之前配置过DR,请首先做如下操作:dr上执行:

ipvsadm -C
ifconfig eth1:0  down


第一步:安装keepalived
yum install-y keepalived

第二步:安装好后,编辑配置文件  
vim /etc/keepalived/keepalived.conf  #建议备份keepalived.conf的原始配置

vrrp_instance VI_1 {
    state MASTER                  #备用服务器上为 BACKUP
    interface eth1
    virtual_router_id 51
    priority 100                    #备用服务器上为90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.0.200
    }
}
virtual_server 192.168.0.200 80 {
    delay_loop 6                   #(每隔10秒查询realserver状态)
    lb_algo wlc                    #(lvs 算法)
    lb_kind DR                    #(Direct Route)
    persistence_timeout 60        #(同一IP的连接60秒内被分配到同一台realserver)
    protocol TCP                  #(用TCP协议检查realserver状态)

    real_server 192.168.0.116 80 {
        weight 100                 #(权重)
        TCP_CHECK {
        connect_timeout 10       #(10秒无响应超时)
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
    }
  real_server 192.168.0.117 80 {
        weight 100
        TCP_CHECK {
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
     }
}

第三步:DR和RS的其他配置
以上为主director的配置文件,从director的配置文件只需要修改
state MASTER  -> state BACKUP
priority 100 -> priority 90
配置完keepalived后,需要开启端口转发(主从都要做):
echo 1 > /proc/sys/net/ipv4/ip_forward
最后,两个director上启动keepalived服务(先主后从):
/etc/init.d/keepalived start
另外,需要注意的是,启动keepalived服务会自动生成vip和ipvsadm规则,不需要再去执行上面提到的/usr/local/sbin/lvs_dr.sh 脚本。

然后,两个rs上执行 /usr/local/sbin/lvs_dr_rs.sh脚本(如上所示的lvs DR配置的rs脚本)

第四步:关闭192.168.0.117的eth1网口,如下所示,表示keepalived的切换过程
wKiom1XZ5hPgdWVVAAFQ2gc7O2I830.jpg


三、LVS-NAT
如下图所示,当192.168.0.111访问realserver提供的服务时,会将请求发送给DR,DR根据其调度算法,确定是将该请求发送给realserver1还是realserver2,当realserver收到该请求后,会将回应信息发送给DR,再由DR回应给192.168.0.111。这就是LVS-NAT的一个工作原理。
wKioL1XZ6DqAI23VAAC3Apofebo344.jpg

案例:
需求:三台服务器一台作为director, 两台作为real server
       Director 有一个外网ip (192.168.0.115) 和一个内网ip(172.16.1.1), 两个real server上只有内网ip(172.16.1.2)和(172.16.1.3) 并且需要把两个real server的内网网关设置为director的内网ip(172.16.1.1)。

第一步:配置IP和网络信息
略……
第二步:DR上的配置如下脚本(命名为lvs_nat.sh)

#! /bin/bash
# director 服务器上开启路由转发功能:
echo 1 > /proc/sys/net/ipv4/ip_forward
# 关闭icmp的重定向
echo 0 >/proc/sys/net/ipv4/conf/all/send_redirects
echo 0 >/proc/sys/net/ipv4/conf/default/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/eth1/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/eth2/send_redirects

# director 设置nat防火墙
iptables -t nat -F
iptables -t nat -X
iptables -t nat -A POSTROUTING -s172.16.1.0/24  -j MASQUERADE
# director设置ipvsadm
IPVSADM='/sbin/ipvsadm'
$IPVSADM -C
$IPVSADM -A -t 192.168.0.200:80 -s  wrr        
$IPVSADM -a -t 192.168.0.200:80 -r172.16.1.2:80 -m -w 1
$IPVSADM -a -t 192.168.0.200:80 -r172.16.1.3:80 -m -w 1

第三步:运行lvs_nat.sh脚本
sh lvs_nat.sh
第四步:安装nginx,在目录的html目录下,配置如下内容(测试使用),并启动nginx
rs1上: echo "rs1 server" >/usr/share/nginx/html/index.html
rs2上: echo "rs2server" >/usr/share/nginx/html/index.html

第五步:测试结果
QQ截图20150824085640.png



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-103236-1-1.html 上篇帖子: lvs DR模式 +keepalived 实现directory 高可用、httpd服务负载均衡集群 下篇帖子: LVS+Keepalived负载均衡
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表