分享

集群系列四(基于ivs

 WindySky 2016-04-21
  实现目标:
1,借助ldirectord工具实现两台director节点备份;
2,当某RealServer或其web服务出现故障时,Director能自动将其隔离,并在RealServer的web服务恢复时自动将其重新上线;期望将时间控制在5秒钟之内(此过程通过脚本实现)
前提:
VIP  172.16.4.1
Master  172.16.4.10
Backup  172.16.4.20
Trans1   192.168.4.10
Trans2   192.168.4.20
Realserver1 172.16.4.11
Realserver2 172.16.4.22
(此实验是基于虚拟机环境实现,其中trans1,和trans2是用于director相互传递心跳信息,这里我们将其放在同一区域vmnet5中)
 
准备环境:
1,在两个director上配置(以下操作在两台节点上均需要配置):
#vim /etc/sysconfig/network
     主机名为node1.a.com
#vim /etc/hosts
    172.16.4.10  node1.a.com   node1
172.16.4.20  node2.a.com   node2
方便两个director传递心跳信息,配置无密码通信:
#ssh-keygen -t rsa
#ssh-copy-id  -i/    .ssh/id_rsa.pub  root@node2.a.com
2,在realservers上安装测试服务httpd:
#yum  install  httpd
为了方便测试设置两个页面:
 
#echo  "<h1>I'm realserver1,welcome to</h1>"   > /var/www/html/index.html
#echo  "<h1>I'm realserver2,welcome to</h1>"   > /var/www/html/index.html
#echo  "<h1>ok</h1>    >  /var/www/html/.test.html
#echo  "<h1>ok</h1>"    >  /var/www/html/.test.html
# service   httpd   restart
# elinks http://172.16.4.22 --dump                 //测试网页是否正常显示
   I'm realserver2,welcome to                      //说明服务正常
 
 
一、在director上安装ipvadm的软件包:
#rpm  -ivh  ipvsadm.i386
安装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-ldirectord-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
perl-MailTools-1.77-1.el5.noarch.rpm
这些软件包需从网上下载
本地安装软件包:
 
#yum  localinstall  --nogpgcheck   heartbeat-2.1.4-9.el5.i386.rpm  
 
#yum  localinstall  --nogpgcheck   heartbeat-devel-2.1.4-9.el5.i386.rpm
 
#yum  localinstall  --nogpgcheck   heartbeat-gui-2.1.4-9.el5.i386.rpm
 
#yum  localinstall  --nogpgcheck   heartbeat-ldirectord-2.1.4-9.el5.i386.rpm
 
#yum  localinstall  --nogpgcheck   heartbeat-pils-2.1.4-10.el5.i386.rpm
 
#yum  localinstall  --nogpgcheck   heartbeat-stonith-2.1.4-10.el5.i386.rpm
 
#yum  localinstall  --nogpgcheck   libnet-1.1.4-3.el5.i386.rpm
 
#yum  localinstall  --nogpgcheck   perl-MailTools-1.77-1.el5.noarch.rpm
二、配置相关文件
# cp   /usr/share/doc/heartbeat-2.1.4/{authkeys, ha.cf, haresources}  /etc/ha.d/
#cp  /usr/share/doc/heartbeat-ldirectord-2.1.4/ldirectord.cf   /etc/ha.d/
1,配置authkeys文件
#cd  /etc/ha.d/
#vim authkeys
  auth  2
  2    sha1  kfjhkjdfhladfh       //sha1后面的字符串是随机的(可以随便输入)
#chmod 400 authkeys               //此处改变此文件的属性为400或600,不然无法启动heartbeat
2,配置ha.cf文件
#vim  ha.cf
debugfile /var/log/ha-debug    //调试日志的文件存放位置
 
logfile /var/log/ha-log        //启动及运行时产生的日志存放的位置(此功能非常重要)
 
logfacility local0             // Facility to use for syslog()/logger
 
keepalive 2                    //指定心跳间隔时间即每隔2秒钟在eth1上发送一次广播
 
deadtime 30 //指定若备用节点在30内没有收到主节点的心跳信号,则立即接管主节点的服务资源
 
warntime 10                    //指定心跳延迟的时间为10秒。当10秒钟内备份节点不能接收到主节点的心跳信号时,就会往日志中写入一个警告日志,但此时不会切换服务
 
initdead 120                      //在某些系统上,系统启动或重启之后需要经过一段时间网络才能正常工作,该选项用于解决这种情况产生的时间间隔。取值至少为deadtime的两倍
 
 udpport 694                    //开放防火墙694端口
 
 ucast eth1 192.168.4.20           //检测对端心跳接口的地址
 
 bcast eth1                     //广播心跳信息的网卡
 
 auto_failback on                //默认设置
 
 node  node1.a.com              //配置director主节点,且与uname -n保持一致
 
 node  node2.a.com               //配置director备份节点
  3,配置director脚本
#vim /etc/init.d/ipvs
 
#!/bin/bash
 
#
 
# LVS script for VS/DR
 
#
 
. /etc/rc.d/init.d/functions
 
VIP=172.16.4.1
 
RIP1=192.168.0.50
 
RIP2=192.168.0.60
 
PORT=80
 
case "$1" in
 
start)           
 
  echo " start LVS "
 
  /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 "close LVS Director"
 
  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
 
  echo "ipvs is stopped..."
 
