负载均衡及服务器集群(lvs)

简介:






在互连网应用技术里,负载均衡一直是热门话题,本书讨论的负载均衡技术,包括但不限于负载均衡本身。使用负载均衡技术主要的目的包括如下几点:

      系统高可用性。组成系统的某些设备或部件失效,并不会影响正常的服务。
      系统可扩展性。用户的增加,引起访问数乃至流量的增加,这种情形下,需要对系统进行扩容,以应对这种快速增长。对于提供高可用服务的互联网网站,其对可扩展的基本要求就是在保持系统服务不终止的情况下,透明的扩充容量,即用户不知道扩容的存在,或者说是扩容不对现有的服务产生任何负面作用。这些扩展主要包括:带宽扩展、服务器扩展、存储容量扩展、数据库扩展等,当然也包括主机增加内存等方面的扩展。
      负载均衡能力。一个应用或服务由数个物理服务器提供,并且每个物理服务器运行的应用或服务是相同的,我们可以让用户的访问通过某种控制策略,把负载分摊到不同的物理服务器,从而保持每个物理服务器有比较合理的负载。当整个系统的负载趋于饱和时,通过增加物理服务器和扩充物理带宽来解决这个麻烦。增加物理服务器以后,系统的负载情况将重新在所有集群的物理服务器之间按照指定的算法重新达到新的均衡。
 
一个完整的负载均衡项目,一般由虚拟服务器、故障隔离及失败切换3个功能框架所组成。
 
虚拟服务器是负载均衡体系的基本架构,它分两层结构:转发器(Director)和真实服务器。图6-1为虚拟服务器的结构示意
 
 
 

为什么称虚拟服务器?因为从用户的角度看来,似乎只是一个服务器在提供服务。虚拟服务器最主要的功能是提供包转发和负载均衡,这个功能可以通过撰写ipvsadm脚本具体实现。虚拟服务器项目由章文嵩博士所贡献,目前已被添加到各种linux发行版的内核。
故障隔离指虚拟服务器中的某个真实服务器(或某几个真实服务器)失效或发生故障,系统将自动把失效的服务器从转发队列中清理出去,从而保证用户访问的正确性;另一方面,当实效的服务器被修复以后,系统再自动地把它加入转发队列。
失败切换,这是针对负载均衡器Director 采取的措施,在有两个负载均衡器Director的应用场景,当主负载均衡器(MASTER)失效或出现故障,备份负载均衡器(BACKUP)将自动接管主负载均衡器的工作;一旦主负载均衡器故障修复,两者将恢复到最初的角色。
要从技术上实现虚拟服务器、故障隔离及失败切换3个功能,需要两个工具:ipvsadmkeepalived。当然也有heartbeat这样的工具可以实现同样的功能,但相对于keepalivedheartbeat的实现要复杂得多(如撰写ipvsadm脚本,部署ldirectord,编写资源文件等)。在采用keepalived的方案里,只要ipvsadm被正确的安装,简单的配置唯一的文件keepalived就行了。
6.1 lvs  核心 ipvs
Ipvs(IP Virtual Server)是整个负载均衡的基础,如果没有这个基础,故障隔离与失败切换就毫无意义了。在大部分linux发行版中,ipvs被默认安装,而以本书前面介绍的方法定制安装系统,则ipvs没有被默认安装。
除大部分linux发行版支持ipvs外,FreeBSD也可以支持LVS,只不过实现起来要麻烦一些。
6.1.1   安装 ipvs
Ipvs具体实现是由ipvsadm这个程序来完成,因此判断一个系统是否具备ipvs功能,只需要察看ipvsadm 程序是否被安装。察看ipvsadm程序最简单的办法就是在任意路径执行命令ipvsadm。表6-1为安装ipvsadm及未安装ipvsadm的输出对比。
 
