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

DRBD主从角色手动切换的实现

124次阅读
没有评论

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

主机规划

172.16.16.15  node1.linuxidc.com

172.16.16.16  node2.linuxidc.com

 

一、准备工作

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

相关阅读

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

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

1. 为各主机设置主机名,IP 地址,并测试主机连通性

分别为各节点设置主机名

node1: 

hostname  node1.linuxidc.com

node2: 

hostname  node2.linuxidc.com

 

确保各主机在重启之后,主机名保持不变

node1: 

sed -i ‘s/\(HOSTNAME=\).*/\1node1.linuxidc.com/p’ /etc/sysconfig/network

node2: 

sed -i ‘s/\(HOSTNAME=\).*/\1node2.linuxidc.com/p’ /etc/sysconfig/network

注: 主机重启过程中,会从配置文件 /etc/sysconfig/network 中读取主机名,并将其设置为重启后主机名

 

2. 添加主机名解析: 确保每一个节点的名称都能互相解析

使用 hosts 文件做主机名解析, 在各节点执行如下操作:

cat >ed.txt<<EOF

\$a\172.16.16.15  node1.linuxidc.com

\$a\172.16.16.16  node2.linuxidc.com

EOF

sed -i -f ed.txt /etc/hosts

 

3. 确保 node1,node2 之间时间同步

在命令行同步时间 (立即生效,且临时生效)

ntpdate 172.16.0.1

设置定时任务 (永久生效)

echo “*/5 * * * * /usr/sbin/ntpdate 172.16.0.1 &>/dev/null;/sbin/hwclock -w” >/var/spool/cron/root

 

4. 配置各节点之间基于 ssh 免密码免密钥认证通信 (非必须)

生成密钥文件在各节点执行如下操作:

node1:

ssh-keygen -t rsa -P ”

ssh-copy-id .ssh/id_rsa.pub node2.linuxidc.com

 

node2:

ssh-keygen -t rsa -P ”

ssh-copy-id .ssh/id_rsa.pub node1.linuxidc.com

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

 

 

 

二、安装配置 drdb

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

node1 & node2:

rpm -ivh drbd-8.4.3-33.el6.x86_64.rpm  drbd-kmdl-2.6.32-358.el6-8.4.3-33.el6.x86_64.rpm

 

在 node1 创建并修改 DRDB 配置文件

# cat /etc/drbd.conf

# You can find an example in  /usr/share/doc/drbd…/drbd.conf.example

include “drbd.d/global_common.conf”;

