Centos 7 下 Corosync + Pacemaker + DRBD + psc + crmsh 实现 mysql 服务高可用
一、介绍
高可用,大家可能会想到比较简单的Keepalived,或者更早一点的 heartbeat,也可能会用到 Corosync+Pacemaker,那么他们之间有什么区别。
Heartbeat到了v3版本后,拆分为多个子项目:Heartbeat、cluster-glue、Resource Agent、Pacemaker。
Heartbeat:只负责维护集群各节点的信息以及它们之前通信。
Cluster-glue:当于一个中间层,可以将heartbeat和crm(pacemaker)联系起来,主要包含2个部分,LRM和STONITH;
Resource Agent :用来控制服务启停,监控服务状态的脚本集合,这些脚本将被LRM调用从而实现各种资源启动、停止、监控等等。
pacemaker:原Heartbeat 拆分出来的资源管理器,用来管理整个HA的控制中心,客户端通过pacemaker来配置管理监控整个集群。
它不能提供底层心跳信息传递的功能,它要想与对方节点通信需要借助底层(新拆分的heartbeat或corosync)的心跳传递服务,将信息通告给对方。
Pacemaker 配置文件比较不太容易修改,可以使用命令行界面的crmsh、pcs和图形化界面pygui、hawk等进行管理,看个人喜好。
Heartbeat 和 Corosync 的区别:
1、经过安装heartbeat 体验,Heartbeat 配置比较简单,主要修改三个文件即可: ha.cf、 haresources、 authkeys ,
但是在支持多节点的时候不知道个人配置问题,还是其他,脑裂严重(查看很多博客说只支持2个节点),并且自带的服务脚本较少,很多服务监控脚本需要自己编写。
2、Heartbeat只能为所有的资源配置一个主服务,而corosync则允许为不同的资源组配置不同的主服务 ,corosync支持多个节点的集群,
支持把资源进行分组,按照组进行资源的管理,设置主服务,自行进行启停 。
3、管理资源的灵活性:在corosync中,其会自行处理配置文件的同步问题,heartbeat则无此功能
k
配置环境准备
vip 10.101.11.13
node1 10.101.11.11
node2 10.101.11.12
安装drbd软件(各个节点)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
sudo su -ip=`/sbin/ifconfig |grep 'inet '|grep '10.101.11' | grep -v 'grep' | awk '{print $2}'`echo $ip#如果不为空if [ "$ip" != '' ];then echo "数据库段IP: ${ip} " name_add=bwscdb${ip:10:3}'.bwscdb.local' echo $name_addfiecho $name_addhostnamectl set-hostname $name_adduname -nsystemctl daemon-reloadsystemctl restart network |
#更改各个网卡的mac 地址
|
1
2
3
4
|
maceth0=`/sbin/ifconfig eth0 |egrep "ether" |awk '{print $2}'`echo $maceth0maceth1=`/sbin/ifconfig eth1 |egrep "ether" |awk '{print $2}'`echo $maceth1 |
> /etc/udev/rules.d/90-eno-fix.rules
|
1
2
3
4
5
|
cat >> /etc/udev/rules.d/90-eno-fix.rules <<EOF# This file was automatically generated on systemd updateSUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="$maceth0", NAME="eth0"SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="$maceth1", NAME="eth1"EOF |
> /etc/udev/rules.d/70-persistent-net.rules
|
1
2
3
4
5
|
cat >> /etc/udev/rules.d/70-persistent-net.rules <<EOF# This file was automatically generated on systemd updateSUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="$maceth0", NAME="eth0"SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="$maceth1", NAME="eth1"EOF |
> /etc/sysconfig/network-scripts/ifcfg-eth0
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
cat >> /etc/sysconfig/network-scripts/ifcfg-eth0 <<EOFTYPE=EthernetBOOTPROTO=staticDEFROUTE=yesIPV4_FAILURE_FATAL=noIPV6INIT=noIPV6_AUTOCONF=yesIPV6_DEFROUTE=yesIPV6_PEERDNS=yesIPV6_PEERROUTES=yesIPV6_FAILURE_FATAL=noNAME=eth0HWADDR=$maceth0ONBOOT=yesIPADDR=$ipPREFIX=24GATEWAY=10.101.11.1DNS1=218.104.111.114DNS2=223.6.6.6EOF |
> /etc/sysconfig/network-scripts/ifcfg-eth1
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
cat >> /etc/sysconfig/network-scripts/ifcfg-eth1 <<EOFTYPE=EthernetBOOTPROTO=staticDEFROUTE=yesIPV4_FAILURE_FATAL=noIPV6INIT=noIPV6_AUTOCONF=yesIPV6_DEFROUTE=yesIPV6_PEERDNS=yesIPV6_PEERROUTES=yesIPV6_FAILURE_FATAL=noNAME=eth1DEVICE=eth1ONBOOT=yesHWADDR=$maceth1IPADDR=192.168.11.${ip:10:3}PREFIX=24EOF |
|
1
|
/etc/init.d/network restart |
|
1
2
3
4
5
6
|
/usr/bin/chattr -i /etc/passwd/usr/bin/chattr -i /etc/inittab/usr/bin/chattr -i /etc/group/usr/bin/chattr -i /etc/shadow/usr/bin/chattr -i /etc/gshadow/usr/bin/chattr -i /etc/hosts |
> /etc/hosts
|
1
2
3
4
5
6
7
|
echo '127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4' >> /etc/hostsecho '::1 localhost localhost.localdomain localhost6 localhost6.localdomain6' >> /etc/hostsecho '10.101.11.11 bwscdb11.bwscdb.local bwscdb11' >> /etc/hostsecho '10.101.11.12 bwscdb12.bwscdb.local bwscdb12' >> /etc/hostsecho '192.168.11.11 bwscdb11_priv bwscdb11_priv' >> /etc/hostsecho '192.168.11.12 bwscdb11_priv bwscdb12_priv' >> /etc/hostsecho '10.101.11.13 mysql_vip1 mysql_vip1' >> /etc/hosts |
同步时间:
|
1
|
ntpdate ntp6.aliyun.com |
安装依赖包:
|
1
2
3
4
5
|
yum -y install gcc gcc-c++ make glibc kernel-devel kernel-headers#yum -y install gcc gcc-c++ make glibc flex kernel kernel-devel kernel-headersrpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.orgrpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpmyum install -y kmod-drbd84 drbd84-utils |
安装 pacemaker pcs
|
1
2
3
4
5
6
7
8
|
ntpdate cn.pool.ntp.orgyum install -y pacemaker pcs psmisc polic ycoreutils-pythonyum -y install corosync pacemaker pcssystemctl enable pcsdsystemctl enable corosyncsystemctl enable pacemakersystemctl restart pcsd.servicesystemctl enable pcsd.service |
# 安装crmsh:最好两个节点都安装方便测试
#crmsh是opensuse源提供 http://download.opensuse.org/repositories/network:/ha-clustering:/Stable/
|
1
2
3
|
cd /etc/yum.repos.d/wget http://download.opensuse.org/repositories/network:/ha-clustering:/Stable/CentOS_CentOS-7/network:ha-clustering:Stable.repoyum install crmsh -y |
#重启
|
1
|
reboot |
#加载DRBD模块、查看DRBD模块是否加载到内核:(node1,node2)
|
1
2
3
4
5
|
[root@bwscdb12 ~]# modprobe drbd[root@bwscdb12 ~]# [root@bwscdb12 ~]# lsmod |grep drbddrbd 397041 0 libcrc32c 12644 4 xfs,drbd,nf_nat,nf_conntrack |
#主配置文件
|
1
2
|
/etc/drbd.conf #主配置文件/etc/drbd.d/global_common.conf#全局配置文件 |
#查看主配置文件
|
1
2
3
4
|
[root@node1 ~]# cat /etc/drbd.conf# You can find anexample in /usr/share/doc/drbd.../drbd.conf.exampleinclude"drbd.d/global_common.conf";include"drbd.d/*.res"; |
#分别在两台机器上各添加一块硬盘,并分区
#LVM 的方案
创建lvm(每个节点都需执行)
|
1
2
3
|
pvcreate /dev/sdbvgcreate datavg /dev/sdblvcreate --size 195G --name drbd_data datavg |
#创建配置文件
>/etc/drbd.d/db.res
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
cat >>/etc/drbd.d/db.res <<EOFresource drbd_data{ protocol C;startup { wfc-timeout 0; degr-wfc-timeout 120; }disk { on-io-error detach; }net{ timeout 60; connect-int 10; ping-int 10; max-buffers 2048; max-epoch-size 2048; }syncer{verify-alg sha1;#加密算法 rate 100M;}on bwscdb11.bwscdb.local{ device /dev/drbd1; #drbd1 为DRBD 自定义分区 disk /dev/mapper/datavg-drbd_data; address 10.101.11.11:7788; meta-disk internal;}on bwscdb12.bwscdb.local{ device /dev/drbd1; disk /dev/mapper/datavg-drbd_data; address 10.101.11.12:7788; meta-disk internal;}}EOF |
#启动
|
1
|
dd if=/dev/zero bs=1M count=1 of=/dev/sdb1 |
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
[root@bwscdb11 drbd.d]# drbdadm create-md drbd_data# drbdadm create-md drbd_data等待片刻,显示success表示drbd块创建成功md_offset 1036290879488al_offset 1036290846720bm_offset 1036259221504Found some data ==> This might destroy existing data! <==Do you want to proceed?[need to type 'yes' to confirm] yesinitializing activity loginitializing bitmap (30884 KB) to all zeroWriting meta data...New drbd meta data block successfully created.success |
注意:如果等很久都没提示success,就按下回车键再等等。
再次输入该命令:
|
1
|
# drbdadm create-md drbd_data |
#启动DRBD服务:(node1,node2)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
[root@bwscdb12 ~]# systemctl start drbd[root@bwscdb12 ~]# systemctl status drbd● drbd.service - DRBD -- please disable. Unless you are NOT using a cluster manager. Loaded: loaded (/usr/lib/systemd/system/drbd.service; disabled; vendor preset: disabled) Active: active (exited) since Mon 2019-04-29 16:55:05 CST; 4s ago Process: 2959 ExecStart=/lib/drbd/drbd start (code=exited, status=0/SUCCESS) Main PID: 2959 (code=exited, status=0/SUCCESS)Apr 29 16:55:04 bwscdb12 drbd[2959]: Starting DRBD resources: [Apr 29 16:55:04 bwscdb12 drbd[2959]: create res: drbd_dataApr 29 16:55:04 bwscdb12 drbd[2959]: prepare disk: drbd_dataApr 29 16:55:04 bwscdb12 drbd[2959]: adjust disk: drbd_dataApr 29 16:55:04 bwscdb12 drbd[2959]: adjust net: drbd_dataApr 29 16:55:04 bwscdb12 drbd[2959]: ]Apr 29 16:55:04 bwscdb12 drbd[2959]: WARN: stdin/stdout is not a TTY; using /dev/consoleoutdated-wfc-timeout has to be shorter than degr-wfc-timeoutApr 29 16:55:04 bwscdb12 drbd[2959]: outdated-wfc-timeout implicitly set to degr-wfc-timeout (120s)Apr 29 16:55:05 bwscdb12 drbd[2959]: .Apr 29 16:55:05 bwscdb12 systemd[1]: Started DRBD -- please disable. Unless you are NOT using a cluster manager.. |
|
1
|
[root@bwscdb11 ~]#drbdadm up drbd_data |
#初始化
|
1
|
[root@bwscdb11 ~]#drbdadm --force primary drbd_data |
#查看同步状态
|
1
2
3
4
5
6
7
|
[root@bwscdb11 ~]# cat /proc/drbdversion: 8.4.11-1 (api:1/proto:86-101)GIT-hash: 66145a308421e9c124ec391a7848ac20203bb03c build by mockbuild@, 2018-11-03 01:26:55 0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r----- ns:446464 nr:0 dw:0 dr:448592 al:16 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:41494236[>....................] sync'ed: 1.1% (40520/40956)Mfinish: 0:17:01 speed: 40,584 (40,584) K/sec |
|
1
2
3
4
5
|
[root@bwscdb11 resource.d]# drbdadm statusdrbd_data role:Primary disk:UpToDate peer role:Secondary replication:SyncSource peer-disk:Inconsistent done:91.18 |
同步完成
|
1
2
3
4
5
6
|
[root@bwscdb11 ~]#cat /proc/drbd #查看状态[root@bwscdb11 drbd_data]# cat /proc/drbdversion: 8.4.11-1 (api:1/proto:86-101)GIT-hash: 66145a308421e9c124ec391a7848ac20203bb03c build by mockbuild@, 2018-11-03 01:26:55 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r----- ns:41618688 nr:0 dw:792108 dr:41486240 al:210 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0 |
|
1
2
3
4
5
6
7
|
[root@bwscdb11 drbd_data]# drbdadm statusdrbd_data role:Primary disk:UpToDate peer role:Secondary replication:Established peer-disk:UpToDate[root@bwscdb11 resource.d]# drbdadm dstate drbd_data UpToDate/UpToDate |
#在对端节点 执行
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
[root@bwscdb12 ~]# modprobe drbd[root@bwscdb12 ~]# lsmod | grep drbddrbd 397041 0 libcrc32c 12644 4 xfs,drbd,nf_nat,nf_conntrack[root@bwscdb12 ~]# [root@bwscdb12 ~]# drbdadm up drbd_data[root@bwscdb12 ~]# cat /proc/drbdversion: 8.4.11-1 (api:1/proto:86-101)GIT-hash: 66145a308421e9c124ec391a7848ac20203bb03c build by mockbuild@, 2018-11-03 01:26:55 0: cs:SyncTarget ro:Secondary/Primary ds:Inconsistent/UpToDate C r----- ns:0 nr:2400256 dw:2397184 dr:0 al:8 bm:0 lo:3 pe:2 ua:3 ap:0 ep:1 wo:f oos:39543516[>...................] sync'ed: 5.8% (38616/40956)Mfinish: 0:19:00 speed: 34,652 (37,456) want: 27,960 K/sec[root@bwscdb12 ~]# cat /proc/drbdversion: 8.4.11-1 (api:1/proto:86-101)GIT-hash: 66145a308421e9c124ec391a7848ac20203bb03c build by mockbuild@, 2018-11-03 01:26:55 0: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r----- ns:0 nr:41618688 dw:42273884 dr:0 al:8 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0[root@bwscdb12 ~]# drbdadm statusdrbd_data role:Secondary disk:UpToDate peer role:Primary replication:Established peer-disk:UpToDate |
备注:ro在主从服务器上分别显示 Primary/Secondary和Secondary/Primary
ds显示UpToDate/UpToDate,表示主从配置成功(注意这个需要时间初始化和同步的,请等待显示成上面的状态后再执行下面的步骤)。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
[root@bwscdb11 ~]# cat /proc/drbdversion: 8.4.11-1 (api:1/proto:86-101)GIT-hash: 66145a308421e9c124ec391a7848ac20203bb03c build by mockbuild@, 2018-11-03 01:26:55 1: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r----- ns:5242684 nr:0 dw:0 dr:5244780 al:8 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0[root@bwscdb11 ~]# cat /proc/drbdversion: 8.4.11-1 (api:1/proto:86-101)GIT-hash: 66145a308421e9c124ec391a7848ac20203bb03c build by mockbuild@, 2018-11-03 01:26:55 1: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r----- ns:5242684 nr:0 dw:0 dr:5244780 al:8 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0[root@bwscdb11 ~]# [root@bwscdb11 ~]# drbdadm statusdrbd_data role:Primary disk:UpToDate peer role:Secondary replication:Established peer-disk:UpToDate[root@bwsc45 ~]# cat /proc/drbdversion: 8.4.11-1 (api:1/proto:86-101)GIT-hash: 66145a308421e9c124ec391a7848ac20203bb03c build by mockbuild@, 2018-11-03 01:26:55 1: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r----- ns:0 nr:5242684 dw:5242684 dr:0 al:8 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0[root@bwsc45 ~]# [root@bwsc45 ~]# drbdadm statusdrbd_data role:Secondary disk:UpToDate peer role:Primary replication:Established peer-disk:UpToDate |
同步完成
####***(node1,注意只有node1)
#挂载DRBD:(node1,注意只有node1)
#从刚才的状态上看到mounted和fstype参数为空,所以我们这步开始挂载DRBD到系统目录/drbd_data
(每个节点都需执行)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
mkdir -p /drbd_datamkfs.xfs /dev/drbd1mount /dev/drbd1 /drbd_data[root@bwsc44 ~]# df -hFilesystem Size Used Avail Use% Mounted on/dev/sda3 36G 5.6G 30G 16% /devtmpfs 1.9G 0 1.9G 0% /devtmpfs 1.9G 0 1.9G 0% /dev/shmtmpfs 1.9G 9.5M 1.9G 1% /runtmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup/dev/sda1 497M 207M 291M 42% /boottmpfs 379M 12K 379M 1% /run/user/42tmpfs 379M 0 379M 0% /run/user/0/dev/drbd1 3G 33M 3G 1% /drbd_data |
注:Secondary节点上不允许对DRBD设备进行任何操作,包括挂载;所有的读写操作只能在Primary节点上进行,
只有当Primary节点挂掉时,Secondary节点才能提升为Primary节点,并自动挂载DRBD继续工作。
##两节点上修改用户hacluster的密码(用户已经固定不可以改变)
|
1
|
[root@cml1 ~]# echo 000000 | passwd --stdin hacluster |
##注册pcs集群主机(默认注册使用用户名hacluster,和密码):
|
1
2
3
4
5
|
[root@bwscdb11 ~]# pcs cluster auth bwscdb11.bwscdb.local bwscdb12.bwscdb.localUsername: haclusterPassword: 000000bwscdb11: Authorizedbwscdb12: Authorized |
在集群上注册两台集群:
##设置集群
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
[root@bwscdb11 ~]# pcs cluster setup --name mycluster bwscdb11.bwscdb.local bwscdb12.bwscdb.local --force Destroying cluster on nodes: bwscdb11, bwscdb12...bwscdb12: Stopping Cluster (pacemaker)...bwscdb11: Stopping Cluster (pacemaker)...bwscdb12: Successfully destroyed clusterbwscdb11: Successfully destroyed clusterSending 'pacemaker_remote authkey' to 'bwscdb11', 'bwscdb12'bwscdb11: successful distribution of the file 'pacemaker_remote authkey'bwscdb12: successful distribution of the file 'pacemaker_remote authkey'Sending cluster config files to the nodes...bwscdb11: Succeededbwscdb12: SucceededSynchronizing pcsd certificates on nodes bwscdb11, bwscdb12...bwscdb11: Successbwscdb12: SuccessRestarting pcsd on the nodes in order to reload the certificates...bwscdb11: Successbwscdb12: Success |
接下来就在某个节点上已经生成来corosync配置文件:
|
1
2
3
|
[root@bwscdb11 ~]# cd /etc/corosync/[root@bwscdb11 corosync]# lscorosync.conf corosync.conf.example corosync.conf.example.udpu corosync.xml.example uidgid.d |
我们看一下注册进来的文件:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
[root@bwscdb11 corosync]# cat corosync.conftotem { version: 2 cluster_name: mycluster secauth: off transport: udpu}nodelist { node { ring0_addr: bwscdb11.bwscdb.local nodeid: 1 } node { ring0_addr: bwscdb12.bwscdb.local nodeid: 2 }}quorum { provider: corosync_votequorum two_node: 1}logging { to_logfile: yes logfile: /var/log/cluster/corosync.log to_syslog: yes}[root@bwscdb11 corosync]# |
启动集群:现在启动所有集群服务并启用它们。
|
1
2
3
4
5
6
7
8
9
|
[root@bwscdb11 corosync]# pcs cluster start --allbwscdb11: Starting Cluster (corosync)...bwscdb12: Starting Cluster (corosync)...bwscdb12: Starting Cluster (pacemaker)...bwscdb11: Starting Cluster (pacemaker)...[root@bwscdb11 corosync]# pcs cluster enable --allbwscdb11: Cluster Enabledbwscdb12: Cluster Enabled[root@bwscdb11 corosync]# |
##相当于启动来pacemaker和corosync:
|
1
2
3
4
5
6
7
8
9
10
11
12
|
[root@bwscdb11 corosync]# ps -ef | grep corosyncroot 3038 1 1 21:02 ? 00:00:00 corosyncroot 3149 1995 0 21:02 pts/0 00:00:00 grep --color=auto corosync[root@bwscdb11 corosync]# ps -ef | grep pacemakerroot 3057 1 0 21:02 ? 00:00:00 /usr/sbin/pacemakerd -fhaclust+ 3058 3057 0 21:02 ? 00:00:00 /usr/libexec/pacemaker/cibroot 3059 3057 0 21:02 ? 00:00:00 /usr/libexec/pacemaker/stonithdroot 3060 3057 0 21:02 ? 00:00:00 /usr/libexec/pacemaker/lrmdhaclust+ 3061 3057 0 21:02 ? 00:00:00 /usr/libexec/pacemaker/attrdhaclust+ 3062 3057 0 21:02 ? 00:00:00 /usr/libexec/pacemaker/penginehaclust+ 3063 3057 0 21:02 ? 00:00:00 /usr/libexec/pacemaker/crmdroot 3167 1995 0 21:02 pts/0 00:00:00 grep --color=auto pacemaker |
查看集群的状态(显示为no faults就是ok)
|
1
2
3
4
5
6
7
8
9
10
11
12
|
[root@bwscdb11 ~]# corosync-cfgtool -sPrinting ring status.Local node ID 1RING ID 0 id = 10.101.11.11 status = ring 0 active with no faults[root@bwscdb12 yum.repos.d]# corosync-cfgtool -sPrinting ring status.Local node ID 2RING ID 0 id = 10.101.11.12 status = ring 0 active with no faults |
可以查看集群是否有错:
|
1
2
3
4
5
|
[root@bwscdb11 corosync]# crm_verify -L -V error: unpack_resources:Resource start-up disabled since no STONITH resources have been defined error: unpack_resources:Either configure some or disable STONITH with the stonith-enabled option error: unpack_resources:NOTE: Clusters with shared data need STONITH to ensure data integrityErrors found during check: config not valid |
##因为我们没有配置STONITH设备,所以我们下面要关闭
关闭STONITH设备:
使用以下pcs命令禁用STONITH。
|
1
2
3
|
[root@bwscdb11 corosync]# pcs property set stonith-enabled=false[root@bwscdb11 corosync]# crm_verify -L -V[root@bwscdb12 ~]# pcs property set stonith-enabled=false |
#已经显示不报错了
|
1
|
[root@bwscdb12 ~]# crm_verify -L -V |
#接下来,因为两个节点所以对于仲裁政策,请忽略它。
#pcs property set no-quorum-policy=ignore
|
1
2
3
4
5
6
7
8
|
[root@bwscdb11 corosync]# pcs property listCluster Properties: cluster-infrastructure: corosync cluster-name: mycluster dc-version: 1.1.19-8.el7_6.4-c3c624ea3d have-watchdog: false stonith-enabled: false[root@bwscdb11 corosync]# |
Mysql安装和配置
##这里我是使用yum直接安装的,如果使用编译安装也是一样的但是就要在
|
1
|
wget http://yum.bwceshi.top/SE_tools/cmake-2.8.8.tar.gz |
安装过程在这里就不详细说明了
PS 两边用户一样 环境变量一样 mysql 安装只需要在一边安装即可
> /lib/systemd/system/mysqld.service
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
cat >> /lib/systemd/system/mysqld.service <<EOF[Unit]Description=MySQL Community ServerAfter=network.targetAfter=syslog.target [Install]WantedBy=multi-user.targetAlias=mysql.service [Service]User=mysqlGroup=mysql # Execute pre and post scripts as rootPermissionsStartOnly=true # Needed to create system tables etc.#ExecStartPre=/usr/bin/mysql-systemd-start pre # Start main serviceExecStart=/drbd_data/mysql56/bin/mysqld_safe # Don't signal startup success before a ping works#ExecStartPost=/usr/bin/mysql-systemd-start post # Give up if ping don't get an answerTimeoutSec=600 Restart=alwaysEOFsystemctl daemon-reloadsystemctl start mysqldsystemctl status mysqldsystemctl stop mysqldsystemctl restart mysqldsystemctl status mysqld |
登录到数据库
用mysql -uroot命令登录到mysqld,
|
1
2
3
4
5
6
7
8
9
10
|
[root@bwscdb11 bin]# mysql -uroot -p000000Warning: Using a password on the command line interface can be insecure.Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 1Server version: 5.6.16-log Source distributionCopyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. |
##配置之前最好检查服务没有启动
|
1
2
3
4
5
|
systemctl stop mysqldfuser -m -v -k /drbd_dataumount /dev/drbd1systemctl stop drbdsystemctl enable mysqld |
####需要设置开机启动在下面配置systemd:mysqld时才会出现。
Crmsh安装和资源管理
借助crmsh配置mysql高可用
|
1
2
3
4
5
6
7
8
9
10
11
|
[root@bwscdb11 ~]# crmcrm(live)# statusStack: corosyncCurrent DC: bwscdb11 (version 1.1.19-8.el7_6.4-c3c624ea3d) - partition with quorumLast updated: Tue Apr 30 06:13:11 2019Last change: Mon Apr 29 21:05:49 2019 by root via cibadmin on bwscdb112 nodes configured0 resources configuredOnline: [ bwscdb11.bwscdb.local bwscdb12.bwscdb.local ]No resourcescrm(live)# |
##配置之前最好检查服务没有启动
|
1
2
3
4
5
6
|
[root@bwscdb11 ~]# systemctl stop mysqld[root@bwscdb11 ~]# fuser -m -v -k /dev/drbd1 [root@bwscdb11 ~]# umount /dev/drbd1[root@bwscdb11 ~]# systemctl stop drbd#[root@bwscdb11 ~]# systemctl enable mysqldCreated symlink from /etc/systemd/system/multi-user.target.wants/mysqld.service to /usr/lib/systemd/system/mysqld.service. |
|
1
2
3
4
5
6
7
8
|
[root@bwscdb11 ~]# crmcrm(live)# configure#关闭STONITH设备crm(live)configure# property stonith-enabled=false#仲裁政策crm(live)configure# property no-quorum-policy=ignorecrm(live)configure# property migration-limit=1crm(live)configure# verify |
#创建资源
|
1
2
3
|
crm(live)configure# primitive mysqldrbd ocf:linbit:drbd params drbd_resource=drbd_data op start timeout=240 op stop timeout=100 op monitor role=Master interval=20 timeout=30 op monitor role=Slave interval=30 timeout=30crm(live)configure# crm(live)configure# |
#创建主从资源
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
crm(live)configure# ms ms_mysqldrbd mysqldrbd meta master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=truecrm(live)configure# verifycrm(live)configure# shownode 1: bwscdb11.bwscdb.localnode 2: bwscdb12.bwscdb.localprimitive mysqldrbd ocf:linbit:drbd \ params drbd_resource=drbd_data \ op start timeout=240 interval=0 \ op stop timeout=100 interval=0 \ op monitor role=Master interval=20 timeout=30 \ op monitor role=Slave interval=30 timeout=30ms ms_mysqldrbd mysqldrbd \ meta master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=trueproperty cib-bootstrap-options: \ have-watchdog=false \ dc-version=1.1.19-8.el7_6.4-c3c624ea3d \ cluster-infrastructure=corosync \ cluster-name=mycluster \ stonith-enabled=false \ no-quorum-policy=ignore \ migration-limit=1 crm(live)configure# commit |
增加文件系统资源:
|
1
2
3
|
crm(live)configure# primitive mystore ocf:heartbeat:Filesystem params device=/dev/drbd1 directory=/drbd_data fstype=xfs op start timeout=60 opstop timeout=60 crm(live)configure# crm(live)configure# verify |
给文件系统类型和drbd做亲缘性绑定(inf为证书为接近,当位负数时候为分离)。
###资源间亲缘关系
|
1
2
3
|
crm(live)configure#colocation mystore_with_ms_mysqldrbd inf: mystore ms_mysqldrbd:Master crm(live)configure# verify |
做顺序约束,当drbd起来之后才对文件系统进行绑定:
#资源顺序
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
crm(live)configure#order mystore_after_ms_mysqldrbd mandatory: ms_mysqldrbd:promote mystore:start crm(live)configure# verifycrm(live)configure# commitcrm(live)configure# shownode 1: bwscdb11.bwscdb.localnode 2: bwscdb12.bwscdb.localprimitive mysqldrbd ocf:linbit:drbd \ params drbd_resource=drbd_data \ op start timeout=240 interval=0 \ op stop timeout=100 interval=0 \ op monitor role=Master interval=20 timeout=30 \ op monitor role=Slave interval=30 timeout=30primitive mystore Filesystem \ params device="/dev/drbd1" directory="/drbd_data" fstype=xfs \ op start timeout=60 interval=0 opstopms ms_mysqldrbd mysqldrbd \ meta master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=trueorder mystore_after_ms_mysqldrbd Mandatory: ms_mysqldrbd:promote mystore:startcolocation mystore_with_ms_mysqldrbd inf: mystore ms_mysqldrbd:Masterproperty cib-bootstrap-options: \ have-watchdog=false \ dc-version=1.1.19-8.el7_6.4-c3c624ea3d \ cluster-infrastructure=corosync \ cluster-name=mycluster \ stonith-enabled=false \ no-quorum-policy=ignore \ migration-limit=1 |
查看
|
1
2
3
4
5
6
7
8
9
10
11
|
[root@bwscdb12 src]# df -hFilesystem Size Used Avail Use% Mounted on/dev/sda3 36G 5.6G 30G 16% /devtmpfs 1.9G 0 1.9G 0% /devtmpfs 1.9G 38M 1.9G 2% /dev/shmtmpfs 1.9G 9.5M 1.9G 1% /runtmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup/dev/sda1 497M 207M 291M 42% /boottmpfs 379M 12K 379M 1% /run/user/42tmpfs 379M 0 379M 0% /run/user/0/dev/drbd1 40G 49M 38G 1% /drbd_data |
增加mysql资源,资源间在一起启动
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
[root@bwscdb11 ~]# crmcrm(live)# configure#创建资源crm(live)configure# primitive mysqld systemd:mysqld#资源间亲缘关系crm(live)configure# colocation mysqld_with_mystore inf: mysqld mystorecrm(live)configure# verifyWARNING: mysqld: default timeout 20s for start is smaller than the advised 100WARNING: mysqld: default timeout 20s for stop is smaller than the advised 100##会有警告,直接edit编辑即可primitive mysqld systemd:mysqld op start timeout=100 interval=0 op stop timeout=100 interval=0crm(live)configure# commit[root@bwscdb11 ~]# systemctl status mysqld● mysqld.service - Cluster Controlled mysqld Loaded: loaded (/usr/lib/systemd/system/mysqld.service; disabled; vendor preset: disabled) Drop-In: /run/systemd/system/mysqld.service.d └─50-pacemaker.conf Active: active (running) since Mon 2019-05-20 17:19:16 CST; 11s ago Main PID: 8787 (mysqld_safe) CGroup: /system.slice/mysqld.service ├─8787 /bin/sh /drbd_data/mysql56/bin/mysqld_safe └─9534 /drbd_data/mysql56/bin/mysqld --basedir=/drbd_data/mysql56 --datadir=/drbd_data/mysqldata --plugin-dir=/drbd_data/mysql56/lib/plugin --log-error=/drbd_data/mysql56/txy_m...May 20 17:19:16 bwscdb11.bwscdb.local systemd[1]: Started Cluster Controlled mysqld.May 20 17:19:16 bwscdb11.bwscdb.local mysqld_safe[8787]: 190520 17:19:16 mysqld_safe Logging to '/drbd_data/mysql56/txy_mysql_error.log'.May 20 17:19:16 bwscdb11.bwscdb.local mysqld_safe[8787]: 190520 17:19:16 mysqld_safe Starting mysqld daemon with databases from /drbd_data/mysqldata |
做顺序约束,先挂载文件系统,然后启动mysqld资源
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
crm(live)configure# order mysqld_after_mystore mandatory: mystore mysqld crm(live)configure# verifycrm(live)configure# commitcrm(live)configure# shownode 1: bwscdb11.bwscdb.localnode 2: bwscdb12.bwscdb.localprimitive mysqld systemd:mysqldprimitive mysqldrbd ocf:linbit:drbd \ params drbd_resource=drbd_data \ op start timeout=240 interval=0 \ op stop timeout=100 interval=0 \ op monitor role=Master interval=20 timeout=30 \ op monitor role=Slave interval=30 timeout=30primitive mystore Filesystem \ params device="/dev/drbd1" directory="/drbd_data" fstype=xfs \ op start timeout=60 interval=0 opstopms ms_mysqldrbd mysqldrbd \ meta master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=trueorder mysqld_after_mystore Mandatory: mystore mysqldcolocation mysqld_with_mystore inf: mysqld mystoreorder mystore_after_ms_mysqldrbd Mandatory: ms_mysqldrbd:promote mystore:startcolocation mystore_with_ms_mysqldrbd inf: mystore ms_mysqldrbd:Masterproperty cib-bootstrap-options: \ have-watchdog=false \ dc-version=1.1.19-8.el7_6.4-c3c624ea3d \ cluster-infrastructure=corosync \ cluster-name=mycluster \ stonith-enabled=false \ no-quorum-policy=ignore \ migration-limit=1 |
检测资源,并且看一下node2的mysql是否已经启动:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
[root@bwscdb11 yum.repos.d]# crmcrm(live)# statusStack: corosyncCurrent DC: bwscdb12 (version 1.1.19-8.el7_6.4-c3c624ea3d) - partition with quorumLast updated: Tue Apr 30 23:06:55 2019Last change: Tue Apr 30 23:06:36 2019 by root via cibadmin on bwscdb112 nodes configured4 resources configuredOnline: [ bwscdb11.bwscdb.local bwscdb12.bwscdb.local ]Full list of resources: Master/Slave Set: ms_mysqldrbd [mysqldrbd] Masters: [ bwscdb11 ] Slaves: [ bwscdb12 ] mystore(ocf::heartbeat:Filesystem):Started bwscdb11 mysqld(systemd:mysqld):Started bwscdb11 |
增加VIP资源,作虚拟IP调度 crm configure primitive eth0_virtual ocf:heartbeat:IPaddr params ip="200.zzz.z.162" nic="eth0" cidr_netmask="24" broadcast="200.zzz.z.255" op monitor interval="10s" timeout="20s"
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
crm(live)# crm(live)# configurecrm(live)configure# primitive myvip ocf:heartbeat:IPaddr params ip="10.101.11.13" nic="eth0" cidr_netmask="24" op monitor interval=20 timeout=20 on-fail=restart#资源间亲缘关系 myvip ms_mysqldrbd 在一起启动crm(live)configure# colocation vip_with_ms_mysqldrbd inf: myvip mysqld crm(live)configure# verifycrm(live)configure# commitcrm(live)configure# shownode 1: bwscdb11.bwscdb.localnode 2: bwscdb12.bwscdb.localprimitive mysqld systemd:mysqldprimitive mysqldrbd ocf:linbit:drbd \ params drbd_resource=drbd_data \ op start timeout=240 interval=0 \ op stop timeout=100 interval=0 \ op monitor role=Master interval=20 timeout=30 \ op monitor role=Slave interval=30 timeout=30primitive mystore Filesystem \ params device="/dev/drbd1" directory="/drbd_data" fstype=xfs \ op start timeout=60 interval=0 opstopprimitive myvip IPaddr \ params ip=10.101.11.13 nic=eth0 cidr_netmask=24 \ op monitor interval=20 timeout=20 on-fail=restartms ms_mysqldrbd mysqldrbd \ meta master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=trueorder mysqld_after_mystore Mandatory: mystore mysqldcolocation mysqld_with_mystore inf: mysqld mystoreorder mystore_after_ms_mysqldrbd Mandatory: ms_mysqldrbd:promote mystore:startcolocation mystore_with_ms_mysqldrbd inf: mystore ms_mysqldrbd:Mastercolocation vip_with_ms_mysqldrbd inf: myvip mysqldproperty cib-bootstrap-options: \ have-watchdog=false \ dc-version=1.1.19-8.el7_6.4-c3c624ea3d \ cluster-infrastructure=corosync \ cluster-name=mycluster \ stonith-enabled=false \ no-quorum-policy=ignore \ migration-limit=1[root@bwscdb11 ~]# ip addr | grep 10.101.11 inet 10.101.11.11/24 brd 10.101.11.255 scope global eth0 inet 10.101.11.13/24 brd 10.101.11.255 scope global secondary eth0 |
#测试
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
[root@bwscdb11 ~]# mysql -uroot -p000000Welcome to the mysqld monitor. Commands end with ; or \g.Your mysqld connection id is 5Server version: 5.5.60-mysqld mysqld ServerCopyright (c) 2000, 2018, Oracle, mysqld Corporation Ab and others.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysqld [(none)]> use mysql;Reading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -ADatabase changedmysqld [mysql]> select database();+------------+| database() |+------------+| mysql |+------------+1 row in set (0.00 sec)mysqld [mysql]> select User,Host,Password from user;+------+-----------+-------------------------------------------+| User | Host | Password |+------+-----------+-------------------------------------------+| root | localhost | *032197AE5731D4664921A6CCAC7CFCE6A0698693 || root | bwscdb11 | || root | 127.0.0.1 | || root | ::1 | || | localhost | || | bwscdb11 | |+------+-----------+-------------------------------------------+6 rows in set (0.00 sec)mysqld [mysql]> delete from mysql.user where user='';Query OK, 2 rows affected (0.00 sec)mysqld [mysql]> delete from mysql.user where password='';Query OK, 3 rows affected (0.00 sec)mysqld [mysql]> flush privileges;Query OK, 0 rows affected (0.00 sec)mysqld [mysql]> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('000000');Query OK, 0 rows affected (0.00 sec)mysqld [mysql]> flush privileges;= PASSWORD('000000');flush privileges;Query OK, 0 rows affected (0.00 sec)mysqld [mysql]> use mysqlDatabase changedmysqld [mysql]> update user set host = '%' where user = 'root';Query OK, 1 row affected (0.00 sec)Rows matched: 1 Changed: 1 Warnings: 0mysqld [mysql]> GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '000000' WITH GRANT OPTION;Query OK, 0 rows affected (0.00 sec)mysqld [mysql]> mysqld [mysql]> mysqld [mysql]> SET PASSWORD FOR 'root'@'%' = PASSWORD('000000');ERROR 1133 (42000): Can't find any matching row in the user tablemysqld [mysql]> mysqld [mysql]> flush privileges;Query OK, 0 rows affected (0.00 sec)mysqld [mysql]> mysqld [mysql]> mysqld [mysql]> exitBye[root@bwscdb11 ~]# mysql -uroot -p000000Welcome to the mysqld monitor. Commands end with ; or \g.Your mysqld connection id is 6Server version: 5.5.60-mysqld mysqld ServerCopyright (c) 2000, 2018, Oracle, mysqld Corporation Ab and others.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysqld [(none)]> |
###下面我们把 bwsw112 设置为 standby,然后在 bwscdb12 访问:
#standby
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
[root@bwscdb11 ~]# crm node standby bwscdb11[root@bwscdb11 ~]# crm statusStack: corosyncCurrent DC: bwscdb12 (version 1.1.19-8.el7_6.4-c3c624ea3d) - partition with quorumLast updated: Tue Apr 30 23:23:07 2019Last change: Tue Apr 30 23:22:53 2019 by root via crm_attribute on bwscdb112 nodes configured5 resources configuredNode bwscdb11: standbyOnline: [ bwscdb12 ]Full list of resources: Master/Slave Set: ms_mysqldrbd [mysqldrbd] Masters: [ bwscdb12 ] Stopped: [ bwscdb11 ] mystore(ocf::heartbeat:Filesystem):Started bwscdb12 mysqld(systemd:mysqld):Started bwscdb12 myvip(ocf::heartbeat:IPaddr):Started bwscdb12 |
在 bwscdb12 访问:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
[root@bwscdb12 yum.repos.d]# mysql -uroot -p000000Welcome to the mysqld monitor. Commands end with ; or \g.Your mysqld connection id is 2Server version: 5.5.60-mysqld mysqld ServerCopyright (c) 2000, 2018, Oracle, mysqld Corporation Ab and others.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysqld [(none)]> select User,Host,Password from user;ERROR 1046 (3D000): No database selectedmysqld [(none)]> use mysql;Reading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -ADatabase changedmysqld [mysql]> select User,Host,Password from user;+------+-----------+-------------------------------------------+| User | Host | Password |+------+-----------+-------------------------------------------+| root | % | *032197AE5731D4664921A6CCAC7CFCE6A0698693 || root | localhost | *032197AE5731D4664921A6CCAC7CFCE6A0698693 |+------+-----------+-------------------------------------------+2 rows in set (0.00 sec)mysqld [mysql]> exit# online 节点1 standby 节点2 切换后在online 节点2crm node online bwscdb11sleep 5crm node standby bwscdb12sleep 10 crm node online bwscdb12[root@bwscdb11 ~]# crm statusStack: corosyncCurrent DC: bwscdb12 (version 1.1.19-8.el7_6.4-c3c624ea3d) - partition with quorumLast updated: Tue Apr 30 23:26:48 2019Last change: Tue Apr 30 23:26:44 2019 by root via crm_attribute on bwscdb112 nodes configured5 resources configuredOnline: [ bwscdb11.bwscdb.local bwscdb12.bwscdb.local ]Full list of resources: Master/Slave Set: ms_mysqldrbd [mysqldrbd] Masters: [ bwscdb11 ] Slaves: [ bwscdb12 ] mystore(ocf::heartbeat:Filesystem):Started bwscdb11 mysqld(systemd:mysqld):Started bwscdb11 myvip(ocf::heartbeat:IPaddr):Started bwscdb11[root@bwscdb11 yum.repos.d]# mysql -uroot -p000000Welcome to the mysqld monitor. Commands end with ; or \g.Your mysqld connection id is 2Server version: 5.5.60-mysqld mysqld ServerCopyright (c) 2000, 2018, Oracle, mysqld Corporation Ab and others.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysqld [(none)]> |
move 资源的方式迁移 切换主备
|
1
2
|
[root@bwsc45 yum.repos.d]# pcs resource move ms_haproxy_drbd bwscdb12.bwscdb.local[root@bwsc45 yum.repos.d]# crm status |

浙公网安备 33010602011771号