本文档中所讲述的Linux-HA系统安装是基于Pacemaker+Heartbeat+DRBD组合的高可用集群系统。主要用于数据容灾和服务在多个节点间进行热切换,保证服务的高可用性。
本文档撰写的系统安装环境为CentOS6.2X86_64,硬件为VMware7.1(单芯片双核&&双网卡桥接&&双SCSI硬盘20G+15G)。
如果手册在使用过程中遇到任何问题欢迎致信 [email protected] ,进行技术交流。
第一章Linux-HA 安装 1.1 系统安装 1.1.1 系统安装选择操作系统CentOS6.2x86_64,最小化安装。
1.1.2 系统配置1、禁用selinux
配置文件存放位置:/etc/selinux/config
2、设置网卡
此处以双网卡配置为标准配置,配置文件位置:/etc/sysconfig/network-script/ifcfg-ethN
添加:IPADDR=“192.168.20.X” IP地址
NETMASK=“255.255.255.0” 子网掩码
GATEWAY=“192.168.20.1” 添加网关
3、设置DNS
DNS配置文件存储位置:/etc/resolv.conf
内容: nameserver 202.102.128.68
4、设置主机名
配置文件位置:/etc/sysconfig/network
内容: HOSTNAME=hostname1
5、设置主机网络名
配置文件位置:/etc/hosts
添加文件内容: IPADDR1 hostname1
IPADDR2 hostname2
6、重启网络服务
命令:/etc/init.d/network restart 或者 service network restart
(最好重新启动系统)
1.2 软件安装 1.2.1 软件安装1、下载RPM安装包
其中包括15个必须的安装包,以及52个依赖包。可在安装资源文件内找到或到网络下载对应系统的最新版本。
安装包安装文件目录:
cluster-glue-1.0.6-1.fc14.x86_64.rpm
cluster-glue-libs-1.0.6-1.fc14.x86_64.rpm
corosync-1.4.1-4.el6_2.2.x86_64.rpm
corosynclib-1.4.1-4.el6.x86_64.rpm
heartbeat-3.0.4-1.el6.x86_64.rpm
heartbeat-libs-3.0.4-1.el6.x86_64.rpm
ldirectord-3.1.1-1.fc13.x86_64.rpm
libesmtp-1.0.4-6.el5.kb.x86_64.rpm
openais-1.1.1-7.el6.x86_64.rpm
openaislib-1.1.1-7.el6.x86_64.rpm
pacemaker-1.1.6-3.el6.x86_64.rpm
pacemaker-cts-1.1.6-3.el6.x86_64.rpm
pacemaker-libs-1.1.6-3.el6.x86_64.rpm
perl-TimeDate-1.20-1.el6.rfx.noarch.rpm
resource-agents-3.9.2-7.el6.x86_64.rpm
依赖包安装文件目录:
OpenIPMI-libs-2.0.16-12.el6.x86_64.rpm
PyXML-0.8.4-19.el6.x86_64.rpm
cifs-utils-4.8.1-5.el6.x86_64.rpm
clusterlib-3.0.12.1-23.el6_2.1.x86_64.rpm
corosynclib-1.4.1-4.el6_2.2.x86_64.rpm
gnutls-2.8.5-4.el6_2.2.x86_64.rpm
ipvsadm-1.25-9.el6.x86_64.rpm
keyutils-1.4-3.el6.x86_64.rpm
libedit-2.11-4.20080712cvs.1.el6.x86_64.rpm
libevent-1.4.13-1.el6.x86_64.rpm
libgssglue-0.1-11.el6.x86_64.rpm
libibverbs-1.1.5-3.el6.x86_64.rpm
libnet-1.1.2.1-2.2.el6.rf.x86_64.rpm
libnl-1.1-14.el6.x86_64.rpm
librdmacm-1.0.14.1-3.el6.x86_64.rpm
libtalloc-2.0.1-1.1.el6.x86_64.rpm
libtasn1-2.3-3.el6_2.1.x86_64.rpm
libtirpc-0.2.1-5.el6.x86_64.rpm
libtool-ltdl-2.2.6-15.5.el6.x86_64.rpm
libxslt-1.1.26-2.el6.x86_64.rpm
lm_sensors-libs-3.1.1-10.el6.x86_64.rpm
mailcap-2.1.31-2.el6.noarch.rpm
net-snmp-libs-5.5-37.el6_2.1.x86_64.rpm
nfs-utils-1.2.3-15.el6_2.1.x86_64.rpm
nfs-utils-lib-1.1.5-4.el6.x86_64.rpm
openhpi-libs-2.14.1-3.el6.x86_64.rpm
openssh-5.3p1-70.el6_2.2.x86_64.rpm
openssh-clients-5.3p1-70.el6_2.2.x86_64.rpm
openssh-server-5.3p1-70.el6_2.2.x86_64.rpm
openssl098e-0.9.8e-17.el6.centos.2.x86_64.rpm
pacemaker-cli-1.1.6-3.el6.x86_64.rpm
pacemaker-cluster-libs-1.1.6-3.el6.x86_64.rpm
perl-5.10.1-119.el6_1.1.x86_64.rpm
perl-Compress-Raw-Zlib-2.023-119.el6_1.1.x86_64.rpm
perl-Compress-Zlib-2.020-119.el6_1.1.x86_64.rpm
perl-HTML-Parser-3.64-2.el6.x86_64.rpm
perl-HTML-Tagset-3.20-4.el6.noarch.rpm
perl-IO-Compress-Base-2.020-119.el6_1.1.x86_64.rpm
perl-IO-Compress-Zlib-2.020-119.el6_1.1.x86_64.rpm
perl-IO-Socket-INET6-2.56-4.el6.noarch.rpm
perl-MailTools-2.04-4.el6.noarch.rpm
perl-Module-Pluggable-3.90-119.el6_1.1.x86_64.rpm
perl-Pod-Escapes-1.04-119.el6_1.1.x86_64.rpm
perl-Pod-Simple-3.13-119.el6_1.1.x86_64.rpm
perl-Socket6-0.23-3.el6.x86_64.rpm
perl-URI-1.40-2.el6.noarch.rpm
perl-libs-5.10.1-119.el6_1.1.x86_64.rpm
perl-libwww-perl-5.833-2.el6.noarch.rpm
perl-version-0.77-119.el6_1.1.x86_64.rpm
quota-3.17-16.el6.x86_64.rpm
rpcbind-0.2.0-8.el6.x86_64.rpm
tcp_wrappers-7.6-57.el6.x86_64.rpm
2、安装RPM
将安装包和依赖包安装文件,上传至服务器(或下载)临时目录中,例如:/root/RPMSRC下。
在服务器上运行:
# cd /root/RPMSRC
#yum localinstall *.rpm - -nogpgcheck
1.2.2 HA配置
1、修改HA配置文件
其一,创建配置文件:/etc/corosync/corosync.conf
内容:
compatibility: whitetank
totem {
version: 2
secauth: off
threads: 0
interface {
ringnumber:0
bindnetaddr:192.168.20.0 #此处按实际情况修改
mcastaddr:226.94.1.1
mcastport:5405 #注意该端口,需在防火墙中放开
ttl: 1
}
}
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
}
aisexec{
user:root
group:root
}
其二,创建ha节点通讯密码,配置文件:/etc/ha.d/authkeys
内容:
auth 1
1 sha1 secret #sha1为加密算法,secret为设置的密码
2、关闭防火墙
关闭防火墙测试HA是否安装成功,测试完成后,实际生产环境应该打开防火墙,放开HA所需的端口。
命令:chkconfig iptables off
3、重启系统
命令:reboot
启动命令:service corosync start
当提示启动后,使用命令查看运行状态,
命令为:crm_mon
如果没有异常,则会显示,当前集群的运行参数。
如果有异常则检测异常出现的原因。
2.1.2 HA运行检测1、检测HA引擎是否正常启动,查看其日志文件。
命令:grep -i -e "corosync cluster engine" -e"configuration file" /var/log/messages
出现图示中的提示说明启动成功,否则检查原因。
2、检查初始化节点通知是否发出。
命令:grep -i totem /var/log/messages
出现上图所示提示,表示节点初始化通知发送成功。
出现上图提示则表示,初始化通知发送失败,并且失败的原因有可能是防火墙没有放开HA配置的端口。
3、检查启动后运行过程中是否有运行错误。
命令:grep -i error: /var/log/messages |grep -v unpack_resources
(为了检查stonith的错误,因为我们在这里没有安装stonith,所以得将stonith去掉,不去掉的话会报错)
4、检查pacemaker是否启动。
命令:grep -i pcmk_startup /var/log/messages
如图所示,pacemaker启动成功。可以进行资源配置了。
STONITH组件是用来严格控制节点是否下线,强制节点脱离集群的工具,在没有安装的时候运行pacemaker,日志中会出现报错信息。
因此,如不使用它,最好是禁用,命令为:
[root@node1 corosync]#crm //进入crm界面
crm(live)#configure //进入配置模式
crm(live)configure# property stonith-enabled=false //禁用stonith
crm(live)configure# commit //提交本次改动
1、查看集群当前配置。
命令:[root@node1 corosync]# crm configure show
显示效果如上图所示。
2、验证集群配置语法正确性。
命令:[root@node1 corosync]# crm_verify -L
验证如上图所示,可能存在某些配置错误,需要及时作出修改。
2.2.3 双机HA的特殊配置(关闭票数统计)对于双机组成的HA系统,当一台节点出现故障时,另一台并不会进行切换,原因是存活的节点不能获得其他节点的票数。因此在双机HA系统中应该关闭投票机制,当节点出现问题时直接进行切换。
改变quorum命令:
[root@node1 corosync]# crm
crm(live)#configure
crm(live)configure#property no-quorum-policy=ignore
crm(live)configure#commit
多个主机(节点)对外提供服务,需要使用一个公用的IP,即虚拟IP。
在集群中添加一个虚拟IP,其实也就是添加一个IP资源。
命令:
crm(live)configure# primitive VIP ocf:heartbeat:IPaddr params ip=192.168.1.100
crm(live)configure#commit
如上图所示,虚拟IP设置成功,资源名字为VIP。
1、资源定义
集群的资源类型有4种:
primitive 本地主资源(只能运行在一个节点上)
group 把多个资源归到一个组里面,便于管理
clone 需要在多个节点上同时启用的 (如ocfs2 ,stonith ,没有主次之分)
master 有主次之分,如drbd
2、资源查询
使CRM提供的命令查询某一具体资源在什么组件的管理下,命令:
[root@node1 corosync]# crm
crm(live)# configure
crm(live)configure# ra
crm(live)configure ra# classes
如上图所示,列出了所有可管理的资源分类,可以使用命令查看某一组件内管理的具体资源,命令:
crm(live)configure ra#list heartbeat
查看heartbeat分类下管理的资源,效果如下图:
命令:
crm(live)configurera#list lsb
查看lsb分类下的所有分类,显示效果如下图:
在安装某一服务之后即可看到pacemaker将服务划分至某一分类下做管理。
3、向集群中添加一个资源
下面以添加一个httpd服务为例子,向集群中添加资源。
如上所述,在安装httpd服务之前在所有的分类中查询不到httpd相关的信息,安装完成之后,在LSB分类中查询到httpd服务资源,也就是说httpd服务在pacemaker下划归为LSB分类管理。
向集群中添加该资源,详细命令如下:
crm(live)configure ra#l end
crm(live)configure# primitive WEBSERVER lsb:httpd
crm(live)configure# commit
上述命令,添加LSB分类下的httpd服务资源以私有方式(只允许在一个节点上运行)加入进集群,并取名为WEBSERVER。
查看是否添加成功,命令:
crm(live)configure# show
查看是否运行成功,命令:
crm(live)configure# end
crm(live)# status
如图所示,httpd服务在节点rpmnode2上启动成功。
2.2.6 资源的分组管理为了方便管理对所有资源按照相应的功能进行分组设置,分组完成后,各节点按照组进行服务资源的接管或者停用。
添加分组命令:
crm(live)configure# group WEB VIP WEBSERVER
crm(live)configure# commit
命令解释,添加分组WEB,并向WEB分组中添加资源VIP和WEBSERVER,添加完成后查看相关配置信息,效果如下图。
配置资源监视,可以在定义资源时用opmonitor命令定义。
虽然 High AvailabilityExtension 可以检测节点故障,但也能够检测节点上的各个资源何时发生故障。如果希望确保资源运行,则必须为该资源配置资源监视。资源监视包括指定超时和/或启动延迟值以及间隔。间隔告诉 CRM 检查资源状态的频率。
crm(live)# configure
crm(live)configure#monitor WEBSERVER 5s:15s
crm(live)configure#commit
命令解释,使用monitor命令为资源WEBSERVER添加监控,监控间隔时间(interval)为5秒,超时时间(timeout)为15秒。
第三章 Linux-HA运行/调试3.1 资源的管理3.1.1资源的迁移
使用shell控制功能的帮助可以查看相关的操作命令,对资源的具体操作封装在resource目录下,
进入相关命令模式:
crm(live) # resource
crm(live) resource # help
迁移命令,具体操作:
crm(live) resource # migrate WEB rpmnode1
将分组资源WEB迁移至节点rpmnode1.
crm(live) resource # unmigrate WEB
取消资源迁移。
3.1.2 资源的启动停止
停止某个资源命令,具体操作:
crm(live) resource # stop WEB
停止分组资源WEB的运行。
启动分组资源WEB:
crm(live) resource # start WEB
重新启动分组资源WEB:
crm(live) resource # restart WEB
3.2 资源的优先级设置3.2.1 设置的原因之所以要设置资源的优先级,是因为集群管理工具pacemaker在安装的时候并不要求所有的节点都有相同的硬件设置,因此在你的集群系统中,各个节点的硬件配置有可能不同。在这种情况下你有可能会希望某些资源优先在某个节点上运行。
3.2.2 设置的方法为了达到这种效果我们可以使用configure配置下的location约束条件进行约束。
具体命令:
crm(live)configure#location WEB_NODE1_SORCE WEB 50: rpmnode1
命令解释,使用location命令定义一个名为WEB_NODE1_SORCE的约束,约束的内容是分组资源WEB在rpmnode1节点上运行的优先级参数为50,如果其他节点优先级数比50小,则优先在rpmnode1节点上运行。
输入命令时,注意格式:
在以上设置基础上,停止节点一(rpmnode1)的资源运行,资源自动切换至节点二(rpmnode2),但是当节点一重新启动后,资源自动转移到节点一。
第四章DRBD数据同步安装/配置/运行
4.1 DRBD安装4.1.1 RPM软件安装1、上传RPM安装包至服务器目录/root/RPMDRBD下,
RPM安装文件列表如下:
drbd-8.4.1-1.el6.x86_64.rpm
drbd-bash-completion-8.4.1-1.el6.x86_64.rpm
drbd-heartbeat-8.4.1-1.el6.x86_64.rpm
drbd-km-2.6.32_220.17.1.el6.x86_64-8.4.1-1.el6.x86_64.rpm
drbd-pacemaker-8.4.1-1.el6.x86_64.rpm
drbd-udev-8.4.1-1.el6.x86_64.rpm
drbd-utils-8.4.1-1.el6.x86_64.rpm
drbd-xen-8.4.1-1.el6.x86_64.rpm
2、安装软件包
# cd /root/RPMDRBD
#yum localinstall *.rpm - -nogpgcheck
注意:以上1、2两步操作需要在所有节点上完成。
3、测试安装是否成功
命令:
# modprobe drbd
出现如图所示一的错误,则说明linux内核缺少对drbd的支持,安装失败。
4、如果安装失败则需要重新编译安装,具体步骤见4.2节。
4.1.2 DRBD编译安装1、主备节点进行系统升级,并重启:
yum update
reboot
重新启动,非常重要否则升级不生效后面编译容易出错,make km-rpm通不过,主要是因为uname -r得出的内核版本,与/usr/src/kernels/目录下的内核版本不一致。
2、主备节点安装编译环境:
yum -y install gcc make automake autoconf flex rpm-buildkernel-devel
3、主备节点创rpmbuild目录,为后面编译rpm包做准备:
mkdir -p rpmbuild/SOURCES
4、主备节点下载drbd源码包,并编译成rpm:
wget http://oss.linbit.com/drbd/8.4/drbd-8.4.1.tar.gz
或者上传drbd-8.4.1.tar.gz源码包。
5、解压编译
tar -zxvf drbd-*
cd drbd-*
./configure
make rpm
make km-rpm
6、安装rpm文件
cd /root/rpmbuild/RPMS/x86_64/
yum localinstall *.rpm --nogpgcheck
7、主备节点载入drbd模块,创建drdb分区元数据,并启用资源:
modprobe drbd
lsmod |grep drbd
如果结果无报错,有drbd的字样,说明安装成功。
drbdadm create-md drbddisk //创建元数据
drbdadm up drbddisk //启用资源
4.2 DRBD配置4.2.1 创建DRBD分区首先查看系统当前分区情况,以确定为DRBD分区分配空间的大小。
使用命令:
[root@rpmnode1 ~]# lvs
如图所示:
系统共有20G空间。
为DRBD分配一个1G空间,具体命令:
# lvcreate -n drbdlabel -L 1G vg_rpmnode1
1、划分独立的逻辑分区
命令:#lvs
查看逻辑分区的使用空间,至少留有1G的空闲空间。
命令:# lvcreate -n drbdlabel -L 1G vg_rpmnode1
命令解释,使用lvcreate命令在卷标为vg_rpmnode1的分区上划分一个分区名为drbdlabel的逻辑分区。
如果使用独立的硬盘作为drbd的数据存放区,则需要为系统重新挂载新硬盘(详细步骤查看网络教程《linux系统硬盘挂载》)。
2、配置drbd文件
该配置文件位置为/etc/drbd.conf。
global {
usage-count yes;
}
common {
protocol C;
}
resource drbddisk {
meta-disk internal;
device /dev/drbd1;
syncer {
verify-alg sha1;
}
net {
allow-two-primaries;
}
on rpmnode1 {
disk /dev/mapper/VolGroup-drbd--demo; #独立硬盘则写独立硬盘号,如:/dev/sdb1
address 192.168.20.39:7789;
}
on rpmnode2 {
disk /dev/mapper/VolGroup-drbd--demo; #独立硬盘则写独立硬盘号,如:/dev/sdb1
address 192.168.20.29:7789;
}
}
3、修改配置
文件/etc/drbd.d/global_common.conf
和
文件/etc/drbd.d/redis.res,
可以修改本地示例配置文件后上传。
4、初始化drbd资源,两个节点上都执行
命令:
# drbdadm create-md drbddisk
其中drbddisk是上面配置文件中所配置的资源名。
4、将drbd载入linux内核并检验是否正确
命令:
# modprobe drbd
出现如图所示一的错误,则说明linux内核缺少对drbd的支持,安装失败。
# drbdadm up drbddisk
# cat /proc/drbd
5、设置主节点
drbdadm primary --force drbddisk
成功后会看到正在同步数据,使用命令:
cat /proc/drbd
如图:
6、格式化(只在主节点上完成即可)
命令: mkfs.ext4 /dev/drbd1
7、测试主备节点之间的数据同步(注意步骤):
1) 在主节点上:
创建测试文件:echo �Ce "hell0">/data/test.txt
卸载drbd设备:umount/data
主节点角色降级:drbdadm secondary drbddisk
2)在备用节点上:
把备用节点设置为primary角色:drbdadm primary drbddisk
挂载drbd设备:mount /dev/drbd0 /data
查看备用节点的/data目录,可以看到在主节点上的创建的文件。
说明切换成功!再次查看drbd状态,两个节点的角色应该已经转换过来了。
4.3 集群中添加DRBD文件系统资源4.3.1创建数据克隆进入shell管理界面,进行相关设置,
命令:
#crm
crm(live) # cib new drbd
crm(drbd) # configure primitive DRBDDATA ocf:linbit:drbdparams drbd_resource=drbddisk \
op monitorinterval="30s" role="Master" \
op monitor interval="31s" role="Slave" \
op start interval="0" timeout="240s" \
op stop interval="0" timeout="100s"
crm(drbd) # configure ms DRBDDATACloneDRBDDATA \
meta master-max="1" master-node-max="1"clone-max="2" clone-node-max="1" notify="true" crm(drbd)# configure show
crm(drbd) # cib commit drbd
命令解释:
现在DRBD已经工作了,我们可以配置一个Filesystem资源来使用它。此外,对于这个文件系统的定义,同样的我们需要告诉集群这个文件系统能在哪运行(主DRBD运行的节点)以及什么时候可以启动(在主DRBD启动以后)。
进入shell管理界面,进行相关设置,
命令:
# crm
crm(live)# cib new fs
crm(fs) # configure primitive FS ocf:heartbeat:Filesystem \
paramsdevice="/dev/drbd1" directory="/home/data"fstype="ext4" \
op startinterval="0" timeout="60s" \
op stopinterval="0" timeout="60s"
crm(fs) # configure colocation fs_on_drbd inf: FS DRBDDATAClone:Master
crm(fs) # configure order FS-after-DRBDDATA inf: DRBDDATAClone:promote FS:start
crm(fs) # crm configure show
crm(fs) # cib commit fs
第五章 附录(最终配置文件)5.1 Heartbeat配置文件
文件目录:/etc/ha.d/ authkeys,文件内容:
auth 1
1 sha1 secret
5.2 Corosync配置文件文件目录:/etc/corosync/ corosync.conf,文件内容:
compatibility: whitetank
totem {
version: 2
secauth: off
threads: 0
interface {
ringnumber: 0
bindnetaddr: 192.168.20.0
mcastaddr: 226.94.1.1
mcastport: 5405
ttl: 1
}
}
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
}
aisexec{
user:root
group:root
}
5.3drbd配置文件配置文件:/etc/drbd.conf,内容:
global {
usage-count yes;
}
common {
protocol C;
}
resource drbddisk {
meta-disk internal;
device /dev/drbd1;
syncer {
verify-alg sha1;
}
net {
allow-two-primaries;
}
on rpmnode1 {
disk /dev/sdb1;
address 192.168.20.39:7789;
}
on rpmnode2 {
disk /dev/sdb1;
address 192.168.20.29:7789;
}
}
配置CRM交互式配置系统内的配置文件,打开命令为:
#crm configure edit
在文件中编辑:
node rpmnode1
node rpmnode2
primitive DRBDDATA ocf:linbit:drbd \
params drbd_resource="drbddisk"\
op monitorinterval="30s" role="Master" \
op monitorinterval="31s" role="Slave" \
op startinterval="0" timeout="240s" \
op stopinterval="0" timeout="100s"
primitive FS ocf:heartbeat:Filesystem \
params device="/dev/drbd1"directory="/home/data" fstype="ext4" \
op startinterval="0" timeout="60s" \
op stopinterval="0" timeout="60s"
primitive VIP ocf:heartbeat:IPaddr \
paramsip="192.168.20.200"
primitive WEBSERVER lsb:httpd \
op monitorinterval="5s" timeout="15s"
group WEB VIP WEBSERVER
ms DRBDDATAClone DRBDDATA \
metamaster-max="1" master-node-max="1" clone-max="2"clone-node-max="1" notify="true"
location WEB_NODE1_SORCE WEB 50: rpmnode1
colocation fs_on_drbd inf: FS DRBDDATAClone:Master
order FS-after-DRBDDATA inf: DRBDDATAClone:promote FS:start
property $id="cib-bootstrap-options" \
dc-version="1.1.6-3.el6-a02c0f19a00c1eb2527ad38f146ebc0834814558"\
cluster-infrastructure="openais" \
expected-quorum-votes="2" \
stonith-enabled="false" \
no-quorum-policy="ignore" \
last-lrm-refresh="1338370539"
5.5 httpd配置配置文件: /etc/httpd/conf/httpd.conf ,作如下修改:
Listen 80
修改为:
Listen 192.168.20.200:80 #红色部分IP为对外提供服务的虚拟公共IP