阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

DRBD+Pacemaker实现DRBD主从角色的自动切换

168次阅读
没有评论

共计 9603 个字符,预计需要花费 25 分钟才能阅读完成。

前提:

drbd 设备名, 以及 drbd 设备的挂载点都要与对端节点保持一致;

因为我们

定义资源,使用到设备名及挂载点,所以两端的 drbd 设备名和设备的挂载点都必须保持一致;

 

如何定义主从资源?

主从资源是一类特殊的克隆资源;

要成为克隆资源,首先必须定义成主资源;

因此,要想定义成主从资源,首先必须定义成主资源。为保证成为主资源的同时,drdb 设备可以同时挂载,还需定义 Filesystem

————————————– 分割线 ————————————–

 

相关阅读

Linux 高可用(HA)集群之 DRBD 详解 http://www.linuxidc.com/Linux/2013-08/89035.htm

DRBD 中文应用指南 PDF http://www.linuxidc.com/Linux/2013-08/89034.htm

CentOS 6.3 下 DRBD 安装配置笔记 http://www.linuxidc.com/Linux/2013-06/85600.htm

基于 DRBD+Corosync 实现高可用 MySQL http://www.linuxidc.com/Linux/2013-05/84471.htm

CentOS 6.4 下 DRBD 安装配置 http://www.linuxidc.com/Linux/2013-09/90536.htm

————————————– 分割线 ————————————–

clone-max: 在集群中最多能运行多少份克隆资源,默认和集群中的节点数相同;

clone-node-max:每个节点上最多能运行多少份克隆资源,默认是 1;

notify:当成功启动或关闭一份克隆资源,要不要通知给其它的克隆资源,可用值为 false,true;默认值是 true;

globally-unique: 是否为集群中各节点的克隆资源取一个全局唯一名称,用来描述不同的功能,默认为 true;

ordered:克隆资源是否按顺序 (order) 启动,而非一起 (parallel) 启动, 可用值为 false,true;默认值是 true;

interleave:当对端的实例有了 interleave,就可以改变克隆资源或主资源中的顺序约束;

 

master-max:最多有多少份克隆资源可以被定义成主资源,默认是 1;

master-node-max:每个节点上最多有多少份克隆资源可以被提升为主资源,默认是 1;

检查 node1,node2 是否安装了 corosync,pacemaker,crmsh,pssh

[root@node1 ~]# rpm -q corosync pacemaker crmsh pssh

corosync-1.4.1-17.el6.x86_64

pacemaker-1.1.10-14.el6.x86_64

crmsh-1.2.6-4.el6.x86_64

pssh-2.3.1-2.el6.x86_64

[root@node1 ~]# ssh node2.ja.com ‘rpm -q corosync pacemaker crmsh pssh’

corosync-1.4.1-17.el6.x86_64

pacemaker-1.1.10-14.el6.x86_64

crmsh-1.2.6-4.el6.x86_64

pssh-2.3.1-2.el6.x86_64

 

若未安装,则执行 yum -y install corosync pacemaker crmsh pssh

 

一旦配置成集群资源,就不能让他们自动启动

[root@node1 ~]# umount /drbd/

[root@node1 ~]# drbdadm secondary mystore1

[root@node1 ~]# service drbd stop

[root@node1 ~]# chkconfig drbd off

[root@node1 ~]# ssh node2.ja.com ‘service drbd stop;chkconfig drbd off’

 

 

 

[root@node1 ~]# cd /etc/corosync/

[root@node1 corosync]# cp corosync.conf.example corosync.conf

 

corosync.conf 修改后的内容如下所示:

[root@node1 corosync]# egrep -v ‘^$|^[[:space:]]*#’ /etc/corosync/corosync.conf

compatibility: whitetank

totem {

version: 2

secauth: on

threads: 0

interface {

ringnumber: 0

bindnetaddr: 172.16.16.0

mcastaddr: 226.94.16.15

mcastport: 5405

ttl: 1

}

}

