首页 > 代码库 > linux 负载均衡配置 keepalive lvs 使用nginx转发 CentOS7 搭建LVS+keepalived负载均衡

linux 负载均衡配置 keepalive lvs 使用nginx转发 CentOS7 搭建LVS+keepalived负载均衡

最近希望能够配置一下负载均衡,在虚拟机上面,但是网上找了很多资料很零散,对于不了解的人,很多不够详细,最近终于做好了,把具体的步骤写下来,方便各位网友查阅学习

 

这个实验需要安装nginx如果没有安装过,请参考:

linux安装nginx:http://www.cnblogs.com/aspirant/p/6714548.html

 

(1) 我们的系统是CentOS7 目前需要四台机器,分别为 Director机器 两台:master,slave

真实机器realserver1,realserver2;搭建的系统架构图如下:

技术分享 
 
所用系统:CentOS7 
真实web服务器(RS1):192.168.137.5 
真实web服务器(RS2):192.168.137.6 
Master负载均衡服务器:192.168.137.101 
backup负载均衡服务器:192.168.137.102 
系统对外虚拟IP:192.168.137.100

 

从架构可以看出来,从用户的角度来说,会直接访问192.168.137.100,也就是说不管系统如何设计要保证此ip的可用性,

从架构师的角度考虑:

   用户访问192。168.137.100位VIP:Virtual IP,虚拟iP,用户不关心内部如何协调,我们使用 

192.168.137.101 作为主机 Master机器,然后使用keepalived 技术配置 HA(high avilable)配置高可用行,也就是说如果 分发的机器Master宕机了,keepalive会自动转到 backup机器,

这就是HA配置,保证master即使宕机了,也不影响转发;

master机器负责把用户的请求转发到  真实的机器, RS1和RS2,他们会按照一定的轮训机制,访问,如果RS1宕机,master会自动转发到RS2;

我们在两台负载均衡的机器上面,配置keepalived保证分发机器的高可用行HA;

系统的 IP配置如下:

服务器名  IP地址虚拟设备名虚拟IP
Director Server 192.168.137.101 ens33:0 192.168.137.100
Backup Server 192.168.137.102ens33:0192.168.137.100
Real Server1192.168.137.5lo:0 192.168.137.100
Real Server2192.168.137.6 lo:0 192.168.137.100

 

二、Keepalived的安装配置过程

两台负载均衡服务器上均需要安装、配置Keepalived

2.1 安装Keepalived

$ yum -y install keepalived

2.2 配置Keepalived

$ vim /etc/keepalived/keepalived.conf

配置信息如下

