一步步教你为LVS中的Director实现高可用集群,LVS双机热备和负载均衡一体化安装方法

ca88手机登录 8

ca88手机登录,Director对于LVS来说,是重中之重,所有对服务的请求都要经过它
向他身后提供服务的集群进行转发,但它也是LVS高负载均衡集群的不稳定因素,如果Director主机宕机,后方的服务集群也就不能够提供服务了,这是坚决不允许出现的情况,因此我们可以通过为Director提供高可用集群服务来保证当一个Director宕机之后,还有其它的Director可以替代提供服务,知道宕机的Director重新恢复。

在高可用集群中在主节点当即后如果资源不能成功转移到该高可用集群的其他节点上那么这个集群的高可用性就无从谈起,所以在高可用集群中资源成功转移才是王道!

一、LVS的组成

LVS 由2部分程序组成,包括 ipvs 和
ipvsadm。

  1. ipvs(ip virtual
    server):一段代码工作在内核空间,叫ipvs,是真正生效实现调度的代码。
    2.
    ipvsadm:另外一段是工作在用户空间,叫ipvsadm,负责为ipvs内核框架编写规则,
        定义谁是集群服务,而谁是后端真实的服务器(Real Server)

其实LVS的本身跟iptables很相似,而且连命令的使用格式都很相似,
其实LVS是根据iptables的框架开发的,那么LVS的本身分成了两个部分:
第一部分:是工作在内核空间的一个IPVS的模块,其实LVS的功能都是IPVS模块实现的,
第二部分:是工作在用户空间的一个用来定义集群服务的一个工具ipvsadm,
                   
这个工具的主要作用是将管理员定义的集群服务列表传送给工作在内核空间中的IPVS模块

 

二、ipvsadm命令主要格式:

设置虚拟地址并指定调度算法
**ipvsadm -A -t 10.0.0.1:80 -s rr

**添加真实服务器,指定工作传输模式为NAT
和各个权重

ipvsadm -a -t 10.0.0.1:80 -r
10.0.0.21:80 -m -w 10

 

ipvsadm -a -t 10.0.0.1:80 -r
10.0.0.22:80 -m -w 5

 

三种工作模式、十种调度算法

–scheduler -s scheduler one of rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,
                  the default scheduler is
wlc.
–persistent -p [timeout] persistent
service
–netmask -M netmask persistent
granularity mask
–real-server -r server-address
server-address is host (and port)
–gatewaying -g gatewaying (direct routing) (default)
–ipip -i ipip encapsulation (tunneling)
–masquerading -m masquerading (NAT)
–weight -w weight capacity of real
server
–u-threshold -x uthreshold upper
threshold of connections

 

heartbeat 
以心跳机制监控实体主机是否存活,实现ipvsadm和ldirectord服务的故障转移。
ldirectord
可用来監控实体主機的服務进程是否正常,以决定在ipvsadm配置中删除或加入。

我们使用高可用集群解决方案之一 ——Heartbeat来实现这个目的

在《一步步教你为LVS中的Director实现高可用集群》http://www.linuxidc.com/Linux/2011-09/43913.htm这篇文章中给大家讲解了怎样使用Heartbeat自带的软件包实现LVS中Director的高可用性集群的资源转移,可以说Heartbeat专门为LVS中Director实现高可用集群打造的软件包,只需要修改一个配置文件,所有的资源转移问题迎刃而解,我们除了使用这个专门的软件包之外完全可以使用自己手工编写的脚本来实现,下面我们就用自己编写的脚本来实现这个话题中的资源转移。
       

三、LVS相关术语

  1. DS:Director
    Server。指的是前端负载均衡器节点。
  2. RS:Real
    Server。后端真实的工作服务器。
    3.
    VIP:向外部直接面向用户请求,作为用户请求的目标的IP地址。
  3. DIP:Director Server
    IP,主要用于和内部主机通讯的IP地址。
  4. RIP:Real Server
    IP,后端服务器的IP地址。
  5. CIP:Client
    IP,访问客户端的IP地址。

 

 

