实验1:软件包安装与配置
yum install openssl perl-Net-SSLeay perl-TimeDate perl-libwww-perl perl-Compress-Zlib perl-HTML-Parser perl-HTML-Tagset ipvsadm -y


heartbeat 实现高可用
两台主机: 192.168.0.77(主)   192.168.0.119
192.168.0.77上 :下载:
 heartbeat-3.0.4-1.el6.x86_64.rpm        
 heartbeat-libs-3.0.4-1.el6.x86_64.rpm
 heartbeat-devel-3.0.4-1.el6.x86_64.rpm  
 ldirectord-3.9.2-1.2.x86_64.rpm
scp *  192.168.0.119:~
yum localinstall * --nogpgcheck
ll /etc/ha.d/
cd /usr/share/doc/heartbeat-3.0.4
cp ha.cf haresources authkeys /etc/ha.d/

分别在77和119上面再新建一块网卡,ip设在和br0不同网段的,7.0.0.77和7.0.0.119
cd /etc/sysconfig/network-scripts/
cp ifc-eth0 ifc-eth1
vim /etc/udev/rules.d/70-persistent-net.rules 查看新建网卡的mac
vim ifc-eth1
DEVICE="eth1"
BOOTPROTO="static"
IPADDR=7.0.0.77
PREFIX=24
HWADDR="52:54:00:e5:23:13"
ONBOOT="yes"
ifup eth1

cd /etc/ha.d
vim ha.cf        主配置文件(/etc/ha.d/ha.cf)
debugfile /var/log/ha-debug      调试日志文件
logfile    /var/log/ha-log          系统运行日志文件
logfacility    local0            日志等级
keepalive 2                       心跳频率,自己设定。2:表示2秒
deadtime 30  节点死亡时间阀值,就是从节点在过了30后还没有收到心跳就认为主节点死亡,自己设定
warntime 10   发出警告时间,自己设定
initdead 30    守护进程首次启动后应该等待30秒后再启动主服务器上的资源
udpport    789   心跳信息传递的udp端口,使用端口789进行bcast和ucast通信
bcast eth1          采用 udp 广播播来通知心跳
auto_failback on    当主节点恢复后,是否自动切回
watchdog /dev/watchdog  能让系统在出现故障1分钟后重启该机器,这个功能可以帮助服务器在确实停止心跳后能够重新恢复心跳.如果使用该特性,修改系统中/etc/modprobe.d/modprobe.conf, 添加如下行:options softdog nowayout=0。这样在系统启动的时候,在内核中装入"softdog"内核模块,用来生成实际的设备文件.你可以如上所说写进/etc/rc.local 写上:modprobe softdog.
node    desktop77.example.com   排在第一的默认为主节点,排在第一的默认为主节点
node    server19.example.com     副节点名称,与uname –n保持一致
ping 192.168.0.253
respawn hacluster /usr/lib64/heartbeat/ipfail  如果是64位机器,一定要改成lib64,要不然启动服务时会报错的。
apiauth ipfail gid=haclient uid=hacluster
默认heartbeat并不检测除本身之外的其他任何服务,也不检测网络状况。
所以当网络中断时,并不会进行Load Balancer和Backup之间的切换。
可以通过ipfail插件,设置'ping nodes'来解决这一问题,但不能使用一个集群节点作为ping的节点。

vim haresources      资源文件(/etc/ha.d/haresources)
desktop77.example.com IPaddr::192.168.0.252/24/eth0 httpd 主机名必须是主的heartbeat的hostname.
这个文件中定义了实现集群所需的各个软件的启动脚本,这些脚本必须放在/etc/init.d或者
/etc/ha.d/resource.d目录里.IPaddr的作用是启动Virutal IP,它是HeartBeart自带的一个
脚本.httpd是apache服务的启动脚本。

vim authkeys       认证文件(/etc/ha.d/authkeys),文件的权限必须是600
auth 3
#1 crc
#2 sha1 HI!
3 md5 Hello!

chmod 600 authkeys  必须更改权限,否则heartbeat起不来
scp ha.cf  haresources authkeys   192.168.0.119:/etc/ha.d/
如果启动时报watchdog的错,则 modprobe  softdog 加载模块   或写到 /etc/rc.local

安装apache
cd /var/www/html
echo `hostname` > index.html
chkconfig httpd off

heartbeat 调用的一些脚本都在本目录的rc.d目录和resource.d目录下
/etc/init.d/heartbeat  start
此时可以查看相关日志:
tail -f /var/log/messages
tail -f /var/log/ha-log
tail -f /var/log/ha-debug
此时httpd服务会在77上运行,关闭77的heartbeat服务,则httpd服务会切到119上面运行。此时查看119的日志,等几秒才报77 dead。
确保heartbeat服务开启,当将心跳线eth1网卡关掉,则两台主机互相争抢资源,即httpd服务在两台主机上都运行。
当将心跳线eth1网卡开启后,httpd服务又恢复正常,即在77(主)上运行 。

注意:两台heartbeat主机的系统时间不能相差太大,否则在某些情况下,高可用服务就可能失常,在启动heartbeat之前,应手动检查并设置系统时间。最好用ntp同步系统时间。

实验2:
ldirectord工作原理:
ldirectord 需要你在真实服务器内启用apache服务器,并在每台真实服务器web服务器的根目录下建立你在配置文件所指定的文件与内容,然后ldirectord 通过循环检查此文件来确定真实服务器是否存活,如果不存活,则自动将其权重设为0,以确保后面客户的连接不会再导向失效的真实服务器,如果真实服务修复上线后,则其又将它的权重设为以使它能够继续为客端连接提供服务。
ldirectord主要是通过调用ipvsadm来创建ipvs虚拟服务器表。

