文章都可以转载、引用,标明转载出处即可。

lvs 负载均衡

负载均衡 Mr.c 2876℃ 0评论

  提到负载均衡一定会想到LVS 这个软件,而该软件是由章文嵩博士开发,配置简单,功能却非常强大,在生产环境中的应用非常广泛。
  LVS是三层负载,基于Mac地址欺骗进行调度,现在系统内核中也已经内置了,软件名:ipvsadm
  今天的实验是基于LVS+keepalive 实现,LVS 只有调度转发的功能,将用户访问请求根据算法转发到后端的服务器上,但是它自身是没有健康检查的,也就是说如果后端的web服务器down了,请求还是会转发过去,所以才有了LVS+keepalive 的组合,keepalive 负责检查后端服务器状态,如果down 机则将该服务器从负载调度中删除。
本次实验的原理以及拓扑图如下:
  采用LVS+keepalive 结构,使用DR模式,调度算法采用【加权最少连接】,lvs调度器主备设置,主服务down 自动切换到备服务器,后端两台web服务器,web服务器连接到两台MySQL 主从服务器。
如果不清楚DR原理和调度算法,可以看下这篇文章:http://www.cnblogs.com/daixiang/p/5445584.html
lvs

准备工作:

 1.准备4-6台安装centos 6.5_64位系统服务器,如果加MySQL主从就只需要4台服务器。
 2.两台安装LVS+keepalive 的服务器(实现主备机)IP地址:192.168.31.11 (主),192.168.31.12 (备)
 3.定义虚拟IP即VIP:192.168.31.8
 4.web服务器安装web环境,建议yum 方式安nginx 随意设置一个页面进行测试。
 5.MySQL 主从请参考 https://www.cnyunwei.cc/archives/674 实验环境也没必要做主从,额外配置一台服务器安装MySQL 即可。

一:LVS调度器配置

 1.安装相关依赖:

[root@lvs-master ~] yum -y install gcc  openssl-devel openssl net-snmp net-snmp-devel popt popt-devel

 2.安装ipvs和keepalived

[root@lvs-master ~] yum -y install ipvsadm  keepalived  

 3.keepalived 配置
使用keepalived 后ipvsadm 上就不需要进行任何设置了,所有的设置均来自keepalived 的配置文件

[root@lvs-master ~] vim /etc/keepalived/keepalived.conf
global_defs {
  router_id LVSSer                #负载均衡器标识,同一网段内,可以相同
 }
 #上面为全局定义,安装keepalive后可以看到还能定义发送邮件通知等

 vrrp_instance LVSSer {
   state MASTER                       #MASTER主调度器,BACKUP为备用调度器
   interface eth0                    #实例绑定的网卡
   virtual_router_id 51                #虚拟路由编号,主备id一致
   priority 100                     #优先级,数字越大,优先级越高
   advert_int 1                    #主备间同步检查/秒
   authentication {
       auth_type PASS
       auth_pass 1111
   }
   virtual_ipaddress {
       192.168.31.8               #定义VIP,可以多个ip,每行一个
   }
 }
virtual_server 192.168.31.8 80 {    #定义一个虚拟服务器,也就是VIP
   
   delay_loop 6                        #健康检测间隔/秒
   lb_algo wlc                        #调度算法设置为加权最少连接
   lb_kind DR                        #模式为DR
   persistence_timeout 120            #回话保持时间设置120秒,如果该用户在120s内无任何操作,下次操作会调度到另外节点
   protocol TCP                     #转发协议
   
   #定义后端服务器地址(RIP)   
   real_server 192.168.31.20  80 {    #指定RIP的IP地址以及端口
       weight 3                        #权重,数字越大权重越高
       TCP_CHECK {                    #通过tcpcheck判断真实服务器状态
       connect_timeout 10            #连接超时
       nb_get_retry 3                #重试次数
       delay_before_retry 3            #检测间隔时间为3s
       connect_port 80                #检测端口
       }
   }
   real_server 192.168.31.21  80 {  
       weight 3                       
       TCP_CHECK {                    
       connect_timeout 10            
       nb_get_retry 3                
       delay_before_retry 3            
       connect_port 80                
       }
   }
 }

  备用调度器的设置和主调度器相同,只是修改state MASTER 为 state BACKUP ,由于主调度器priority设置为100 ,所以备用调度器priority 优先级要低于100