logging {

fileline: off

to_stderr: no

to_logfile: yes

to_syslog: no

logfile: /var/log/cluster/corosync.log

debug: off

timestamp: on

logger_subsys {

subsys: AMF

debug: off

}

}

amf {

mode: disabled

}

 

service {

name: pacemaker

ver:  0

}

aisexec {

user:  root

group: root

}

更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2014-05/101304p2.htm

DRBD 的详细介绍:请点这里
DRBD 的下载地址:请点这里

使用 corosync-keygen 生成认证文件的时候,由于熵池的随机数不够用,可能需要等待较长时间,在下面,我们就采取一种简便易行的方法,在生产环境尽量不要这么用,因为不安全。

[root@node1 corosync]# mv /dev/random /dev/h

[root@node1 corosync]# ln /dev/urandom /dev/random

[root@node1 corosync]# corosync-keygen

Corosync Cluster Engine Authentication key generator.

Gathering 1024 bits for key from /dev/random.

Press keys on your keyboard to generate entropy.

Writing corosync key to /etc/corosync/authkey.

[root@node1 corosync]# rm -rf /dev/random

[root@node1 corosync]# mv /dev/h /dev/random

[root@node1 corosync]# ll authkey corosync.conf

-r——– 1 root root 128 Apr 28 17:23 authkey

-rw-r–r– 1 root root 708 Apr 28 13:51 corosync.conf

[root@node1 corosync]# scp -p authkey corosync.conf node2.ja.com:/etc/corosync/

验证对端认证文件和主配置文件的权限,是否保持不变

[root@node1 corosync]# ssh node2.ja.com ‘ls -l /etc/corosync/{authkey,corosync.conf}’

-r——– 1 root root 128 Apr 28 17:23 /etc/corosync/authkey

-rw-r–r– 1 root root 708 Apr 28 13:51 /etc/corosync/corosync.conf

 

启动 corosync 服务

[root@node1 corosync]# service corosync start

[root@node1 corosync]# ssh node2.ja.com ‘service corosync start’

 

现在就一切正常了

[root@node1 corosync]# crm status

Last updated: Mon Apr 28 18:20:41 2014

Last change: Mon Apr 28 18:16:01 2014 via crmd on node1.ja.com

Stack: classic openais (with plugin)

Current DC: node2.ja.com – partition with quorum

Version: 1.1.10-14.el6-368c726

2 Nodes configured, 2 expected votes

1 Resources configured

Online: [node1.ja.com node2.ja.com]

 

[root@node2 drbd.d]# crm status

Last updated: Mon Apr 28 06:19:36 2014

Last change: Mon Apr 28 18:16:01 2014 via crmd on node1.ja.com

Stack: classic openais (with plugin)

Current DC: node2.ja.com – partition with quorum

Version: 1.1.10-14.el6-368c726

2 Nodes configured, 2 expected votes

1 Resources configured

Online: [node1.ja.com node2.ja.com]

 

 

 

[root@node1 ~]# crm

crm(live)# configure

crm(live)configure# property stonith-enable=false

crm(live)configure# property no-quorum-policy=ignore

crm(live)configure# rsc_defaults resource-stickiness=100

crm(live)configure# verify

crm(live)configure# commit

crm(live)configure# show

crm(live)resource# cd

crm(live)# exit

bye

 

[root@node1 ~]# crm

crm(live)# ra

crm(live)ra# classes

lsb

ocf / heartbeat linbit pacemaker

service

stonith

crm(live)ra# list ocf heartbeat

CTDB Dummy Filesystem IPaddr IPaddr2 IPsrcaddr

LVM MailTo Route SendArp Squid VirtualDomain

Xinetd apache conntrackd dhcpd ethmonitor exportfs

mysql mysql-proxy named nfsserver nginx pgsql

postfix rsyncd rsyslog slapd symlink tomcat

crm(live)ra# list ocf pacemaker

ClusterMon Dummy HealthCPU HealthSMART Stateful SysInfo

SystemHealth controld ping pingd remote

crm(live)ra# list ocf linbit

drbd

crm(live)ra# meta ocf:linbit:drbd

 

crm(live)ra# cd

