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

[经验分享] CentOS Linux 负载均衡高可用WEB集群之LVS+Keepalived配置

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-11-24 09:05:06 | 显示全部楼层 |阅读模式
LB集群是locd balance集群的简称、翻译成中文是:负载均衡集群的意思;集群是一组相互独立的、通过高速网络互联的计算机相互之间构成一个组合,并以单一的系统的模式加以管理。LVS是Linux Virtual Server的简写,翻译中文是Linux虚拟服务器,是一个虚拟的服务器集群系统。

负载均衡集群:是为了企业提供更为实用,性价比更高的系统机构解决方案。负载均衡集群把用户的请求尽可能的平均分发到集群的各台计算机上处理,这样每个节点都可以承担一定的访问请求,这些请求访问在各个节点之间是动态分配,以实现负载均衡。负载均衡集群可以:1)、分担访问的流量(负载均衡);2)、保持业务的连续性(高可用)常见的负载均衡软件有:nginx、haproxy、LVS。

高可用集群:指在集群的计算机中,任意一个节点出现故障的情况下,节点上的所有任务自动转移到其他正常的节点上,并且在此过程中不影响整个集群的运行,保持业务的连续性。当一个机器宕机另一台进行接管。比较常用的高可用集群开源软件有:keepalive,heartbeat。

LVS有三种工作模式,三种工作模式如下:
工作模式          VS/NAT           VS/TUN          VS/DR

Real server        Config dr gw       Tunneling        Non-arp device/tie vip
(节点服务器)

Server Network      Private          LAN/WAN          LAN

Server number       Low 10-20         High 100         High 100
(节点数量)

Real server gateway   Load balance       Own router        Own router

优点            地址和端口转换     Wan环境加密数据     性能最高

缺点            效率低          需要隧道支持     不能跨域LAN

常用的调度算法:
固定调度算法:rr,wrr,dh,sh
rr:轮询算法,它将请求依次分配给不同的rs节点,也就是RS节点中均摊分配。这种算法简单,但只适合于RS节点处理性能差不多的情况
wrr:加权轮训调度,它将依据不同RS的权值分配任务。权值较高的RS将优先获得任务,并且分配到的连接数将比权值低的RS更多。相同权值的RS得到相同数目的连接数。
dh:目的地址哈希调度(destination hashing)以目的地址为关键字查找一个静态hash表来获得需要的RS
sh:源地址哈希调度(sourcehashing)以源地址为关键字查找一个静态hash表来获得需要的RS


动态调度算法:wlc,lc,lblc,lblcr
wlc:加权最小连接数调度,假设各台RS的全职依次为Wi,当前tcp连接数依次为Ti,依次去Ti/Wi为最小的RS作为下一个分配的RS
lc:最小连接数调度(least-connection),IPVS表存储了所有活动的连接。LB会比较将连接请求发送到当前连接最少的RS.
lblc:基于地址的最小连接数调度(locality-basedleast-connection):将来自同一个目的地址的请求分配给同一台RS,此时这台服务器是尚未满负荷的。否则就将这个请求分配给连接数最小的RS,并以它作为下一次分配的首先考虑。



LVS+Kkeepalived的VS-DR模式实现web服务的负载均衡高可用

安装的配置:
操作系统:CentOS release 6.7 (Final)
内核版本:2.6.32-573.el6.x86_64
LVS版本:ipvsadm v1.26
keepalived版本:Keepalived v1.2.13

服务器配置:

LVS主服务器:hostname:DR1;eth0:192.168.171.10,VIP:eth0:0192.168.171.100
LVS备服务器:hostname:DR2;eth0:192.168.171.20,VIP:eth0:0192.168.171.100

WEB服务器:
hostname:RS1;eth0:192.168.171.30,VIP:lo:0192.168.171.100
hostname:RS2;eth0:192.168.171.40,VIP:lo:0192.168.171.100

1、分别在两台web服务器(真实服务器)上操作
1)、关闭SELinux
vim /etc/selinux/config
#SELINUX=enforcing #注释掉
#SELINUXTYPE=targeted #注释掉
SELINUX=disabled #增加
:wq! #保存退出
setenforce 0 #使配置立即生效

2)、配置防火墙,开启80端口
vim /etc/sysconfig/iptables  #编辑
-A RH-Firewall-1-INPUT -m state --state NEW-m tcp -p tcp --dport 80 -j ACCEPT  #允许80端口通过防火墙
:wq! #保存退出
/etc/init.d/iptables restart #重启防火墙使配置生效

3)、绑定LVS虚拟服务器的虚拟IP地址(192.168.171.100)到lo:0,编写的脚本如下:
vim /usr/local/sbin/lvs_rs_dr.sh
#!/bin/bash
#description lvs rs shell
. /etc/rc.d/init.d/functions
vip=192.168.171.100
#打开vip
case "$1" in
       start)
       echo "Start LVS of Real Server."
       /sbin/ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
       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
       ;;
       stop)
       /sbin/ifconfig lo:0 down
       echo "close LVS of Real Server."
       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 "Usage:$0 {start|stop}"
       exit 1
esac
exit 0


chmod +x /usr/local/sbin/lvs_rs_dr.sh      #增加脚本的执行权限
echo "/usr/local/sbin/ lvs_rs_dr.shstart" >> /etc/rc.local #添加开机启动(如果需要)