执行  ipvsadm  后的输出
未安装 ipvsadm
-bash: ipvsadm: command not foun
安装 ipvsadm
IP Virtual Server version  1.2.1  (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port        Forward Weight ActiveConn InActConn
6-1 ipvsadm 输出对比(样例来源 centos 5.2
      Centos5.2安装ipvsadm( 假定当前目录为/root)
1、   从官方网站下载ipvsadm,目前最新的版本为ipvsadm-1.25.tar.gz ,其发布时间是 2008 11 5 Wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz 取得该版本 [1]
2、   创建一个连接文件,其命令为:ln –sv /usr/src/kernels/ 2.6.18 -92.el5PAE-i686 /usr/src/linux .注意一定要与当前的运行的内核相一致,因为/usr/src/kernels目录下可多个目录。如果不创建这个连接文件,在编译时会出错,从而不能继续进行安装。
3、   解包。 tar zxvf ipvsadm-1.24
4、   编译并安装。 cd ipvsadm-1.24; make;make install  可执行文件被安装到/sbin/ipvsadm.
      检验ipvsadm是否被正确安装
1、   执行ipvsadm,看是否有表6-12栏的输出。
2、   检查当前加载的内核模块,看是否存在ip_vs模块。
[root@hd-4 ipvsadm-1.24]# lsmod|grep ip_vs
ip_vs                  77569  0
1 、只有执行 ipvsadm 以后,才会在内核加载 ip_vs 模块。
2 、不能以查进程的方式判断 ipvs 是否运行。
[1] :如果下载最新的 ipvsadm-1.25.tar.gz 这个版本,在创建连接文件 /usr/src/linux 后,执行编译时,可能需要修改 /boot/grub/grub.conf 启动内核名称。一旦当前运行内核与连接文件所代表的内核名不一致时,将出现找不到 *.h 这样的错误,从而导致安装不能正常进行。
6.1.2  lvs 客户端
Lvs的客户端指负载均衡其/转发器(director)后面提供服务的真实机器。负载均衡类型(lb_kind)一般分直接路由模式DR 、网络地址转换模式 NAT以及隧道模式TUN三种。Lvs客户端的配置是根据其所采用的负载均衡种类(lb_kind)来做相应操作的。在我们的应用环境里,为了获得最高的性能,采用的负载均衡种类(lb_kind)是直接路由模式DR
不管采取哪一种模式,lvs客户端都不需安装额外的软件。
Lvs可支持的客户端包括:各种GNU/linux、大部分unix已经windows。目前我已经成功运行的lvs客户端环境有centosredhatfreebsdwindows等。需要注意的是,由于客户端操作系统的不同,lvs客户端的配置也就各不相同了。本书中,将以centosfreebsd两种操作系统作为lvs的客户端,给出其直接路由模式DR的配置方法。
      lvs客户端(真实服务器)操作系统是centos时的配置文件
[root@huludao-2 ~]# more /usr/local/bin/lvs_real
#!/bin/bash
#description : start realserver
VIP=61.135.20.16
/etc/rc.d/init.d/functions
 
case "$1" in
start)
echo " start LVS of REALServer"
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
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 Directorserver"
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
这里对配置文件里重要的一些项进行说明:
1、   vip(virtual ip)。直接路由模式的vip必须跟服务器对外提供服务的ip地址在同一个网段,并且lvs 负载均衡器和其他所有提供相同功能的服务器都使用这个vip.
2、   vip被绑定在环回接口lo0:0上,其广播地址是其本身,子网掩码是255.255.255.255。这与标准的网络地址设置有很大的不同。采用这种可变长掩码方式把网段划分成只含一个主机地址的目的是避免ip地址冲突。
3、   echo “ 1” ,echo “ 2”  这段的作用是抑制arp广播。如果不做arp抑制,将会有众多的机器向其他宣称:“嗨!我是奥巴马,我在这里呢!”,这样就乱套了。
      lvs客户端(真实服务器)操作系统是freebsd时的配置文件
fav1# more /usr/local/bin/lvs_real_bsd
#!/usr/local/bin/bash
#description : start realserver
VIP=61.135.20.16
 
case "$1" in
start)
echo " start LVS of REALServer"
/sbin/ifconfig lo0 $VIP  netmask 255.255.255.255 alias -arp up
;;
 