crm(live)# configure

crm(live)configure# primitive mysqlstore2 ocf:linbit:drbd params drbd_resource=mystore1 op monitor role=Master intrval=30s timeout=20s op mointor role=Slave interval=60s timeout=20s op start timeout=240s op stop timeout=100s

crm(live)configure# verify

crm(live)configure# master ms_mysqlstore1 mysqlstore meta master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=”True”

crm(live)configure# verify

crm(live)configure# commit

crm(live)configure# show

crm(live)configure# cd

crm(live)# node standby node1.ja.com

此时发现 node2 自动提升为主的

crm(live)# status

让 node1 再上线,发现 node1,是从的;node2 还是主的

crm(live)# node online node1.ja.com

 

为主节点定义文件系统资源

# crm

crm(live)# configure

crm(live)configure# primitive WebFS ocf:heartbeat:Filesystem params device=”/dev/drbd0″ directory=”/www” fstype=”ext3″

crm(live)configure# colocation WebFS_on_MS_webdrbd inf: WebFS MS_Webdrbd:Master

crm(live)configure# order WebFS_after_MS_Webdrbd inf: MS_Webdrbd:promote WebFS:start

crm(live)configure# verify

crm(live)configure# commit

 

查看集群中资源的运行状态:

crm status

============

Last updated: Fri Jun 17 06:26:03 2011

Stack: openais

Current DC: node2.a.org – partition with quorum

Version: 1.0.11-1554a83db0d3c3e546cfd3aaff6af1184f79ee87

2 Nodes configured, 2 expected votes

2 Resources configured.

============

 

Online: [node2.a.org node1.a.org]

 

Master/Slave Set: MS_Webdrbd

Masters: [node2.a.org]

Slaves: [node1.a.org]

WebFS (ocf::heartbeat:Filesystem): Started node2.a.org

 

由上面的信息可以发现,此时 WebFS 运行的节点和 drbd 服务的 Primary 节点均为 node2.a.org;我们在 node2 上复制一些文件至 /www 目录(挂载点),而后在故障故障转移后查看 node1 的 /www 目录下是否存在这些文件。

# cp /etc/rc./rc.sysinit /www

 

下面我们模拟 node2 节点故障,看此些资源可否正确转移至 node1。

 

以下命令在 Node2 上执行:

# crm node standby

# crm status

============

Last updated: Fri Jun 17 06:27:03 2011

Stack: openais

Current DC: node2.a.org – partition with quorum

Version: 1.0.11-1554a83db0d3c3e546cfd3aaff6af1184f79ee87

2 Nodes configured, 2 expected votes

2 Resources configured.

============

 

Node node2.a.org: standby

Online: [node1.a.org]

 

Master/Slave Set: MS_Webdrbd

Masters: [node1.a.org]

Stopped: [webdrbd:0]

WebFS (ocf::heartbeat:Filesystem): Started node1.a.org

 

由上面的信息可以推断出,node2 已经转入 standby 模式,其 drbd 服务已经停止,但故障转移已经完成,所有资源已经正常转移至 node1。

 

在 node1 可以看到在 node2 作为 primary 节点时产生的保存至 /www 目录中的数据,在 node1 上均存在一份拷贝。

 

让 node2 重新上线:

# crm node online

[root@node2 ~]# crm status

============

Last updated: Fri Jun 17 06:30:05 2011

Stack: openais

Current DC: node2.a.org – partition with quorum

Version: 1.0.11-1554a83db0d3c3e546cfd3aaff6af1184f79ee87

2 Nodes configured, 2 expected votes

2 Resources configured.

============

 

Online: [node2.a.org node1.a.org]

 

Master/Slave Set: MS_Webdrbd

Masters: [node1.a.org]

Slaves: [node2.a.org]

WebFS (ocf::heartbeat:Filesystem): Started node1.a.org

前提:

drbd 设备名, 以及 drbd 设备的挂载点都要与对端节点保持一致;

因为我们

定义资源,使用到设备名及挂载点,所以两端的 drbd 设备名和设备的挂载点都必须保持一致;

 