! Configuration File for keepalivedglobal_defs {    notification_email {        acassen@firewall.loc     #设置报警邮件地址,可以设置多个,每行一个。        failover@firewall.loc    #需开启本机的sendmail服务        sysadmin@firewall.loc    }    notification_email_from Alexandre.Cassen@firewall.loc  #设置邮件的发送地址    smtp_server 127.0.0.1      #设置smtp server地址    smtp_connect_timeout 30    #设置连接smtp server的超时时间    router_id LVS_DEVEL        #表示运行keepalived服务器的一个标识。发邮件时显示在邮件主题的信息}vrrp_instance VI_1 {    state MASTER              #指定keepalived的角色,MASTER表示此主机是主服务器,BACKUP表示此主机是备用服务器    interface ens33     #指定HA监测网络的接口    virtual_router_id 51      #虚拟路由标识,这个标识是一个数字,同一个vrrp实例使用唯一的标识。即同一vrrp_instance下,MASTER和BACKUP必须是一致的    priority 100              #定义优先级,数字越大,优先级越高,在同一个vrrp_instance下,MASTER的优先级必须大于BACKUP的优先级    advert_int 1              #设定MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒    authentication {          #设置验证类型和密码        auth_type PASS        #设置验证类型,主要有PASS和AH两种        auth_pass 1111        #设置验证密码,在同一个vrrp_instance下,MASTER与BACKUP必须使用相同的密码才能正常通信    }    virtual_ipaddress {       #设置虚拟IP地址,可以设置多个虚拟IP地址,每行一个        192.168.137.100     }}virtual_server 192.168.137.100 80 {  #设置虚拟服务器,需要指定虚拟IP地址和服务端口,IP与端口之间用空格隔开    delay_loop 6              #设置运行情况检查时间,单位是秒    lb_algo rr                #设置负载调度算法,这里设置为rr,即轮询算法    lb_kind DR                #设置LVS实现负载均衡的机制,有NAT、TUN、DR三个模式可选    nat_mask 255.255.255.0     persistence_timeout 0    #会话保持时间,单位是秒。这个选项对动态网页是非常有用的,为集群系统中的session共享提供了一个很好的解决方案。                              #有了这个会话保持功能,用户的请求会被一直分发到某个服务节点,直到超过这个会话的保持时间。                              #需要注意的是,这个会话保持时间是最大无响应超时时间,也就是说,用户在操作动态页面时,如果50秒内没有执行任何操作                              #那么接下来的操作会被分发到另外的节点,但是如果用户一直在操作动态页面,则不受50秒的时间限制    protocol TCP              #指定转发协议类型,有TCP和UDP两种    real_server 192.168.137.5 80 { #配置服务节点1,需要指定real server的真实IP地址和端口,IP与端口之间用空格隔开        weight 1              #配置服务节点的权值,权值大小用数字表示,数字越大,权值越高,设置权值大小可以为不同性能的服务器                              #分配不同的负载,可以为性能高的服务器设置较高的权值,而为性能较低的服务器设置相对较低的权值,这样才能合理地利用和分配系统资源        TCP_CHECK {           #realserver的状态检测设置部分,单位是秒            connect_timeout 3    #表示3秒无响应超时            nb_get_retry 3       #表示重试次数            delay_before_retry 3 #表示重试间隔            connect_port 8066        }     }    real_server 192.168.137.6 80 {        weight 1        TCP_CHECK {            connect_timeout 3            nb_get_retry 3            delay_before_retry 3            connect_port 8066        }    }}

  

要注意的地方:
  • interface ens33:这里的enp0s3是我的网卡名称,想要查看自己网卡名称的话,在/etc/sysconfig/network-scripts/ifcfg-e(敲下TAB)这个每个系统可能都不同,

       我们可以输入ifconfig,一般会出现两个网卡,一个是ens33还有一个是回环地址lo,对于分发机器master 和backup 我们需要在添加 ens33:0网卡,对于真实机器realserver1,realserver2,我们需要添加lo:0网卡,下一步就能看到这是不同的;

   

  • persistence_timeout 0:指的是在一定的时间内来自同一IP的连接将会被转发到同一realserver中。而不是严格意义上的轮询。默认为50s,因此在测试负载均衡是否可以正常轮询时,最好先把值设置为0,方便查看
  • TCP_CHECK { :注意TCK_CHECK和 {之间有一个空格,忘记打这个空格的话,可能会出现后面用ipvsadm查看时,某个RS查看不到
  • 可以直接把上面的代码复制下来放到新建文件放到自己的机器上面,但是别忘了需要转换一下格式,因为我们使用window机器拷贝的,所以在linux上面我们需要转化一下转成linux可以使用的脚本,因为window的回车跟linux的回车是不同的,使用dos2unix转化,
  • 我们使用 (a) yum install dos2unix
  •                (b) dos2unix 文件名
  • 转换完了,就可以用了;
另外一个台备用服务器上Keepavlied的配置类似,只是把MASTER改为backup,把priority设置为比MASTER低,设置为90;

keepalived的2个节点执行如下命令,开启转发功能:

# echo 1 > /proc/sys/net/ipv4/ip_forward

 

2.3 两台RS上为lo:0绑定VIP地址、抑制ARP广播

 

 两台 RS机器上面都要安装 nginx:

linux安装nginx:http://www.cnblogs.com/aspirant/p/6714548.html

然后我们在nginx的访问目录:我的是这个: /home/zkpk/nginx-1.8.0/html/index.html中

RS1的 index.html 修改一下,这样方便测试,比如输入 我是 RS1;

RS2的 index.html 修改一下,这样方便测试,比如输入 我是 RS2;

在两台RS上编写以下脚本文件realserver.sh

#!/bin/bash#description: Config realserverVIP=192.168.137.100/etc/rc.d/init.d/functionscase "$1" instart)       /sbin/ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP       /sbin/route add -host $VIP dev lo:0       echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore       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)       /sbin/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 1esacexit 0

 

在两台RS上分别执行脚本

$ sh realserver.sh start

 

2.4 启用Keepavlied

 

$ service keepalived start

 

 
之后通过ipvsadm -L命令可以查看VIP是否已经成功映射到两台RS,如果发现有问题,可以通过/var/log/message查看错误原因,注意此处的192.168.137:100 你的可能不是,而是localhost之类的,也没有错;

技术分享

接下来就可以测试可用性了

2.4.1 测试负载均衡

2.4.2测试keepalived的监控检测

停掉RS1的nginx,然后在MASTER负载均衡服务器上可以到看VIP映射关系中已经剔除了192.168.137.5 
(1)停掉RS1的nginx 
     使用 pkill -9 nginx 杀死进程

     如果需要开启nginx使用: /usr/local/nginx/sbin/nginx 启动nginx进程;

    然后 ps -ef |grep nginx 可以查看nginx是否启动成功;

(2)实验测试1

浏览器访问 http://192.168.137.100  看看是否启动成功,nginx是否显示;

 

实验2

手动关闭192.168.137.5 节点的nginx,service nginx stop 在客户端上去测试访问 http://192.168.137.100 结果正常,不会出现访问失败的情况,

实验3

手动重新开启 192.168.137.5 节点的nginx, service nginx start 在客户端上去测试访问 http://192.168.137.100 结果正常,按照 rr 调度算法访问5节点和6节点。

实验4

测试 keepalived 的HA特性,首先在master上执行命令 ip addr ,可以看到38的vip在master节点上的;这时如果在master上执行 service keepalived stop 命令,这时vip已经不再master上,在slave节点上执行 ip addr 命令可以看到 vip 已经正确漂到slave节点,这时客户端去访问 http://192.168.137.100 访问依然正常,验证了 keepalived的HA特性。



 

 

 

 

参考资料:

逐条配置:

http://ixdba.blog.51cto.com/2895551/554799

http://blog.csdn.net/u012852986/article/details/52412174

 http://www.jb51.net/article/38368.htm

http://www.cnblogs.com/llhua/p/4195330.html

具体部署:

http://www.cnblogs.com/liwei0526vip/p/6370103.html

nginx启动停止:

http://www.cnblogs.com/codingcloud/p/5095066.html

 

linux 负载均衡配置 keepalive lvs 使用nginx转发 CentOS7 搭建LVS+keepalived负载均衡