Chinaunix首页 | 论坛 | 博客
  • 博客访问: 114264
  • 博文数量: 42
  • 博客积分: 932
  • 博客等级: 准尉
  • 技术积分: 470
  • 用 户 组: 普通用户
  • 注册时间: 2011-07-18 22:33
文章分类
文章存档

2011年(42)

分类: LINUX

2011-09-15 16:07:51

  Corosync+Pacemaker这种提供高可用集群服务的解决方案正在成为一种流行的趋势,今天就通过一个简单的实验来介绍下Corosync+Pacemaker的简单配置!
  Conrosync是从Openais这个大项目中分支出来的一个项目,而Pacemaker是heartbeat v3版本中分裂出来专门用于提供高可用集群CRM的组件,功能十分强大有关这方面的介绍大家可以去网上找些资料来看看,这里就不罗嗦了来看下今天这个实验的配置过程!
以双节点为例进行介绍:
规划:提供高可用的web服务 VIP:192.168.0.60  node1 192.168.0.44 node2 192.168.0.15
Corosync组件以rpm包的方式进行安装,因此要配好yum源
要求:两个节点可以通过用户名通信(不借助DNS解析高可用集群服务应避免构筑于其他服务之上防止由于其他服务器的故障带来不必要的损失),双方可以以root用户的身份无密码通信。
根据以上要求进行环境配置:仅以一个节点为例
不依赖于DNS服务 配置/etc/hosts文件
# vim /etc/hsots
192.168.0.44    node1.a.org  node1
192.168.0.15    node2.a.org  node2
配置网络属性 静态地址
# vim /etc/sysconfig/network-scripts/ifcfg_eth0
BOOTPROTO=static
IPADDR=192.168.0.44
NETMASK=255.255.255.0
配置主机名:
# vim /etc/sysconfig/network
HOSTNAME=node1.a.org
# hostname node1.a.org
保证两节点无障碍通信
# ssh-keygen -t rsa
# ssh-copy-id -i .ssh/id_rsa.pub root@node2.a.org
配置yum源
# vim /etc/yum.repo.d/server.repo
 
这些都比较简单了另外一台主机以此为例进行相同的配置即可,如果有人和我一样是以虚拟机的环境做这个实验的话,建议配置完成后保存快照,以免下面出错的时候又要从头开始配置!
接下来就是正式安装配置 Corosync+Pacemaker:
所用的到rpm包:
libibverbs, librdmacm, lm_sensors, libtool-ltdl, openhpi-libs, openhpi, perl-TimeDate
下载地址:
将软件包都存放在专用的目录中这里以/root/corosync为例:
 
我的主机名已经改过了 不过没有登出所以显示的可能不对!
 
