两种实现方式:
实验一、
LVS+heartbeat+ldirectord实现集群负载:
1.在主Director Server上和备用Director Server上分别安装heartbeat、libnet与httpd:
[root@LW1 ~]# yum -y install heartbeat libnet httpd heartbeat-ldirectord ipvsadm
2.获得heartbeat的相关默认配置文件:
[root@LW1 ~]# cd /usr/share/doc/heartbeat-2.1.3/
[root@LW1 heartbeat-2.1.3]# cp ha.cf authkeys haresources /etc/ha.d/
[root@LW1 ~]# cp /usr/share/doc/heartbeat-ldirectord-2.1.3/ldirectord.cf /etc/ha.d/
3.使用Ldirectord在主、备Director Server上配置LVS:
[root@LW1 ~]# vi /etc/ha.d/ldirectord.cf
配置文件说明如下:
全局设置:
# Global Directives
checktimeout=10 #判定Real Server出错的时间间隔
checkinterval=5 #指定Ldirectord在两次检查之间的间隔时间
fallback=127.0.0.1:80 #当所有的Real Server节点不能工作时,Web服务重定向的地址
autoreload=yes #是否自动重载配置文件,选yes时,配置文件发生变化,自动载 入配置信息
logfile="/var/log/ldirectord.log" #设定Ldirectord日志输出文件路径
quiescent=yes #当选择no时,如果一个节点在checktimeout设置的时间周期内没 有响应,ldirectord将会从LVS丢掉所有的连接跟踪记录和持续连 接模版;如果选择yes,当某个Real Server 失效时,Ldirectord将 失效节点的权值设置为0,新的连接将不能到达,但是并不会从LVS 路由表中清除此节点,同时,连接跟踪记录和程序连接模版仍然保 留在Director上。
虚拟主机配置:
# Sample for an http virtual service
virtual=10.0.0.31:80 #指定虚拟的IP地址和端口号,注意,在Virtual这行后面的行必 须缩进3个空格或以一个tab字符进行标记
real=10.0.0.29 gate #指定Real Server服务器地址和端口,同时设定LVS工作模式
real=10.0.0.30:80 gate
fallback=127.0.0.1:80 gate #当Real Server全部失效后监听的地址及端口
service=http #指定服务的类型,这里是对HTTP服务进行负载均衡
request="test.html" #Ldirectord将根据指定的Real Server地址,结合该选项给出的请 求页面,发送访问请求,检查Real Server上的服务是否正常运行, 必须确保这里给出的页面地址是可访问的,不然Ldirectord会误认 为此节点已经失效,发生错误监控现象
receive="Test Page" #指定请求和应答字串,也就是test.html的内容
virtualhost=www.liwei.com #虚拟服务器的名称,可任意指定
scheduler=rr #指定调度算法,这里是rr(轮询)算法
#persistent=600
#netmask=255.255.255.255
protocol=tcp #指定协议的类型,LVS支持TCP和UDP协议
checktype=negotiate #指定Ldirectord的检测类型,checktype可以是connnect、external、 negotiate、off、on、ping和checktimeout这几个,默认为negotiate, 通过页面交互来判断服务器节点是否正常
checkport=80 #指定监控的端口号
注:虚拟主机可以设置多个,比如监控Mysql3306端口,邮件SMTP25端口等等
4.配置备用Director Server的Ldirectord:
[root@LW2 ~]# scp root@10.0.0.27:/etc/ha.d/ldirectord.cf /etc/ha.d/
5.在主、备Director Server上配置heartbeat
(1).配置heartbeat的主配置文件(/etc/ha.d/ha.cf)
[root@LW1 ~]# vi /etc/ha.d/ha.cf
配置文件如下:
#debugfile /var/log/ha-debug
logfile /var/log/ha-log #指定heartbeat的日志存放位置
logfacility local0
bcast eth1 #指定心跳使用以太网广播方式,并且在eth1接口上进行广播
keepalive 2 #指定心跳间隔时间为2秒(即2秒在eth1上发送一次广播)
deadtime 30 #如果指定的备用节点在30秒内没有收到主节点的心跳信号,则立 即接管主节点的服务资源
warntime 10 #指定心跳延迟的时间为10秒,当10秒内备用机不能收到主节点 的心跳信号时,就会在日志中写入一个警告信息,但此时不会切换 服务
initdead 120 #在某些系统上,系统启动或重启之后需要经过一段时间网络才能 正常工作,该选项用于设置这种情况产生的时间间隔,取值至少为 deadtime的两倍
udpport 694 #设置广播通信使用的端口,694为默认使用的端口号
baud 19200 #设置串行通信的比特率
#serial /dev/ttyS0 #选择串行通信设备,用于双机使用串口线连接的情况,如果双机 通过以太网连接,则应该关闭该选项
#mcast eth1 225.0.0.1 694 1 0 #采用网卡eth1的UDP多播来组织心跳,一般在备用机不止一台 时使用,bcast、ucast和mcast分别代表广播、单播和多播,是组 织心跳的3种方式,任选其一即可
ucast eth1 192.168.1.111 #采用网卡eth1的UDP单播来组织心跳,后面跟的IP地址应为双 机中对方的IP地址
auto_failback on #用来定义当主节点恢复后,是否将服务自动切回。
node LW1
node LW2
ping 10.0.0.1 #选择ping的节点,ping节点选择的越好,HA集群就越强壮。可 以选择固定的路由器作为ping节点,但是最好不要选择集群中的 成员作为ping节点,ping节点仅用来测试网络连接
(2).配置heartbeat的资源文件(/etc/ha.d/haresources)
Haresource文件用于指定双机系统的主节点、集群IP、子网掩码、广播地址以及启动的服务等集群资源。文件每一行可以包含一个或多个资源脚本名,资源脚本名之间用空格隔开,参数之间使用两个冒号隔开。
[root@LW1 ~]# vi /etc/ha.d/haresources
LW1 IPaddr::10.0.0.31/24/eth0:0 httpd #设置LW1为主节点,集群服务器的IP地址为10.0.0.31,netmask 为255.255.255.0,同时指定此IP使用的网络接口为eth0:0,heartbeat 托管的服务为httpd(此文件为系统自动检测,自动启动)
(3).配置heartbeart的认证文件(/etc/ha.d/authkeys)
Authkeys文件用于设定heartbeat的认证方式,该文件中有3种可用的认证方式:crc、sha1和md5,以下使用crc认证方式,设置如下:
[root@LW1 ~]# vi /etc/ha.d/authkeys
auth 1
1 crc
#2 sha1 HI!
#3 md5 Hello!
注意:无论“auth”后面指定的是什么数字,在下一行必须作为关键字再次出现,最后确保这个文件的权限是600
6.配置Real Server:
在LVS的DR和TUN模式下,用户的访问请求到达Real Server后,是直接返回给用户的,不再经过前端的Director Server,因此,需要在每个Real Server节点上增加虚拟的VIP地址,这样数据才能直接返回给用户。增加VIP地址的操作可以通过创建脚本的方式来实现,创建文件/etc/init.d/lvsrs,脚本内容如下:
[root@LW2 ~]# vi /etc/init.d/lvsrs
#!/bin/bash
#description: Start Real Server
VIP=10.0.0.31
VPn./etc/init.d/functions
case "$1" in
start)
echo " Start LVS of Real Server "
/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 of Real Server "
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
[root@LW3 ~]# chmod 755 /etc/init.d/lvsrs
[root@LW3 ~]# service lvsrs start
在Real Server1上执行相同的操作,可以将此文件直接拷贝到LW4上面,给予其执行权限。
在LW1与LW2上执行:
[root@LW1 ~]# /etc/init.d/ldirectord start
[root@LW1 ~]# /etc/init.d/heartbeat start
[root@LW2 ~]# /etc/init.d/ldirectord start
[root@LW2 ~]# /etc/init.d/heartbeat start
[root@LW3 ~]# echo "Real Server 1" > /var/www/html/index.html
[root@LW4 ~]# echo "Real Server 2" > /var/www/html/index.html
[root@LW3 ~]# echo "Test Page" > /var/www/html/test.html
[root@LW4 ~]# echo "Test Page" > /var/www/html/test.html
7.测试:
在浏览器中输入http://10.0.0.31访问,正常状态应该是Real Server 1 与Real Server 2更换。在LW1上执行ifconfig命令后会看到如下选项:
eth0:0 Link encap:Ethernet HWaddr 00:0C:29:DC:79:5D
inet addr:10.0.0.31 Bcast:10.0.0.31 Mask:255.255.255.255
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
然后查看httpd服务是处于启动状态,/etc/ha.d/haresources此文件会检查eth0:0与httpd的状态。
在LW1上执行如下操作:
[root@LW1 ~]# /etc/init.d/network stop
然后在浏览器中访问:http://10.0.0.31,发现过几秒后还是可以正常访问,说明备用Director Server LW2已经成功接替了主Direcotr 的工作,在LW2上执行如下操作:
[root@LW2 ~]# ifconfig
eth0:0 Link encap:Ethernet HWaddr 00:0C:29:53:F0:93
inet addr:10.0.0.31 Bcast:10.0.0.31 Mask:255.255.255.255
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
此时,LW2上的httpd服务同样也是开启的。当LW1恢复正常时,LW2会把调度权交回LW1手里,继续监控LW1的状态,做为备用调度主机。
实验二、
LVS+KeepAlived集群负载
KeepAlived的配置非常简单,只需要一个配置文件就可以搞定,以下为KeepAlived的安装及配置,需要一、在主、备Director Server安装KeepAlived:
1.下载软件包keepalived-1.2.7.tar.gz,并安装:
[root@LW1 ~]# tar vzxf keepalived-1.2.7.tar.gz
[root@LW1 ~]# cd keepalived-1.2.7
[root@LW1 keepalived-1.2.7]# ./configure --sysconf=/etc --with-kernel-dir /usr/src/kernels/2.6.18-274.el5-xen-x86_64
[root@LW1 keepalived-1.2.7]# make
[root@LW1 keepalived-1.2.7]# make install
[root@LW1 keepalived-1.2.7]# ln -s /usr/local/sbin/keepalived /sbin/
2.在备Director Server LW2上执行相同的操作
二、配置KeepAlived
1.keepalived的配置文件为/etc/keepalived/keepalived.conf,内容如下:
! Configuration File for keepalived
#全局定义部分
global_defs {
notification_email {
Liwei1990@moxiu.net #设置报警邮件地址,可以设置多个,每行一个,如果要开启邮件 报警,则需要开启本机的sendmail服务
}
#notification_email_from Alexandre.Cassen@firewall.loc #设置邮件的发送地址
#smtp_server 192.168.200.1 #设置smtp server的地址
#smtp_connect_timeout 30 #设置连接smtp server的超时时间
#router_id LVS_DEVEL #表示运行keepalived服务器的一个标识,发邮件时显示在邮件主 题中的信息
}
#Vrrp实例定义部分
vrrp_instance VI_1 {
state MASTER #指定Keepalived的角色,MASTER表示此主机为主服务器, BACKUP表示此主机为备用服务器
interface eth1 #指定HA监测网络的接口
virtual_router_id 51 #虚拟路由标识,MASTER与BACKUP的标识必须相同
priority 100 #定义优先级,数字越大,优先级越高,在vrrp_instance下,MASTER 的优先级必须要比BACKUP的优先级大
advert_int 1 #设定MASTER与BACKUP负载均衡之间同步检查的时间间隔, 单位是秒
authentication { #设定验证类型和密码
auth_type PASS #设置验证类型,主要有PASS和AH两种
auth_pass 1111 #设置验证密码,在一个vrrp_instance下,MASTER与BACKUP 必须使用相同的密码才可正常通信
}
virtual_ipaddress { #设置虚拟IP地址,可以设置多个虚拟IP地址,每行一个
10.0.0.31
}
}
#虚拟服务器定义部分
virtual_server 10.0.0.31 80 { #设置虚拟服务器IP地址及其端口,两者间用空格隔开
delay_loop 6 #设置运行情况检查时间,单位为秒
lb_algo rr #设置负载调度算法,这里设置为rr,即轮询算法
lb_kind DR #设置LVS实现负载均衡机制,有NAT、TUN和DR三种模式
nat_mask 255.255.255.0
persistence_timeout 50 #会话保存时间,单位为秒。
protocol TCP #指定转发协议类型,有TCP和UDP两种
real_server 10.0.0.29 80 { #配置Real Server,需要指定真实IP与其端口号,两者用空格隔开
weight 3 #配置服务节点的权值,权值大小用数字表示,数字越在,权值越 高,要根据服务器的性能来进行调节,服务器性能越高,权值可以 相对应调大一点,合理利用和分配系统资源。
TCP_CHECK { #RealServer的状态检测设置部分,单位为秒。
connect_timeout 3 #表示3秒无响应时超时
nb_get_retry 3 #表示重试次数
delay_before_retry 3 #表示重试间隔
}
}
real_server 10.0.0.30 80 { #配置RealServer2
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
2.备用DirectorServer配置Keepalived,将上面配置好的主DirectorServer的keepalived.conf拷贝到LW2上然后修改如下字段:
(1).将"state MASTER"更改为“state BACKUP”。
(2)将“priority 100”更改为一个较小的值,这里更改为“priority 80”
3.Real Server的配置不变,只需要执行/etc/init.d/lvsrs start则可。
三、启动keepalived服务
[root@LW1 ~]# /etc/init.d/keepalived start
[root@LW2 ~]# /etc/init.d/keepalived start
四、测试
将第一个实验中的ldirectord与heartbeat服务在LW1与LW2上全部关闭,然后进行测试:
1.访问http://10.0.0.31,可以显示“Real Server1”或“Real Server2”。
2.关闭LW1 的keepalived服务,再次访问“http://10.0.0.31”,显示“Real Server1”或“Real Server2”。
3.当关闭LW1 的keepalived服务时,LW2日志显示如下:
Sep 14 12:16:23 LW2 Keepalived_vrrp[4918]: VRRP_Instance(VI_1) Transition to MASTER STATE
Sep 14 12:16:24 LW2 Keepalived_vrrp[4918]: VRRP_Instance(VI_1) Entering MASTER STATE
Sep 14 12:16:24 LW2 Keepalived_vrrp[4918]: VRRP_Instance(VI_1) setting protocol VIPs.
Sep 14 12:16:24 LW2 Keepalived_vrrp[4918]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth1 for 10.0.0.31
Sep 14 12:16:24 LW2 Keepalived_healthcheckers[4917]: Netlink reflector reports IP 10.0.0.31 added
Sep 14 12:16:24 LW2 Keepalived_vrrp[4918]: Netlink reflector reports IP 10.0.0.31 added
Sep 14 12:16:29 LW2 Keepalived_vrrp[4918]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth1 for 10.0.0.31
状态显示,LW2由BACKUP状态变为了MASTER状态。
当启动LW1的keepalived服务时,LW2的日志内容如下:
Sep 14 12:17:53 LW2 Keepalived_vrrp[4918]: VRRP_Instance(VI_1) Received higher prio advert
Sep 14 12:17:53 LW2 Keepalived_vrrp[4918]: VRRP_Instance(VI_1) Entering BACKUP STATE
Sep 14 12:17:53 LW2 Keepalived_vrrp[4918]: VRRP_Instance(VI_1) removing protocol VIPs.
Sep 14 12:17:53 LW2 Keepalived_vrrp[4918]: Netlink reflector reports IP 10.0.0.31 removed
Sep 14 12:17:53 LW2 Keepalived_healthcheckers[4917]: Netlink reflector reports IP 10.0.0.31 removed
状态显示,当LW1的keepalived服务恢复时,备用Director Server LW2的状态由MASTER又变回了BACKUP。
以上就是LVS集群负载的两种实现方式。