各角色服务器ip如下
虚拟ip地址   10.0.0.1
DS  Director Server调度服务器地址  10.0.0.11   10.0.0.12
RS  Real Server 真实服务器地址      10.0.0.21   10.0.0.22

 

 

在本案例中,将使用CentOS6系统来安装传统的heartbeat+ldirector以实现双机热备的功能,因为RHEL均已经移除相关套件,所以安装比较麻烦一点,但只要一步一步做下来,其实也并不是太困难,而且还能够学习到很多东西。

我们先来考虑一个问题,当Director的主节点宕机之后,必须要将资源转移到备节点上,否则备节点也只是摆设,并不能替代宕机的主节点来完成Director的工作。关键就在这个资源转移的方法上。

   
我们本次讲解是基于DR的LVS中Director的高可用集群,所以先根据下图建立这个大的结构。

四、LVS/NAT 部署配置原理

另外请注意,因为本案例中将DR主机和RS主机合并在一起以节省IT资源,因此本案例只适合部署于同一子网内的主机(因为虚拟的VIP不能改变),也因此之故,ipvsadm也就可选择使用Director
Routing 模式。

Heartbeat为LVS中的Director实现高可用集群量身定做了套解决方案,我们只需要在Heartbeat的几个配置文件中进行简单的配置,我们所需要的目的都统统能够实现,不仅如此,它自身还具备了帮我们检测后方服务集群中主机服务状态的功能,简直让我们喜出望外,下面我们就通过一个简单的实验来阐明这个观点。

        ca88手机登录 1

 重点理解NAT方式的实现原理和数据包的改变。

ca88手机登录 2

1.在DR服务器上进行如下配置:
启动Linux的路由转发功能,在NAT模式下此操作是必须的

# cat /proc/sys/net/ipv4/ip_forward       #查看Linux是否开启路由转发功能
  0 
# echo 1 > /proc/sys/net/ipv4/ip_forward  #启动Linux的路由转发功能
# cat /proc/sys/net/ipv4/ip_forward 
  1 

添加地址为10.0.0.1:80的虚拟服务,指定调度算法为轮转。
ipvsadm -A -t 10.0.0.1:80 -s rr

添加真实服务器,指定传输模式为NAT

**ipvsadm -a -t 10.0.0.1:80 -r
10.0.0.21:80 -m
ipvsadm -a -t 10.0.0.1:80 -r
10.0.0.21:80 -m


2.在 real server 上配置
设置RS的网关为 DSIP地址

 

 

 

                        ________
                       |        |
                       | client |
                       |________|
                           |
             CIP->VIP |    |   ^ 
                      v    |   | VIP->CIP
                           |
          ————————————
          |                                  |
          |                                  |
  RIP1=192.168.57.101             RIP2=192.168.57.102 (eth0)
  VIP =192.168.57.200             VIP =192.168.57.200 (eth0:0, arps)
  VIP =192.168.57.200             VIP =192.168.57.200 (all
lo:0,non-arping)
    _____________                     
_____________
   |             |                    |             |
   | Director1 + |                    | Director2 + |
   | RealServer1 |                    | RealServer2 |
   |_____________|                   
|_____________|

         实验拓扑如图:
        
ca88手机登录 3
        我们要实现的LVS的类型为DR,即直接路由
       
route为连接外网的路由器,switch为内网中的交换机,RS1、RS2为提供web服务的集群,直接和交换机相连,ND1、ND2为LVS中的两个Director节点,我们要对这连个Director节点实现高可用集群服务,两个Director和交换机直接相连之外,两个节点之间还需要直接连接进行心跳等基本信息的传递。
       
每个有标记的块状物为网卡,上面是编号,在连个ND节点之间有一个被称为资源一部分的VIP在哪个节点上是不固定的,外网的用户也是通过这个VIP来访问我们的web服务的。

   
route为连接外网的路由器,switch为内网中的交换机,RS1提供web服务(主要是为了进行实验结果的验证,所以我们就只用一个realserver主机RS1),直接和交换机相连,ND1、ND2为LVS中的两个Director节点,我们要对这连个Director节点实现高可用集群服务,两个Director和交换机直接相连之外,两个节点之间还需要直接连接进行心跳等基本信息的传递。 
   