;;
 
status)
 
  if [ ! -e /var/lock/subsys/ipvsadm ]; then
 
    echo "ipvsadm is stopped ..."
 
  else
 
    echo "ipvs is running ..."
 
    ipvsadm -L -n
 
  fi
 
;;
 
*)
 
  echo "Usage: $0 {start|stop|status}"
 
;;
 
esac
#chmod +x /etc/init.d/ipvs
 
   4,配置realservers的脚本(运行此脚本能够实现快速配置realservers)
#vim /etc/init.d/realserver.sh
  #!/bin/bash
 
  #
 
  .  /etc/rc.d/init.d/functions
 
   VIP=172.16.4.1
 
   host=`/bin/hostname`
 
case "$1" in
 
start)
 
       echo "Start LVS-DR real server on this machine."
 
        /sbin/ifconfig lo down
 
        /sbin/ifconfig lo 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
 
        sysctl –p
 
        /sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
 
        /sbin/route add -host $VIP dev lo:0
 
;;
 
stop)
 
        echo  "Stop LVS-DR real server loopback device(s)."
 
        /sbin/ifconfig lo:0 down
 
        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
 
;;
 
status)
 
        echo  "Status of LVS-DR real server."
 
        islothere=`/sbin/ifconfig lo:0 | grep $VIP`
 
        isrothere=`netstat -rn | grep "lo:0" | grep $VIP`
 
        if [ ! "$islothere" -o ! "isrothere" ];then
 
            echo "LVS-DR real server Stopped."
 
        else
 
            echo "LVS-DR real server Running."
 
        fi
 
;;
 
*)
 
            echo "$0: Usage: $0 {start|status|stop}"
 
            exit 1
 
;;
 
esac
#chmod +x /etc/init.d/realserver.sh
 
5,配置heartbeat文件
#vim  /etc/ha.d/haresources
 node1.a.com  172.16.4.1  ipvs  ldirectord
注:node1.a.com是主节点的计算机名,172.16.4.1是VIP地址,ipvs和ldirectord是两个脚本,ipvs能够实现lvs—DR模型的基本设置,并设置相应的ipvsadm规则;ldirectord是一个软件工具安装的启动脚本,能够实现监控realservers的状态;Herartbeat默认寻找程序的路径为 :/etc/rc.d/init.d/  和/etc/ha.d,heartbeat会实时监控两个节点的心跳信息,当主节点宕机或备份节点宕机时,会立即启用另一节点。
6,修改ldirectord.cf文件
#vim  /etc/ha.d/ldirectord.cf
checktimeout=3                        //检测超时时间
checkinterval=1                       //检测间隔时间
autoreload=yes                        //是否重新载入客户机,这里我们选择重新载入
logfile="/var/log/ldirectord.log"           //日志路径
logfile="local0"
quiescent=no
 
virtual=172.16.4.1:80                   //指定VIP地址,并监听80端口
real=172.16.4.11:80 gate                //设置realserverIP地址和并设置为路由模式
real=172.16.4.22:80 gate
fallback=127.0.0.1:80 gate
service=http                           //我们这里测试的服务是http
request=".test.html"                      //这个文件一定要在realserver的web网页目录中存在,并且能够正常访问的,ipvs通过它来判断客户端是否存活
receive="ok"                           //设置测试网页的文件内容
scheduler=wlc                            //设定算法为wlc
protocol=tcp                            //基于tcp协议
checktype=negotiate                      // ldirectord进程用于监控Realserver的方法
checkport=80                            //检查的端口
7,将以上的配置文件拷贝给备份director节点上
#scp  /etc/ha.d/{authkeys,ha.cf,haresources}   node2:/etc/ha.d/
  注意这三个文件除ha.cf中的监听地址需要改为 ucast eth1 192.168.4.10,其他的文件不需要改变。 
#scp   /etc/init.d/ipvs    node2:/etc/init.d/
8,将realservers脚本拷贝给另一台服务器
#scp   /etc/init.d/realserver.sh    172.16.4.22:/etc/init.d/
9,启动服务
# /etc/init.d/heartbeat   start
 
# ssh node2 -- '/etc/init.d/heartbeat   start'  //通过ssh启动另一台节点的heartbeat
 
# /etc/init.d/ldirectord   start
 
# ssh node2 -- '/etc/init.d/ldirectord   start'
 
#/etc/init.d/ipvs    start
 
#/etc/init.d/realserver.sh    start
10,测试服务
在浏览器中输入http://172.16.4.1
出现页面如下:

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多