有需求,才会有新产物生成。对于做平台,关键就是如何提高稳定、安全、高效的集群资源供用户使用。本次调整,实现了平台的软件安装路径和用户家目录统一管理,保障用户7*24小时用户登录平台。
平台使用Openldap进行用户统一管理,自取代nis使用至今,未出现过中断问题,相对来说还是比较稳定靠谱的。使用openldap统一进行用户管理,就需要平台中所有节点有统一共享的/home目录。
另外平台中所有软件安装采用module的方式,灵活加载及更换版本。实现该功能也需要平台中所有节点共享同一存储路径/opt,如果不使用共享的方式,就需要定期进行同步,保持所有节点的目录内容一致,这样管理维护起来成本会比较高。
若要保证稳定,就需要有冗余节点。硬件上使用盘阵来解决,采用双控制器,配置多路径。前端节点至少2个,互相冗余。软件上使用Corosync+Pacemaker提供HA解决方案。
配置存储和服务器
1. 硬件配置
一台DELL MD系列盘阵、2台R720服务器
盘阵接口:12Gb SAS
硬盘配置:12*4T 7.2k NL-SAS
采用9+2 Raid6,1块热备盘
2. IP地址分布
盘阵配置了2个管理IP:192.168.242.38/192.168.242.39
两台服务器IP:192.168.242.3/192.168.242.4
HOSTNAME:hpc-242-003/hpc-242-004
虚拟IP:192.168.242.40
心跳线地址:10.0.0.3/10.0.0.4
使用一根网线将两台服务器的2个网卡直连
3. 存储映射
这里将由11块磁盘组成的Raid6创建了2个VD,分别作为/opt目录和/home目录使用。映射时需要将这两组vd同时映射到2台服务器上,最终效果如下:
[root@hpc-242-003 ~]# multipath -ll
3600a0980006e2e77000001a3563a2f05 dm-1 DELL,MD34xx
size=5.0T features='0' hwhandler='0' wp=rw
|-+- policy='round-robin 0' prio=1 status=active
| `- 7:0:0:1 sdc 8:32 active ready running
`-+- policy='round-robin 0' prio=1 status=enabled
`- 7:0:1:1 sde 8:64 active ready running
3600a0980006e2e77000001a6563a2f24 dm-0 DELL,MD34xx
size=28T features='0' hwhandler='0' wp=rw
|-+- policy='round-robin 0' prio=1 status=active
| `- 7:0:0:0 sdb 8:16 active ready running
`-+- policy='round-robin 0' prio=1 status=enabled
`- 7:0:1:0 sdd 8:48 active ready running
在另外一个节点上也可看到相同的设备
[root@hpc-242-004 ~]# multipath -ll
3600a0980006e2e77000001a3563a2f05 dm-0 DELL,MD34xx
size=5.0T features='0' hwhandler='0' wp=rw
|-+- policy='round-robin 0' prio=1 status=active
| `- 5:0:1:1 sde 8:64 active ready running
`-+- policy='round-robin 0' prio=1 status=enabled
`- 5:0:0:1 sdc 8:32 active ready running
3600a0980006e2e77000001a6563a2f24 dm-1 DELL,MD34xx
size=28T features='0' hwhandler='0' wp=rw
|-+- policy='round-robin 0' prio=1 status=active
| `- 5:0:1:0 sdd 8:48 active ready running
`-+- policy='round-robin 0' prio=1 status=enabled
`- 5:0:0:0 sdb 8:16 active ready running
这里,存储的映射就做好了。具体做法这里不做详细说明,使用不同的存储整列操作方式可能都不相同,大致原理就是通过盘阵的管理界面将主机、sas端口、VD进行绑定,这里将两组vd作为一组资源、两台主机作为一组资源,通过sas线将组资源进行映射即可。
4. 软件安装及配置
需要安装的软件有多路径软件multipath,HA组件:Corosync+Pacemaker。
安装multipath
yum install device-mapper-multipath.x86_64
multipath安装完成后,默认没有配置文件,可将/usr/share/doc/device-mapper-multipath-0.4.9/multipath.conf拷贝至/etc目录下
cp /usr/share/doc/device-mapper-multipath-0.4.9/multipath.conf /etc/multipath.conf
拷贝过来后简单修改一个参数:
defaults {
user_friendly_names yes
}
将yes改成no,否则会出现别名,然后启动multipath服务
/etc/init.d/multipathd start
multipath服务启动后执行multipath -ll可能还发现不了磁盘设备,把系统重启一下即可。
yum install -y corosync
[root@hpc-242-004 corosync]# cat corosync.conf
# Autoconfigured by Intel Manager for Lustre
# DO NOT EDIT -- CHANGES MADE HERE WILL BE LOST
compatibility: whitetank
totem { version: 2 secauth: off threads: 0 token: 5000 token_retransmits_before_loss_const: 10 max_messages: 20 rrp_mode: active interface { ringnumber: 0 bindnetaddr: 10.0.0.0 mcastaddr: 226.94.0.1 mcastport: 4870 ttl: 1 }
}
logging { fileline: off to_stderr: no to_logfile: no to_syslog: yes logfile: /var/log/cluster/corosync.log debug: off timestamp: on logger_subsys { subsys: AMF debug: off }
}
amf { mode: disabled }
service { name: pacemaker ver: 1 }
corosync-keygen
将秘钥文件和配置文件复制到另外一个节点上
scp /etc/corosync/authkey 192.168.242.4:/etc/corosync/
scp /etc/corosync/corosync.conf 192.168.242.4:/etc/corosync/corosync.conf
好了,到这里corosync配置完成,下面我们配置pacemaker
yum install -y pacemaker
pacemaker安装后,默认是没有crm 交互命令界面的,需要安装crmsh才行。
安装crmsh
wget http://download.opensuse.org/repositories/network:/ha-clustering:/Stable/CentOS_CentOS-6/x86_64/crmsh-1.2.6-0.rc2.2.1.x86_64.rpm
rpm -ivh crmsh-1.2.6-0.rc2.2.1.x86_64.rpm
会提示有很多依赖包需要安装
yum install -y python-dateutil python-lxml
再次执行安装
rpm -ivh crmsh-1.2.6-0.rc2.2.1.x86_64.rpm
我们在配置文件中,将pacemaker整合进corosync中,corosync启动的同时也会启动pacemaker,我这里目前测试启动时还需手动启动pacemaker服务,停止时只要把corosync进程kill掉,pacemaker进程也会死掉。
/etc/init.d/corosync start /etc/init.d/pacemaker start
两个节点上都启动后,检查状态是否正常。正常后我们进行资源添加。
这里将盘阵分配出的2个VD作为资源添加到pacemaker中,另外使用nfs的方式将存储共享出去,所以还需要一个虚拟ip作为资源进行管理。
crm configure primitive optdir ocf:heartbeat:Filesystem params device=/dev/mapper/3600a0980006e2e77000001a3563a2f05p1 directory=/opt fstype=xfs op start timeout=60 op stop timeout=60
crm configure primitive homedir ocf:heartbeat:Filesystem params device=/dev/mapper/3600a0980006e2e77000001a6563a2f24p1 directory=/home options=rw,usrquota,grpquota fstype=xfs op start timeout=60 op stop timeout=60
crm configure primitive vip ocf:heartbeat:IPaddr params ip=192.168.242.40 nic=eth0:0 cidr_netmask=24
[root@hpc-242-004 corosync]# crm resource list
Resource Group: webservice
homedir (ocf::heartbeat:Filesystem): Started
vip (ocf::heartbeat:IPaddr): Started
optdir (ocf::heartbeat:Filesystem): Started
或者通过crm_mon
Last updated: Fri Nov 6 17:19:59 2015
Last change: Fri Nov 6 10:16:49 2015
Stack: classic openais (with plugin)
Current DC: hpc-242-003 - partition with quorum
Version: 1.1.11-97629de
2 Nodes configured, 2 expected votes
3 Resources configured
Online: [ hpc-242-003 hpc-242-004 ]
Resource Group: webservice
homedir (ocf::heartbeat:Filesystem): Started hpc-242-003
vip (ocf::heartbeat:IPaddr): Started hpc-242-003
optdir (ocf::heartbeat:Filesystem): Started hpc-242-003
这里重点介绍下如何添加资源,查看当前集群系统所支持的类型
[root@hpc-242-003 ~]# crm
crm(live)# ra
crm(live)ra# classes
lsb
ocf / heartbeat pacemaker
service
stonith
crm(live)ra#
查看某种类别下的所用资源代理的列表
crm(live)ra# list lsb
auditd blk-availability corosync corosync-notifyd crond dkms_autoinstaller functions
gmond halt htcacheclean httpd ip6tables iptables iscsi
iscsid kdump killall lvm2-lvmetad lvm2-monitor mdmonitor multipathd
netconsole netfs network nfs nfslock nscd nslcd
pacemaker postfix quota_nld rdisc restorecond rpcbind rpcgssd
rpcidmapd rpcsvcgssd rsyslog salt-minion sandbox saslauthd single
sshd sysstat udev-post winbind zabbix_agentd
crm(live)ra# list ocf heartbeat
CTDB Delay Dummy Filesystem IPaddr IPaddr2 IPsrcaddr LVM
MailTo Route SendArp Squid VirtualDomain Xinetd apache conntrackd
db2 dhcpd ethmonitor exportfs iSCSILogicalUnit mysql named nfsnotify
nfsserver pgsql postfix rsyncd symlink tomcat
crm(live)ra#
查看某个资源代理的配置方法,通过info命令 可详细查看添加资源时配置参数的格式
crm(live)ra# info ocf:heartbeat:Filesystem
Manages filesystem mounts (ocf:heartbeat:Filesystem)
Resource script for Filesystem. It manages a Filesystem on a
shared storage medium.
The standard monitor operation of depth 0 (also known as probe)
checks if the filesystem is mounted. If you want deeper tests,
set OCF_CHECK_LEVEL to one of the following values:
10: read first 16 blocks of the device (raw read)
This doesn't exercise the filesystem at all, but the device on
which the filesystem lives. This is noop for non-block devices
such as NFS, SMBFS, or bind mounts.
20: test if a status file can be written and read
The status file must be writable by root. This is not always the
case with an NFS mount, as NFS exports usually have the
"root_squash" option set. In such a setup, you must either use
read-only monitoring (depth=10), export with "no_root_squash" on
your NFS server, or grant world write permissions on the
directory where the status file is to be placed.
Parameters (*: required, []: default):
device* (string): block device
The name of block device for the filesystem, or -U, -L options for mount, or NFS mount specification.
directory* (string): mount point
The mount point for the filesystem.
fstype* (string): filesystem type
The type of filesystem to be mounted.
options (string):
Any extra options to be given as -o options to mount.
For bind mounts, add "bind" here and set fstype to "none".
接下来将3个资源添加到了一个资源组webservice里,目的在于始终保持三个资源同时在一个节点上启动,添加资源组方式:
[root@hpc-242-004 corosync]# crm
crm(live)# configure
crm(live)configure# group webservice vip homedir optdir
定义一个webservice资源组并添加资源
为了保障稳定切换,还需要配置一些参数
[root@hpc-242-004 corosync]# crm
crm(live)# configure
crm(live)configure# property no-quorum-policy=ignore
crm(live)configure# verify
crm(live)configure# commit
verify是确认配置文件是否正确,commit是确认对配置进行修改。在命令行配置资源时,只要不用commit提交配置好资源,就不会生效,一但用commit命令提交,就会写入到cib.xml的配置文件中。
我们需要考虑一个问题:资源由故障节点切换到正常节点后,当故障节点恢复后,资源需不需切换回来,我们这里是不需要的,因为每做一次切换,服务就会有短暂的中断,对业务多多少少都会有一些小的影响,所以这里我们就需要设置资源黏性。
资源黏性是指:资源更倾向于运行在哪个节点。
资源黏性值范围及其作用:
0:这是默认选项。资源放置在系统中的最适合位置。这意味着当负载能力“较好”或较差的节点变得可用时才转移资源。此选项的作用基本等同于自动故障回复,只是资源可能会转移到非之前活动的节点上;
大于0:资源更愿意留在当前位置,但是如果有更合适的节点可用时会移动。值越高表示资源越愿意留在当前位置;
小于0:资源更愿意移离当前位置。绝对值越高表示资源越愿意离开当前位置;
INFINITY:如果不是因节点不适合运行资源(节点关机、节点待机、达到migration-threshold 或配置更改)而强制资源转移,资源总是留在当前位置。此选项的作用几乎等同于完全禁用自动故障回复;
-INFINITY:资源总是移离当前位置;
我们这里可以通过以下方式为资源指定默认黏性值: rsc_defaults resource-stickiness=0
crm(live)configure# rsc_defaults resource-stickiness=0
配置完成后,我们查看下所有配置:
[root@hpc-242-004 corosync]# crm
crm(live)# configure
crm(live)configure# show
node hpc-242-003
node hpc-242-004
primitive homedir Filesystem \
params device="/dev/mapper/3600a0980006e2e77000001a6563a2f24p1" directory="/home" options="rw,usrquota,grpquota" fstype=xfs \
op start timeout=10 interval=0 \
op stop timeout=10 interval=0
primitive optdir Filesystem \
params device="/dev/mapper/3600a0980006e2e77000001a3563a2f05p1" directory="/opt" fstype=xfs \
op start timeout=10 interval=0 \
op stop timeout=10 interval=0
primitive vip IPaddr \
params ip=192.168.242.40 nic="eth0:0" cidr_netmask=24
group webservice homedir vip optdir \
meta target-role=Started
property cib-bootstrap-options: \
dc-version=1.1.11-97629de \
expected-quorum-votes=2 \
no-quorum-policy=ignore \
symmetric-cluster=true \
cluster-infrastructure="classic openais (with plugin)" \
last-lrm-refresh=1446713502 \
stonith-enabled=false
rsc_defaults rsc-options: \
resource-stickiness=0
rsc_defaults rsc_defaults-options: \
failure-timeout=20m \
migration-threshold=3
完成配置后,进行效果测试,将处于active状态的机器关机或重启,可发现我们创建的webservice组资源会在另外一台节点上启动,两块磁盘会切换挂载到新的active节点,因客户采用的是虚拟IP挂载,切换过程因资源的漂移,客户端访问会有短暂中断,但总体影响不大。
Corosync+Pacemaker功能非常强大,前面有提到过,可以管理资源非常多,如httpd、mysql、oracle等等,很多应用的高可用都可通过Corosync+Pacemaker方式来实现,但实际测试过程中发现稳定性还是有些小问题,测试时如果不是采用重启或关机,而是直接将active状态节点的corosync进程kill,切换会有点问题,这个后续再进行深入研究。