每个有标记的块状物为网卡,上面是编号,在连个ND节点之间有一个被称为资源一部分的VIP在哪个节点上是不固定的,外网的用户也是通过这个VIP来访问我们的web服务的。

五、LVS/DR 部署配置原理

 重将请求报文的目标MAC地址设定为挑选出的RS的MAC地址

ca88手机登录 4

 

关键点

          1:Director 上需要配置 VIP 、ipvsadm

          2:Real Server 需要关闭ARP协议 同时 要配置VIP 

 

1、设置Real
Server真实服务器的接口对ARP的应答
echo 1 >
/proc/sys/net/ipv4/conf/all/arp_ignore                

echo 1 >
/proc/sys/net/ipv4/conf/lo/arp_ignore**          **这条是可以不用的,因为arp对逻辑接口没有意义,但大多数教程都加上了**
**echo 2 >
/proc/sys/net/ipv4/conf/lo/arp_announce   这条是可以不用的,因为arp对逻辑接口没有意义,但大多数教程都加上了** echo 2 >
/proc/sys/net/ipv4/conf/all/arp_announce**


echo
“1”>/proc/sys/net/ipv4/conf/all/arp_ignore

echo
“2”>/proc/sys/net/ipv4/conf/all/arp_announce

如果你的RS的外部网络接口是eth0,其实真正要执行的是:

echo
“1”>/proc/sys/net/ipv4/conf/eth0/arp_ignore

echo
“2”>/proc/sys/net/ipv4/conf/eth0/arp_announce

所以我个人建议把上面两条all的也加到你的脚本里去,因为万一系统里上面两条默认的值不是0,那有可能是会出问题滴。



设置这个选项可以使得各个接口只对本接口上的地址进行响应

arp_ignore参数的作用是控制系统在收到外部的arp请求时,是否要返回arp响应。
sysctl.conf中包含all和eth/lo(具体网卡)的arp_ignore参数,取其中较大的值生效。
     1 只响应目的IP地址为接收网卡上的本地地址的arp请求。

arp_announce的作用是控制系统在对外发送arp请求时,如何选择arp请求数据包的源IP地址。
sysctl.conf中包含all和eth/lo(具体网卡)的arp_ignore参数,取其中较大的值生效。

     2
 忽略IP数据包的源IP地址,选择该发送网卡上最合适的本地地址作为arp请求的源IP地址。

 

 2、在RS真实服务器上添加虚拟IP

在lvs的DR和TUn模式下,用户的访问请求到达真实服务器后,是直接返回给用户的,而不再经过前端的Director
Server,
因此,就需要在每个Real
server节点上增加虚拟的VIP地址,这样数据才能直接返回给用户
real server
的物理网卡收到数据帧之后:拆开看到目的地址是VIP
查找路由表,自己的lo上绑着VIP,说明这个包是自己需要处理的,就把这个活接了。
产生响应报文
real
server返回给客户端的数据帧,源mac是real
server物理网卡的mac,里面的源IP地址是VIP
客户端收到数据帧之后,看到目的mac和目的IP都是自己,就会接收。并不会去检查源mac
vip一定要绑定在lo网卡上,子网掩码 一定要是
四个255

ifconfig lo:0 10.0.0.1 boradcast
10.0.0.1 netmask 255.255.255.255
up

route add -host 10.0.0.1 dev lo:0 或者** ip addr add 10.0.0.1/32 dev lo

**

 

3.在DS上设置

打开ip转发功能,增加一个虚拟网卡(ip地址为vip),增加一条路由信息

echo 1 > /proc/sys/net/ipv4/ip_forward
     
这条不需要,因为director跟realserver是同一个网段,无需开启转发,多数教程这样写
ifconfig eth0:0 down
ifconfig eth0:0 10.0.0.1 broadcast
10.0.0.1 netmask 255.255.255.255 up
或者使用这个命令
 ip addr add 10.0.0.1/24 dev