stop)
/sbin/ifconfig lo0 alias down
echo "close LVS Directorserver"
/sbin/ifconfig lo0 127.0.0.1 arp up
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
在这里,我们同样对这个配置脚本的某些项进行说明:
1vip地址设置和arp抑制用 /sbin/ifconfig lo0 $VIP  netmask 255.255.255.255 alias -arp up
这么一行就实现了。
我们把这两种操作系统的lvs客户端做个比较,发现freebsd的配置书写上要简洁一些,是不是可以认为freebsd的网络功能比linux强大呢?
6.1.3             lvs 客户端验证
lvs客户端不必依赖负载均衡器就可以独立运行,只不过这种运行对负载均衡没有任何作用,当然也没有任何副作用,所以我们把lvs客户端配置完成后(配置文件就是一个shell脚本),可以单独运行它,来检验配置是否正确。  
      centos 脚本
配置脚本写好保存,给予脚本执行权限。脚本启停以startstop这两个参数来控制。首先,我们来启动配置脚本,执行命令 /usr/local/bin/lvs_real start ,接着我们来检查网络的状态:
[root@huludao-2 ~]# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet  61.135.20.16/32 brd 61.135.20.16 scope global lo:0
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 100
    link/ether 00:15:17:60:21:a0 brd ff:ff:ff:ff:ff:ff
    inet  61.135.20.101/24 brd 125.38.38.255 scope global eth0
    inet6 fe80::215:17ff:fe60: 21a 0/64 scope link
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop qlen 1000
    link/ether 00:15:17:60:21:a1 brd ff:ff:ff:ff:ff:ff
4: sit0: <NOARP> mtu 1480 qdisc noop
    link/sit  0.0.0 .0 brd 0.0.0.0
 
从输出可以看出,lo0:0确实绑定了我们指定的vip地址。那么当我们执行 /usr/local/bin/lvs_real时,vip应当从lo0:0接口卸载。我们来看看输出是什么:
[root@huludao-2 ~]# lvs_real stop
close LVS Directorserver
[root@huludao-2 ~]# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 100
    link/ether 00:15:17:60:21:a0 brd ff:ff:ff:ff:ff:ff
    inet 125.38.38.101/28 brd 125.38.38.111 scope global eth0
    inet6 fe80::215:17ff:fe60: 21a 0/64 scope link
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop qlen 1000
    link/ether 00:15:17:60:21:a1 brd ff:ff:ff:ff:ff:ff
4: sit0: <NOARP> mtu 1480 qdisc noop
    link/sit  0.0.0 .0 brd 0.0.0.0

 

freebsd脚本/usr/local/bin/lvs_real_bsd
启停所使用的方法和参数与centos那个配置脚本是一样的,但察看方法有所不同(freebsdip add工具)。这里使用的方法是ifconfig,启动时输出如下:
fav1# ifconfig
em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=19b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,TSO4>
        ether 00:15:17:6e:c8:46
        inet 61.135.20.69 netmask 0xffffffc0 broadcast 61.128.20.127
        media: Ethernet autoselect (100baseTX <full-duplex>)
        status: active
lo0: flags= 80c 9<UP,LOOPBACK,RUNNING,NOARP,MULTICAST> metric 0 mtu 16384
        inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3
        inet6 ::1 prefixlen 128
        inet 127.0.0.1 netmask 0xff000000
        inet 61.135.20.16 netmask 0xffffffff
当执行/usr/local/bin/lvs_real_bsd stop 时,vip被卸载。有时可能卸载不成功,可能需要多执行几次停止命令。
arp抑制验证
如果不配置负载均衡器的转发功能,那么在这个步骤所设置的vip将不会提供任何ip功能,除了能用ifconfig输出显示而外。
在没有配置或开启lvs负载均衡器的情况下,我们用其他机器ping vip,应该是不通的。当然在网络前面启用了防火墙阻止ping 不算。为了不影响测试,最好把你的防火墙打开。
Arp抑制生效后,再也没有机器知道vip的存在,这是一个问题,谁来响应vip请求?这个问题交给负载均衡器吧,它知道这背后的一切。














