CentOS Linux 负载均衡高可用WEB集群之LVS+Keepalived配置

本文涉及的产品
云防火墙,500元 1000GB
应用型负载均衡 ALB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
简介:

CentOS Linux 负载均衡高可用WEB集群之LVS+Keepalived配置

 

 

LB集群是locd balance集群的简称、翻译成中文是:负载均衡集群的意思;集群是一组相互独立的、通过高速网络互联的计算机相互之间构成一个组合,并以单一的系统的模式加以管理。LVSLinux Virtual Server的简写,翻译中文是Linux虚拟服务器,是一个虚拟的服务器集群系统。

 

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

 

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

 

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

 

常用的调度算法:

固定调度算法:rrwrrdhsh

rr:轮询算法,它将请求依次分配给不同的rs节点,也就是RS节点中均摊分配。这种算法简单,但只适合于RS节点处理性能差不多的情况

wrr:加权轮训调度,它将依据不同RS的权值分配任务。权值较高的RS将优先获得任务,并且分配到的连接数将比权值低的RS更多。相同权值的RS得到相同数目的连接数。

dh:目的地址哈希调度(destination hashing)以目的地址为关键字查找一个静态hash表来获得需要的RS

sh:源地址哈希调度(sourcehashing)以源地址为关键字查找一个静态hash表来获得需要的RS

 

 

动态调度算法:wlclclblclblcr

wlc:加权最小连接数调度,假设各台RS的全职依次为Wi,当前tcp连接数依次为Ti,依次去Ti/Wi为最小的RS作为下一个分配的RS

lc:最小连接数调度(least-connection,IPVS表存储了所有活动的连接。LB会比较将连接请求发送到当前连接最少的RS.

lblc:基于地址的最小连接数调度(locality-basedleast-connection):将来自同一个目的地址的请求分配给同一台RS,此时这台服务器是尚未满负荷的。否则就将这个请求分配给连接数最小的RS,并以它作为下一次分配的首先考虑。

 

 

 

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

 

安装的配置:

操作系统:CentOS release 6.7 (Final)

内核版本:2.6.32-573.el6.x86_64

LVS版本:ipvsadm v1.26

keepalived版本:Keepalived v1.2.13

 

服务器配置:

 

LVS主服务器:hostnameDR1eth0:192.168.171.10VIP:eth0:0192.168.171.100

LVS备服务器:hostnameDR2eth0:192.168.171.20VIP:eth0:0192.168.171.100

 

WEB服务器:

hostnameRS1eth0:192.168.171.30VIP:lo:0192.168.171.100

hostnameRS2eth0:192.168.171.40VIP: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软件,此处ipvsadmlvs管理工具

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        #MASTERBACKUP负载均衡器之间的检查时间间隔

   authentication {        #验证类型和密码

       auth_type PASS    #验证类型:PASSAH

       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服务会自动生成vipipvsadm规则

 

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)、后端的RSweb服务器)其中的一台发生了故障,LVS服务器上的keepalived是否监测到,并将其故障的服务器剔除,不造成访问受限。

 

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

 

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

 

本文转自 巴利奇 51CTO博客,原文链接:http://blog.51cto.com/balich/1716051



相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
4月前
|
Java 应用服务中间件 Shell
Nginx+Keepalived+Tomcat 实现Web高可用集群
Nginx+Keepalived+Tomcat 实现Web高可用集群
142 0
|
1月前
|
负载均衡 监控 算法
论负载均衡技术在Web系统中的应用
【11月更文挑战第4天】在当今高并发的互联网环境中,负载均衡技术已经成为提升Web系统性能不可或缺的一环。通过有效地将请求分发到多个服务器上,负载均衡不仅能够提高系统的响应速度和处理能力,还能增强系统的可扩展性和稳定性。本文将结合我参与的一个实际软件项目,从项目概述、负载均衡算法原理以及实际应用三个方面,深入探讨负载均衡技术在Web系统中的应用。
78 2
|
3月前
|
运维 负载均衡 网络协议
LVS+Keepalived 负载均衡
LVS+Keepalived 负载均衡
93 8
LVS+Keepalived 负载均衡
|
3月前
|
域名解析 运维 负载均衡
LVS+Keepalived 负载均衡(二)28-1
【8月更文挑战第28天】LVS+Keepalived 负载均衡 配置 LVS VIP
74 5
|
4月前
|
负载均衡 算法 应用服务中间件
负载均衡技术在Web服务器集群中的应用
【8月更文第28天】随着互联网的发展和用户对Web服务需求的增长,单台服务器很难满足大规模访问的需求。为了提高系统的稳定性和扩展性,通常会采用Web服务器集群的方式。在这种架构中,负载均衡器扮演着至关重要的角色,它能够合理地分配客户端请求到不同的后端服务器上,从而实现资源的最优利用。
144 2
|
4月前
|
负载均衡 网络协议 Linux
在Linux中,常用WEB服务器负载架构有哪些?
在Linux中,常用WEB服务器负载架构有哪些?
|
4月前
|
Ubuntu 应用服务中间件 Linux
在Linux中,如何配置Web服务器(如Apache或Nginx)?
在Linux中,如何配置Web服务器(如Apache或Nginx)?
|
4月前
|
监控 Linux 应用服务中间件
在Linux中,如何进行Web服务器调优?
在Linux中,如何进行Web服务器调优?
|
4月前
|
Linux 应用服务中间件 网络安全
【Azure 应用服务】查看App Service for Linux上部署PHP 7.4 和 8.0时,所使用的WEB服务器是什么?
【Azure 应用服务】查看App Service for Linux上部署PHP 7.4 和 8.0时,所使用的WEB服务器是什么?
|
4月前
|
Linux Python
【Azure 应用服务】Azure App Service For Linux 上实现 Python Flask Web Socket 项目 Http/Https
【Azure 应用服务】Azure App Service For Linux 上实现 Python Flask Web Socket 项目 Http/Https