一、背景和目的
1. 为应用服务器提供高可用性和负载均衡的能力,满足大量并发访问的需要
2. 节约成本。替代商业的硬件负载均衡器,为起步型IT公司提供价格低廉的解决方案。理想选择。
二、 软件简介
1. LVS简介
LVS是一个开源的
软件,由毕业于
国防科技大学的章文嵩博士于1998年5月创立,可以实现LINUX平台下的简单负载均衡。LVS是Linux Virtual Server的缩写,意思是Linux虚拟服务器。
1.1工作原理
LVS由前端的负载均衡器(Load Balancer,LB)和后端的真实服务器(Real Server,RS)群组成。RS间可通过局域网或广域网连接。结构对用户是透明的,用户只能看见一台作为LB的虚拟服务器(Virtual Server),而看不到提供服务的RS群。
当用户的请求发往虚拟服务器,LB根据设定的包转发策略和负载均衡调度算法将用户请求转发给RS。RS再将用户请求结果返回给用户。同请求包一样,应答包的返回方式也与包转发策略有关。
1.2三层结构
(1) Load Balancer(负载均衡器):
调度器是整个集群系统的前端,负责把客户请求转发到Real Server上。
Backup是备份负载调度器,当Master Load Balancer不可用时,有Backup接替,成为Master Load Balancer。
Load Balancer通过Ldirectord监测各Real Server的健康状况。在Real Server不可用时把它从群中剔除,恢复时重新加入。
Backup是备份负载调度器,当Master Load Balancer不可用时,有Backup接替,成为Master Load Balancer。
Load Balancer通过Ldirectord监测各Real Server的健康状况。在Real Server不可用时把它从群中剔除,恢复时重新加入。
(2) Server pool(服务器池):
Server pool是一组运行实际应用服务的机器,比如WEB, Mail, FTP, DNS, Media等等。
Server pool是一组运行实际应用服务的机器,比如WEB, Mail, FTP, DNS, Media等等。
(3) Shared Storage(共享存储):
Shared Storage为所有Real Server提供共享存储空间和一致的数据内容。
Shared Storage为所有Real Server提供共享存储空间和一致的数据内容。
1.3实现模式
1)Virtual Server via NAT
2)Virtual Server via IP Tunneling
3)Virtual Server via Direct Routing
1.4 调度算法
- IPVS的负载调度算法有十种:
- 轮叫(Round Robin)
- 加权轮叫(Weighted Round Robin)
- 最少链接(Least Connections)
- 加权最少链接(Weighted Least Connections)
- 基于局部性的最少链接(Locality-Based Least Connections)
- 带复制的基于局部性最少链接(Locality-Based Least Connections with Replication)
- 目标地址散列(Destination Hashing )
- 源地址散列(Source Hashing)
- 最短期望延迟(Shortest Expected Delay)
- 无须队列等待(Never Queue)
2. Piranha简介
一款类似于keepalived的web配置软件,优点是方便而而且直观,在30分钟内可配置一套基于LVS基础的负载均衡高可用解决方案。
2.1 Piranha组件
> Pluse
负责主调度器和备份调度器之间的的健康状态检测,heartbest的通信进程。
> Lvsd
Lvsd进程活动在LVS路由器中,读取/etc/sysconfig/ha/lvs.cf,调用ipvsadm来构建和维护IPVS路由表,并为每个配置LVS服务分配nanny。
> Ipvsadm
此服务更新和维护内核中的IPVS路由表,LVS进程通过调用ipvsadm来添加、修改或删除IPVS路由表。
> Nanny
Nanny存在于状态是Active的的路由器中。通过此进程,活动状态的调度器可以检测每个realserver的状态,同时管理监控负载状态。每个realserver中定义的每一个服务都有一个独立的nanny进程管理。
> Send_arp
在活动调度器失效时,备用调度器调用send_arp将虚拟地址切换到备份调度器。并在公网和局域网发送命令关掉lvsd进程,同时启动备份掉武器的LVSD进程。
三、 配置
3.1方案IP信息列表
名称
|
IP 地址
|
心跳地址
|
LVS-Active Router
|
192.168.8.226/24
|
10.10.1.1/30
|
LVS-Backup Router
|
192.168.8.227/24
|
10.10.1.2/30
|
Real-Server1
|
192.168.8.228/24
|
|
Real-Server2
|
192.168.8.229/24
|
|
LVS-VIP
|
192.168.8.230/32
|
|
Gateway
|
192.168.8.1/24
|
|
3.2 环境预约
> 配置平台:
Director:CentOS 6.2
RealServer:Windows Server Enterprise 2003、CentOS 6.2
> 配置方式:VS/DR(直接路由)
> 配置软件:ipvsadm+piranha
3.3 Virtual Server部署
3.3.1 安装LVS、Piranha、PHP。
#yum install ipvsadm modecluster piranha system php php-cli php-common
|
3.3.2 配置Piranha
3.3.2.1主LVS服务器:
#vim /etc/sysctl.conf //修改系统参数
Net.ipv4.ip_forward = 1 //将默认0修改为1,开启IP转发
#sysctl –p //执行命令即时生效
|
3.3.2.2启动piranha配置服务
#/etc/init.d/piranha-gui start //启动piranha服务
#/usr/sbin/piranha-passwd //设置piranha登录密码
|
使用浏览器打开管理页面:
http://localhost:3636(图001)
【图001】
登录管理页面用户名:piranha密码:(执行/usr/sbin/piranha-passwd)后输入的密码。(图002)
【图002】
3.3.3 配置主LVS服务器
点击GLOBAL SETTINGS(图003)
> Primary server public IP: 192.168.8.226
> Primary server private IP: 10.10.1.1 //心跳地址
> Use network type: Direct Routing //直接路由方式
> 点击ACCEPT //保存
【图003】
3.3.4 配置Backup Server (不部署备用LVS直接查看3.3.5)
> 点击ENABLE激活冗余服务器(图004)
> Redundant server public IP: 192.168.8.227 //备份LVS地址
> Heartbeat interval (seconds):6 //心跳网络检测时间
> Assume dead after(seconds):18 //死亡转移时间
> Heartbeat runs on port:539 //监控的端口
> Monitor NIC links for failures : 不勾选 //网卡链路失效选项
> Syncdaemon: 不勾选 //同步守护进程选项
【图004】
3.3.5 配置虚拟服务器
> 点击VIRTUAL SERVERS è ADD è EDIT,添加一条新的记录并编辑(图005)
> Name: LVS-VIP //自定义名称
> Application port:80 //监控应用端口号
> Protocol:TCP //监控网络的类型
> Virtual IP Address:192.168.8.230 //虚拟服务器的IP地址
> Virtual IP Network Mask: 255.255.255.255 //虚拟服务掩码
> Device: eth0:1 //虚拟IP设备宿主
> Re-entry time: 15 //移除RS后从新加入时间
> Service timeout: 6 //RS失效后存活时间
> Scheduling: WRR //调度算法
> Persistence: 30 //维持时间
> Persistence Network Mask:255.255.255.255 //掩码
【图005】
3.3.6 配置Real-server1
> 点击REAL SERVER è ADD è EDIT 新建一条RS记录(图006)
> NAME:Real-Server01 //自定义RS名称
> Address:192.168.8.228 //RS1服务器IP地址
> Port:80 //服务的端口
> Weight:1 //调度权重
【图006】
3.3.7 配置Real-Server2
> 点击REAL SERVER è ADD è EDIT 新建一条RS记录(图007)
> NAME:Real-Server02 //自定义RS名称
> Address:192.168.8.229 //RS2服务器IP地址
> Port:80 //服务的端口
> Weight:1 //调度权重
【图007】
3.3.8 激活服务器
完成上述操作后,要激活虚拟服务器(图008)及所有的真实服务器(图009),使其为”UP”状态。
【图008】
【图009】
3.3.8 启动LVS服务
#service pulse start
|
3.3.9 Backup Server配置
> 如安装主LVS服务器一样安装备份LVS服务器软件
> 复制Active服务器lvs.cf脚本到备份服务器,并启动服务器
#scp /etc/sysconfig/ha/lvs.cf 192.168.8.227:/etc/sysconfig/ha
#service pulse start //启动服务
|
3.4 Real Server部署
3.4.1 配置真实服务器Windows
使用Windows作为RealServer,需要使用Microsoft loopback adapter(回环接口)设置虚拟VIP,子网掩码要设置为32位以解决DR模式中ARP的问题,实现ARP隐藏。
> 配置VIP
添加Microsoft loopback adapter ,打开控制面板,依次点添加硬件、选择设备已连接好、选择添加新的硬件、手动安装、网络适配器便可添加Microsoft loopback adapter设备(图010)
【图010】
设置IP地址为192.168.8.230掩码255.255.255.255,windows 2003需要修改注册表才能实现。打开注册表HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters\Interfaces
找到Microsoft loopback adapter设置ipaddress值:192.168.8.230
Subnetmask: 255.255.255.255,禁用设备再启用即可。(图011)
【图011】
Ø 配置公共地址
Ipaddress: 192.16.8.228 //局域网公共IP地址
Netmask: 255.255.255.0 //子网掩码
Getway : 192.168.8.1 //默认网关
完成后,按照此方法将配置RealServer02
局域网地址:192.168.8.229 //填写约定的地址
VIP地址:192.168.8.230 //虚拟服务IP
3.4.2 配置真实服务器Linux
> 配置RealServer 脚本
#vim /usr/local/sbin/Realserver.sh
#!/bin/bash VIP=192.168.8.230 case "$1" in start) /sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up /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 echo "RealServer Started" ;; stop) ifconfig lo:0 down 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 1 esac |
编写完成后,分别在RealServer1和Realserver2执行。
#/usr/local/sbin/Realserver.sh start
|
查看LVS服务状态
#ipvsadm -ln
|
查看LVS服务监听日志
#tail /var/log/message
|
转载于:https://blog.51cto.com/jianwen/808880