如何定义主从资源?

主从资源是一类特殊的克隆资源;

要成为克隆资源,首先必须定义成主资源;

因此,要想定义成主从资源,首先必须定义成主资源。为保证成为主资源的同时,drdb 设备可以同时挂载,还需定义 Filesystem

————————————– 分割线 ————————————–

 

相关阅读

Linux 高可用(HA)集群之 DRBD 详解 http://www.linuxidc.com/Linux/2013-08/89035.htm

DRBD 中文应用指南 PDF http://www.linuxidc.com/Linux/2013-08/89034.htm

CentOS 6.3 下 DRBD 安装配置笔记 http://www.linuxidc.com/Linux/2013-06/85600.htm

基于 DRBD+Corosync 实现高可用 MySQL http://www.linuxidc.com/Linux/2013-05/84471.htm

CentOS 6.4 下 DRBD 安装配置 http://www.linuxidc.com/Linux/2013-09/90536.htm

————————————– 分割线 ————————————–

clone-max: 在集群中最多能运行多少份克隆资源,默认和集群中的节点数相同;

clone-node-max:每个节点上最多能运行多少份克隆资源,默认是 1;

notify:当成功启动或关闭一份克隆资源,要不要通知给其它的克隆资源,可用值为 false,true;默认值是 true;

globally-unique: 是否为集群中各节点的克隆资源取一个全局唯一名称,用来描述不同的功能,默认为 true;

ordered:克隆资源是否按顺序 (order) 启动,而非一起 (parallel) 启动, 可用值为 false,true;默认值是 true;

interleave:当对端的实例有了 interleave,就可以改变克隆资源或主资源中的顺序约束;

 

master-max:最多有多少份克隆资源可以被定义成主资源,默认是 1;

master-node-max:每个节点上最多有多少份克隆资源可以被提升为主资源,默认是 1;

检查 node1,node2 是否安装了 corosync,pacemaker,crmsh,pssh

[root@node1 ~]# rpm -q corosync pacemaker crmsh pssh

corosync-1.4.1-17.el6.x86_64

pacemaker-1.1.10-14.el6.x86_64

crmsh-1.2.6-4.el6.x86_64

pssh-2.3.1-2.el6.x86_64

[root@node1 ~]# ssh node2.ja.com ‘rpm -q corosync pacemaker crmsh pssh’

corosync-1.4.1-17.el6.x86_64

pacemaker-1.1.10-14.el6.x86_64

crmsh-1.2.6-4.el6.x86_64

pssh-2.3.1-2.el6.x86_64

 

若未安装,则执行 yum -y install corosync pacemaker crmsh pssh

 

一旦配置成集群资源,就不能让他们自动启动

[root@node1 ~]# umount /drbd/

[root@node1 ~]# drbdadm secondary mystore1

[root@node1 ~]# service drbd stop

[root@node1 ~]# chkconfig drbd off

[root@node1 ~]# ssh node2.ja.com ‘service drbd stop;chkconfig drbd off’

 

 

 

[root@node1 ~]# cd /etc/corosync/

[root@node1 corosync]# cp corosync.conf.example corosync.conf

 

corosync.conf 修改后的内容如下所示:

[root@node1 corosync]# egrep -v ‘^$|^[[:space:]]*#’ /etc/corosync/corosync.conf

compatibility: whitetank

totem {

version: 2

secauth: on

threads: 0

interface {

ringnumber: 0

bindnetaddr: 172.16.16.0

mcastaddr: 226.94.16.15

mcastport: 5405

ttl: 1

}

}

logging {

fileline: off

to_stderr: no

to_logfile: yes

to_syslog: no

logfile: /var/log/cluster/corosync.log

debug: off

timestamp: on

logger_subsys {

subsys: AMF

debug: off

}

}

amf {

mode: disabled

}

 

service {

name: pacemaker

ver:  0

}

aisexec {

user:  root

group: root

}

更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2014-05/101304p2.htm

DRBD 的详细介绍:请点这里
DRBD 的下载地址:请点这里

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计9603字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中