这里使用vmware虚拟机来实现lvs-dr模型,利用heartbeat来实现lvs-dr里面的director的高可用集群。使用两台虚拟机做为realserver作为两台web服务器集群,使用两台虚拟机作为director,其中一台作为主服务器,另外一台作为backup,当主的出现故障,backup会自动启动来代替主的进行工作。

 

首先来配置两台realserver作为两台web服务器
安装lvs-dr集群
此时realserver两台的地址为172.16.99.11  172.16.99.12 他们共同的vip都为172.16.99.68
此时director的地址为vip172.16.99.68  dip为172.16.99.10   172.16.99.13都为双网卡
windows客户端的ip地址为172.16.99.66

此时在两台realserver上的基本配置都相同,如下

此时在两台realserver上都配置如下
        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
表示不响应对vip的arp查询请求。

此时设置一条特殊的路由信息,设置lo为自己与自己在一个网络,与其它任何都不在一个网络。
ifconfig lo:0 172.16.99.68 broadcast 172.16.99.68 netmask 255.255.255.255 up
设定lo:0的ip为172.16.99.68并且设定广播给自己。

添加路由信息。设定同过lo:0的ip都是源ip
route add -host 172.16.99.68 dev lo:0
此时可以通过下面这条命令来查看路由表信息。
route -n

安装apache,并设定一个网页
yum install httpd -y
vim /var/www/html/index.html
hi this is test 1           (网页内容,可以随便写)
:wq


vim /var/www/html/.test.html    (这个网页是做测试用的)
ok
:wq
service httpd start


此时在两个director上做设置
设置eth0的地址为dip
ifconfig eth0 172.16.99.10
设置eth0:0的ip为vip
ifconfig eth0:0 172.16.99.68 broadcast 172.16.99.68 netmask 255.255.255.255 up
此时添加路由信息。(非必须)
route add -host 172.16.99.68 dev eth0:0

此时配置ipvsadm
yum install ipvsadm
ipvsadm -A -t 172.16.99.68:80 -s wlc
ipvsadm -a -t 172.16.99.68 -r 172.16.99.11 -g -w 2
ipvsadm -a -t 172.16.99.68 -r 172.16.99.12 -g -w 4
查看配置
ipvsadm -L -n

此时你就可以通过windows访问服务器了
http://172.16.99.68/index.html

此时安装heartbeat,在两台director上
这里使用两台vmware虚拟机来模拟实现高可用集群,一台作为node1,一台作为node2。


配置node1
首先配置ip地址,
eth0网卡地址
172.16.99.10
eth1网卡ip地址
192.168.0.10
vim /etc/hosts
172.16.99.10 node1.a.org node1
172.16.99.13 node2.a.org node2
:wq
vim /etc/sysconfig/network
HOSTNAME=node1.a.org
:wq
hostname=node1.a.org

拷贝/etc/hosts文件到node2上
scp /etc/hosts node2:/etc/hosts

通过生成密钥来使node1和node2通信,此时再拷贝文件就不用输入密码了、
这样设置还为以后提供心跳信息提供了基础。
ssh-keygen -t rsa
ssh-copy-id -i .ssh/id_rsa.pub root@node2
测试一下,来执行一下node2的命令看看
ssh node2 --'ifconfig'
看看结果是不是node2的地址呢?

配置yum源信息。
并拷贝到node2同样的一份,这样省的再写一个了,懒人的用法
scp /etc/yum.repos.d/server.repo node2:/etc/yum.repos.d/

下载安装以下几个集群软件,下载到一个共同的文件中/root/heartbeat
libnet-1.1.4-3.el5.i386.rpm
heartbeat-pils-2.1.4-10.el5.i386.rpm
heartbeat-2.1.4-9.el5.i386.rpm       
heartbeat-stonith-2.1.4-10.el5.i386.rpm   
heartbeat-devel-2.1.4-9.el5.i386.rpm       
heartbeat-gui-2.1.4-9.el5.i386.rpm    
heartbeat-ldirectord-2.1.4-9.e15.i386.rpm
perl-MailTools-1.77-1.e15.noarch.rpm                         

yum localinstall *.rpm --nogpgcheck
也可以直接使用yum安装
拷贝文件到node2
scp -r heartbeat/ node2:/root
修改配置文件
cd /usr/share/doc/heartbeat-2.1.4/
cp ha.cf haresources authkeys /etc/ha.d

cd /etc/ha.d
vim ha.cf
udpport 694
bcast eth1
node node1.a.org  //节点1
node node2.a.org  //节点2

vim authkeys
auth 2
2 shal asdfghjkl  //后面的为一堆乱码
修改权限为400或者600,否则不让启动
chmod 400 authkeys

vim haresources
node1.a.org 172.16.99.68/16/eth0/172.16.255.255 httpd
主节点  流动地址        掩码 指定网卡 指定广播地址  指定服务

cd /usr/lib/heartbeat
./ha_propagate
scp haresources node2:/etc/ha.d

 

配置ldirector的配置文件
cp /usr/share/doc/heartbeat-ldirectord-2.1.4/ldirectord.cf /etc/ha.d/ldirectord.cf
vim ldirector.cf
checktimeout=5
checkinterval=3
autoreload=yes
quiescent=yes

real=172.16.99.11
real=172.16.99.12
service=http
request=”test/.test.html”
receive=”ok”
checkport=80
。。。。。。。。
启动heartbeat,如果你在那个节点上启动,所有的heartbeat的启动就必须都在
那个节点上启动,否则集群无法收敛
启动节点1
/etc/init.d/heartbeat start
启动节点2
ssh node2 -'/etc/init.d/heartbeat start'
可以使用netstat -tnl来查看80端口是否启动,如果没有启动则表示本节点是备份
另外一台是主服务器
此时你可以使用物理机同过浏览器访问网页了
http://172.16.99.68/index.html