基于Corosync/openais和ldirectord实现LVS(DR)中的Director的高可用

托普图:

基于Corosync/openais和ldirectord实现LVS(DR)中的Director的高可用_ldirectord


1.我这里用到了4台虚拟机,分别是
node1:172.16.133.11
node2:172.16.133.12
rs1:172.16.133.21
rs2:172.16.133.22
2.配置两台Real Server
rs1:安装httpd
 

  1. yum -y install httpd  
  2. vim /var/www/html/index.html  
  3.    <h1>rs1<h1>  
  4. service httpd start  
  5. elinks -dump http://172.16.133.21  

rs2:同rs1,其中/var/www/html/index.html的内容改为<h1>rs2</h1>
测试elinks -dump http://172.16.133.22
3.配置Director
在这之前请确保node1和node2之间的时间相同,或者不能相差太大

后面操作所会用到的包

基于Corosync/openais和ldirectord实现LVS(DR)中的Director的高可用_LVS_02


(1).先使node1和node2主机建立双机互信,为后面实验提供方便
node1:
 

  1. vim /etc/hosts  
  2.     172.16.133.11 node1  
  3.  172.16.133.12 node2  
  4. ssh-keygen -t rsa(一路回车)  
  5. ssh-copy-id .ssh/id_rsa.pub root@node2  
  6. scp /etc/hosts node2:/etc  

node2:
 

  1. ssh-keygen -t rsa  
  2. ssh-copy-id .ssh/id_rsa.pub root@node2  

(2).然后在分别在node1和node2主机上安装ipvsadm,对两台Real Server进行测试
rs1,rs2,ipvsadm测试,heartbeat,ldirectord,ha.cf等配置文件修改同:http://5142926.blog.51cto.com/5132926/954276
这里就不演示了
(3)配置Direcotor
node1:
先将corosync的配置文件copy到/etc/corosync下
cp /etc/corosync/corosync.conf.example /etc/corosync/corosync.conf
修改corosync.conf
 

  1. bindnetaddr: 172.16.133.0  
  2. service {  
  3.        ver: 0  
  4.        name: pacemaker  
  5. }  
  6. aisexec {  
  7.        user: root  
  8.        group: root  
  9. }  

mkdir -v /var/log/cluster    创建日志文件目录
corosync-keygen 生成corosync密钥,它取墒池里的随机数1024位,它不是一个文本文件,权限是400
 

  1. scp /etc/corosync/corosync.conf node2:/etc/corosync  
  2. ssh node2 'mkdir -v /var/log/cluster ' 

然后启动服务
grep -e "Corosync Cluster Engine" -e "configuration file" /var/log/messages

基于Corosync/openais和ldirectord实现LVS(DR)中的Director的高可用_LVS_03


grep TOTEM /var/log/messages

基于Corosync/openais和ldirectord实现LVS(DR)中的Director的高可用_LVS_04


grep ERROR: /var/log/messages | grep -v unpack_resources
grep pcmk_startup /var/log/messages

基于Corosync/openais和ldirectord实现LVS(DR)中的Director的高可用_ldirectord_05


如果以上没问题的话
ssh node2 -- /etc/init.d/corosync start启动node2的corosync
然后通过crm status查看

基于Corosync/openais和ldirectord实现LVS(DR)中的Director的高可用_corosync_06


禁用stonith
crm configure property stonith-enabled=false
关闭quorum
crm configure property no-quorum-policy=ignore
4.配置资源,实现LVS(DR)中的Director的高可用
(1).进入crm的交互式界面,进入后,可以通过输入help可以查看帮助信息
crm

基于Corosync/openais和ldirectord实现LVS(DR)中的Director的高可用_corosync_07


下面主要介绍一下我们经常用到的几项
node  进入节点模式,可以设置节点standby或者online
configure  进制配置模式,在里面可以定义资源和资源的策略
ra   资源代理,在里面可以通过使用list命令来查看可以用到的资源代理,资源代理既服务的启动脚本。

基于Corosync/openais和ldirectord实现LVS(DR)中的Director的高可用_ldirectord_08


classes命令,用于显示资源代理的种类,可以看到有heartbeat lsb osf stonith这些常见的类型

基于Corosync/openais和ldirectord实现LVS(DR)中的Director的高可用_ldirectord_09


list lsb   

基于Corosync/openais和ldirectord实现LVS(DR)中的Director的高可用_LVS_10

可以显示支持的lsb脚本,这些都是/etc/init.d/下面有的启动脚本
meta ocf:heartbeat:IPaddr查看定义IPaddr资源的帮助信息
(2).具体资源配置
定义vip
 

  1. crm  
  2. configure  
  3. primitive webip ocf:heartbeat:IPaddr params ip=172.16.133.1  

完成后show查看下,无误后
commit提交(不提交是不生效的)
cd
status查看资源运行情况

基于Corosync/openais和ldirectord实现LVS(DR)中的Director的高可用_LVS_11


然后ifconfig一下,看看ip

基于Corosync/openais和ldirectord实现LVS(DR)中的Director的高可用_DR_12


定义ldirector
 

  1. crm  
  2. configure  
  3. primitive ldirector lsb:ldirectord  
  4. commit 
  5. cd  

status

基于Corosync/openais和ldirectord实现LVS(DR)中的Director的高可用_ldirectord_13


然后可以看到ldirector运行在了node2节点上
(3).配置资源关系
order 顺序约束
location位置约束
colocation排列约束
可以通过order help(其他一样)来查看约束怎么设置

基于Corosync/openais和ldirectord实现LVS(DR)中的Director的高可用_ldirectord_14


colocation webip_with_ldirector inf: webip ldirector
show查看一下
commit提交
cd
status

基于Corosync/openais和ldirectord实现LVS(DR)中的Director的高可用_ldirectord_15


停掉node2

基于Corosync/openais和ldirectord实现LVS(DR)中的Director的高可用_DR_16


crm
status

基于Corosync/openais和ldirectord实现LVS(DR)中的Director的高可用_DR_17


两个服务都跑到node1上了

在google浏览器中测试http://172.16.133.1

 

基于Corosync/openais和ldirectord实现LVS(DR)中的Director的高可用_heartbeat_18 

 

基于Corosync/openais和ldirectord实现LVS(DR)中的Director的高可用_heartbeat_19