安装配置corosync:
# cd corosync
用yum安装自动解决依赖关系
# yum localhostall * --nogpgcheck -y
修改corosync提供的配置文件样例作为我们自己的配置文件使用
# cp /etc/corosync/corosync.conf.example /etc/corosync/corocsync.conf
# vim /etc/corosync.conf
bindnetadddr:192.168.0.0
添加以下内容:启动pacemaker
service {
 ver: 0
 name: pacemaker
}
ai***ec {
 user: root
 group: root
}
建立日志文件的目录(在配置文件中logfile的目录要自己创建)
# mkdir -pv /var/log/cluster
生成authkey认证秘钥(不是文本文件不能直接打开查看)
# corosync-keygen
# scp -p authkey corosync.conf node2:/etc/corosync
# ssh node2 'mkdir -pv /var/log/cluster'
同步两个节点的时间
# hwclock -s
# ssh node2 'hwclock -s'
# service corosync start
验证过程,不要省略!
查看corosync引擎是否正常启动:
# grep -e "Corosync Cluster Engine" -e "configuration file" /var/log/messages
Jun 14 19:02:08 node1 corosync[5103]:   [MAIN  ] Corosync Cluster Engine ('1.2.7'): started and ready to provide service.
Jun 14 19:02:08 node1 corosync[5103]:   [MAIN  ] Successfully read main configuration file '/etc/corosync/corosync.conf'.
Jun 14 19:02:08 node1 corosync[5103]:   [MAIN  ] Corosync Cluster Engine exiting with status 8 at main.c:1397.
Jun 14 19:03:49 node1 corosync[5120]:   [MAIN  ] Corosync Cluster Engine ('1.2.7'): started and ready to provide service.
Jun 14 19:03:49 node1 corosync[5120]:   [MAIN  ] Successfully read main configuration file '/etc/corosync/corosync.conf'.
查看初始化成员节点通知是否正常发出:
# grep  TOTEM  /var/log/messages
Jun 14 19:03:49 node1 corosync[5120]:   [TOTEM ] Initializing transport (UDP/IP).
Jun 14 19:03:49 node1 corosync[5120]:   [TOTEM ] Initializing transmit/receive security: libtomcrypt SOBER128/SHA1HMAC (mode 0).
Jun 14 19:03:50 node1 corosync[5120]:   [TOTEM ] The network interface [192.168.0.5] is now up.
Jun 14 19:03:50 node1 corosync[5120]:   [TOTEM ] A processor joined or left the membership and a new membership was formed.
检查启动过程中是否有错误产生:
# grep ERROR: /var/log/messages | grep -v unpack_resources
查看pacemaker是否正常启动:
# grep pcmk_startup /var/log/messages
Jun 14 19:03:50 node1 corosync[5120]:   [pcmk  ] info: pcmk_startup: CRM: Initialized
Jun 14 19:03:50 node1 corosync[5120]:   [pcmk  ] Logging: Initialized pcmk_startup
Jun 14 19:03:50 node1 corosync[5120]:   [pcmk  ] info: pcmk_startup: Maximum core file size is: 4294967295
Jun 14 19:03:50 node1 corosync[5120]:   [pcmk  ] info: pcmk_startup: Service: 9
Jun 14 19:03:50 node1 corosync[5120]:   [pcmk  ] info: pcmk_startup: Local hostname: node1.a.org
如果上面命令执行均没有问题,接着可以执行如下命令启动node2上的corosync
# ssh node2 -- /etc/init.d/corosync start
# crm status  可以查看当前节点的工作状态
可以看到Online:[ node1.a.org node2.a.org ],说明两个节点都已经正常启动在线了!
上面还可以看到我定义了两个资源 WebIP,WebServer下面就看看如何定义资源提供高可用的Web服务!为了演示效果,故意将两个节点上的Web页面设置的不同。
node1:
# yum install httpd
# chkconfig httpd off
# echo "Welcome to node1.a.org" > /var/www/html/index.html
node2:
# yum install httpd
# chkconfig httpd off
# echo "Welcome to node2.a.org!This is not node1" > /var/www/html/index.html
corosync默认启用了stonith,而当前集群并没有相应的stonith设备,配置集群的工作属性,禁用stonith
ps:稍后会介绍DRBD,通过DRBD提供双节点的文件共享存储解决方案!
# crm configure property stonith-enabled=false
双节点集群应该忽略quorum机制
# crm configure property no-quorum-policy=ignore
配置资源属性
# crm
# configure # primitive WebIP ocf:haertbeat:IPaddr params ip=192.168.0.60
# crm
# configure
# primitive WebServer lsb:httpd
# commit
# show
# configure
# help group
# group WebService WebIP WebServer
# commit
# show
# status
定义资源粘性的默认粘性值为100 :
# crm configure rsc_defaults resource-stickiness=100
可能以上命令的提示符有误,由于是手动打的所以还请见谅!基本配置已经完成了!可以启动服务进行验证了!
node2:
# ssh node1 "/etc/init.d/corosync stop"
# ssh node1 "/etc/init.d/corosync start"
node1:
# ssh node2 "/etc/init.d/corosync stop"
# ssh node2 "/etc/init.d/corosync start"
查看节点的工作状态:
# crm status 此处就不截图了 因为我的是完全配置好的可能比以上的配置多点儿其他的东西!
用自己的物理机进行测试,或者用elinks命令测试即可!
# elinks
 
在node2上关闭node1的corosync模拟故障看是否能提供高可用服务!注意这里为演示效果才将两者的页面设置的不一样的,在实际生产环境中要通过某种共享存储的机制,来提供相同的web服务,或根据自己需求设置!
node2:
# ssh node1 "/etc/init.d/corosync stop"
# crm status
 
 
ps:主机名的问题请忽视,这是因为配置完成后我没用登出!
# elinks
 
 
通过以上的测试说明我们的配置已经成功了!
简单的扩展下对crm命令的使用,有时间的话会对Corosync的配置工具和管理相关的命令做下总结这里先对crm命令的使用做下简单的介绍以方便在做实验的时候使用!
此命令可以在命令行直接使用将其子命令作为选项在shell命令行直接使用,也可以通过crm命令进入类似于我们路由器的命令行模式,进入crm# 提示符后其实功能十分强大,可以通过help命令查看支持的子命令,还支持tab键的命令补全功能,如我们在上面使用过的几个命令
# crm configure property stonith-enabled=false
# crm
# configure # primitive WebIP ocf:haertbeat:IPaddr params ip=192.168.0.60
要说明的一点是,在shell命令行模式下直接使用如:# crm configure property stonith-enabled=false
这样的命令时,是直接生效的。而进入crm#这种模式,要想使配置生效则要明确commit提交后才会生效!
这个命令具体的使用方法等以后总结的时候再详细解释吧!大家在使用的过程中,要善于使用help来查看支持的子命令和tab键来补全命令,当然也可以参考其他资料来使用!今天的配置就暂时介绍到这里!定义约束信息的部分大家也尝试下吧!这里就不做具体的介绍了...如位置约束 location ,启动次序约束等等!
详细的解释会在对Corosync的管理相关命令和工具的时候介绍!这里大家先体验下corosync吧!比较下与heartbeat的差别!

 
阅读(3037) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~