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

[经验分享] LB集群

[复制链接]

尚未签到

发表于 2019-1-3 09:54:51 | 显示全部楼层 |阅读模式
  一、集群的种类:
  LB: Load Balancing      负载均衡       LVS、haproxy
  HA: High Availability   高可用         heartbeat、RHCS、keepalived
  HP: High Performance    高性能
  

  二、LVS概述
LVS 是Linux virtual server的简称,是由中国Linux程序员章文嵩博士发起和领导的,基于Linux系统的服务器LB集群解决方案。Linux 2.6内核起已经安装了ipvs。LVS是调度器,它不真正提供服务,但它接受客户的访问,为整个集群提供一个唯一的入口,来和真实服务器(Real Server)通信。
  

  三、LVS三种模式
VS/NAT: 网络地址转换模式,进站/出站的数据流量经过调度器
VS/DR: 直接路由模式,只有进站的数据流量经过调度器
VS/TUN: 隧道模式,只有进站的数据流量经过调度器
  

  四、关于ipvsadm:
  ipvsadm是运行于用户空间、用来与ipvs交互的命令行工具,常见用法如下:
ipvsadm -A|E -t|u  service-address [-s scheduler]
ipvsadm -D -t|u service-address
  ipvsadm -a|e -t|u service-address -r server-address -g|i|m -w weight
ipvsadm -d -t|u service-address -r server-address
  ipvsadm -C

-A|-E
新增一条Director规则 | 重新编辑一条Director规则
-t|-u
指定VIP:PORT,t是指TCP,u是指UDP
-s
指定调度算法
-D
删除一条虚拟服务器规则
-a|-e
新增一条真实服务器规则  |  修改一条真实服务器规则
-g|-i|-m
LVS-DR模式(默认)  |  LVS-TUN模式  |  LVS-NAT模式
-w
指定权重值
-d
删除一条真实服务器规则
-C
清除所有规则
-L|-l
查看所有的规则
  

  五、部署
  VIP(virtual IP): 调度器用来向客户端提供服务的IP
  DIP(director IP): 调度器用来和真实服务器通信的IP
  RIP(real IP): 真实服务器的IP地址

  1. VS-NAT

  原理:当用户请求到达director之后,director将请求报文的目标地址(即VIP)改成选定的real server的RIP地址,同时将报文的目标端口也改成选定的real server的相应端口,最后将报文请求发送到指定的real server。在real server处理完请求后,将数据返给director,而director将报文的源地址和源端口改成VIP和相应端口,然后把数据发送给用户,完成整个负载调度过程。
  环境:    director:VIP  192.168.2.98    DIP  172.16.1.1
  real server1(RIP1):172.16.1.100
  real server2(RIP2):172.16.1.200
[root@ipvs ~]# grep -i 'ip_vs' /boot/config-2.6.32-358.el6.x86_64
CONFIG_IP_VS=m    #可以看到ipvs是以模块化的方式编译在内核中  配置Director:
[root@ipvs ~]# echo 1 > /proc/sys/net/ipv4/ip_forward  #开启IP转发
[root@ipvs ~]# ipvsadm -A -t 192.168.2.98:80 -s wrr
[root@ipvs ~]# ipvsadm -a -t 192.168.2.98:80 -r 172.16.1.100:80 -m -w 1
[root@ipvs ~]# ipvsadm -a -t 192.168.2.98:80 -r 172.16.1.200:80 -m -w 2  配置real server:
  只需简单配置2台httpd即可,创建index.html分别为WEB1和WEB2。
  这样就算完成了LVS-NAT了。

[root@node2 ~]# ab -c 500 -n 2000 http://192.168.2.98/index.html
#在client上进行测试
[root@ipvs ~]# ipvsadm -L                                 
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.2.98:http wrr
-> 172.16.1.100:http            Masq    1      0          712
-> 172.16.1.200:http            Masq    2      0          1380
#在Director上进行状态查看  小结:由于Director既需要接收client请求,又需要帮助real server发送数据,所以Director的负担就会比较重,会成为整个LB集群的性能瓶颈。
  

  2. IPVS-DR

  环境:     director:VIP  172.16.1.10    DIP  172.16.1.1
  real server1(RIP1):172.16.1.100
  real server2(RIP2):172.16.1.200
  real server配置(两台配置一样):
