需求:用Heartbeat实现高可用的web集群和LVS集群;关于集群服务的理论知识部分的博客还在整理中,理论部分比较多但是实际操作相对简单,等整理出来了会发上!下面还是看这个实验怎么实现,这里仅有操作步骤,相关的知识点以及名词会在后续的理论部分给出!
环境及概要介绍:
虚拟机环境,准备4台干净的虚拟机,两台作为Realserver,另外两台作为Director,Realserver与Director做成LVS集群,两台Director用Heartbeat做成高可用集群,director主机要有两块网卡,realserver一块即可!
主机规划包括地址、名字等信息如下图所示:
具体操作部分:(Director,Realserver的配置都仅以一台为例实际上Director或者说对Heartbeat的配置来说都仅需要配置一台主机即可,另外一台要做的操作其实十分少)
1、配置Director的网络属性信息和主机名
# vim /etc/sysconfig/network
HOSTNAME=node1.a.org
# hostname node1.a.org
# vim /etc/hosts
192.168.0.128 node1.a.org node1
192.168.0.60 node2.a.org node2
# vim /etc/sysconfig/network-scripts/ifcfg-eth0
# vim /etc/sysconfig/network-scripts/ifcfg-eth1
网络属性信息就按图中的信息进行配置即可,图老是有问题大家见谅!
# service network restart
2、配置两台Director可以不用密码以root身份互相登录:
# ssh-keygen -t rsa //一直按Enter就行
# ssh-copy-id .ssh/id_rsa.pub root@node2 //输入登录的密码
3、安装配置Heartbeat需要的软件包如下:
heartbeat-2.1.4-9.el5.i386.rpm
heartbeat-devel-2.1.4-9.el5.i386.rpm
heartbeat-gui-2.1.4-9.el5.i386.rpm
heartbeat-pils-2.1.4-10.el5.i386.rpm
heartbeat-stonith-2.1.4-10.el5.i386.rpm
libnet-1.1.4-3.el5.i386.rpm
配置好自己的yum源,注意要有Cluster这一段!用yum localinstall来本地安装并自动解决依赖关系!
# yum localinstall * --nogpgcheck -y
# cd /usr/share/doc/heartbeat-2.1.4/
# cp ha.cf haresources authkeys /etc/ha.d //cp配置文件模板
# vim /etc/ha.d/ha.cf
启用以下选项:
keepalive 2
deadtime 30
warntime 10
initdead 120
udpport 694
logfile /var/log/ha-log
auto_failback on
修改并添加以下内容:
bcast eth1 //发送心跳信息的接口
node node1.a.org
node node2.a.org
bcast node1.a.org
# vim authkeys
auth 2
2 sha1 ghakxhjkdj //此处是随机字符串两个节点的要保持一致,可以使用以下命令获取
# dd if=/dev/urandom bs=512 count=1 | md5sum
# chmod 400 authkeys
# vim haresources
node1.a.org 192.168.0.189/eth0 ipvsd //指定主节点和用于流动资源的ip和流动资源和服务 ipvsd是关于定义LVS Director的相关配置脚本,在下面将介绍脚本的写法
# cd /usr/liv/hearbeat
# ./ha_propagate //此脚本就是用来同步各个节点之间配置信息用的,但是此处用的是v1版本的,默认v2版本是不会使用haresources来做为CRM的,所以这个文件要手动cp
# cd /etc/ha.d
# scp haresources node2:/etc/ha.d/
4、编辑脚本,ipvsd脚本并不完善,没有注释信息!有时间的话再做修改
# vim ipvsd
#!/bin/bash
#
./etc/rc.d/init.d/functions
#
VIP=192.168.0.66
RIP1=192.168.0.57
RIP2=192.168.0.56
PROT=80
#
case "$1" in
start)
/sbin/ifconfig eth0:1 $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev eth0:1
echo 1 > /proc/sys/net/ipv4/ip_forward
/sbin/iptables -F
/sbin/iptables -Z
/sbin/ipvsadm -C
/sbin/ipvsadm -A -t $VIP:80 -S wlc
/sbin/ipvsadm -a -t $VIP:80 -r $RIP1 -g -w 1
/sbin/ipvsadm -a -t $VIP:80 -r $RIP2 -g -w 2
/bin/touch /var/lock/subsys/ipvsadm &> /dev/null
;;
stop)
echo 0 >/proc/sys/net/ipv4/ip_forward
/sbin/ipvsadm -C
/sbin/ifconfig eth0:1 down
/sbin/route del $VIP
/bin/rm -f /var/lock/subsys/ipvsadm
ehco "ipvsadm is stopped...."
;;
status)
if [ ! -e /var/lock/subsys/ipvsadm ];then
ehco "ipvsadm is stopped..."
eles
echo "ipvsadm is running..."
ipvsadm -L -n
fi
;;
*)
ehco "Usage:$0 {start|stop|status}"
;;
esac
脚本完成了,赋予执行权限,放在/etc/ha.c/resource.d/下或者/etc/init.d/下即可
# chmod +x ipvsd
# cp ipvsd /etc/ha.d/resource.d/
node2的配置仅需配置网络属性信息和主机名即可!配置文件已经通过手动和脚本的方式同步过了!
对于网络属性和主机名的配置过程相信大家都十分熟悉了就不再赘述!
5、RealServer的配置:
# ifconfig eth0 192.168.0.57/24
# ifconfig lo:0 192.168.0.66 broadcast 192.168.0.66 netmask 255.255.255.255 up
# route add -host 192.168.0.66 dev lo:0
定义内核参数,防止ARP解析的
#echo 1 > /proc/sys/net/ipv4/conf/lo/arp_igonre
#echo 1 > /proc/sys/net/ipv4/conf/all/arp_igonre
#echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
#echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
安装LAMP服务(其实没必要安装这么多仅安装httpd就行了,不过为了以后自己配置其他的服务都安装上了)
#yum install mysql-server php httpd php-mysql php-mbstring
#echo "Welcome to Real Server1” >/var/www/html/index.html
#service httpd start
RealServer2的配置跟RealServer1的配置基本上相同不再赘述!不过为了测试时区别对待我们将index.html故意设置的不一样,在实际应用中应该提供的是相同的服务才能起到负载均衡的作用!这里只是测试效果!
在配置RealServer2的时候 echo "Welcome to Real Server2!This is not Real Server1" 以示区别!具体的配置就不在写了!
下来我们就要启动Heartbeat服务了!只能在一台机器上启动!另外一台通过SSH服务远程启动,这也是为什么要是两台机器能以root身份不要密码互相登录的原因!
# /etc/init.d/heartbeat start
# ssh node2 -- '/etc/init.d/heartbeat start'
下面就可以进行测试了!
这里提供的功能并不完善!比如后台RealServer的监控就没有实现,另外还有其他实现此功能的方法更为简单仅仅安装一个rpm包即可!不过由于我在寝室自己的本地yum源出毛病了!对于V2的Heartbeat实现上出现了问题!等解决了以后将在下次把另外一种实现方法介绍给大家!
还有以上的所有操作都是一个字一个字打上去的可能有笔误的地方,加上部分试验过程未进行测试如果发现有错请通知!
阅读(1380) | 评论(0) | 转发(0) |