eth0

route add
-host 10.0.0.1 dev eth0:0       
  lvs/dr里,director的vip的netmask
没必要设置为255.255.255.255,也不需要再去     route add -host $VIP dev
eth0:0*

接着添加ipvs规则:

添加地址为10.0.0.1:80的虚拟服务,指定调度算法为轮转。

ipvsadm -A -t 10.0.0.1:80 -s rr

添加真实服务器,指定传输模式为DR

ipvsadm -a -t 10.0.0.11:80 -r
10.0.0.21:80 -g

ipvsadm -a -t 10.0.0.11:80 -r
10.0.0.22:80 -g

注意:此处的例子中客户、调度服务器、真实服务器都是位于同一网段的

 

查看记录和规则:

# ipvsadm -L
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.0.0.1:http rr
-> 10.0.0.21:http Route 1 0 0
-> 10.0.0.22:http Route 1 0 0

 

 

 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
调试应注意的情况:
uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
另外,调试中要注意一个情况,ipvsadm所添加的规则应用于内核的路由,优先于其他网络
服务。举个例子来说,比如某IP的端口80被ipsvadm设置为转发,而同时本机又有HTTPD服务
使用此IP的80端口,那么ipvsadm规则将应用在先,而其他IP的端口80的服务则不受影响。

         开始配置:  设定VIP为192.168.0.85/24

开始配置: 设定VIP为192.168.0.85/24

六、LVS/Tun 部署配置原理

在原有的IP报文外再次封装多一层IP首部,内部IP首部(源地址为CIP,目标IIP为VIP),外层IP首部(源地址为DIP,目标IP为RIP)

ca88手机登录 5

配置LVS服务器

##TUM模式必须添加VIP。
##给LVS服务器添加VIP
ifconfig eth0:0 10.0.0.1 netmask
255.255.255.255 broadcast 10.0.0.1 up

##添加转发规则

ipvsadm -A -t 10.0.0.1::80 -s rr
ipvsadm -a -t 10.0.0.1::80 -r 10.0.0.21
-i
ipvsadm -a -t 10.0.0.1::80 -r 10.0.0.22
-i

 

@配置真实服务器

建立一个脚本lvs_tun_real.sh

./lvs_tun_real.sh start  
运行脚本

./lvs_tun_real.sh stop  停止脚本

 

#!/bin/bash    
#description : start realserver  
VIP=10.0.0.1  
/etc/rc.d/init.d/functions  
case "$1" in  
start)  
echo " start LVS of REALServer"  
modprobe ipip  
/sbin/ifconfig tunl0 $VIP netmask 255.255.255.255 broadcast $VIP  
echo "1" > /proc/sys/net/ipv4/conf/tunl0/arp_ignore  
echo "2" > /proc/sys/net/ipv4/conf/tunl0/arp_announce  
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore  
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce  
echo "0" > /proc/sys/net/ipv4/conf/tunl0/rp_filter  
echo "0" > /proc/sys/net/ipv4/conf/all/rp_filter  
;;  
stop)  
/sbin/ifconfig tunl0 down  
echo "close LVS Directorserver"  
echo "0" > /proc/sys/net/ipv4/conf/tunl0/arp_ignore  
echo "0" > /proc/sys/net/ipv4/conf/tunl0/arp_announce  
echo "0" > /proc/sys/net/ipv4/conf/all/arp_ignore  
echo "0" > /proc/sys/net/ipv4/conf/all/arp_announce  
echo "1" > /proc/sys/net/ipv4/conf/tunl0/rp_filter  
echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter  
;;  
*)  
echo "Usage: $0 {start|stop}"  
exit 1  
esac   

 

 

nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
注意ARP地址的更新:
uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
因为我使用虚拟主机进行测试,所以ARP地址需要手动更新,否则测试会停留在旧地址上:
# arping -I vboxnet1 192.168.57.200;

一、我们先来RS1和RS2让其称为一个web服务的集群
      
     1、对RS1的配置

