使用ldirector实现集群的高可用和负载均衡

2491阅读 0评论2011-09-12 hanlenry
分类:LINUX

    Ldirector自动检测后台Realserver的运行状况,并采取响应的措施。而且Ldirector还能自动创建ipvs表。Ldirector的工作原理:Ldirector将连接到每一个真正的服务器,每隔一段时间请求测试网页文件,(1)如果返回的内容和测试网页的内容不匹配,则表明测试失败,真正的Realserver将从ipvs表中被删除。(2)如果再次测试时,测试成功,那么将Realserver重新添加到ipvs表中。(3)如果两个Realserver都测试失败,则启用本机的服务。
 拓扑图:

 

1)配置网络环境

             1)在director1上,配置ip和主机名。

配置ip

             #vim /etc/sysconfig/network-scripts/ifcfg-eth0

                     修改:BOOTPROTO=static

                     添加:IPADDR=192.168.0.111

                              NETMASK=255.255.255.0

   

    #vim /etc/sysconfig/network-scripts/ifcfg-eth1

                     修改:BOOTPROTO=static

                     添加:IPADDR=10.0.11.11

                              NETMASK=255.255.0.0

             配置主机名

              #vim /etc/sysconfig/network

                     修改:HOSTNAME=node1.hanlenry.com

             #hostname node1.hanlenry.com

             

              添加地址解析条目

              #vim /etc/hosts

                     添加:192.168.0.111           node1.hanlenry.com  node1

         192.168.0.112           node2.hanlenry.com  node2

       为了方便我们在两个节点之间相互拷贝文件时,不用输密码就可以直接拷贝。我们需要做一些配置,在node1上生成私钥,并把node1(director1)上的公钥拷贝到node2(director2)上。

         #ssh-keygen -t rsa

         #ssh-copy-id -i .ssh/id_rsa.pub root@node2         

         #ssh node2 -- 'ifconfig'

---------------------------------------------------------------------------------- 

           2)在director2上,配置ip和主机名

              配置ip

              #vim /etc/sysconfig/network-scripts/ifcfg-eth0

                     修改:BOOTPROTO=static

                     添加:IPADDR=192.168.0.112

                              NETMASK=255.255.255.0

   

     #vim /etc/sysconfig/network-scripts/ifcfg-eth1

                     修改:BOOTPROTO=static

                     添加:IPADDR=10.0.11.12

                              NETMASK=255.255.0.0

             配置主机名

              #vim /etc/sysconfig/network

                     修改:HOSTNAME=node2.hanlenry.com

              #hostname node2.hanlenry.com

             

              添加地址解析条目

              #vim /etc/hosts

                     添加:192.168.0.111           node1.hanlenry.com  node1

192.168.0.112           node2.hanlenry.com  node2

 

    为了方便我们在两个节点之间相互拷贝文件时,不用输密码就可以直接拷贝。和在node1上的配置一样,如下:

         #ssh-keygen -t rsa

         #ssh-copy-id -i .ssh/id_rsa.pub root@node1         

         #ssh node1 -- 'ifconfig'

 ---------------------------------------------------------------------------------

  (2)安装heartbeatldirector都需要在node1node2上安装。安装过程都是一样的,我这里就不指定在谁上安装了,你需要在node1node2上安装。

              所需要的安装包:

heartbeat-2.1.4-9.el5.i386.rpm            heartbeat-pils-2.1.4-10.el5.i386.rpm

heartbeat-devel-2.1.4-9.el5.i386.rpm       heartbeat-stonith-2.1.4-10.el5.i386.rpm

heartbeat-gui-2.1.4-9.el5.i386.rpm         libnet-1.1.4-3.el5.i386.rpm

heartbeat-ldirectord-2.1.4-9.el5.i386.rpm    perl-MailTools-1.77-1.el5.noarch.rpm

配置yum源,则需要添加上Cluster。否则会提示找不到依赖关系。                              

#yum localistall *.rpm -y --nogpgcheck

 -----------------------------------------------------------------------------

(3) heartbeat的配置文件做相应的配置。

  node1

             #cd /usr/share/doc/heartbeat-2.1.4/

            #cp ha.cf haresources authkeys /etc/ha.d

            #cd /etc/ha.d

            #vim ha.cf

          添加:bcast eth1

                node node1.a.org

                node node2.a.org

  --------------------------             

            #vim authkeys

                        auth 2

                        2 sha1 hanlenry   sha1后面的内容是可以随便输入。

补充:

