LVS + Keepalived 实现高可用Web集群
高可用性技术简介
高可用性(HighAvailability)通常是用来描述一个系统经过专门的设计,从而减少停工的时间,而保持其服务的高可用性。计算机系统的可用性定义为:MTTF/(MTTF+MTTR) * 100%,因此计算机系统的可用性定义为系统保持正常运行时间的百分比。而负载均衡服务器的高可用性是为了屏蔽负载均衡服务器的失效,需要建立一个备份机。主服务器和备份机上都运行高可用性监控程序,通过传送信息来监控对方的运行状况。当备份机不能在一定的时间里接收到从主服务器那里发送的它存活着(即它从事着主服务器的工作)的时候,备份服务器就会从主服务器那里接管器主服务器的服务IP并继续提供服务。当主服务器又开始接管服务时,它会给备份服务器发送它接管的消息,接着备份服务器就会释放服务IP地址,这样子主服务器又再一次接管了服务IP。这就实现了在主服务器失效的状况下,备份服务器可以接管主服务的工作,以此实现负载集群系统配置信息的同步与备份了。
LVS 负载均衡技术
LVS即 Linux Virtual Server,是由中国一个Linux程序员章文嵩博士发起和领导的,基于Linux系统的服务器集群解决方案,其实现目标是创建一个具有良好的扩展性、高可靠性、高性能和高可用性的体系。使用LVS架设的服务器集群系统从体系结构上看是透明的,最终用户只感觉到一个虚拟服务器。物理服务器之间可以通过高速的 LAN或分布在各地的WAN相连。最前端是负载均衡器,它负责将各种服务请求分发给后面的物理服务器,让整个集群表现得像一个服务于同一IP地址的虚拟服务器。负载均衡(Load Balance)建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。
负载均衡可以通过软件实现也可以通过硬件实现,软件负载均衡解决方案是指在一台或多台服务器相应的操作系统上安装一个或多个附加软件来实现负载均衡,它的优点是基于特定环境,配置简单,使用灵活,成本低廉,可以满足一般的负载均衡需求。而硬件负载均衡解决方案是直接在服务器和外部网络间安装负载均衡设备,这种设备我们通常称之为负载均衡器,由于专门的设备完成专门的任务,独立于操作系统,整体性能得到大量提高,加上多样化的负载均衡策略,智能化的流量管理,可达到最佳的负载均衡需求。LVS负载均衡的实现基础是IP交换,将IP层的TCP/IP请求均匀的转移到服务器池中不同的服务器上。而在 Linux平台下 IP的交换具备了一定的可扩展性,可以实现高性能、高可扩展性、易管理性等诸多特点,成为一个以负载均衡为核心的真正意义的集群系统。
LVS服务器集群采用IP负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程序。负载调度器可以运行在以下三种模式下:
(1)Virtual Server via NAT(VS-NAT):用地址翻译实现虚拟服务器。地址转换器有能被外界访问到的合法IP地址,它修改来自专有网络的流出包的地址。外界看起来包是来自 地址转换器本身,当外界包送到转换器时,它能判断出应该将包送到内部网的哪个节点。优点是节省IP 地址,能对内部进行伪装;缺点是效率低,因为返回给请求方的流量经过转换器。
(2)Virtual Server via IP Tunneling (VS-TUN):用IP隧道技术实现虚拟服务器。这种方式是在集群的节点不在同一个网段时可用的转发机制,是将IP包封装在其他网络流量中的方法。为了 安全的考虑,应该使用隧道技术中的VPN,也可使用租用专线。 集群所能提供的服务是基于TCP/IP的Web服务、Mail服务、News服务、DNS服务、Proxy服务器等。
(3)Virtual Server via Direct Routing(VS-DR):用直接路由技术实现虚拟服务器。当参与集群的计算机和作为控制管理的计算机在同一个网段时可以用此法,控制管理的计算机接 收到请求包时直接送到参与集群的节点。优点是返回给客户的流量不经过控制主机,速度快开销少。
LVS本身是基于IP层的负载均衡,可以说是最高效的一种方式。其中VS- DR和VS-TUN两种工作模式可以由后端机器直接对外服务,负载均衡的性能很高,对资源占用很少,通过LVS服务器集群负载均衡技术,能够以很高的性价比解决网络访问量激增带来的服务器瓶颈问题。
KEEPALIVED 技术
在 keepalived中,一个是master,其他的都是backup
vrrp:实现ip地址的高可用性,将除地址之外其他的功能也转移
通过状态的改变,keepalived检测到,执行相应的状态下定义的脚本,脚本中有服务的 关闭和开启的命令,来实现服务的转移。
keepalived不仅提供地址的转移功能,服务启动和关闭,还有监控功能具有两个核心组件:VRRP stack 和 checkers(用来监控服务)、还有对外围监控脚本调用的实现,节点之间只通过优先级来确定资源在哪个节点上运行,需要起始配置,虚拟地址转移需通过配置脚本来启动服务转移信息状态,有个通知机制,可以发短信或者邮件给管理员(需配置邮件服务器)
适用于用不到共享存储,节点少的且keepalived支持多节点,但是节点中启动服务的只能有一个节点(一主多从)让每个节点都活动起来(运行两组资源)
vrrp认证:1、明文认证、配置好预共享密钥 2、md5 sha1 散列
core:是keepalived的核心,复杂主进程的启动和维护,全局配置文件的加载解析等
check:负责healthchecker(健康检查),包括了各种健康检查方式,以及对应的配置的解析包括
LVS的配置解析
vrrp:VRRPD子进程,VRRPD子进程就是来实现VRRP协议的
libipfwc:iptables(ipchains)库,配置LVS会用到
libipvs*:配置LVS会用到
注意,keepalived和LVS完全是两码事,只不过他们各负其责相互配合而已
keepalived启动后会有三个进程
(1)父进程:内存管理,子进程管理等等
(2)子进程:VRRP子进程
(3)子进程:healthchecker子进程
实验环境物理结构说明
keepalived测试环境安装
(1)关闭防火墙和selinux
# service iptables stop
# chkconfig iptables off
# vi /etc/selinux/config
把enforcing改为disabled
# setenforce 0
(2)分别给master和backup节点安装ipvsadm和keepalived
# yum –y install ipvsadm
# yum –y install keepalived
# service keepalived start
# chkconfig keepalived on
(3)配置 keepalived.conf
# vi /etc/keeplived/keepalived.conf
! Configuration File for keepalived global_defs { router_id S208 ## keepalived 服务器标识符,可以随意设定( 貌似也是全局唯一 ) } vrrp_instance NW3007 { ## 定义一个名为 NW3007 的 VRRP 实例 state MASTER ## Keepalived 服务器角色,MASTER 为主、BACKUP 为备 interface eth0 ## 指定 HA 监测网络接口 virtual_router_id 51 ## 虚拟路由标识,同一个 VRRP 实例使用唯一的标识,主备必须一样 priority 200 ## 节点优先级,同一 VRRP 实例中 MASTER 的优先级必须大于 BACKUP advert_int 5 ## MASTER / BACKUP 之间同步检查间隔时间,单位 秒 track_interface { ##指定监听数据的网口 eth0 } authentication { ## 节点之间通信验证类型、密码 ,同一 VRRP 实例中,MASTER / BACKUP 必须使用相同的密码才可以通信 auth_type PASS auth_pass 1111 } virtual_ipaddress { ## 虚拟 IP 地址,又称漂移 IP 。可以通过 ip add 在 MASTER 上查看是否绑定 192.168.2.100 } } virtual_server 192.168.0.110 80 { ## 定义虚拟服务器 delay_loop 3 ## 定义健康检查时间间隔,单位 秒 lb_algo wlc ## 负载均衡调度算法,支持 rr 、wrr 、lc 、wlc 、lblc 、sh 、dh 等 lb_kind DR ## LVS 负载均衡机制,支持 NAT 、TUN 、DR protocol TCP ## 转发协议类型,支持 TCP 、UDP ha_suspend real_server 192.168.0.30 80 { ## 定义节点服务器 weight 3 ## 节点权重值,数字越大权重越高,分配到的连接越多。主要用于后端节点服务器性能不统一 TCP_CHECK { ## 健康检测方式,支持 HTTP_GET 、SSL_GET 、TCP_CHECK 、SMTP_CHECK 、MISC_CHECK connect_timeout 3 ## 无响应超时时间,单位 秒 } } real_server 192.168.0.31 80 { ## 第二台节点服务器 weight 3 TCP_CHECK { connect_timeout 3 } } }
在master节点配置好keepalived文件后将keepalived.conf拷贝到backup节点
# scp /etc/keepalived/keepalived.conf 192.168.0.29:/etc/keepalived/
然后将priority值改为100即可,最后重启keepalived服务
# service keepalived restart
(4)为master节点和backup节点添加vip
master节点
# ip addr add 192.168.0.110/32 dev eth0
backup节点
# ip addr add 192.168.0.110/32 dev eth0
(5)验证虚拟 IP 地址是否可以正常漂移
停用master节点网卡
# ifdown eth0
查看backup节点的日志文件
查看backup的网卡
重新激活master网卡,查看backup日志文件
虚拟ip会自动移除,虚拟ip设置正常!
注意:停用master的网卡vip会自动消失需要重新为master添加vip
# ip addr add 192.168.0.110/32 dev eth0
配置RS-1和RS-2
(1)关闭防火墙和selinux
# service iptables stop
# chkconfig iptables off
# vi /etc/selinux/config
把enforcing改为disabled
# setenforce 0
(2)安装httpd
分别在RS-1和RS-2上进行如下操作
# yum –y install httpd
# service httpd start
# chkconfig httpd on
在RS-1
echo RS-1-Web11111111 > /var/www/html/index.html
在RS-2
echo RS-2-Web2222222 > /var/www/html/index.html
(3)RS-1创建一个脚本文件
# vi /root/realserver.sh
#!/bin/bash vip=192.168.0.110 case $1 in start) echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce ifconfig lo:0 $vip netmask 255.255.255.255 broadcast $vip up ;; stop) ifconfig lo:0 down echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore echo 0 > /proc/sys/net/ipv4/conf/eth0/arp_ignore echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce echo 0 > /proc/sys/net/ipv4/conf/eth0/arp_announce ;; esac
赋予运行权权限
# chmod a+x /root/realserver.sh
将脚本拷贝到RS-2
# scp /root/realserver.sh 192.168.0.31:/root/
在RS-1和RS-2执行脚本
# ./realserver start
测试
服务器之间可以自由调度
停用mater网卡也可以自由调度RS-1和RS-2,实验到此结束
作者:废权
链接:https://blog.yjscloud.com/archives/41
声明:如无特别声明本文即为原创文章仅代表个人观点,版权归《废权的博客》所有,欢迎转载,转载请保留原文链接。


共有 0 条评论