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

[经验分享] LVS 之 集群设计

[复制链接]

尚未签到

发表于 2019-1-2 13:29:01 | 显示全部楼层 |阅读模式
1  概述
负载均衡集群设计时要注意两点:一是否需要会话保持;二是否需要共享存储,共享存储分为NASSANDS(分布式存储)
本文结合实验介绍了lvs-nat,lvs-dr,FWM的实现,同时介绍持久连接的相关配置
2  lvs-nat
设计要点:
(1) RIPDIP在同一IP网络, RIP的网关要指向DIP
(2) 支持端口映射
(3) Director要打开核心转发功能
实验:VS实现LVS-NAT模式的调度
实验环境准备:
iptables,selinux,关闭,服务器时间同步。
内网网段:172.18.0.0/16
外网网段:192.168.32.0/24
RS1 RS2分别开启httpS服务
client配置172网段ip:172.18.50.65
VS配置两个网卡,分别配置172网段和192网段,eth0 ip 172.18.50.72  eth1 ip 192.168.32.72
RS两台配置192网段 RS1 ip:192.168.32.63  RS2 ip: 192.168.32.73
RS1 RS2的网关要指向 VS 的192.168.32.72
client 网关指向 VS 172.18.50.72
拓扑图如下
DSC0000.jpg

VS上配置如下三条命令
ipvsadm -A -t 172.18.50.72:443 -s rr
ipvsadm -a -t 172.18.50.72:443 -r 192.168.32.63:443 -m
ipvsadm -a -t172.18.50.72:443 -r 192.168.32.73 -m如果改规则的时候出现报错,内存分配问题(Memory allocation problem),解决办法,清掉规则,全部重新添加
RS上配置https
VS上要启用路由转发功能。
echo 1 > /proc/sys/net/ipv4/ip_forward转发功能要永久存盘,

centos7写入/etc/sysctl.d/99-sysctl.conf文件里
vim /etc/sysctl.d/99-sysctl.conf
net.ipv4.ip_forward=1然后重启网络后生效
centos6写入/etc/sysctl.conf文件
/etc/sysctl.conf
net.ipv4.ip_forward=1安装http和mod_ssl模块
yum –y install httpd mod_ssl生成证书

注意,证书可以向CA中心申请,这个案例介绍如何生成自己前面的证书的另一个方法
生成自签名的证书
cd /etc/pki/tls/certs
make http.crt生成证书http.crt和私有http.key,这里生成key时需要输入密码,这样每次重启httpd服务的时候,需要输入密码才能成功启动
去掉证书密码的命令如下
openssl rsa –in http.key –out http2.key输入密码后可以生成新的

mv http.key http.key.bak
mv http2.key  http.key这样http.key就没有密码,重启http的时候就不需要输入密码
配置ssl文件,指定证书和私钥的路径
vim /etc/httpd/conf.d/ssl.conf
SSLCertificateFile /etc/httpd/conf.d/http.crt
SSLCertificateKeyFile /etc/httpd/conf.d/http.key保存后重启http服务即可
将生成的私钥和证书发到另一台机器上,后端的RS的https服务的key和证书要同一个
后端RS的https服务配置完成后,到此,LVS-NAT配置完成,可以将请求调度到后端的https服务器
测试如下
for i in {1..10};do curl -k https://172.18.50.72;done;结果为轮询调度6373这两台RS

3  LVS-DR
dr模型中,各主机上均需要配置VIP,解决地址冲突的方式有三种:
(1) 在前端网关做静态绑定
(2) 在各RS使用arptables
(3) 在各RS修改内核参数,来限制arp响应和通告的级别
.限制响应级别:arp_ignore,选择1
0:默认值,表示可使用本地任意接口上配置的任意地址进行响应
1: 仅在请求的目标IP配置在本地主机的接收到请求报文的接口上时,才给予响应
.限制通告级别:arp_announce,选择2
0:默认值,把本机所有接口的所有信息向每个接口的网络进行通告
1:尽量避免将接口信息向非直接连接网络进行通告
2:必须避免将接口信息向非本网络进行通告
VIP建议配置在lo口上比较合理(虽然可以配置在任意网卡,但是建议配置在lo
实验:VS实现LVS-DR模式的调度
环境如下:

  五台机器的ip配置如下
  host1-->client: eth1: 172.18.50.65/16
  host2-->ROUTER: WAN: eth1:172.18.50.62/16
  LAN: eth0:192.168.32.62/24
  eth0:1 : 10.10.10.12/24
  host3-->VS: eth33:192.168.32.72/24
  eth33:1 10.10.10.10/24
  host4-->RS1:eth0:192.168.32.63/24
  lo:1 10.10.10.10/24
  host5-->RS2:eth33:192.168.32.73/24
  lo:1 10.10.10.10/24
注意:

RS上取消arp的响应和arp_announce

Router上配置三个ip,开启路由转发功能,同时在网卡eth0上配置独臂路由
VS和RS都配置默认的路由,网关都指向 Router  LAN: eth0:192.168.32.62/24
VS和RS添加默认路由命令:route add default gw 192.168.32.62

DR模型不能基于端口调度
拓扑图如下
DSC0001.jpg


RS的一键配置脚本
#!/bin/bash
vip=10.10.10.10
mask='255.255.255.0'
dev=lo:1
rpm -q httpd &> /dev/null || yum -y install httpd&>/dev/null
service httpd start &> /dev/null && echo"The httpd Server is Ready!"
#echo "`hostname`" >/var/www/html/index.html
case $1 in
start)
    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/all/arp_announce
    echo 2 >/proc/sys/net/ipv4/conf/lo/arp_announce
    ifconfig $dev$vip netmask $mask broadcast $vip up
    route add -host$vip dev $dev
    echo "The RSServer is Ready!"
    ;;
