zoukankan      html  css  js  c++  java
  • 【转载】IPVSDR+HA+ldirectord高可用负载均衡集群 天高地厚

    实验平台:virtualbox 4.12

    操作系统:RHEL5.4

    实验拓扑:

    两台Directory都有两块网卡,都设置为静态地址,其中eth0用于网络间通信,eth1用于两台Directory监测彼此心跳信息,所以使用独立的网络进行连接,在实际应用中可以使用串行线进行连接,这里由于使用虚拟机就采用intnet的内部网予以实现。
        本实验用到的软件包有:
        
    1. heartbeat-2.1.4-9.el5.i386.rpm  
    2. heartbeat-devel-2.1.4-9.el5.i386.rpm  
    3. heartbeat-gui-2.1.4-9.el5.i386.rpm  
    4. heartbeat-ldirectord-2.1.4-9.el5.i386.rpm  
    5. heartbeat-pils-2.1.4-10.el5.i386.rpm  
    6. heartbeat-stonith-2.1.4-10.el5.i386.rpm  
    7. libnet-1.1.4-3.el5.i386.rpm  
    8. perl-MailTools-1.77-1.el5.noarch.rpm  
       
    一.首先安装软件包
        [root@DIR ~]# yum localinstall *.rpm --nogpgcheck -y
        按照拓扑图设置两台主机的IP地址和主机名
        分别修改两主机/etc/hosts文件,添加下面的内容
           192.168.56.10   node1.a.org node1
           192.168.56.30   node2.a.org node2
     
        为两主机设置免密码ssh连接
        首先在node1上:
              
    1. [root@DIR ~]# ssh-keygen -t rsa  
    2. [root@DIR ~]# ssh-copy-id -i .ssh/id_rsa.pub root@node2  
        再在node2上:
               
    1. [root@DIR2 ~]# ssh-keygen -t rsa  
    2. [root@DIR2 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@node1  
        这样就可以免输密码自由连接了。
        可以将node1上的软件包直接拷贝至node2上进行安装:
        [root@node1 ~]# scp *.rpm node2:/root/
       
        然后同样的安装步骤:
        [root@DIR2 ~]# yum localinstall -y *.rpm –nogpgcheck
        准备工作基本结束,下面开始进行配置
    二.配置Heartbeat
        1.将heartbeat的配置文件拷贝到/etc/ha.d目录下
        
    1. [root@node1 ~]# cp /usr/share/doc/heartbeat-2.1.4/{ha.cf,haresources,authkeys} /etc/ha.d/  
    2. [root@node1 ~]#cp /usr/share/doc/heartbeat-ldirectord-2.1.4/ldirectord.cf /etc/ha.d/  
        2.首先编辑ha.cf
        [root@node1 ha.d]# cd /etc/ha.d/
        [root@node1 ha.d]# vim ha.cf
        修改下面几项:
           
    1. logfile /var/log/ha-log     //打开日志  
    2. bcast eth1               //监测心跳的网卡  
    3. node   node1.a.org  
    4. node   node2.a.org       //定义集群节点  
    5. respawn hacluster /usr/local/lib64/heartbeat/ipfail  
    6. apiauth ipfail gid=haclient uid=hacluster        //定义随heartbeat一起启动的进程 
     3.然后编辑authkeys
        [root@node1 ha.d]# vim authkeys
        修改文件最后几行为
               auth 2               //这里是用来指定认证方式的
               2 sha1 e781edf0090887bee14405fd48768ac6(随机数)
        随机数可以用下面的命令生成
        [root@node1 ~]# dd if=/dev//urandom bs=512 count=1 | md5sum 
       
    修改该文件的权限为400或600
        [root@node1 ha.d]# chmod 400 authkeys
        4.接下来编辑haresources
        [root@node1 ha.d]# vim haresources
        在其中写入:
        node1.a.org 192.168.56.20/24/eth0/192.168.56.255 ipvs ldirectord
        这条语句分别用来定义主节点,VIP,指定网卡,广播地址和随之启动的服务
        最后来配置ldirectord.cf
        
    1. [root@node1 ~]# vim /etc/ha.d/ldirectord.cf  
    2.     quiescent=yes 
    3.     checktimeout=3                         //检测存活的时间  
    4.     checkinterval=1                        //查询间隔  
    5.     autoreload=yes                         //自动重读配置文件  
    6.     logfile="/var/log/ldirectord.log"      //日志目录  
    7.     logfile="local0"              
    8.     virtual=192.168.56.20:80    //虚拟主机地址  
    9.         real=192.168.56.11:80 gate       //Realserver地址  
    10.         real=192.168.56.12:80 gate  
    11.         fallback=127.0.0.1:80 gate       //Realserver全部宕机时指向的地址  
    12.         service=http                   //服务  
    13.         request="test/index.html"       //测试存活与否所用的页面  
    14.         receive="ok"                    //检测关键字  
    15.         scheduler=wlc               //调度算法  
    16.         protocol=tcp 
    17.         checktype=negotiate          //检测类型  
    18.         checkport=80 
        5.拷贝配置文件至node2
        由于两台主机的配置文件必须相同,这里直接将node1上编辑好的配置文件拷贝至node2
        [root@node1 ha.d]# scp ha.cf haresources authkeys ldirectord.cf node2:/etc/ha.d/
     
        首先来配置两台Directory和两台Realserver,分别安装httpd服务,并添加测试页
        
    1. [root@R1 ~]#yum install httpd -y  
    2. [root@R1 ~]#echo '<h1>Realserver1</h1> <body bgcolor=red</body>> /var/www/html/index.html  
    3. [root@R1 ~]# echo 'ok' > /var/www/html/test.html  
    4. [root@R2 ~]#yum install httpd -y  
    5. [root@R2 ~]#echo '<h1>Realserver2</h1> <body bgcolor=red</body>> /var/www/html/index.html  
    6. [root@R2 ~]# echo 'ok' > /var/www/html/test.html  
    7. [root@node1 ~]# yum install httpd -y  
    8. [root@node1 ~]# echo '<h1>web service is under maintenance,please weat...</h1>  <body bgcolor='red'> </body>> /var/www/html/index.html  
    9. [root@node2 ~]# yum install httpd -y  
    10. [root@node2 ~]# echo '<h1>web service is under maintenance,please weat...</h1> <body bgcolor='green'> </body>> /var/www/html/index.htm  
        下面是在两台HA上进行的配置:
        在两台Directory上分别安装ipvsadm
        
    1. [root@node1 ~]# yum install ipvsadm -y  
    2. [root@node2 ~]# yum install ipvsadm -y  
     
        由于使用两台Directory搭建lvs,关于lvs的Directory的设置就必须依赖于脚本来实现了。先来编辑Directory脚本,该脚本用于在资源流向自己时自动设置自己为lvs的Directory,并在资源不属于自己时取消关于lvs的各项设置
       
    1.  [root@node1 ~]#vim /etc/init.d/ipvs.sh 
    2.     #!/bin/bash  
    3.     . /etc/rc.d/init.d/functions  
    4.     VIP=192.168.56.20  
    5.     RIP1=192.168.56.11  
    6.     RIP2=192.168.56.12  
    7.     PORT=80 
    8. case "$1" in  
    9. start)             
    10.  /sbin/ifconfig eth0:1 $VIP broadcast $VIP netmask 255.255.255.255 up  
    11.  /sbin/route add -host $VIP dev eth0:1  
    12.  echo 1 > /proc/sys/net/ipv4/ip_forward      //开启本机路由转发功能  
    13. # 清除已有的iptables配置  
    14.  /sbin/iptables -F  
    15.  /sbin/iptables -Z  
    16. # 清除已有的ipvsadm 规则  
    17.  /sbin/ipvsadm -C  
    18.    
    19. # 添加VIP  
    20.  /sbin/ipvsadm -A -t $VIP:80 -s wlc  
    21. # 在Directory下添加Realserver  
    22.  /sbin/ipvsadm -a -t $VIP:80 -r $RIP1 -g -w 1  
    23.  /sbin/ipvsadm -a -t $VIP:80 -r $RIP2 -g -w 2  
    24.  /bin/touch /var/lock/subsys/ipvsadm &> /dev/null  
    25. ;;   
    26. stop)  
    27.  echo 0 > /proc/sys/net/ipv4/ip_forward  
    28.    
    29.  /sbin/ipvsadm -C  
    30.  /sbin/ifconfig eth0:1 down  
    31.  /sbin/route del $VIP  
    32.  /bin/rm -f /var/lock/subsys/ipvsadm  
    33.  echo "ipvs is stopped..."  
    34. ;;  
    35. status)  
    36.    
    37.  if [ ! -e /var/lock/subsys/ipvsadm ]; then  
    38.     echo "ipvsadm is stopped ..."  
    39.  else  
    40.     echo "ipvs is running ..."  
    41.     ipvsadm -L -n  
    42.    
    43.  fi  
    44. ;;  
    45. *)  
    46.  echo "Usage: $0 {start|stop|status}"  
    47. ;;  
    48. esac  
    49.    
    50. [root@node1 ~]#chmod a+x /etc/init.d/ipvs.sh  
    将配置好的脚本拷贝至node2上
    [root@node1 ~]# scp /etc/init.d/ipvs node2:/etc/init.d/
    这里需要对haresources文件进行一下修改,将刚才的脚本设置为随服务启动
    配置realservers的脚本(运行此脚本能够实现快速配置realservers)
    1. #vim /etc/init.d/realserver.sh  
    2. #!/bin/bash  
    3. # Script to start LVS DR real server.  
    4. # description: LVS DR real server  
    5. . /etc/rc.d/init.d/functions  
    6. VIP=192.168.56.20  
    7. host=`/bin/hostname`  
    8. case "$1" in  
    9. start)  
    10.        # Start LVS-DR real server on this machine.  
    11.  /sbin/ifconfig lo down  
    12.  /sbin/ifconfig lo up  
    13.        echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore  
    14.         echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce  
    15.         echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore  
    16.         echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce  
    17.         /sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up  
    18.         /sbin/route add -host $VIP dev lo:0  
    19. ;;  
    20. stop)  
    21.        /sbin/ifconfig lo:0 down  
    22.         echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore  
    23.         echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce  
    24.         echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore  
    25.         echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce  
    26. ;;  
    27. status)  
    28.         # Status of LVS-DR real server.  
    29.         islothere=`/sbin/ifconfig lo:0 | grep $VIP`  
    30.         isrothere=`netstat -rn | grep "lo:0" | grep $VIP`  
    31.         if [ ! "$islothere" -o ! "isrothere" ];then  
    32.             # Either the route or the lo:0 device  
    33.             # not found.  
    34.             echo "LVS-DR real server Stopped."  
    35.         else  
    36.             echo "LVS-DR real server Running."  
    37.         fi  
    38. ;;  
    39. *)  
    40.             # Invalid entry.  
    41.             echo "$0: Usage: $0 {start|status|stop}"  
    42.             exit 1  
    43. ;;  
    44. esac  
    45. [root@R1 ~]# chmod a+x /etc/init.d/realserver.sh   
     
    [root@R1 ~]# scp /etc/init.d/rs.sh 192.168.56.12:/etc/init.d/
    启动服务进行测试:
    1. [root@node1 ~]# /etc/init.d/heartbeat start  
    2. [root@node1 ~]# ssh node2 -- '/etc/init.d/heartbeat start'  
    3. [root@node1 ~]# /etc/init.d/ldirectord start  
    4. [root@node1 ~]# ssh node2 --'/etc/init.d/ldirectord start'  
    5. [root@node1 ~]# /etc/init.d/ipvs start  
    6. [root@R1 ~]# /etc/init.d/realserver.sh start  
    7. [root@R2 ~]# /etc/init.d/realserver.sh start  
    查看一下LVS信息
    [root@node1 ~]# ipvsadm -L -n
     
    说明服务已经正常启动,在浏览器上测试一下
     
    这时停掉node1上的heartbeat,看服务是否正常
    [root@node1 ~]# service heartbeat stop
    刷新页面可以看到
     
    依然可以正常访问,在node2上查看一下ipvsdam的信息
    [root@node2 ~]# ipvsadm -L -n  

    把两台Realserver都停掉,刷新页面可以看到

     

    查看一下ipvs转发信息
    [root@node1 ~]# ipvsadm -L -n  
     

    停掉主节点node1,刷新页面
     

    [root@node2 ~]# ipvsadm -L -n
    至此,配置完成。
     
  • 相关阅读:
    JQ-动画合集(ing...)
    CSS-各种cs样式之浏览器兼容处理方式汇总大全(更新中...)
    CSS-用伪元素制作小箭头(轮播图的左右切换btn)
    CSS-垂直|水平居中问题的解决方法总结
    JS-自制提速小工具:开发页面时需要按比例计算宽高值的快速计算器
    canvas-渐变文字
    HTML-一个网页的头部的大概框架(完善ing)
    JS-面向对象
    CSS-border属性制作小三角
    JS事件-事件处理程序-笔记总结ing...
  • 原文地址:https://www.cnblogs.com/net2012/p/2877580.html
Copyright © 2011-2022 走看看