1、对RS1的配置

 

一般LINUX系统预设的ARP缓存timeout时间是60秒,如有需要,您可以调整此内核参数:
# cat /proc/sys/net/ipv4/neigh/vboxnet1/gc_stale_time
# echo 5 > /proc/sys/net/ipv4/neigh/vboxnet1/gc_stale_time

      (1)、对realserver配置内核参数:
                 
先来解释一下修改内核参数的原因,因为在DR模型中RS1、RS2在lo:0上都配置了VIP的地址,是为了在数据包响应用户的时候源地址为用户访问的VIP地址,但是在数据包进入路由器之后,在我们的内网中有多个VIP地址,路由器将不能将其转发到应该得到数据包的ND上,为了避免这种情况出现,我们就修改内核参数来让RS上的VIP网卡不对路由器的产生响应即可。
                 echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
                 echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
                 echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
                 echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

(1)对realserver配置内核参数:
先来解释一下修改内核参数的原因,因为在DR模型中RS1、RS2在lo:0上都配置了VIP的地址,是为了在数据包响应用户的时候源地址为用户访问的VIP地址,但是在数据包进入路由器之后,在我们的内网中有多个VIP地址,路由器将不能将其转发到应该得到数据包的ND上,为了避免这种情况出现,我们就修改内核参数来让RS上的VIP网卡不对路由器的产生响应即可。
   echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
   echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
   echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
   echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

七、真实环境配置脚本

如果您使用硬件设备作网关,如有需要,则请相应调整的硬件参数,例如,CISCO路由器的
预设ARP缓存时间是14400秒(4小时),如果您不想修改此参数,那就肯定需要手动刷新了。
CISCO 路由器用于操作 arp cache 的相关命令可参考如下:
router# show arp
router# clear arp-cache

     
(2)、为RS1配置虚拟的VIP地址(是为了实现在数据包返回用户的时候源地址为用户访问的地址)
                 ifconfig lo:0 192.168.0.85 broadcast 192.168.0.85
netmask 255.255.255.255 up
                   为RS1的eth0网卡添加地址
                 ifconfig eth0 192.168.0.206/24

(2)为RS1配置虚拟的VIP地址(是为了实现在数据包返回用户的时候源地址为用户访问的地址) 
 ifconfig lo:0 192.168.0.85 broadcast 192.168.0.85 netmask
255.255.255.255 up
 为RS1的eth0网卡添加地址
 ifconfig eth0 192.168.0.207/24

vip 10.0.0.90 Director server ip 10.0.0.54 Real server 10.0.0.56 10.0.0.57

1.DR模式

D_server 上配置

# ip addr add 10.0.0.90/24 dev
ens32

# ipvsadm -A -t 10.0.0.90:80 -s
rr

# ipvsadm -a -t 10.0.0.90:80 -r
10.0.0.56 -g

# ipvsadm -a -t 10.0.0.90:80 -r
10.0.0.57 -g

# ipvsadm -L
IP Virtual Server version 1.2.1
(size=4096)
Prot LocalAddress:Port Scheduler
Flags
-> RemoteAddress:Port Forward Weight
ActiveConn InActConn
TCP 10.0.0.90:http rr
-> 10.0.0.56:http Route 1 0 0

-> 10.0.0.57:http Route 1 0 0

Real server 10.0.0.56上配置

# ip addr add 10.0.0.90/32 dev
lo
# echo 1 >
/proc/sys/net/ipv4/conf/ens32/arp_ignore
# echo 2 >
/proc/sys/net/ipv4/conf/ens32/arp_announce

Real server 10.0.0.57上配置

# ip addr add 10.0.0.90/32 dev
lo
# echo 1 >
/proc/sys/net/ipv4/conf/ens32/arp_ignore 
# echo 2 >
/proc/sys/net/ipv4/conf/ens32/arp_announce

 

      (3)、给realserver主机添加路由信息
                route add -host 192.168.0.85 dev lo:0 
设定相应的数据包的源地址都为这个地址