本文转自legendfu51CTO博客,原文链接: http://blog.51cto.com/legendfu/1072641  ,如需转载请自行联系原作者






相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
|
弹性计算 监控 负载均衡
|
4月前
|
弹性计算 Kubernetes jenkins
如何在 ECS/EKS 集群中有效使用 Jenkins
本文探讨了如何将 Jenkins 与 AWS ECS 和 EKS 集群集成,以构建高效、灵活且具备自动扩缩容能力的 CI/CD 流水线,提升软件交付效率并优化资源成本。
643 0
|
8月前
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
4月前
|
域名解析 存储 缓存
阿里云服务器带宽怎么选?巧用负载均衡节省带宽费用技巧与注意事项参考
在选购阿里云服务器的过程中,设定合适的云服务器带宽是必不可少的一步。为了确保云服务器带宽的稳定性,用户通常会倾向于选择固定带宽,比如1Mbps、3Mbps、10Mbps或是20Mbps等规格。不过,在挑选云服务器带宽的过程中,众多用户常常会陷入一个两难的境地:怎样做才能在确保云服务器稳定运行的同时,又能够合理控制成本支出呢?本文将为大家介绍一种借助阿里云负载均衡产品来节省带宽费用的方法,以供参考借鉴。
|
8月前
|
负载均衡 前端开发 JavaScript
LVS-DR模式、keepalived、Nginx与Tomcat合作,打造动静分离,高效负载均衡与高可用性
为了采用这样的架构,你需要对LVS-DR、Keepalived、Nginx与Tomcat有一定的理解和掌握,同时也需要投入一些时间去研究和配置,但是一旦你把它运行起来,你将会发现,这一切都是值得的。
343 11
|
9月前
|
负载均衡 算法 关系型数据库
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL集群架构负载均衡故障排除与解决方案
本文深入探讨 MySQL 集群架构负载均衡的常见故障及排除方法。涵盖请求分配不均、节点无法响应、负载均衡器故障等现象,介绍多种负载均衡算法及故障排除步骤,包括检查负载均衡器状态、调整算法、诊断修复节点故障等。还阐述了预防措施与确保系统稳定性的方法,如定期监控维护、备份恢复策略、团队协作与知识管理等。为确保 MySQL 数据库系统高可用性提供全面指导。
|
10月前
|
消息中间件 分布式计算 资源调度
基于云服务器的数仓搭建-集群安装
本文介绍了大数据集群的安装与配置,涵盖Hadoop、Zookeeper、Kafka和Flume等组件。主要内容包括: 1. **数据模拟** 2. **Hadoop安装部署**:详细描述了HDFS和YARN的配置,包括NameNode、ResourceManager的内存分配及集群启动脚本。 3. **Zookeeper安装**:解压、配置`zoo.cfg`文件,并创建myid文件 4. **Kafka安装**:设置Kafka环境变量、配置`server.properties` 5. **Flume安装**:配置Flume采集日志到Kafka,编写启动脚本进行测试。
|
弹性计算 负载均衡 网络协议
ECS中实现nginx4层7层负载均衡和ALB/NLB原SLB负载均衡
通过本文的介绍,希望您能深入理解并掌握如何在ECS中实现Nginx四层和七层负载均衡,以及如何使用ALB和NLB进行高效的负载均衡配置,以提高系统的性能和可靠性。
841 9
|
运维 监控 负载均衡
slb后端服务器故障
slb后端服务器故障
261 13
|
弹性计算 负载均衡 安全
slb应用服务器对Host头有校验要求
slb应用服务器对Host头有校验要求
194 6

热门文章

最新文章