设置完成可以启动keepalived服务,并通过ipvsadm查看设置是否正确

[root@lvs-master ~] service keepalived start
[root@lvs-master ~] ipvsadm  -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.31.8:80 wlc persistent 30
  -> 192.168.31.20:80             Route   1      0          0         
  -> 192.168.31.21:80             Route   1      0          0       

二:后端服务器配置

后端服务器需要配置好VIP和调整内核参数限制arp响应
 1.绑定VIP到web服务器
这里直接增加一个虚拟网卡lo:0,绑定VIP到该虚拟网卡上
注意了,绑定vip时网卡信息NETMASK必须全部设置为255

[root@web1 ~] cd /etc/sysconfig/network-scripts/
[root@web1 network-scripts] cp ifcfg-lo{,:0}
[root@web1 network-scripts] cat ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.31.8
NETMASK=255.255.255.255
NETWORK=127.0.0.0
BROADCAST=192.168.31.8
ONBOOT=yes
NAME=loopback

 2.修改内核参数:
可以使用命令先查看一下对应需要修改的参数:

[root@web1 ~] sysctl -a | grep arp_ig
net.ipv4.conf.all.arp_ignore = 0
net.ipv4.conf.default.arp_ignore = 0
net.ipv4.conf.lo.arp_ignore = 0
net.ipv4.conf.eth0.arp_ignore = 0

[root@web1 ~] sysctl -a | grep arp_ann
net.ipv4.conf.all.arp_announce = 0
net.ipv4.conf.default.arp_announce = 0
net.ipv4.conf.lo.arp_announce = 0
net.ipv4.conf.eth0.arp_announce = 0

需要修改其中两项的值,直接写入到/etc/sysctl.conf 这样重启也不会失效

echo 'net.ipv4.conf.all.arp_ignore = 1' >> /etc/sysctl.conf
echo 'net.ipv4.conf.lo.arp_ignore = 1' >> /etc/sysctl.conf
echo 'net.ipv4.conf.all.arp_announce = 2' >> /etc/sysctl.conf
echo 'net.ipv4.conf.lo.arp_announce  = 2' >> /etc/sysctl.conf

web2的设置和web1相同,我这里是在本地VMware 虚拟机下操作,所以直接克隆虚拟机,修改下网卡就可以了

三:访问测试

以上操作完成后LVS+keepalive 的架构就完成了,使用两台不同的设备访问VIP地址192.168.31.8看下效果:
lvsweb
  故障模拟:模拟下调度器意外宕机的情况,虚拟机环境下简单粗暴直接断掉lvs主调度器电源,然后再访问观察是否正常,同时查看备用调度器上的VIP是否已经调度转发成功。

总结:

  1.使用LVS+keepalive 的模式,调度器上只需要安装ipvsadm 然后配置好keepalived 即可。
  2.对应的后端web服务器需要绑定VIP到虚拟网卡,修改内核参数。
  3.查看调度转发情况可以使用命令:ipvsadm -L -n 查看LVS上VIP是否生成用命令 ip addr show eth0 即可。
  4.当然还有对应的keepalived 和nginx 等不要忘记设置为开机自启动。

这里推荐一个在线画图网站,对于不经常画图的人来说是不错的选择,自己电脑上不用安装画图软件,随时都能画拓扑图,并且模板很丰富:

https://www.processon.com/i/57f9ef88e4b009c4af5d298a

转载请注明:菜鸟运维网 » lvs 负载均衡

喜欢 (1)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址