(3)给realserver主机添加路由信息
 route add -host 192.168.0.85 dev lo:0
设定相应的数据包的源地址都为这个地址

────────────────────────────────────────────────────────────────────────────────
LVS
────────────────────────────────────────────────────────────────────────────────
Official Site:

      (4)、为RS1安装web服务
                yum install php php-mbstring mysql mysql-server httpd
php-mysql 
     
(5)、为实现结果为web指定一个有其代号的网页,并写一个有ok的测试网页
                echo RS1 > /var/www/html/index.html
                echo ok > /var/www/html/.ok.html

(4)为RS1安装web服务
 yum install php php-mbstring mysql mysql-server httpd php-mysql
(5)为实现结果为web指定一个有其代号的网页
 echo RS1 > /var/www/html/index.html

Ref:

      (6)、测试httpd服务能否正常运行,测试结果如下:

(6)测试httpd服务能否正常运行,测试结果如下:   

# yum install ipvsadm;

 

      
         ca88手机登录 6

注意:
在本案例中,因为双机热备需要两边node完全相同的配置,因此所有命令都同时
适用于两台node主机,除了
heartbeat配置配置文档/etc/ha.d/ha.cf有点稍微不同之外,
其他配置也完全相同。

 ca88手机登录 7

二、对两个Director节点进行配置:

 

      2、对RS2进行配置
          (1)、RS2的eth0端口配置
                   ifconfig eth0 192.168.0.207/24
          (2)、写入网页
                   echo RS2 > /var/www/html/index.html
           其他配置和RS1完全一样,不再演示:
           对RS2的web服务进行验证,结果如下:
           
ca88手机登录 8   

 
 配置两个Director节点,ND1为node1,ND2为node2
1、给node1配置地址 
   ifconfig eth0 192.168.0.202/24 
   ifconfig eth1 1.1.1.1
   给noid2配置地址 
   ifconfig eth0 192.168.0.204/24
   ifconfig eth1 1.1.1.2
2、配置本地主机名称解析

────────────────────────────────────────────────────────────────────────────────
Linux-HA:注意最新版本(heartbeat 3)作了相当大的改动
────────────────────────────────────────────────────────────────────────────────

ca88手机登录 9

   在node1上
   vim /etc/hosts 添加如下内容
   192.168.0.202 node1.a.org 
   192.168.0.204 node2.a.org

Heartbeat 3 的组成
‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
Heartbeat 3 按模块拆分为三个子项目,提供了一个名为 cluster-glue 的组件,
专用于
Local Resource Manager 的管理。即heartbeat + cluster-glue +
resouce-agent三部分:
(1) hearbeat集群心跳, 负责维护集群各节点的信息以及它们之前通信;
(2)
cluster-glue相当于一个中间层,可将heartbeat和crm(pacemaker)联系起来,包括LRM和STONITH;
(3)
resource-agent各种资源的ocf脚本,这些脚本将被LRM调用从而实现各种资源启动、停止、监控等;

对node1、node2的主机名进行相应的修改
在node1上
 hostname node1.a.org
在node2上 
 hostname node2.a.org

In post-2.1.4 releases, Linux-HA code is packaged in three different
sub-projects:
  * Heartbeat:
  * Cluster Glue:
  * Resource Agents:

 3、只有我们要多次在连个节点间拷贝文件,为了省去繁琐的密码输入,我们在两个节点上进行如下配置

Pacemaker supports three types of Resource Agents:
  * LSB Resource
Agents:
  * OCF Resource
Agents:
  * legacy Heartbeat Resource Agents:

在node1上
ssh-keygen -t rsa
ssh-copy-id -i .ssh/id_rsa.pub root@192.168.0.204
在node2上
ssh-keygen -t rsa
ssh-copy-id -i .ssh/id_rsa.pub root@192.168.0.202
从此我们在两个节点上拷贝文件就不需要输入密码了

Mercurial Repositories:

ca88手机登录 10

################################################################################
RHEL6/CentOS6 (Heartbeat3: heartbeat + cluster-glue + resouce-agent)
################################################################################
REF:

# rpm -Uvh

# yum search heartbeat;
# yum install heartbeat;

 

────────────────────────────────────────────────────────────────────────────────
Install ldirectord:
────────────────────────────────────────────────────────────────────────────────
nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
Note: RHEL6 only added ldirectord to RHN Satellite server in a separate
channel.
uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

ldirector (Linux Director Daemon) is a background process computer
program used
to monitor and administer real servers in the Linux Virtual Server (LVS)
cluster.

********************************************************************************
Download: (Need non-free support
login )
********************************************************************************
wget

wget

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

# vi /etc/yum.repos.d/slinux.repo;#(same as centos6, not include

ldirectord)

[scientific-linux]
name=Scientific Linux
#baseurl=
baseurl=

enabled=0

Note: this is not working, here is only for recoding the
RedHat dirty things !

# yum install gcc autoconf automake glib2-devel;
# yum install heartbeat resource-agents cluster-glue-libs-devel;
# yum install perl-Socket6 perl-libwww-perl perl-IO-Socket-INET6
perl-MailTools;
# yum install docbook-*;

Download the resource-agents:
# wget
\
   -O ClusterLabs-resource-agents-v3.9.3-47-g0bf8af1.zip
# unzip ClusterLabs-resource-agents-v3.9.3-47-g0bf8af1.zip
# cd ClusterLabs-resource-agents-v3.9.3-47-g0bf8af1/;

OR you can download with git tools:
# yum install git;
# git clone git://github.com/ClusterLabs/resource-agents
# cd resource-agents/

# ./autogen.sh
# ./configure –hlep

# ./configure –prefix=/usr –sysconfdir=/etc –localstatedir=/var

resource-agents configuration:
  Version                  = 3.9.3.47-0bf8a
  Build Version            = :%H$
  Features                 =
  Prefix                   = /usr
  Executables              = /usr/sbin
  Man pages                = /usr/share/man
  Libraries                = /usr/lib
  Header files             = /usr/include
  Arch-independent files   = /usr/share
  Documentation            = /usr/share/doc/resource-agents
  State information        = /var
  System configuration     = /etc
  RA state files           = /var/run/resource-agents
  AIS Plugins              =
  Libraries                =  -lglib-2.0

  Stack Libraries          =

# make

# cp ldirectord/ldirectord /usr/sbin/
# cp ldirectord/init.d/ldirectord /etc/init.d/
# chmod 755 /usr/sbin/ldirectord
# chmod 755 /etc/init.d/ldirectord

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

# vi /etc/ha.d/ldirectord.cf;

checktimeout=3
checkinterval=1
logfile = “/var/log/ldirectord.log”
autoreload=yes
#quiescent=yes
quiescent=no
virtual=192.168.57.200:80
real=192.168.57.100:80 gate
real=192.168.58.100:80 gate
#real=192.168.57.100:80 masq
#real=192.168.58.100:80 masq
#real=192.168.57.100:80 ipip
#real=192.168.58.100:80 ipip
 fallback=127.0.0.1:80 gate
service=http
request=”healthcheck.html”
receive=”OK”
virtualhost=www.testing.net
scheduler=rr
#scheduler=wrr
#scheduler=wlc
persistent=600
#netmask=255.255.255.255
protocol=tcp
  checktype=negotiate

  checkport=80

参数说明:
gatesame as ipvsadm-gLVS/DR
ipipsame as ipvsadm-iLVS/TUN
masqsame as ipvsadm-mLVS/NAT

# vi /etc/rc.local;

/sbin/ifconfig lo:0 192.168.57.200 netmask 255.255.255.255 broadcast
192.168.57.255 up
/sbin/route add -host 192.168.57.200 dev lo:0
echo 0 > /proc/sys/net/ipv4/ip_forward
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

 

────────────────────────────────────────────────────────────────────────────────
Configurate heartbeat(for DR fail-over)
────────────────────────────────────────────────────────────────────────────────
# cp /usr/share/doc/heartbeat-3.0.4/ha.cf /etc/ha.d/
# cp /usr/share/doc/heartbeat-3.0.4/authkeys /etc/ha.d/

