- 1 本实验有两个接点node1.a.rog node2.a.org 相对应的ip分别是
- 192.168.0.21 192.168.0.22
- 2 集群的服务时apache 的httpd服务
- 3 提供web服务的地址为192.168.0.100
1 配置ip (两节点都需配置,以节点一为例) |
- Vim /etc/sysconfig/network-scripts/ifcfg-eth0
- DEVICE=eth0
- BOOTPROTO=static
- IPADDR=192.168.0.21
- NETMASK=255.255.255.0
- ONBOOT=yes
- HWADDR=00:0c:29:a2:fa:bb
2 所有节点的主机名称和对应的IP地址解析服务可以正常工作,且每个节点的主机名称需要跟"uname -n“命令的结果保持一致;因此,需要保证两个节点上的/etc/hosts文件均为下面的内容:#############分别在两节点上进行 |
- 192.168.0.21 node1.a.org node1
- 192.168.0.22 node2.a.org node2
3 配置主机名,使其与使用" uname –n" 显示的一致,分别在各节点执行如下的命令,使其生效
Hostname node1.a.org
|
- Vim /etc/ sysconfig/network
- NETWORKING=yes
- NETWORKING_IPV6=no
- HOSTNAME=node1.a.com
4 设定两节点间可以基于密钥进行ssh通信,并且可以不用密码以root身份互相访问 |
- Node1:
- ssh-keygen -t rsa
- ssh-copy-id -i ~/.ssh/id_rsa.pub root@node2
- Node2:
- ssh-keygen -t rsa
- ssh-copy-id -i ~/.ssh/id_rsa.pub root@node1
5 下载安装软件,安装所需的软件包有:
|
- cluster-glue-1.0.6-1.6.el5.i386.rpm libesmtp-1.0.4-5.el5.i386.rpm
- cluster-glue-libs-1.0.6-1.6.el5.i386.rpm openais-1.1.3-1.6.el5.i386.rpm
- corosync-1.2.7-1.1.el5.i386.rpm openaislib-1.1.3-1.6.el5.i386.rpm
- corosynclib-1.2.7-1.1.el5.i386.rpm pacemaker-1.0.11-1.2.el5.i386.rpm
- heartbeat-3.0.3-2.3.el5.i386.rpm perl-TimeDate-1.16-5.el5.noarch.rpm
- heartbeat-libs-3.0.3-2.3.el5.i386.rpm resource-agents-1.0.4-1.1.el5.i386.rpm
- pacemaker-libs-1.0.11-1.2.el5.i386.rpm
- Cd /root/cluster
- yum -y --nogpgcheck localinstall *.rpm
配置corosync 。以下命令在node1.a.rog上执行 |
- cd /etc/corosync
- cp corosync.conf.example corosync.conf
- # Please read the corosync.conf.5 manual page
- compatibility: whitetank
- totem { ##定义多个node节点之间实现心跳信息传递的相关协议详细信息
- version: 2
- secauth: off ##是否打开安全认证
- threads: 0
- interface {
- ringnumber: 0
- bindnetaddr: 192.168.0.0 ##通过哪个网段进行通信
- mcastaddr: 226.94.1.1 ##多播地址
- mcastport: 5405 ##多播端口
- }
- }
- logging {
- fileline: off
- to_stderr: no ##是否将错误信息发送到标准错误输出
- to_logfile: yes ##是否写入日志文件
- to_syslog: yes ##是否写到系统日志进程上去
- logfile: /var/log/cluster/corosync.log ##需要手动去建立这个路径
- debug: off
- timestamp: on
- logger_subsys {
- subsys: AMF
- debug: off
- }
- }
- amf {
- mode: disabled
- }
- service {
- ver:0
- name:pacemaker ##表明我们要启动pacemaker
- }
- aisexec {
- user:root ##定义启动的身份和组
- group:root
- }
6 生成节点间通信时用到的认证密钥文件
|
- corosync-keygen ###在/etc/corosync下生成authkey文件
- scp -p corosync authkey node2:/etc/corosync/
- mkdir /var/log/cluster ##创建corosync生成的日志文件所在的目录
- ssh node2 'mkdir /var/log/cluster' ##在node1上使用ssl为node2创建目录
7 启动corosync |
- /etc/init.d/corosync start
在node1上验证corosync配置的正确性,如下所示,证明我们corosync的配置过程没有问题 |
- 在node1上查看corsync引擎是否正常启动:
- grep -e "Corosync Cluster Engine" -e "configuration file" /var/log/messages
- 查看初始化成员节点通知是否正常发出:
- grep TOTEM /var/log/messages
- 检查启动过程中是否有错误产生:
- grep ERROR: /var/log/messages | grep -v unpack_resources
- 查看pacemaker是否正常启动:
- grep pcmk_startup /var/log/messages
启动node2的corosync |
- ssh node2 ‘/etc/init.d/corosync start’
node2 启动后,node1和node2就形成了群节点,使用下面的命令可以查看群节点的启动状态 |
- #crm status
- ============
- Last updated: Tue Jun 14 19:07:06 2011
- Stack: openais
- Current DC: node1.a.org - partition with quorum
- Version: 1.0.11-1554a83db0d3c3e546cfd3aaff6af1184f79ee87
- 2 Nodes configured, 2 expected votes
- 0 Resources configured.
- ============
- Online: [ node1.a.org node2.a.org ]
8 配置集群的工作属性:
由于corosync默认启用了stonith,而当前集群没有相应的stonith设备,所以这个默认配置目前上不可用,我们可以通过一个检查语法或者逻辑错误的命令来验证,如出现以下信息说明有错误,因此我们就要禁用stonith来避免这种错误
|
- # crm_verify –L
- crm_verify[5202]: 2011/06/14_19:10:38 ERROR: unpack_resources: Resource start-up disabled since no STONITH resources have been defined
- crm_verify[5202]: 2011/06/14_19:10:38 ERROR: unpack_resources: Either configure some or disable STONITH with the stonith-enabled option
- crm_verify[5202]: 2011/06/14_19:10:38 ERROR: unpack_resources: NOTE: Clusters with shared data need STONITH to ensure data integrity Errors found during check: config not valid -V may provide more details
- # crm configure property stonith-enabled=false
- # commit #########提交会立即生效
禁用stonith后我们可以查看下当前的配置信息
|
- # crm configure show
- node node1.a.org
- node node2.a.org
- property $id="cib-bootstrap-options"
- dc-version="1.0.111554a83db0d3c3e546cfd3aaff6af1184f79ee87"
- cluster-infrastructure="openais"
- expected-quorum-votes="2"
- stonith-enabled="false
9 下面就是为机群添加资源了 |
- # crm configure primitive WebIP ocf:heartbeat:IPaddr params ip=192.168.0.100 ##为web集群创建一个ip地址源,能够在通过集群提供web服务时使用
- # crm status ##通过这个命令可以看出ip资源已经在node1.a.org上启动
- ============
- Last updated: Tue Jun 14 19:31:05 2011
- Stack: openais
- Current DC: node1.a.org - partition with quorum
- Version: 1.0.11-1554a83db0d3c3e546cfd3aaff6af1184f79ee87
- 2 Nodes configured, 2 expected votes
- 1 Resources configured.
- ============
- Online: [ node1.a.org node2.a.org ]
- WebIP (ocf::heartbeat:IPaddr): Started node1.a.org ####ip资源已在node1上启用 ,当然也可以在node1 上执行ifconfig命令,eth0的别名的ip
在node2上停止node1的corosync服务会 |
- # ssh node1 ‘/etc/init.d/corosync stop’
- # crm status 再次查看集群的工作状态
- ============
- Last updated: Tue Jun 14 19:37:23 2011
- Stack: openais
- Current DC: node2.a.org - partition WITHOUT quorum
- Version: 1.0.11-1554a83db0d3c3e546cfd3aaff6af1184f79ee87
- 2 Nodes configured, 2 expected votes
- 1 Resources configured.
- ============
- Online: [ node2.a.org ]
- OFFLINE: [ node1.a.org ]
通过上面的信息我们发现node1.a.org已经离线,但是Webip的资源却没有在node2.a.org上启动,因为这时候的集群状态是“without quorum",没有了quorum,node2就不能接管资源,集群就不能正常运行了。我们可以同过下面的命令忽略quorum不能满足集群状态的检查 |
- # crm configure property no-quorum-policy=ignore
- # crm configure rsc_defaults resource-stickiness=100#############
- 将Webip资源的黏性值设为100,这样可以使当node1出现故障时,资源流转到node2上,
- 当node1又恢复正常时,资源不会再流回到node1,避免了资源在流动过程中造成的无法正常访问,
- 保证了集群的高可用性
10 结合上面已经配置好的ip地址资源,将此集群配置成为一个active/passive模型的web(httpd)服务集群 |
1)在每个节点上安装httpd,并在每个节点上添加网页文件 |
- node1:
- Yum install -y httpd
- echo "<h1>Node1.a.org</h1>" > /var/www/html/index.html
- node2:
- echo "<h1>Node2.a.org</h1>" > /var/www/html/index.html
- chkconfig httpd off #######开机不会自动启动httpd
2) 新建资源 WebSite |
- # crm configure primitive Webserver lsb:httpd
- # crm configure commit #######提交生效
- # crm configure show ############ 显示资源的信息状态
- # crm status ##########可以看出新建的资源在node2上启动,这是集群尽量负载均衡资源的
3)把这两个资源在同一接点上运行有两种方法:
1把这两种资源配置组
2将两个资源定义成约束(排列,次序)
下面我们将这两种资源定义成组
|
- #crm configure group Web WebIP Webserver #############其中Web是组名
- # crm configure commit
- # crm configure show
- 这样就将WebIP Webserver 添加到组Web中了。使他们在同一个接点上运行了。
- 这时,我们再查看下资源的运行 状态
- # crm status
- 可以看出这两个起源都在node1上运行了
11 验证集群的工作是否正常,在浏览器中输入http://192.168.0.100
|
在node2上关闭node1的corosync,再次在浏览器中输入ip查看显示的网页信息 |
这样就我们就简单实现web服务的高可用了·····