include “drbd.d/*.res”;

 

# cd /etc/drbd.d/

# ls

global_common.conf

编辑配置文件 global_common.conf,最终内容如下:

# egrep -v ‘^$|^[[:space:]]*#’ global_common.conf

global {

usage-count yes;

}

common {

handlers {

pri-on-incon-degr “/usr/lib/drbd/notify-pri-on-incon-degr.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f”;

pri-lost-after-sb “/usr/lib/drbd/notify-pri-lost-after-sb.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f”;

local-io-error “/usr/lib/drbd/notify-io-error.sh; /usr/lib/drbd/notify-emergency-shutdown.sh; echo o > /proc/sysrq-trigger ; halt -f”;

}

startup {

}

options {

}

disk {

on-io-error detach;

}

net {

protocol C;

cram-hmac-alg “sha1”;

}

 

syncer {

rate 1000M;

}

}

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

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

为 DRDB 创建磁盘分区 (node1,node2 执行同样的操作), 操作如下:

查看当前的磁盘分区情况

# fdisk -l /dev/sda

Disk /dev/sda: 85.9 GB, 85899345920 bytes

255 heads, 63 sectors/track, 10443 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x00056921

  Device Boot      Start        End      Blocks  Id  System

/dev/sda1  *          1          26      204800  83  Linux

Partition 1 does not end on cylinder boundary.

/dev/sda2              26        7859    62914560  8e  Linux LVM

/dev/sda3            7859        8512    5252256  83  Linux

 

 

 

创建扩展分区

# echo -e ‘n\ne\n\n\nw\n’|fdisk /dev/sda

 

在扩展分区上创建新的磁盘分区

# echo -e ‘n\n\n+5G\nw\n’|fdisk /dev/sda

 

查看 /dev/sda 硬盘上新增的磁盘分区

# fdisk -l /dev/sda|grep ‘/dev/sda[45]’

/dev/sda4            8513      10443    15510757+  5  Extended

/dev/sda5            8513        9166    5253223+  83  Linux

 

下面的命令可以多执行几次,以确保新增的磁盘分区被内核识别

# partx -a /dev/sda

# kpartx -af /dev/sda

 

查看新增磁盘分区是否已被内核识别

# cat /proc/partitions |grep sda[45]

  8        4        31 sda4

  8        5    5253223 sda5

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

 

两端提供等同大小的磁盘分区

drdb 默认监听在 7789 端口; 默认使用协议 C

 

2、定义一个资源 /etc/drbd.d/mystore1.res,内容如下:

# cat /etc/drbd.d/mystore1.res

resource mystore1 {

on node1.linuxidc.com {

device /dev/drbd1;

disk /dev/sda5;

address 172.16.16.15:7789;

meta-disk internal;

}

 

on node2.linuxidc.com {

device /dev/drbd1;

disk /dev/sda5;

address 172.16.16.16:7789;

meta-disk internal;

}

}

 

 

 

确保 node1,node2 的 drdb 配置文件保持一致

# scp -p global_common.conf mystore.res node2.linuxidc.com:/etc/drbd.d/

 

 

 

在两个节点上初始化已定义的资源并启动服务:

 

1)初始化资源,在 Node1 和 Node2 上分别执行:

# drbdadm create-md mystore1

Writing meta data…

initializing activity log

NOT initializing bitmap

New drbd meta data block successfully created.

 

2)启动服务,在 Node1 和 Node2 上分别执行:

# /etc/init.d/drbd start

Starting DRBD resources: [

    create res: mystore1

  prepare disk: mystore1

    adjust disk: mystore1

    adjust net: mystore1

]

.

 

3)查看启动状态:

# cat /proc/drbd

version: 8.4.3 (api:1/proto:86-101)

GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by gardner@, 2013-05-27 04:30:21

 1: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r—–

    ns:5253020 nr:0 dw:0 dr:5253740 al:0 bm:321 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

 

也可以使用 drbd-overview 命令来查看:

# drbd-overview

 0:web  Connected Secondary/Secondary Inconsistent/Inconsistent C r—-

 

从上面的信息中可以看出此时两个节点均处于 Secondary 状态。于是,我们接下来需要将其中一个节点设置为 Primary。在要设置为 Primary 的节点上执行如下命令:

drbd 8.4 中第一次设置某节点成为主节点的命令

# drbdadm primary –force resource

 

  注:也可以在要设置为 Primary 的节点上使用如下命令来设置主节点:

    # drbdadm — –overwrite-data-of-peer primary mystore1

 

而后再次查看状态,可以发现数据同步过程已经开始:

node1:

# drbd-overview

 1:mystore1/0  SyncSource Primary/Secondary UpToDate/Inconsistent C r—n-

[>………………..] sync’ed:  0.1% (5128/5128)M

 

node2:

# drbd-overview

 1:mystore1/0  SyncTarget Secondary/Primary Inconsistent/UpToDate C r—–

[>………………..] sync’ed:  2.7% (4996/5128)M

 

 

等数据同步完成以后再次查看状态,可以发现节点已经牌实时状态,且节点已经有了主次:

# drbd-overview

 1:mystore1/0  Connected Primary/Secondary UpToDate/UpToDate C r—–

 

此时,若我们把 node1 降级为 Secondary,node2 提升为 primary,观察一下这两个节点角色的变化

node1:

# drbdadm secondary mystore1

# drbd-overview

 1:mystore1/0  Connected Secondary/Primary UpToDate/UpToDate C r—–

 

node2:

# drbdadm primary mystore1

# drbd-overview

 1:mystore1/0  Connected Primary/Secondary UpToDate/UpToDate C r—–

 

注意:只有角色是 primary 的节点才能挂载使用,提供读写操作;

      secondary 既不能读,也不能写,仅能接收来自 primary 节点的数据

 

 

 

4、创建文件系统

文件系统的挂载只能在 Primary 节点进行,因此,也只有在设置了主节点后才能对 drbd 设备进行格式化:

node2:

# mke2fs -t ext4  /dev/drbd1

 

我在 secondary(node1 节点) 上执行格式化时的错误提示信息

# mke2fs -t ext4  /dev/drbd1

mke2fs 1.41.12 (17-May-2010)

mke2fs: Wrong medium type while trying to determine filesystem size

 

对主 Primary/Secondary 模型的 drbd 服务来讲,在某个时刻只能有一个节点为 Primary,因此,要切换两个节点的角色,只能在先将原有的 Primary 节点设置为 Secondary 后,才能原来的 Secondary 节点设置为 Primary:

 

node2(Primary 角色):

# mkdir /drbd

# mount /dev/drbd1 /drbd/

# cp /etc/issue /drbd/

# ls /drbd/

issue  lost+found

 

# sed -i ‘$a\I am node2’ /drbd/issue

# sed -n ‘$p’ /drbd/issue

I am node2

 

模拟 node2(Primary 角色) 故障:先卸载,再降级

# umount /drbd/

# drbdadm secondary mystore1

 

 

 

将 node1 提升为主的,并挂载使用,查看是否能看到 node2 之前添加的数据

# mkdir /drbd

# drbdadm primary mystore1

# mount /dev/drbd1 /drbd/

# sed -n ‘$p’ /drbd/issue

I am node2

 

DRBD 主从角色手动切换已演示完毕,数据同步也已 ok

注:drbd 自身并不能完成角色的自动切换,需借助其他工具

主机规划

172.16.16.15  node1.linuxidc.com

172.16.16.16  node2.linuxidc.com

 

一、准备工作

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

相关阅读

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

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

1. 为各主机设置主机名,IP 地址,并测试主机连通性

分别为各节点设置主机名

node1: 

hostname  node1.linuxidc.com

node2: 

hostname  node2.linuxidc.com

 

确保各主机在重启之后,主机名保持不变

node1: 

sed -i ‘s/\(HOSTNAME=\).*/\1node1.linuxidc.com/p’ /etc/sysconfig/network

