一、 体系架构:
前端两台服务器作 LVS 负载均衡,两台是为了作双机热备使用(可以为多台)。后端两台服务器(可以为多台),作业务使用,客户端通过负载均衡后,将连接 ( 以 TCP 连接为例 ) 路由到业务服务器。
二、 硬件环境:Dell PowerEdge R710
三、
LVS 两台机器安装:RHEL 4.8 (Red Hat Enterprise Linux 4.8) 64 位。注意安装系统时按F10
分别命名为:LVS1,LVS2, 默认LVS1 作主机,LVS2
后端两台服务器安装:Windows server 2003, 需安装虚拟网卡Windows loopback Adapter 。分别命名为Server1,Server2
IP
默认网关地址:192.168.10.1
子网掩码:255.255.255.0
虚拟服务器地址(Virtual Server IP) :192.168.10.15
LVS1 地址:192.168.10.16
LVS2 地址:192.168.10.17
Server1: 192.168.10.18
Server2: 192.168.10.19
四、 LVS 软件安装:下载ipvsadm 、keepalived.(ipvsadm-1.24.tar.gz 、keepalived-1.1.19.tar.gz ,这两个版本比较小巧稳定,其它版本也可以,但是keepalived-1.1.20.tar.gz 在CentOS-5.5 上编译是乎有点问题), 在有的系统上ipvsadm 是默认安装的,但有的系统没有安装,如FC4,CentOS-5.5 都已安装。,运行ipvsadm – ln 看看有没有错误提示即可知道。这两个软件具体功能介绍参看说明文档,此处只做配置说明, 以root
1. 安装ipvsadm:
首先要建立到内核的连接,运行cat /proc/version 查看内核版本, RHEL 4.8 内核2.6.9 -89.EL-smp-x86_64
建立到内核的连接:ln – s /usr/src/kernels/2.6.9-89.EL-smp-x86_64 /usr/src/linux
tar zxvf ipvsadm-1.24.tar.gz
cd ipvsadm-1.24
make
make install
无需作另外配置即可使用
Ipvsamd – ln
2. 安装keepalived
由于系统的原因,在安装keepalived-1.1.19 之前要修改一个地方,如果已经在第一步安装ipvsadm
vi /usr/src/linux/include/linux/types.h
注释到以下两行
/*
typedef __u16 __bitwise __sum16
typedef __u32 __bitwise __wsum
*/
不过要注意,这样做是否会引起其它程序不能编译未可知。
如果不这样做会报类似这样的错误:
/usr/src/linux/include/linux/types.h:158: error: syntax error before "__sum16"
/usr/src/linux/include/linux/types.h:159: error: syntax error before "__wsum"
tar zxvf keepalived-1.1.19.tar.gz
cd keepalived-1.1.19
首先建立到内核的链接
ln – s /usr/src/kernels/2.6.9-89.EL-smp-x86_64 /usr/src/linux
./configure
或者
./configure – with-kernel-dir = /usr/src/kernels/2.6.9-89.EL-smp-x86_64
检查后看检查结果是否配置正确,是不是支持ipvsadm
make
make install
查看keepalived
find / -name keepalived
将keepalived
cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d
cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
mkdir /etc/keepalived
cp /usr/local/sbin/keepalived /usr/sbin/
至此,keepalived 除了配置已安装完毕。要让keepalived 正确运行,还需做好配置,首先开启linux
开启路由功能:
vi /etc/sysctl.conf
net.ipv4.ip_forward = 1 # 为1
sysctl – p #
关闭防火墙
service iptables stop
复制一个keepalived.conf
cd /etc/keepalived/
vi keepalived.conf
LVS1 环境配置如下( 作主机)
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state BACKUP #
nopreempt #
interface eth0
virtual_router_id 51
#mcast_src_ip 192.168.10.17
priority 100 #
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.10.15 #
}
}
virtual_server 192.168.10.15 8001 { #
delay_loop 6
lb_algo wrr
lb_kind DR
persistence_timeout 50
protocol TCP
real_server 192.168.10.18 8001 { #
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 10
delay_before_retry 10
connect_port 8001 #
}
}
real_server 192.168.10.19 8001 { #
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 10
delay_before_retry 10
connect_port 8001
}
}
}
其中global_defs
LVS2
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state BACKUP # 作备分机,由priority
interface eth0
virtual_router_id 51
#mcast_src_ip 192.168.10.16
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.10.15
}
}
virtual_server 192.168.10.15 8001 {
delay_loop 6
lb_algo wrr
lb_kind DR
persistence_timeout 50
protocol TCP
real_server 192.168.10.18 8001 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 10
delay_before_retry 10
connect_port 8001
}
}
real_server 192.168.10.19 8001 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 10
delay_before_retry 10
connect_port 8001
}
}
}
以上配置的各个详细项参见文档,需注意几个地方:
vrrp_instance VI_1 {
state BACKUP # 作备分机,由priority
interface eth0
virtual_router_id 51
#mcast_src_ip 192.168.10.16
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.10.15
}
}
此处配置双机热备的调度,有两种方式:
(1)
主机:state MASTER
priority 100 #
nopreempt #
advert_int 1 #
备机:state BACKUP
priority 99 #
nopreempt #
advert_int 1 #
(2)
主机:state BACKUP
priority 100 #
nopreempt #
advert_int 1 #
备机:state BACKUP
priority 99 #
#nopreempt
advert_int 1 #
LVS 配置即好,开启LVS
service keepalived start
ipvsadm – ln
五、
主要是安装Microsoft loopback Adapter 虚拟网卡:
控制面板-> 添加硬件-> 硬件已连接-> 添加新硬件-> 安装我手动从列表选择的硬件-> 网络适配器->Microsoft->Microsoft loopback Adapter
设置IP 地址:设成虚拟IP 地址,192.168.10.15 和keepalived.conf 配置的虚拟IP 一样,默认网关不设置,子网先填写一个255.255.255.0, 确定后停止网卡,再到注册表中找到该地址对应的子网掩码,改成255.255.255.255,
配置好之后,启动此两台后端服务器上的服务程序,客户端即可通过LVS 按算法分配连接到服务器上来。如果服务器是linux
六、
Keepalived 被证明是一个具有高可用性的集群调度软件,但是在不同的硬件和操作系统版本上可能有一些差异,第一次配置或许不那么顺利,或多或少会遇到一些问题,正所谓知道不难,不知道甚难。曾经在R710 上安装CentOS-5.3 部署keepalived ,当客户端连接超过1500 时,LVS 机器网络中断,ping 出去或者ping 进来都ping 不通,只有ping 自己能ping
当运动service network restart 后,又能跑一下,连接达到1500 时又是同样的问题。情绪是对连接数有限制,查看ulimit – n 显示是1024 。当改了这个限制还是一样的问,ping 机器是显示的是无法找到路由。百思不得其角,于是换装操作系统,RHEL 4.8 ,一切如keepalived
另外还有一个类似的软件keartbeat ,和keepalived 是两套不同的模式,是不相关的系统不要混肴,heartbeat 比keepalived
lvs + keepalived
lvs + ldirectord + heartbeat
Keepalived