Pacemaker
Pacemaker集群管理:支持fence;对服务本身也有监控。使用corosync检测结点心跳。
一、集群结点端安装软件----server1、server3
<1>yum install pacemkaer corosync -y ##可使用redhat自带套件
<2>cd /etc/corosync/
cpcorosync.conf.example corosync.conf ##拷贝主配置文件
<3>vim corosync ##配置
compatibility:whitetank
totem {
version: 2 ##版本号
secauth: off
threads: 0
interface {
ringnumber: 0
bindnetaddr: 172.25.90.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
}
}
amf {
mode: disabled
}
service { ##添加模块:联动pacemaker服务
name: pacemaker ##添加pacemaker服务
ver: 0 ##版本:为0时表示可自启动pacemaker服务 ; } 为1时则表示不自启动pacemaker服务
:wq
<4>因为集群结点配置均相同,因此我们可以将配置文件拷贝至其它结点
scp /etc/corosync/corosync.conf server3:/etc/corosync/
<5>/etc/init.d/corosync ##启动服务
tail -f /var/log/cluster/corosync ##查看日志,,看服务是否可以正常启动
<5>crm_verify ##该命令可用来校验,根据校验结果解决软件依赖性
yum install pssh-2.3.1-2.1.x86_64.rpm crmsh-1.2.6-0.rc2.2.1.x86_64.rpm -y
crm_mon #3查看结点连接状态
crm有两种方式使用方式:交互式及非交互式
<6>使用交互式在各个集群结点上配置fence,如在server1进行
[root@server1 ~]# crm ##进入交互式,可以使用Table键来补齐命令
crm(live)# configure
crm(live)configure# propertystonith-enabled=false ##关闭fence模块
<7>添加资源
crm(live)configure# commit ##提交才可使命令生效
crm(live)configure# primitive vipocf:heartbeat:IPaddr2 params ip=172.25.90.190 cidr_netmask=32 op monitorinterval=30s
##创建资源vip,监控以上资源在哪个结点上运行,每个30s检测一次;
crm(live)configure# commit
crm(live)configure# show ##可以使用show命令来看集群内容
node server1 \
attributesstandby="off"
node server3
primitive vip ocf:heartbeat:IPaddr2 \
paramsip="172.25.90.190" cidr_netmask="32" \
opmonitor interval="30s"
property $id="cib-bootstrap-options"\
dc-version="1.1.10-14.el6-368c726"\
cluster-infrastructure="classicopenais (with plugin)" \
expected-quorum-votes="2"\
stonith-enabled="false"
crm(live)configure# bye ##退出交互模式
bye
##online:表示服务正常且可以接管资源的结点;标记部分为添加的资源;started:表示该资源正运行在server1结点上
<7>pacemaker默认无回切机制。测试:使server1结点不接管资源,
(1)交互式命令
[root@server1 ~]# crm
crm(live)# node ##进入对结点操作模式
crm(live)node# standby ##使其为standbt状态
crm(live)node# online
##确认接管资源的结点,再使结点处于online,查看资源是否回切,
## standby:表示不接管资源,但心跳仍正常;当恢复为node时,资源不会回切
/etc/init.d/corosync stop ##在server1端服务宕掉服务
##若关闭服务,则为OFFline;若是一个双结点集群,当有一端宕掉服务时,另一结点则会自动丢弃资源,也不再接管,因为一个结点不能构成集群。
crm(live)configure# propertyno-quorum-policy=ignore ##忽略集群对结点数目的控制
crm(live)configure# commit ##提交使生效
[root@server1 ~]# /etc/init.d/corosync stop ##宕掉服务,此时server3应该接管资源
(2)非交互式命令
crm node standby ##使为standby状态
crm node onine ##使为online 状态
二、创建共享存储
<1>集群结点均添加大小相同的虚拟磁盘,不一定越大越好,磁盘越大,同步速度越慢。
<2>集群结点端安装DRBD包----server1、server3,先在一个结点操作,最终将生成的安装包拷贝给另一结点
1.tar zxf drbd-8.4.2.tar.gz ##解压生成目录drbd-8.4.2
2.yum install rpm-build -y
##下载生成rpm安装包工具,默认目录在/root/
3.cd drbd-8.4.2
执行./configure --enable--with --with-km
##--enable--with:表示生成rpm文件;--with-km:表示内核模块
编译过程可能会有以下错误提示:
configure: error: Cannot build utilswithout flex, either install flex or pass the --without-utils option.
yum search flex ##根据提示可以先查询yum源是否有相应安装包
yum install flex -y ##软件包依赖性
解决依赖性后再次编译,编译成功后,在该目录下会生成drbd.spec文件及drbd-kernel.spec文件,用来生成rpm安装包
4.生成rpm包
(1)rpmbuild -bb drbd.spec
##先执行该命令,系统自动生成错误信息中提示的目录
[[email protected]]# rpmbuild -bb drbd.spec
error: File/root/rpmbuild/SOURCES/drbd-8.4.2.tar.gz: No such file or directory
(2)根据提示信息,进行拷贝tar包
cp /root/drbd-8.4.2.tar.gz/root/rpmbuild/SOURCES/
(3)rpmbuild -bb drbd.spec ##生成rpm包
(4)rpmbuild -bb drbd-km.spec ##生成内核模块
[root@server3 drbd-8.4.2]# rpmbuild -bb drbd-km.spec
error: Failed build dependencies:
kernel-develis needed by drbd-km-8.4.2-2.el6.x86_6 ##软件依赖性
(5)yum install kernel-devel ##解决软件依赖性后,再次执行上条命令
rpmbuild -bb drbd-km.spec
(6)cd /root/rpmbuild/RPMS/x86_64/ ##安装包生成目录
[root@server3 x86_64]# ls ##生成的安装包如下:
drbd-8.4.2-2.el6.x86_64.rpm drbd-pacemaker-8.4.2-2.el6.x86_64.rpm
drbd-bash-completion-8.4.2-2.el6.x86_64.rpm drbd-udev-8.4.2-2.el6.x86_64.rpm
drbd-debuginfo-8.4.2-2.el6.x86_64.rpm drbd-utils-8.4.2-2.el6.x86_64.rpm
drbd-heartbeat-8.4.2-2.el6.x86_64.rpm drbd-xen-8.4.2-2.el6.x86_64.rpm
drbd-km-2.6.32_431.el6.x86_64-8.4.2-2.el6.x86_64.rpm
drbd-km-debuginfo-8.4.2-2.el6.x86_64.rpm
(7)rpm -ivh * ##安装
(8)scp * server1:/mnt
##拷贝至server1,在server1端执行上条命令进行安装,注意路径
<3>编辑资源文件----server1、server3保证一致
(1)cd /etc/drdb.d ##进入该目录编辑以.res结尾的文件,这样才能被加载
vim sqldata .res ##文件名为sqldata,内容如下:
resource sqldata{ ##定义资源,名为sqldata
meta-diskinternal; ##选择内存存储
device/dev/drbd1; ##设备,注意不是虚拟磁盘
syncer {
verify-alg sha1; ##算法
}
on server1 { ##定义结点,注意此处一定是结点的主机名
disk /dev/vdb;
address172.25.90.1:7789;
}
on server3 {
disk /dev/vdb;
address172.25.90.3:7789;
}
}
<4>.磁盘同步
(1)集群结点均先初始化虚拟磁盘----server1、server3
drbdadm create-md sqldata
##注意一定是对资源初始化,所以此处一定是资源名sqldata
(2)结点均启动drbd服务---server1、server3
两端均开启服务后,正常显示结果如下:表示正在进行同步
[root@server1 drbd.d]# /etc/init.d/drbdstart
Starting DRBD resources: [
create res: sqldata
prepare disk: sqldata
adjust disk: sqldata
adjust net: sqldata
]
(3)watch -n 1 cat/proc/drbd ##监控同步过程,同步结束后结果显示如下:
[root@server1 drbd.d]# cat /proc/drbd ##在此只列出重要信息
.......
1: cs:Connected ro:Secondary/Secondaryds:Inconsistent/Inconsistent C r-----
##ds均为Inconsistent,表示同步结束,方可执行以下操作
<5>启动主备,注意:启动主备后的操作一定要在主结点上进行,备份结点只进行数据同步.
如选择server1为主结点,如下操作均在server端进行:
(1)drbdadm primary sqldata --force
##强行将当前结点同步为主结点,(注意当前结点是server1)
[root@server1 drbd.d]# cat /proc/drbd ##同步结束,共享磁盘才可存储
........
1:cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
##当前结点为主结点;ds:UpToDate/UpToDate:表示同步结束
(2)主结点端,对磁盘进行初始化
mkfs.ext4 /dev/drbd1
8.测试
(1)主结点端进行挂载,进行简单操作或不操作
yum install mysql-server -y ##两结点均下载mysql-server
chown mysql.mysql /var/lib/mysql/
mount /dev/drbd1 /var/lib/mysql ##主结点操作
/etc/init.d/mysql start ##两端均激活mysql
(2)卸载
/etc/init.d/mysql stop ##先关闭服务
umount /var/lib/mysql/
(3)主备交换
主结点:执行drbdadm secondary sqldata ##使主结点为备机
备机:执行drbdadm primary sqldata ##使当前结点为主机
主备交换后,便可在现在的主结点(即之前的备结点-----server3端)执行同步(步骤7.)、挂载、卸载(步骤8.)操作。注意:一定要先执行7.操作,保证磁盘已完成同步。
三、与fence整合
设置好主结点,如本机选择server1端,进入主备模式,仅在主结点进行操作
<1>物理主机安装fence软件,且保证处于running状态:
[root@foundation90 ~]# rpm -qa | grep fence
libxshmfence-1.2-1.el7.i686
libxshmfence-1.2-1.el7.x86_64
fence-virtd-libvirt-0.3.2-2.el7.x86_64
fence-virtd-multicast-0.3.2-2.el7.x86_64
fence-virtd-0.3.2-2.el7.x86_64
systemctl status fence_virtd ##查看fence状态是否为running
scp /etc/cluster/fence_xvm.key 172.25.90.1:/etc/cluster/
##fence控制,集群结点端需要创建/etc/cluster/
<2>主结点
(1)crm(live)configure# primitive vmfencestonith:fence_xvm params pcmk_host_map="server1:test1;server3:vm3" opmonitor interval=1min
##pcmk_host_map:主机名与“域名”映射
##在server3端使用命令crm_mon查看是否同步
##fence_pcvm模块一般会运行在服务的对端
(2)在fence_pcvm所在结点端(现在在server3)执行fence_pcvm -H test1
##使fence在test1上生效,即先断电,再重启动server1
四、共享存储整合
<1>保证集群结点均由mysql-server服务
<2>crm(live)configure# primitive DBdata ocf:linbit:drbd params drbd_resource=sqldata op monitor interval=1min
##将drbd资源--sqldtat激活为DBdata;params ...:激活的资源,且必须是Primary才能操作
##primitive:创建;ocf:..:执行什么脚本
crm(live)configure# ms DBdataclone DBdatameta master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true
##设置ms环境:设置一个主备环境,该环境下只有主结点可进行操作,备结点不被允许
crm(live)configure# commit ##提交
crm(live)configure# primitive DBfsocf:heartbeat:Filesystem params device=/dev/drbd1 directory=/var/lib/mysql fstype=ext4
##/dev/drbd1挂载至=/var/lib/mysql,磁盘类型为ext4(见二中的格式化部分),生成文件系统
crm(live)configure# colocation fs_on_drbd inf: DBfs DBdataclone:Master
##设置资源粘制,保证存储在主结点上,注意“inf: DBfs”之间有一个空格
crm(live)configure# order DBfs-after-DBdata inf: DBdataclone:promote DBfs:start
##文件系统DBfs挂载之前一定要先激活DBdata;初始化之后再开启DBfs
crm(live)configure# primitive mysqlDB lsb:mysqld op monitor interval=30s
crm(live)configure# group mysqlservice vip DBfs mysqlDB
crm(live)configure# commit ##提交