2、分别在两LVS服务器(调度器)上操作
1)、关闭SELinux
vim /etc/selinux/config
#SELINUX=enforcing #注释掉
#SELINUXTYPE=targeted #注释掉
SELINUX=disabled #增加
:wq! #保存退出
setenforce 0 #使配置立即生效

2)、配置防火墙规则
-A RH-Firewall-1-INPUT -d 224.0.0.18 -jACCEPT  #允许VRRP(虚拟路由器冗余协议)组播地址通信
-A RH-Firewall-1-INPUT -m state --state NEW-m tcp -p tcp --dport 80 -j ACCEPT  #允许80端口通过防火

:wq! #保存退出
/etc/init.d/iptables restart #重启防火墙使配置生效

3)、安装lvs软件(其实是管理LVS的一个工具),和安装高可用软件keepalived
yum install ipvsadm  #Linux 2.6内核已经集成了lvs软件,此处ipvsadm为lvs管理工具
modprobe ip_vs  #加载ip_vs

yum install keepalived      #yum安装可以解决软件依赖问题,建议源码安装

4)、配置keepalived
keepalived安装的默认配置文件在/etc/keepalived/keepalived.conf
在主服务器上修改keepalived.conf的配置,如下:
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

#全局定义部分
global_defs {
  notification_email {
         balich@foxmail.com     #设置报警邮件地址,可以设置多个,
                            #每行一个,需要有sendmail的服务支持
   }
  notification_email_from balich@foxmail.com  #设置邮件发送地址
  smtp_server 127.0.0.1            #SMTP服务地址
  smtp_connect_timeout 30          #设置SMTP服务超时时间
  router_id LVS_DEVEL            #运行keepalived服务器的一个标识
}
#vrrp实例定义部分
vrrp_instance VI_1 {
   state MASTER         #主服务器是MASTER,备用服务器是BACKUP
   interface eth0        #指定HA监控的网络接口
   virtual_router_id 51      #虚拟路由表示,同一个vrrp实例要相同,且唯一
   priority 100          #定义优先级,数字越大,优先级越高
   advert_int 1        #MASTER和BACKUP负载均衡器之间的检查时间间隔
   authentication {        #验证类型和密码
       auth_type PASS    #验证类型:PASS和AH
       auth_pass 1111     #密码,同一VRRP实例需要相同
    }
   virtual_ipaddress {
       192.168.171.100     #设置虚拟IP地址,可以多个,一行一个
    }
}

#虚拟服务器定义部分
virtual_server 192.168.171.100 80 {     #虚拟服务的IP和端口
   delay_loop 3                #运行情况检查时间
   lb_algo rr                 #负载调度算法
   lb_kind DR                #LVS负载均衡模式,NAT/TUN/DR
    persistence_timeout50       #会话保持时间,在做测试的时候建议注释。
   protocol TCP              #指定转发协议类型,TCP/UDP

   real_server 192.168.171.30 80 {      #真实服务器,节点1
       weight 1                   #服务节点的权值
                   TCP_CHECK{
           connect_timeout 3        #3秒无响应超时
           nb_get_retry 3           #重试次数
           delay_before_retry 3     #重试间隔
               connect_port=80
               }
    }

   real_server 192.168.171.40 80 {       #真实服务器,节点2
       weight 1
                   TCP_CHECK{
           connect_timeout 3
           nb_get_retry 3
           delay_before_retry 3
              connect_port=80
            }
    }
}


从服务器keepalived.conf的配置和主服务器上基本相同,只需要修改两个地方:
state MASTER  -> state BACKUP
priority 100 -> priority 90

3、开启服务,验证测试
1)、在后端的两台WEB服务器(RS)上执行 /usr/local/sbin/lvs_rs_dr.sh start ,开启lo:0虚拟ip

2)、在两台LVS服务器(DR)开启端口转发和开启keepalived服务器(先主后从),启动keepalived服务会自动生成vip和ipvsadm规则

echo 1 > /proc/sys/net/ipv4/ip_forward #也可以执行修改: vim /etc/sysctl.conf       文件里面的参数,使用/sbin/sysctl–p 使之生效

/etc/init.d/keepalived start              #开启keepalived服务(先主后从)

3)、验证测试
在主lvs服务器上开启了keepalived服务,可以使用ip addr 查看虚拟的ip地址,使用ipvsadm –ln查看lvs的配置信息。

测试负载效果,使用浏览器访问:http://vip (192.168.171.100),为了更改的显示测试效果,我们修改后端WEB服务器是首页的默认主页内容:
RS1修改为:1111111111111111111RS1;
RS2修改为:1111111111111111111RS2;

在浏览器上可能因为缓存的缘故,会总是访问一台机器,可以使用Curl做测试(Windows下也可以安装)。

按照当前的配置会把访问的请求均衡分发给后端的机器。

4、模拟故障:
1)、主LVS上的keep服务出现故障(如keepalived服务被关闭了),查看备lvs是否接管服务。

2)、后端的RS(web服务器)其中的一台发生了故障,LVS服务器上的keepalived是否监测到,并将其故障的服务器剔除,不造成访问受限。

3)、主LVS服务器出现故障重新恢复工作后,查看其是否能重新接管服务。

4)、后端的RS(web服务器)发发生故障重新恢复工作后,检查其是否可以重新加入集群正常工作。


运维网声明 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-142890-1-1.html 上篇帖子: lvs+keepalived 案例配置 下篇帖子: LVS:keepalive实现ipvs高可用 Linux
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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