[root@Node1 ~]# yum install httpd –y
[root@Node1 ~]# echo "Node1" >/var/www/html/index.html
[root@Node2 ~]# yum install httpd –y
[root@Node2 ~]# echo "Node2" >/var/www/html/index.html
在各节点手动启动httpd服务,并确认其可以正常提供服务,而后停止服务并关闭开机自启
[root@Node1 ~]# chkconfig httpd off
[root@Node1 ~]# chkconfig --list httpd
httpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
[root@Node2 ~]# chkconfig httpd off
[root@Node2 ~]# chkconfig --list httpd
httpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
2.2 安装corosync:
注意,以下所有安装都是需要在所有节点上执行的。
2.2.1 安装依赖:
[root@Node1 ~]# yum install libibverbs librdmacm lm_sensors libtool-ltdl openhpi-libs openhpi perl-TimeDate
[root@Node2 ~]# yum install libibverbs librdmacm lm_sensors libtool-ltdl openhpi-libs openhpi perl-TimeDate
2.2.2 安装集群组件:
[root@Node1 ~]# yum install corosync pacemaker
[root@Node2 ~]# yum install corosync pacemaker
2.2.3 安装crmsh实现资源管理:
从pacemaker 1.1.8开始,crm发展成为一个独立项目crmsh。也就是说安装了pacemaker后,并没有crm这个命令,要实现对集群资源管理,还需要独立安装crmsh,crmsh依赖于pssh。
特别注意:
使用了crmsh,就不在需要安装heartbeat,之前的版本中都需要安装heartbeat以利用其crm进行资源管理。
网上教程大多数都是下载crmsh的rpm包安装,但是实验���程中依赖关系始终无法解决,本文最终使用源码编译安装,安装前确保准备好开发环境
下载以下2个安装包
http://download.savannah.gnu.org/releases/crmsh/
首先编译安装pssh
接着解压crmsh包
根据README文档可知安装步骤
./configure报错:没有发现头文件,去crmsh官网查阅资料
可知下载cluster-glue-libs-devel和cluster-glue-libs-devel即可(本文实验系统为centos6.4_64位,两个devel包挂载本地光盘yum安装)
./configure成功
接下来
测试成功,crmsh安装完毕
Node1上执行相同操作
[root@Node1 ~]# tar xf pssh-2.3.1.tar.gz -C /usr/src
[root@Node1 ~]# cd /usr/src/pssh-2.3.1/
[root@Node1 pssh-2.3.1]# vim INSTALL
[root@Node1 pssh-2.3.1]# python setup.py install
[root@Node1 ~]# tar xf crmsh-1.2.6.tar.bz2 -C /usr/src/
[root@Node1 ~]# cd /usr/src/crmsh-crmsh-1.2.6/
[root@Node1 crmsh-crmsh-1.2.6]# ./autogen.sh
[root@Node1 crmsh-crmsh-1.2.6]# yum install cluster-glue-libs-devel pacemaker-libs-devel
[root@Node1 crmsh-crmsh-1.2.6]# ./configure
[root@Node1 crmsh-crmsh-1.2.6]# make
[root@Node1 crmsh-crmsh-1.2.6]# make install
[root@Node1 crmsh-crmsh-1.2.6]# mkdir /var/lib/pacemaker/cores/root
2.3 配置corosync:
2.3.1 主配置文件:
# Please read the corosync.conf.5 manual page
compatibility: whitetank ##这个表示是否兼容0.8之前的版本
totem { ##图腾用来定义集群中各节点中是怎么通信的以及参数
version: 2 ##版本号,只能是2,不能修改
secauth: on ##安全认证,当使用aisexec时,会非常消耗CPU
threads: 2 ##实现认证时的并行线程数,根据CPU个数和核心数确定
interface { ##指定发送心跳信息的接口,是个子模块
ringnumber: 0 ##冗余环号,集群中有多个节点,每个节点上有多个网卡,信息传送时,其它节点可以接收,
##同时本机的另一块网卡也可以接收,为了避免心跳信息的环状发送,因此要为这个网卡定义一个唯一的环号码,可定义对应网卡在一个环内
bindnetaddr: 10.33.0.0 ##绑定心跳网段 ,这里设定两个节点所在的网络地址
mcastaddr: 226.99.12.17 ##心跳组播地址,一对多通信
mcastport: 5405 ##心跳组播使用端口
ttl: 1 ##表示只向外播一次
}
}
logging {
fileline: off ##指定要打印的行
to_stderr: no ##是否发送到标准错误输出
to_logfile: yes ##记录到文件
to_syslog: no ##记录到syslog
logfile: /var/log/cluster/corosync.log ##日志文件路径
debug: off ##是否启动调试
timestamp: on ##是否打印时间戳,利于定位错误,但会消耗CPU
logger_subsys { ##日志的子系统
subsys: AMF
debug: off
}
}
service { ##定义启动pacemaker的服务
ver: 0 ##定义版本
name: pacemaker ##定义启动时corosync同时启动pacemaker
}
amf { ##跟编程接口相关的
mode: disabled
}
aisexec { ##表示启动ais的功能时以哪个用户的身份去运行的
user: root
group: root
##其实这个块定义不定义都可以,corosync默认就是以root身份去运行的
}
补充知识:
多播地址(multicast address)即组播地址,是一组主机的标示符,它已经加入到一个多播组中。在以太网中,多播地址是一个48位的标示符,命名了一组应该在这个网络中应用接收到一个分组的站点。在IPv4中,它历史上被叫做D类地址,一种类型的IP地址,它的范围从224.0.0.0到239.255.255.255,或,等同的,在224.0.0.0/4。在IPv6,多播地址都有前缀ff00::/8。
多播是第一个字节的最低位为1的所有地址,例如01-12-0f-00-00-02。广播地址是全1的48位地址,也属于多播地址。但是广播又是多播中的特例,就像是正方形属于长方形,但是正方形有长方形没有的特点。
2.3.2 生成认证key:
使用corosync-keygen生成key时,由于要使用/dev/random生成随机数,因此如果新装的系统操作不多,如果没有足够的熵
(关于random使用键盘敲击产生随机数的原理可自行google),可能会出现如下提示:
此时一直狂敲键盘,直到出现下图中红色标记内容
生成密钥文件
2.3.3 拷贝配置文件与密钥问价至节点2:
2.3.4 启动corosync
2.3.5 检查启动情况:
(1)查看corosync引擎是否正常启动:
(2)查看初始化成员节点通知是否正常发出:
(3)检查启动过程中是否有错误产生:
(4)查看pacemaker是否正常启动:
(5)查看集群节点状态
可能存在的问题:iptables没有配置相关策略,导致两个节点无法通信。可关闭iptables或配置节点间的通信策略。
三、集群资源管理
3.1 crmsh基本介绍
[root@node1 ~]# crm <--进入crmsh
crm(live)# help ##查看帮助
This is crm shell, a Pacemaker command line interface.
Available commands:
cib manage shadow CIBs ##CIB管理模块
resource resources management ##资源管理模块
configure CRM cluster configuration ##CRM配置,包含资源粘性、资源类型、资源约束等
node nodes management ##节点管理
options user preferences ##用户偏好
history CRM cluster history ##CRM历史
site Geo-cluster support ##地理集群支持
ra resource agents information center ##资源代理配置
status show cluster status ##查看集群状态
help,? show help (help topics for list of topics) ##查看帮助
end,cd,up go back one level ##返回上一级
quit,bye,exit exit the program ##退出
crm(live)# configure <--进入配置模式
crm(live)configure# property ##切换到property目录下,可以用两次tab键进行补全和查看
usage: property [$id=<set_id>] <option>=<value> ##property的用法和格式
crm(live)configure# verify ##检查设置的属性是否正确
crm(live)configure# commit ##检查没问题就可以提交了
crm(live)configure# show ##查看当前集群的所有配置信息
(1)查看一下默认配置
(2)检查当前配置语法
禁用stonith后再次检查配置,无报错
crm(live)# ra <--进入RA(资源代理配置)模式
crm(live)ra# help
This level contains commands which show various information about
the installed resource agents. It is available both at the top
level and at the `configure` level.
Available commands:
classes list classes and providers ##查看RA类型
list list RA for a class (and provider) ##查看指定类型(或提供商)的RA
meta,info show meta data for a RA ##查看RA详细信息
providers show providers for a RA and a class ##查看指定资源的提供商和类型
(3)查看当前集群系统所支持的类型
(4)查看某种类别下的所用资源代理的列表
(5)查看某个资源代理的配置方法
crm(live)ra# info ocf:heartbeat:IPaddr
Manages virtual IPv4 addresses (portable version) (ocf:heartbeat:IPaddr)
This script manages IP alias IP addresses
It can add an IP alias, or remove one.
Parameters (* denotes required, [] the default):
ip* (string): IPv4 address
The IPv4 address to be configured in dotted quad notation, for example
"192.168.1.1".
(6)查看集群状态
3.2 法定票数问题
在双节点集群中,由于票数是偶数,当心跳出现问题【脑裂】时,两个节点都将达不到法定票数,默认quorum策略会关闭集群服务,为了避免这种情况,可以增加票数为奇数(增加ping节点),或者调整默认quorum策略为【ignore】
property
Set the cluster (crm_config) options.
Usage:
property [$id=<set_id>] <option>=<value> [<option>=<value> ...]
3.3 防止资源在节点恢复后移动
故障发生时,资源会迁移到正常节点上,但当故障节点恢复后,资源可能再次回到原来节点,这在有些情况下并非是最好的策略,因为资源的迁移是有停机时间的,资源在节点间每一次的来回流动都会造成那段时间内节点提供的服务无法被正常访问,特别是一些复杂的应用,如MySQL数据库,其停机时间会更长。为了避免这种情况,可以根据需要,使用本文1.3(3)介绍的资源粘性策略
rsc_defaults
Set defaults for the resource meta attributes.
Usage:
rsc_defaults [$id=<set_id>] <option>=<value> [<option>=<value> ...]
Example:
rsc_defaults failure-timeout=3m