node2: 

sed -i ‘s/\(HOSTNAME=\).*/\1node2.linuxidc.com/p’ /etc/sysconfig/network

注: 主机重启过程中,会从配置文件 /etc/sysconfig/network 中读取主机名,并将其设置为重启后主机名

 

2. 添加主机名解析: 确保每一个节点的名称都能互相解析

使用 hosts 文件做主机名解析, 在各节点执行如下操作:

cat >ed.txt<<EOF

\$a\172.16.16.15  node1.linuxidc.com

\$a\172.16.16.16  node2.linuxidc.com

EOF

sed -i -f ed.txt /etc/hosts

 

3. 确保 node1,node2 之间时间同步

在命令行同步时间 (立即生效,且临时生效)

ntpdate 172.16.0.1

设置定时任务 (永久生效)

echo “*/5 * * * * /usr/sbin/ntpdate 172.16.0.1 &>/dev/null;/sbin/hwclock -w” >/var/spool/cron/root

 

4. 配置各节点之间基于 ssh 免密码免密钥认证通信 (非必须)

生成密钥文件在各节点执行如下操作:

node1:

ssh-keygen -t rsa -P ”

ssh-copy-id .ssh/id_rsa.pub node2.linuxidc.com

 

node2:

ssh-keygen -t rsa -P ”

ssh-copy-id .ssh/id_rsa.pub node1.linuxidc.com

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

 

 

 

二、安装配置 drdb

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

node1 & node2:

rpm -ivh drbd-8.4.3-33.el6.x86_64.rpm  drbd-kmdl-2.6.32-358.el6-8.4.3-33.el6.x86_64.rpm

 

在 node1 创建并修改 DRDB 配置文件

# cat /etc/drbd.conf

# You can find an example in  /usr/share/doc/drbd…/drbd.conf.example

include “drbd.d/global_common.conf”;

include “drbd.d/*.res”;

 

# cd /etc/drbd.d/

# ls

global_common.conf

编辑配置文件 global_common.conf,最终内容如下:

# egrep -v ‘^$|^[[:space:]]*#’ global_common.conf

global {

usage-count yes;

}

common {

handlers {

pri-on-incon-degr “/usr/lib/drbd/notify-pri-on-incon-degr.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f”;

pri-lost-after-sb “/usr/lib/drbd/notify-pri-lost-after-sb.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f”;

local-io-error “/usr/lib/drbd/notify-io-error.sh; /usr/lib/drbd/notify-emergency-shutdown.sh; echo o > /proc/sysrq-trigger ; halt -f”;

}

startup {

}

options {

}

disk {

on-io-error detach;

}

net {

protocol C;

cram-hmac-alg “sha1”;

}

 

syncer {

rate 1000M;

}

}

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

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

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