stop)
    ifconfig $devdown
    echo 0 >/proc/sys/net/ipv4/conf/all/arp_ignore
    echo 0 >/proc/sys/net/ipv4/conf/lo/arp_ignore
    echo 0 >/proc/sys/net/ipv4/conf/all/arp_announce
    echo 0 >/proc/sys/net/ipv4/conf/lo/arp_announce
    echo "The RSServer is Canceled!"
    ;;
*)
    echo "Usage:$(basename $0) start|stop"
    exit 1
    ;;
esacVS的一键配置脚本
#!/bin/bash
vip='10.10.10.10'
iface='ens33:1'
mask='255.255.255.0'
port='80'
rs1='192.168.32.63'
rs2='192.168.32.73'
scheduler='wrr'
type='-g'
rpm -q ipvsadm &> /dev/null || yum -y installipvsadm &> /dev/null
case $1 in
start)
    ifconfig $iface$vip netmask $mask broadcast $vip up
    iptables -F
    ipvsadm -A -t${vip}:${port} -s $scheduler
    ipvsadm -a -t${vip}:${port} -r ${rs1} $type -w 2
    ipvsadm -a -t${vip}:${port} -r ${rs2} $type -w 1
    echo "The VSServer is Ready!"
    ;;  
stop)
    ipvsadm -C
    ifconfig $ifacedown
    echo "The VSServer is Canceled!"
    ;;
*)
    echo "Usage:$(basename $0) start|stop"
    exit 1
    ;;
esac
测试如下
for i in {1..10};do curl   http://172.18.50.72;done;结果为轮询调度6373这两台RS

注意,以上环境为生产环境的实际配置,如果不用要把VIP也设置为私有ip,如192.168.32.66,那么在路由器上就不需要多配置一个eth0:1的ip了,路由器上只需要配置两个ip就可以,其他配置都不变。

4  FireWallMark
.FWMFireWall  Mark
.MARK target 可用于给特定的报文打标记
同一类服务实现统一调度。如httphttps,这里需要加上Mark标记
默认工作模式是dr,默认的调度算法是wlc
--set-mark  value
# value是在防火墙的策略上会显示为16进制数,可以随便定义,如这里定义value值是12,但是在防火墙上通过命令iptables –vnL  -t mangle 看到的是0xc,是十六进制
.借助于防火墙标记来分类报文,而后基于标记定义集群服务;可将多个不同的应用使用同一个集群服务进行调度
.实现方法:
.Director主机打标记:
iptables  -t mangle -A PREROUTING -d $vip  -p $proto  -m multiport  --dports $port1,$port2,… -j MARK --set-markNUMBER LVS上定义如下

.Director主机基于标记定义集群服务和管理RS
ipvsadm  -A  -f   NUMBER [options1]这里的iptions1可以定义算法,如跟上-s wrr

ipvsadm -a -f  NUMBER  -r  real-server  [options2]这里的iptions2可以定义集群的类型,如-g表示dr模型

实验
vs上配置
iptables -t mangle -A PREROUTING -d 192.168.32.66 -p tcp -m multiport--dports 80,443 -j MARK --set-mark 12
ipvsadm –A  -f  12  -s  wrr
ipvsadm -a -f 12 -r  192.168.32.63  -g -w 3
ipvsadm -a  -f 12 -r 192.168.32.73  –gRS配置可以参考LVS-dr的脚本配置
测试
for i in {1..10};docurl  -k https://192.168.32.66;curl http://192.168.32.66;done; 结果是轮询调度后端RS的http和https服务。

  5  持久连接
来自同一个服务的请求尽可能发到同一台后端的RS上处理。这里可以实现session绑定
注意LVS的算法,默认只有sh能够实现根据session来实现调度。其他的调度算法不能实现session绑定。但是sh的第一次是随机的,不能根据权重调度。
综合sh和其他算法,用持久连接的技术来实现。这是一个折中的方法。
-p  [timeout]这个选项来实现持久连接,默认是360s,man帮助里不一样,man里是300s,实际默认是360s
.session 绑定:对共享同一组RS的多个集群服务,需要统一进行绑定,lvs  sh算法无法实现
.持久连接(lvs  persistence )模板:实现无论使用任何调度算法,在一段时间内(默认360s ),能够实现将来自同一个地址的请求始终发往同一个RS
ipvsadm  -A|E    -t|u|f  service-address  [-s scheduler]  [-p [timeout]].持久连接实现方式:

.每端口持久(PPC):每个端口对应定义为一个集群服务,每集群服务单独调度
.每防火墙标记持久(PFWMC):基于防火墙标记定义集群服务;可实现将多个端口上的应用统一调度,即所谓的port  Affinity
.每客户端持久(PCC):基于0端口(表示所有服务)定义集群服务,即将客户端对所有应用的请求都调度至后端主机,必须定义为持久模式.但是实际生产不这么定义,因为这样相当于是把后端的服务都发布到公网了。
例子
ipvsadm  -E  -f  12 -s wrr -p 20 #这里的-p后面接数字20表示20秒内,同一客户端将会被调度到同一服务器上,如果跟数字20,就是默认的360


  





运维网声明 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-658681-1-1.html 上篇帖子: LVS/NAT学习笔记 下篇帖子: LNMP+SSL+ LVS
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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