heartbeat结合lvs实现高可用及负载均衡

在上一个实验的基础上做的:先做好heartbeat高可用,再结合lvs
rpm -ql ldirectord  查看ldirectord安装的路径
cp /usr/share/doc/packages/ldirectord/ldirectord.cf /etc/ha.d/
cd /etc/ha.d
vim ldirectord.cf       ldirectord-3.9.2-1.2.x86_64.rpm是用来监控real server的健康状况的并且维护调度列表,更新lvs的调度列表
checktimeout=3     这个值就是 ldirectord 等待健康检查执行完毕的等待时间,单位秒。如果因为某些原因检查失败或在设置的时间周期内没有完成检查,ldirectord 将会从 IPVS 表中移除真实服务器

checkinterval=1   查询间隔,每隔1秒侦测一次realserver 
autoreload=yes    配置文件发生改变是否自动重读
logfile="/var/log/ldirectord.log"
quiescent=yes  静态链接,yes:表示侦测realserver宕机,将其权值至零(如果开启了persistent参数不要用yes);no:表示侦测到宕机realserver,随即将其对应条目从ipvsadm中删除。

virtual=192.168.0.252:80
        real=192.168.0.14:80 gate
        real=192.168.0.192:80 gate
        fallback=127.0.0.1:80 gate    当所有的real server都down掉后,就让client访问自己的httpd服务
        service=http
        scheduler=rr     论叫调度算法
        #persistent=600   针对ftp服务会用到次选项
        #netmask=255.255.255.255
        protocol=tcp
        checktype=negotiate 检查类型:negotiate,表示DR发送请求,realserver恢复特定字符串才表示服务正常;connect,表示DR能够连线realserver即正常
        checkport=80
        request="index.html"   检查rear server的/var/www/html目录是否有此文件
#       receive="Test Page"    下面这两项ftp会用到
#       virtualhost=www.x.y.z

vim haresources
desktop77.example.com IPaddr::192.168.0.252/24/eth0 ldirectord httpd
ldirectord的作用是启动ldirectord监控程序,它会使ldirectord.cf中定义的lvs生效,
并监听其健康状况.
desktop77.example.com 是主heartbeat
配置ip_forward
vi /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p

scp ldirectord.cf haresources 192.168.0.119:/etc/ha.d/
yum install perl-IO-Socket-INET6 -y   安装此包,否则ldirectord服务起不来(两台heartbeat主机都要安装)
/etc/init.d/ldirectord start      两台heartbeat主机都要开启
此时 ipvsadm -l  查看无策略
/etc/init.d/ldirectord  stop
/etc/init.d/heartbeat  start   分别在主备心跳上启动 heartbeat 服务
分别查看日志,是否有报错,服务正常的话 station3 上多了个 eth0:0 接口,若没有出现,
请等待一会,再使用 ifconfig 查看,若还是没有 eth0:0 接口出现,检查配置文件是否正确!
若停止 station3 上的 heartbeat 服务,则 station4 会接管,并产生一个 eth0:0 接口!
tail -f /var/log/messages

下面在两个real server 上都配置:
ifconfig lo:0 192.168.0.252 netmask 255.255.255.255 up
route add -host 192.168.0.252 dev lo:0
route -n  查看
如果real server用的是eth0 网卡,则需关闭arp
vi /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2
sysctl -p

在 直接路由、IP隧道模式下,因为我所有的机器都放在同一个网段,当该网段的Router接收
到客户端(Client)对虚拟IP(Virtual IP)的TCP connection要求时,会先在网段中利用Arp
request询问谁有VIP的地址,而包含Director与RealServers上所有的interface(不管
Primary还是 Subinterface),只要他有那个ip,都会发送arp reply回去,造成网段内所
有拥有Virtual IP的interface都会reply给Router,最后结果就是看谁的速度快,Router
就将该封包送给谁,如此会造成LVS的Server并无 法发挥其效果

在每个 RealServer 的中添加监控页:
echo `hostname` >> /var/www/html/index.html
service httpd start

测试:
访问 http://192.168.0.252,看到页面在两个 realserver 上切换表示成功!
你也可以通过 ipvsadm -Lnc 查看详细连接情况!

在调度器上 即主heartbeat上:ipvsadm  -l  显示调度列表
/etc/init.d/heartbeat  start   两台heartbeat主机都要开启
此时 watch ipvsadm -l  监控连接信息(次数)
用浏览器访问 192.168.0.252  刷新  是否调度  同时看watch 监控的信息

如果访问时,只能访问一台主机,则arp 需绑定
arp  -s  192.168.0.252  52:54:00:15:26:4B  再次访问就好了。

下面是用高可用平台运行ftp服务
vim  ldirectord.cf
    virtual=192.168.0.252:21
        real=192.168.0.252:21 gate
        real=192.168.0.192:21 gate
        fallback=127.0.0.1:21 gate
        service=ftp
        scheduler=rr
        persistent=300
        netmask=255.255.255.255
        protocol=tcp
        checktype=negotiate
        checkport=21
        request="welcome.msg"
        receive="test"
vim haresources
desktop77.example.com IPaddr::192.168.0.252/24/eth0 ldirectord vsftpd

scp ldirectord.cf haresources  192.168.0.119:/etc/ha.d/
将两台real server  的ftp服务开启
用 watch ipvsadm  -lnc  查看ftp详细连接信息

注意:此实验一定要确保虚拟地址(即lo:0  接的ip地址),调度机的虚拟地址(即eth0:0 接的地址)
     ipvsadm软件包不需安装。