一套内部Portal系统,原结构为:
该结构存在明显的单点故障,即:当HTTP Server宕机时,整个服务将会停止。
为了提高系统的可用性和可伸缩性,保证服务的持续稳定,将对该系统进行改进,改进后的结构为:
从结构图可看出,由于增加了LVS系统和keepalived提供HA功能,单点故障被消除。同时,原系统结构没有被改变,减少了LVS系统对原有系统的影响。该结构变化提升了系统的可用性。
具体安装与实施步骤如下:
1、操作系统选择
根据LVS官网介绍,RH AS5 内核(Linux内核版本2.6)中已包含LVS,并已安装了ipvsadm管理工具,因此,选择该版本操作系统即可直接使用LVS,避免编译内核等麻烦。当然,其他版本的Linux也同样支持LVS,需要到http://www.linuxvirtualserver.org/software/ipvs.html下载合适的ipvsadm并编译。
2、LVS部署
由于操作系统包含ipvsadm工具,因此,只需在两台LVS Server里下载并安装keepalived,并编译后,即可完成部署工作。关于keepalived的信息可在此处找到:http://www.keepalived.org/。从http://www.keepalived.org/download.html下载keepalived最新版本(本例中为keepalived-1.1.19),开始安装:
tar zxf keepalived-1.1.19.tar.gz
cd keepalived-1.1.19
mkdir /usr/local/keepalive
ln -s /usr/src/kernels/2.6.18-164.el5-x86_64 /usr/src/linux (此步重要,不做此步编译时将会报错,具体路径请根据实际情况设置)
./configure --prefix=/usr/local/keepalive
make
make install
如果没有报错,继续进行keepalived的配置工作。
3、LVS服务器的keepalived配置文件/usr/local/keepalive/etc/keepalived.conf
#以下为配置文件内容
#配置文件开始
vrrp_sync_group VG1 {
group {
VI_1
}
}
vrrp_instance VI_1 {
state MASTER //热备机改为BACKUP
interface eth0
virtual_router_id 51 //Master和Backup的Router ID必须一样
priority 100 //Master优先级要高于Backup
advert_int 1
authentication {
auth_type PASS
auth_pass 1234
}
virtual_ipaddress {
1.1.1.1 //VIP地址
}
}
global_defs {
router_id LB
}
virtual_server 1.1.1.1 80 { //虚拟服务器的IP和提供服务的端口
delay_loop 10
lb_algo wlc //LVS算法
lb_kind DR //LVS实现方式,本例中使用DR即直接路由方式
persistence_timeout 2
protocol TCP
real_server 1.1.1.2 80 {
weight 100
TCP_CHECK {
connect_port 80
connect_timeout 3
}
}
real_server 1.1.1.3 80 {
weight 100
TCP_CHECK {
connect_port 80
connect_timeout 3
}
}
}
#第二组服务配置,同一配置文件,两组不同端口
virtual_server 1.1.1.1 7788 { //虚拟服务器的IP和提供服务的端口,此处用了另一个TCP端口7788提供其他服务
delay_loop 10
lb_algo wlc
lb_kind DR
persistence_timeout 2
protocol TCP
real_server 1.1.1.2 7788 {
weight 100
TCP_CHECK {
connect_port 7788
connect_timeout 3
}
}
real_server 1.1.1.3 7788 {
weight 100
TCP_CHECK {
connect_port 7788
connect_timeout 3
}
}
}
#配置文件结束
配置文件书写时应注意花括号的配对,避免出现错误。
4、LVS客户端脚本(摘自网络)
#!/bin/bash
#description : start realserver
VIP=1.1.1.1
/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
5、LVS Server和Client启动和检查
启动LVS Server的负载均衡和LVS Client(RealServer)
LVS Server:
/usr/local/keepalive/sbin/keepalived -D -f /usr/local/keepalive/etc/keepalived.conf
LVS Client:
/usr/local/bin/lvs_real start
检查启动情况:
LVS Server启动情况检查:
ps aux 结果中有
root 3669 0.0 0.0 35812 636 ? Ss Apr26 0:00 /usr/local/keepalive/sbin/keepalived -D -f /usr/local/keepalive/etc
root 3670 0.0 0.0 39972 1612 ? S Apr26 0:00 /usr/local/keepalive/sbin/keepalived -D -f /usr/local/keepalive/etc
root 3671 0.0 0.0 39972 1104 ? S Apr26 0:00 /usr/local/keepalive/sbin/keepalived -D -f /usr/local/keepalive/etc
说明keepalived启动正常
LVS Server状态检查
ipvsadm返回信息:
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 1.1.1.1:7788 wlc persistent 2
-> 1.1.1.2:7788 Route 100 0 0
-> 1.1.1.3:7788 Route 100 0 0
TCP 1.1.1.1:http wlc persistent 2
-> 1.1.1.2:http Route 100 0 0
-> 1.1.1.3:http Route 100 0 0
说明转发已生效
LVS Client启动情况检查:
ifconfig 查看网络配置,结果中有
lo:0 Link encap:Local Loopback
inet addr:1.1.1.1 Mask:255.255.255.255
UP LOOPBACK RUNNING MTU:16436 Metric:1
说明客户端启动正常,VIP 1.1.1.1已正确配置到lo:0子接口。
6、测试HA
逐一关闭各客户端和服务器,检查负载均衡处理情况。具体情况参见http://blog.formyz.org/?p=46
相关文档:
更多信息请查看http://blog.formyz.org/?p=46
感谢田逸的blog,提供了大量信息。