( 生成随机数:#dd if=/dev/urandom bs=512 count1 |md5sum)

修改权限:

             #chmod 400 authkeys

  -----------------------

             #vim haresources

                添加:

                           node1.a.org 192.168.0.12/32/eth0/192.168.0.12

                  主节点   流动地址        指定广播地址 

注意:主节点说明开始node1工作着,只有当node1挂掉后,node2 才能代替node1开始工作。

  -------------------------- 

  将配置文件复制到node2上。

            # scp ha.cf haresources authkeys node2:/etc/ha.d/

 ---------------------------------------------------------------------------

(4) 启动hearbeat

node1

       启动node1上的hearbeat

             #/etc/init.d/heartbeat start

    启动node2上的heartbeat

             #ssh node2 -- '/etc/init.d/heartbeat start'

 ----------------------------------------------------------------------------

(5) 测试,将node1上的hearbeat停掉之后,看流动ip(VIP)是否会在node2上出现。

              #/etc/init.d/heartbeat stop

              #ssh node2 – ‘ifconfig’

如果成功了,就接下来的配置,先把heartbeat停掉。在node1上,

              #ssh node2 – ‘service heartbeat stop’

--------------------------------------------------------------------------------

(6) 配置ldirector

              # cd /usr/share/doc/heartbeat-ldirectord-2.1.4/

              # ls

              # cp ldirectord.cf /etc/ha.d/ldirectord-realserver.cf

       编辑ldirector-realserver.cf

              # vim ldirector-realserver.cf

              编辑如下:

# Global Directives

checktimeout=3        //检查Realserver的时长,超过此时长,ldirector将会将此Realserveripvs表中移除

checkinterval=1        //检查时间间隔

autoreload=yes         //是否定期加载配置文件

logfile="/var/log/ldirectord.log"    //日志文件的存放位置

quiescent=yes          //当某台Realserver出现异常,在ipvs表中此Realserver的权重将设置为0,不再响应客户端的访问请求

 

# Sample for an http virtual service

virtual=192.168.0.12:80                // VIP

        real=192.168.0.123:80 gate 5    // 指定Realserver和权重

        real=192.168.0.124:80 gate 3

        fallback=127.0.0.1:80 gate      //当所有的Realserver都出现问题是,就用本机的服务作为最后的响应服务。

        service=http                  //定义什么服务来测试Realserver

        request=".test.html"            //做测试的网页文件,内容为OK

        receive="OK"                //返回的结果是否为OK,来判断Realserver是否正常。

        scheduler=wlc                //负载均衡算法

        #persistent=600               //持久连接时间

        #netmask=255.255.255.255     

        protocol=tcp                 //定义虚拟服务所用到的协议

        checktype=negotiate           //ldirector进程监控Realserver的方法。

        checkport=80                //检查的端口

      ------------------------------

       node2上复制一份。

              #scp ldirector-realserver.cf node2:/etc/ha.d

修改配置文件haresources

        #vim haresources

      在原有基础上修改:

node1.hanlenry.com 192.168.0.12/32/eth0/192.168.0.12 ldirectord::ldirectord-realserver.cf

 再给node2复制一份:

       #scp haresources node2:/etc/ha.d

-------------------------------------------------------------------------------

(7) 配置完成ldirector后,在node1node2都需要上安装httpd服务,此步骤仅仅是当Realserver当机后,当用户访问Web服务时显示通知信息。

              #yum install httpd

              #vim /var/www/html/index.html

                     添加:

The server is repairing!!!

              #service httpd start

   node2复制一份

              #scp /var/www/html/index.html node2:/var/www/html

  ------------------------------------------

       重新修改配置文件

             #vim haresources

       修改为如下:

node1.hanlenry.com 192.168.0.12/32/eth0/192.168.0.12 ldirectord::ldirectord-realserver.cf httpd

       node2复制一份

#scp haresources node2:/etc/ha.d

 

PS:加httpd服务主要是在后台真正的Realserver当掉后,用户的请求都发送给Director,显示如下信息:The server is repairing!!!

--------------------------------------------------------------------------------------- 

(8) 配置Realserver

 

Rip配置在接口(eth0)上,Vip配置在lo的别名上;

server1server2上都得配置,配置如下:

1.定义内核参数,禁止响应对VipARP广播请求;

#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

 

 

2.配置Vip

#ifconfig lo:0 192.168.0.12 broadcast 192.168.0.12 netmask 255.255.255.255 up

添加主机路由:

#route add -host 192.168.0.12 dev lo:0

 

3.安装apache

              #yum install httpd

              #vim /var/www/html/index.html

                     添加:

This is the test page From Web1

  ,为了方便验证,你可以将server2上的web页面的内容改一改。

              #service httpd start

 

4.在浏览器的地址栏中输入:192.168.0.12

 

此时就能实现高可用和负载均衡了。

--------------------------------------------------------------------------------------- 

最后,我们来看一看当两个Realserver都当掉时的结果。

       启动heartbeat:在node1上,

              #service heartbeat start

              #ssh node2 – ‘service heartbeat start’

下面模拟实现Realserver当机。

1.修改server1上的测试网页文件:

   server1上,修改.test.html.test.html2

              #cd /var/www/html

              #mv .test.html .test.html2

   node1上查看ipvs表:

              #ipvsadm –ln

2.修改server2上的测试网页文件,方法同上。在查看一下,ipvs表。

3.访问一下网页。如图:

 

 

PS:由于两个Realserver都当掉了。所以,用户再次访问时,就访问的是Director上的网页文件,提供通知信息。

上一篇:检测Realserver的脚本
下一篇:基于corosync/openais+pacemaker构建高可用集群