[root@mysql ~]# ifconfig lo:1 172.16.1.10/32
[root@mysql ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@mysql ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce  Director配置:
[root@ipvs ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
[root@ipvs ~]# ifconfig lo:1 172.16.1.10/32
[root@ipvs ~]# ipvsadm -A -t 172.16.1.10:80 -s wlc
[root@ipvs ~]# ipvsadm -a -t 172.16.1.10:80 -r 172.16.1.100:80 -g -w 1
[root@ipvs ~]# ipvsadm -a -t 172.16.1.10:80 -r 172.16.1.200:80 -g -w 2  arp_ignore=1是让网卡收到ARP广播时,不要回应,直接忽略;
  arp_announce=2是让网卡不要向外发送ARP广播。

  原理:
  ⑴ 客户端向Director的VIP发出请求
  ⑵ Director收到请求后,根据负载均衡算法修改报文的目标MAC为其中一台real server的RIP的MAC,将报文发送出去
  ⑶ real server收到报文发现目标MAC是自己的RIP的MAC,目标IP是VIP,和自己的lo口上的IP一样,于是将报文处理后,以自己的VIP为源IP,client IP为目标IP,发送出去

  

  3. LVS-TUN
  由于NAT模式中,Director负担较重,易成为性能瓶颈,而DR模式中,所有群集服务器必须和Director在同一个网段,所以就出现了一个折中的方案---TUN模式,但是TUN模式并不是想象中的那么完美,因为可以跨网段,所以网络的拥堵会导致其性能下降,所以企业中一般还是用DR模式。

  原理:当用户请求到达director之后,director将请求报文的目标地址(即VIP)改成选定的real server地址。然后,调度器采用ip隧道技术将用户请求发送到某个real server,而这个real server将直接相应用户的请求,不再经过director。此外,对realserver的地域位置没有要求,可以和director在不在同一网段都可以。
  

  六、LVS的持久连接
  无论基于什么样的算法,只要期望源于同一个客户端的请求都由同一台Real server响应时,就需要用到持久连接。当使用LVS的持久连接时,Director会用连接状态追踪hash表(通常被成为持久连接模版)将客户端请求以及对应的real server记录下来,从而确保这个客户端在某段时间内被分配到相同的real server上。
  ipvsadm -p timeout    开启持久连接,并指定超时时间,单位为s,默认为300s。如果在指定时间内,用户连接并没有断开,通常会延长120s,直到用户退出为止。为了保证其时效性,Hash table中“连接追踪”信息被定义了“生存时间”。LVS为记录“连接超时”定义了三个计时器:
  ipvsadm --set tcp tcpfin udp
  tcp       TCP的超时时间间隔;
tcpfin    TCP握手的超时时间;
udp       无连接的UDP数据包(记录其两次发送数据包的时间间隔);

-Z
清空计数器
-lcn
查看LVS的连接状态
-f
指定iptables标记
-p
指定持久连接的超时时间
  持久连接的类型:
  Persistent client connections
  (PCC)

将同一个客户端的请求始终定向到同一个Real Server上。
  Persistent port connections
  (PPC)

将来自同一个客户端对某个特定服务的请求定位到同一个Real Server上去。
Persistent Netfilter Marked Packetpersistence用iptables标记来实现将同一个用户对某几个特定端口(如:80和443)的请求,定位到同一台real Server上去。
FTP connections首先限定FTP的被动模式的端口,将这些端口和21端口用标记关联起来,然后定位到同一台Real Server上。
  

  1. PCC配置
[root@ipvs ~]# ipvsadm -C
[root@ipvs ~]# ipvsadm -A -t 172.16.1.10:0 -s wlc -p 1200
[root@ipvs ~]# ipvsadm -a -t 172.16.1.10:0 -r 172.16.1.100 -g -w 10
[root@ipvs ~]# ipvsadm -a -t 172.16.1.10:0 -r 172.16.1.200 -g -w 20
[root@ipvs ~]# ipvsadm -L
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.16.1.10:0 wlc persistent 1200
-> 172.16.1.100:0               Route   10     0          0      
-> 172.16.1.200:0               Route   20     0          10  

  2. PPC配置
[root@ipvs ~]# ipvsadm -C
[root@ipvs ~]# ipvsadm -A -t 172.16.1.10:22 -s nq -p 1200
[root@ipvs ~]# ipvsadm -a -t 172.16.1.10:22 -r 172.16.1.100 -g -w 100
[root@ipvs ~]# ipvsadm -a -t 172.16.1.10:22 -r 172.16.1.200 -g -w 50  

  3. iptables标记
[root@ipvs ~]# vim /etc/sysconfig/iptables
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
#首先在iptables上放行这2个端口
[root@ipvs ~]# service iptables restart
[root@ipvs ~]# iptables -A PREROUTING -i eth0 -t mangle -p tcp -d 172.16.1.10 --dport 80 -j MARK --set-mark 10
[root@ipvs ~]# iptables -A PREROUTING -i eth0 -t mangle -p tcp -d 172.16.1.10 --dport 443 -j MARK --set-mark 10
#为VIP 172.16.1.10的80和443端口都打上标记10,标记只有本机有效
[root@ipvs ~]# ipvsadm -C
[root@ipvs ~]# ipvsadm -A -f 10 -s wlc -p 1200
[root@ipvs ~]# ipvsadm -a -f 10 -r 172.16.1.100 -g -w 100
[root@ipvs ~]# ipvsadm -a -f 10 -r 172.16.1.200 -g -w 200  

  七、LVS+keepalived
  keepalived简介
  1、keepalived 是lvs 的扩展项目,因此它们之间具备良好的兼容性。
  2、通过对服务器池对象的健康检查,实现对失效机器/服务的故障隔离。
  3、负载均衡器之间的失败切换failover,是通过VRRP(Virtual Router Redundancy Protocol)实现的。
  

  1. 安装keepalived
[root@ipvs ~]# tar xf keepalived-1.2.12.tar.gz
[root@ipvs ~]# cd keepalived-1.2.12
[root@ipvs ~]# ./configure --sysconfdir=/etc/ --prefix=/usr/local/keeplived
[root@ipvs ~]# make && make install  

  2. 清空ipvs的所有配置
[root@ipvs ~]# ipvsadm -C  

  3. 编辑keepalived的配置文件
[root@ipvs ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
baihu@163.com      #设置邮件报警的收件地址
}
notification_email_from root@localhost   #设置邮件报警的发件地址
smtp_server 172.16.1.1   #设置发件的邮件服务器的地址  
smtp_connect_timeout 30   #设置连接SMTP服务器的超时时间
router_id LVS_MASTER    #运行Keepalived服务器的一个标识
}
vrrp_instance VI_1 {
state MASTER      #指定Keepalived的角色
interface eth0      #对外提供服务的网络接口
virtual_router_id 51    #虚拟路由标识,主备需保持一致
priority 100    #优先级,主应该大于备
advert_int 1      #MASTER 与BACKUP 负载均衡器之间同步检查的时间间隔,单位为秒。
authentication {
auth_type PASS
auth_pass 1111  #主从之间的认证类型和密码,类型主要有PASS、AH 两种
}
virtual_ipaddress {
172.16.1.10    #虚拟ip 地址,可以理解为LVS的VIP
}
}
virtual_server 172.16.1.10 80 {
delay_loop 6     #设置健康检查时间,单位是秒
lb_algo wlc      #设置LVS的调度算法
lb_kind DR       #设置LVS的工作模式
persistence_timeout 1200     #持久连接的超时时间  
protocol TCP     #指定上面的80端口为TCP的80端口
real_server 172.16.1.100 80 {
weight 1                 #指定权重
TCP_CHECK {              #指定TCP检查
connect_timeout 3      #连接超时时间
nb_get_retry 3         #重试次数
delay_before_retry 3   #重试间隔
}
}
real_server 172.16.1.200 80 {
weight 2
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}  

  4. 启动keepalived
[root@ipvs ~]# cd /usr/local/keeplived/sbin/
[root@ipvs sbin]# ./keepalived
#从服务器上也是这么配置的,改一下主配置文件就可以了  

  5. 测试
[root@ipvs ~]# ipvsadm -L
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.16.1.10:http wlc persistent 1200
-> 172.16.1.100:http            Route   1      0          0        
-> 172.16.1.200:http            Route   2      3          0        
[root@ipvs ~]# ifconfig eth0 down
[root@ipvs ~]# ifconfig eth0 up
#将master提供服务的网卡禁用再启用
[root@ipvs2 ~]# tail -f /var/log/messages
Mar  8 21:35:31 ipvs2 Keepalived_vrrp[2878]: VRRP_Instance(VI_1) Transition to MASTER STATE
Mar  8 21:35:32 ipvs2 Keepalived_vrrp[2878]: VRRP_Instance(VI_1) Entering MASTER STATE
Mar  8 21:51:39 ipvs2 Keepalived_vrrp[2878]: VRRP_Instance(VI_1) Received higher prio advert
Mar  8 21:51:39 ipvs2 Keepalived_vrrp[2878]: VRRP_Instance(VI_1) Entering BACKUP STATE
#在BACKUP服务器上查看主从切换的日志  然后就可以测试了^_^





运维网声明 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-658868-1-1.html 上篇帖子: LVS DR模式配置 下篇帖子: 集群之LVS的高可用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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