# dd if=/dev/urandom bs=512 count=1 | openssl md5

# vi /etc/ha.d/authkeys;#(Same on both DR servers);

auth 1

1 sha1 46b61a7f417d395c712d9ecf30665aaf

# chmod 600 /etc/ha.d//authkeys;

# vi /etc/init.d/startvip;#(Same on both DR servers);

#!/bin/bash
VIP=192.168.57.200
case $1 in
start)
    IP=`/sbin/ifconfig lo:0 | grep $VIP`
    if [ ! -z “$IP” ] ; then
      /sbin/ifconfig lo:0 down
    fi
    /sbin/ifconfig eth0:0 $VIP netmask 255.255.255.255 broadcast
192.168.57.255 up
    /sbin/arping -q -c 1 -w 1 -I eth0 $VIP ;  echo “”
    ;;
stop)
    IP=`/sbin/ifconfig eth0:0 | grep $VIP`
    if [ ! -z “$IP” ] ; then
      /sbin/ifconfig eth0:0 down
    fi
    echo 0 > /proc/sys/net/ipv4/ip_forward
    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
    /sbin/ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast
192.168.57.255 up
    /sbin/route add -host $VIP dev lo:0
    ;;
status)
    /sbin/ifconfig eth0:0
    ;;
*)
    echo “Syntax incorrect. You need one of {start|stop|status}”
    ;;

esac

chmod 755 /etc/init.d/startvip;

 

关于 apring 命令的说明:

/sbin/arping -q -c 1 -w 1 -I eth0 $VIP ;  echo “”

如前所述,这行命令用于通知本地网络更新arp地址,因为在shell环境这个命令总是返回
大于0的结果,导致heartbeat误认为服务失败,所以我在此命令后跟了个echo命令以消除其
返回数值。请注意,使用 arping
命令不保证一定能够更新您的网络环境中的所有arp缓存
记录,在实用中请对照您的网络设备(路由器)的手册调整相关设置。

 

 

********************************************************************************
注意:在此案例中请不要使用Heartbeat资源所自带的IPAddr脚本来启动虚拟IP地址,因为
本案例设计架构所使用的本地 lo:0 含有与 eth0:0 相同的VIP地址,因此 IPAddr
脚本可
能会报错并会拒绝启动相关资源。
********************************************************************************

# vi /etc/ha.d/haresources;#(Same on both DR servers);

centos6-ocfs2-1 startvip ldirectord

Note:
这里不需要加入ipvsadm服务,因为现在ipvsadm服务改由ldirectord服务负责启动。

DR1# vi /etc/ha.d/ha.cf;#(on DR centos6-ocfs2-1);

debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility local0
bcast eth0
ucast eth0 192.168.57.102
keepalive 2
auto_failback on
node centos6-ocfs2-1

node centos6-ocfs2-2

Note: 这里的IP地址是对端node主机的IP地址。

DR2# vi /etc/ha.d/ha.cf;#(on DR centos6-ocfs2-2);

debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility local0
bcast eth0
ucast eth0 192.168.57.101
keepalive 2
auto_failback on
node centos6-ocfs2-1

node centos6-ocfs2-2

Note: 这里的IP地址是对端node主机的IP地址。

 

设置并启动服务:

# chkconfig –list ipvsadm;
# chkconfig ipvsadm off;
# chkconfig ldirectord off;
# chkconfig heartbeat on;

注意:在这里,Centos
只需要启动heartbeat,然后由heartbeat负责启动ldirectord服务,
再由ldirectord服务启动并管理ipvsadm服务。

最后,分别在 RS1 和 RS2 主机启动 heartbeat 服务:

RS1# service heartbeat start;
RS2# service heartbeat start;

观察启动结果:
# service ldirectord status;
# service ipvsadm status;
# ip addr show;

ca88手机登录 11

发表评论

电子邮件地址不会被公开。 必填项已用*标注