22.1、heartbeat部署规划:

本文的实验环境是虚拟机设备;

名称

接口

ip

用途

master-db(主)

eth0

10.0.0.16/24

用于服务器之间的数据同步(直连)

eth1

172.16.1.16/24

管理ip用于数据转发

vip

172.16.1.26/24

提供对外访问的ip

slave-db(从)

eth0

10.0.0.17/24

用于服务器之间的数据同步(直连)

eth1

172.16.1.17/24

管理ip用于数据转发

vip

172.16.1.26/24

提供对外的访问的ip

22.2、在关机状态下分别为master-db和slave-db添加20G的硬盘:

22.3、关闭selinux和防火墙:

master-db和slave-db的操作相同;

1、关闭selinux:

sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config

grep "SELINUX=disabled" /etc/selinux/config

setenforce 0

2、关闭防火墙:

/etc/init.d/iptables stop

chkconfig iptables off

22.4、修改主机名:

1、master-db:

[root@master-db ~]#sed -i "s#HOSTNAME=.*#HOSTNAME=master-db#g" /etc/sysconfig/network

[root@master-db ~]#hostname master-db

[root@master-db ~]#hostname

master-db

2、slave-db:

[root@slave-db ~]#sed -i "s#HOSTNAME=.*#HOSTNAME=slave-db#g" /etc/sysconfig/network

[root@slave-db ~]#hostname slave-db

[root@slave-db ~]#hostname

slave-db

22.5、配置master-db和slave-db之间的直连心跳线路由:

主从之间的关系全靠心跳线进行联系;

1、master-db:

[root@master-db ~]#route add -host 10.0.0.17 dev eth0

[root@master-db ~]#route -n

Kernel IP routing table

Destination Gateway Genmask Flags Metric Ref Use Iface

10.0.0.17 0.0.0.0 255.255.255.255 UH 0 0 0 eth0

[root@master-db ~]#echo '/sbin/route add -host 10.0.0.17 dev eth0' >>/etc/rc.local

2、slave-db:

[root@slave-db ~]#route add -host 10.0.0.16 dev eth0

[root@slave-db ~]#route -n

Kernel IP routing table

Destination Gateway Genmask Flags Metric Ref Use Iface

10.0.0.16 0.0.0.0 255.255.255.255 UH 0 0 0 eth0

[root@slave-db ~]#echo '/sbin/route add -host 10.0.0.16 dev eth0' >>/etc/rc.local

22.6、修改域名解析文件:

master-db和slave-db的操作相同;

vim /etc/hosts

10.0.0.16 master-db

10.0.0.17 slave-db

ping域名看是否可以ping通;

22.7、磁盘分区:

master-db和slave-db的操作相同;

parted /dev/sdb mklabel gpt

parted /dev/sdb mkpart primary 0 5G

parted /dev/sdb mkpart primary 5 6G

parted /dev/sdb p

Model: VMware, VMware Virtual S (scsi)

Disk /dev/sdb: 6442MB

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

Partition Table: gpt

Number Start End Size File system Name 标志

1 17.4kB 5000MB 5000MB primary

2 5000MB 6442MB 1442MB primary

22.8、drbd软件安装:

master-db和slave-db的操作相同;

1、下载rpm包:

mkdir -p /root/tools

cd /root/tools

wget http://mirror.rackspace.com/elrepo/elrepo/el6/x86_64/RPMS/drbd84-utils-8.9.8-1.el6.elrepo.x86_64.rpm

wget http://mirror.rackspace.com/elrepo/elrepo/el6/x86_64/RPMS/kmod-drbd84-8.4.9-1.el6.elrepo.x86_64.rpm

2、安装:

rpm -ivh drbd84-utils-8.9.8-1.el6.elrepo.x86_64.rpm

rpm -ivh kmod-drbd84-8.4.9-1.el6.elrepo.x86_64.rpm

22.9、加载内核:

master-db和slave-db的操作相同;

ls -ld /usr/src/kernels/$(uname -r)

drwxr-xr-x 22 root root 4096 10月 8 23:29 /usr/src/kernels/2.6.32-754.3.5.el6.x86_64

#如果报错需要的包安装如下的软件包;

#yum install -y kernel kernel-devel kernel-headers gcc flex libxslt

modprobe drbd #临时生效;

lsmod | grep drbd

drbd 374888 0

libcrc32c 1246 1 drbd

加入到开机自启动中:

echo '/sbin/modprobe drbd' >>/etc/rc.local

tail -1 /etc/rc.local

22.10、配置drbd配置文件:

master-db和slave-db的操作相同;

1、文件说明:

ls /etc/drbd.d/ #包含文件;

global_common.conf

ls /etc/drbd.conf #配置文件用于包含/etc/drbd.d/中的配置文件;

/etc/drbd.conf

2、配置global_common.conf文件:

cp /etc/drbd.d/global_common.conf{,.bak}

egrep -v "^$|#" /etc/drbd.d/global_common.conf

global { #全局配置

usage-count no;

#不允许开源网站统计开源软件的数量,默认是yes;

}

common {

protocol C;

#使用实时同步数据的方法;

disk {

on-io-error detach;

#同步IO错误的做法是分离该磁盘;

}

net {

cram-hmac-alg "sha1";

#设置加密算法;

shared-secret "mydrbd";

#设置加密随机key;

}

syncer {

rate 100M; #同步的速度;

}

}

resource data {

on master-db { #主机器的主机名;

device /dev/drbd0; #drbd设备;

disk /dev/sdb1; #本地的存储分区;

address 10.0.0.16:7788;

#监听的直连网线,即数据端口,7788是默认端口;

meta-disk /dev/sdb2[0]; #drbd状态数据分区;

}

on slave-db { #从机器的主机名;

device /dev/drbd0;

disk /dev/sdb1;

address 10.0.0.17:7788;

meta-disk /dev/sdb2[0];

}

}

提示:如果需要加磁盘只需要拷贝resource配置即可,然后更改资源名称、数据传输的ip地址和

端口号、drbd状态数据分区、本地的存储分区、drbd设备的名称;

22.11、激活drbd:

master-db和slave-db的操作相同;

1、初始化meta分区:

drbdadm create-md data #data是/etc/drbd.d/global_common.conf配置文件的resource名称;

initializing activity log

NOT initializing bitmap

Writing meta data...

New drbd meta data block successfully created.

提示:drbdadm -V :查看当前drbd的安装版本;

2、启动drbd服务:

drbdadm up data =》/etc/init.d/drbd start

Device '0' is configured!

Command 'drbdmeta 0 v08 /dev/sdb2 0 apply-al' terminated with exit code 20

#######################################################################

#表示启动data资源,可以用"all"代表启动所有资源;

#drbdadm up all

#相当于以下三个命令的组合:

#drbdadm attach all

#drbdadm syncer all

#drbdadm connect all

########################################################################

cat /proc/drbd #查看drbd的启动进程,没有设置主从时默认两边都是从;

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

GIT-hash: 9976da086367a2476503ef7f6b13d4567327a280 build by mockbuild@Build64R6, 2016-12-13 18:38:15

0: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r-----

ns:0 nr:0 dw:0 dr:0 al:8 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:263152

22.12、确定drbd的主从关系:

1、设置master-db为主:

[root@master-db ~]#drbdadm -- --overwrite-data-of-peer primary data

#第一次操作时使用;

#此操作很危险会把这边的数据推到对端并覆盖,如果对端有数据需要进行备份;

2、查看master-db的状态:

[root@master-db ~]#cat /proc/drbd

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

GIT-hash: 9976da086367a2476503ef7f6b13d4567327a280 build by mockbuild@Build64R6, 2016-12-13 18:38:15

0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r-----

ns:346500 nr:0 dw:0 dr:349848 al:8 bm:0 lo:0 pe:1 ua:3 ap:0 ep:1 wo:f oos:4536684

[>...................] sync'ed: 7.3% (4428/4768)M

finish: 0:01:57 speed: 38,456 (38,456) K/sec

3、查看slave-db的状态:

[root@slave-db ~]#cat /proc/drbd

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

GIT-hash: 9976da086367a2476503ef7f6b13d4567327a280 build by mockbuild@Build64R6, 2016-12-13 18:38:15

0: cs:SyncTarget ro:Secondary/Primary ds:Inconsistent/UpToDate C r-----

ns:0 nr:346112 dw:346112 dr:0 al:8 bm:0 lo:1 pe:3 ua:0 ap:0 ep:1 wo:f oos:4536684

[>...................] sync'ed: 7.3% (4428/4768)M

finish: 0:01:57 speed: 38,456 (38,456) want: 102,400 K/sec

22.13、格式化磁盘:

如果之前主从在分区后就格式化磁盘了,这里就不需要格式化磁盘了;

只需要操作主节点master-db即可,从节点会跟随主节点进行格式化;

[root@master-db ~]#mkfs -t ext4 -b 4096 /dev/drbd0

[root@master-db ~]#tune2fs -c -1 /dev/drbd0 #禁止定期检查磁盘

tune2fs 1.41.12 (17-May-2010)

Setting maximal mount count to -1

22.14、挂载master-db磁盘:

特别注意:挂载的不是/dev/sdb1系统分区,挂载的是drbd的drbd0逻辑分区,通过挂载点写到drbd0逻辑分区上然后写到/dev/sdb1

系统分区上;不挂载slave-db的/dev/sdb1磁盘,因为该系统分区已经被/dev/drbd0设备占用,且不可见;

[root@master-db ~]#mkdir -p /master-db

[root@master-db ~]#mount /dev/drbd0 /master-db/

#说明:只有置为主端的时才可以这样挂载,否则要停掉资源后挂载本地的系统资源,如/dev/sdb1;

[root@master-db ~]#df -hT

Filesystem Type Size Used Avail Use% Mounted on

/dev/drbd0 ext4 4.5G 9.4M 4.3G 1% /master-db

22.15、测试:

1、master-db:

[root@master-db ~]#cd /master-db/

[root@master-db ~]#touch /master-db/{1..6}.txt

[root@master-db ~]#ls /master-db/

1.txt 2.txt 3.txt 4.txt 5.txt 6.txt lost+found

2、slave-db:

[root@slave-db ~]#drbdadm down data #停掉drbd服务;

[root@slave-db ~]#mkdir -p /slave-db #创建/dev/sdb1的挂载点;

[root@slave-db ~]#mount /dev/sdb1 /master-db/ #挂载;

[root@slave-db ~]#ls /slave-db/ #数据已经同步过来了;

1.txt 2.txt 3.txt 4.txt 5.txt 6.txt lost+found

提示:因为slave-db上的/dev/sdb1系统分区被'/dev/drbd0'设备占用,不能够查看数据,所以需要停止后挂载查看,但是这种访问方法是不规范的;

[root@slave-db ~]#df -hT #查看磁盘

Filesystem Type Size Used Avail Use% Mounted on

/dev/drbd0 ext4 4.5G 9.4M 4.3G 1% /master-db

[root@slave-db ~]#umount /dev/sdb1 #卸载分区;

[root@slave-db ~]#drbdadm up data #启动drbd服务;

3、查看master-db和slave-db的磁盘使用状态参数说明:

(1)master-db:

[root@master-db ~]#cat /proc/drbd

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

GIT-hash: 9976da086367a2476503ef7f6b13d4567327a280 build by mockbuild@Build64R6, 2016-12-13 18:38:15

0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----

ns:48 nr:0 dw:48 dr:1357 al:2 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

(2)slave-db:

[root@slave-db ~]#cat /proc/drbd

cat /proc/drbd

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

GIT-hash: 9976da086367a2476503ef7f6b13d4567327a280 build by mockbuild@Build64R6, 2016-12-13 18:38:15

0: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r-----

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

4、小结:

(1)通过测试可以发现主从连接状态(cs)、角色(ro)、磁盘状态(ds)正常,且主的数据发送(ns)量和

从的数据接收(nr)、写入(dw)量相同,说明数据同步是成功的;

(2)drbd状态码解释:

1)0: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r-----

0 #drbd的次设备号(minor),表示该行是/dev/drbd0资源的信息;

cs #connect state,即节点的连接状态wf未初始化状态;

ro #roles,即节点的角色状态;

ds #disk state,即磁盘的状态,也即drbd底层设备的状态,UpToDate表示正常、inconsistent初始化之前同步的状态;

C #drbd的复制协议,即A、B、C协议;

r-----#是IO标记,反应的是该资源的IO状态信息。共有6种IO状态标记符号;

2)ns:0 nr:48 dw:48 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

ns/send (network send) #通过网络连接发送给对端的数据量,单位为KB。

nr/receive (network receive) #通过网络连接接收到对端发送来的数据量,单位为KB。

dw/written (disk write) #写入本地磁盘的数据量,单位为KB。

dr/read (disk read) #从本地磁盘读取的数据量,单位为KB。

al/al-writes (activity log) #元数据区中al更新的次数。

bm/bm-writes (bit map) #元数据区中bitmap更新的次数。

lo/lower-pending (local count) #DRBD发起的打开本地IO子系统的请求次数。

pe/pending (pending) #本地发送给对端但却没有回复的次数。

ua/unacked (unacknowledged) #接收到对端发送的请求但却没有给予回复的请求数量。

ap/upper-pending (application pending) #转发给DRBD的IO块的请求,但DRBD还没给予回复的请求数量。

ep (epochs) #epoch对象的数量。通常为1。drbd9中没有该指标。

wo/write-ordering (write order) #当前正在使用的write order方法:b(barrier), f(flush), d(drain)或n(none)。

oos/out-of-sync (out of sync) #当前不同步的数据量,单位为KB。

22.16、总结:

1、drbd应用注意项:

(1)drbd开机默认是不自启动的;

chkconfig --list drbd

drbd 0:关闭 1:关闭 2:关闭 3:关闭 4:关闭 5:关闭 6:关闭

(2)在生产环境中drbd设置的是开机不自启的,人工管理;

(3)drbd停止主服务器端需要卸载(umount /dev/drbd0)设备,然后(/etc/init.d/drbd stop)

停止服务即可,从服务端可以直接停掉;

(4)主从都停止再启动,两边都是从状态(/proc/drbd)也会被清空,说明drbd有自我保护的功能;如果停止的是从

端,从端再启动后,能够确定主从关系,从的状态数据会重新开始;如果停止的是主,主再起就会变成从;

drbd的C模式保证了两边数据的一致性;主端挂载,从端隐藏;

重新确定主端的命令是:drbdadm primary data;

重新确定从端的命令是:drbdadm secondary data;

(5)使用'drbdadm -- --overwrite-data-of-peer primary data'命令指定主端时会将主端的

数据推到主端,覆盖掉,所以需要谨慎操作,如果从端有数据需要进行备份(该参数只用一次,在

初始安装drbd的时候);

2、DRBD报错:0: Failure: (119) No valid meta-data signature found:

(1)原因:

使用fdisk分区时有问题;

(2)解决办法:

分区后'/dev/sdb2'分区不要格式化;如果执行'partprobe'命令报错,需要重启服务器,然后

重新初始化(drbdadm create-md data)数据后再启动(drbdadm up data);

3、查看drbd状态时出现secondary/Uknow的解决的方法:

(1)检查两台drbd服务器物理网络或者连接ip及主机直连路由是否正确;

route add -host '对端ip' dev eth0

(2)停止防火墙,或者放行drbd同步;

(3)还有可能发生裂脑了(官方推荐方法);

1)在从节点slave-db上做如下的操作:

drbdadm secondary data

drbdadm disconnect data

drbdadm -- --discard-my-data connect data

#是个断开连接的过程;

2)在主节点master-db上做如下的操:

通过cat /etc/proc/drbd查看状态,如果是WFConnection状态,需要手动进行连接;

drbdadm connect data

3)查看主从两端的状态:

cat /etc/proc/drbd

3、master-db的磁盘可见,slave-db的磁盘不可见;

实时的差异同步;

22、部署drdb的更多相关文章

  1. 1.二进制部署kubernetes

    目录 kubernetes的五个组件 master节点的三个组件 kube-apiserver kube-controller-manager kube-scheduler node节点的两个组件 k ...

  2. 第五章 部署master主控节点

    一.部署etcd集群 1.1 集群规划 主机名 角色 IP hdss7-12 leader 10.4.7.12 hdss7-21 follow 10.4.7.21 hdss7-22 follow 10 ...

  3. Docker Kubernetes 环境搭建

    Docker Kubernetes 环境搭建 节点规划 版本 系统:Centos 7.4 x64 Docker版本:18.09.0 Kubernetes版本:v1.8 etcd存储版本:etcd-3. ...

  4. Nginx+proxy实现简单的负载均衡

    环境说明:操作系统centos6.6 64位web操纵系统是:web1=192.168.10.10(LAMP) web2=192.168.10.11(LNMP),这里只是测试nginx实现负载均衡效果 ...

  5. keepalived+nginx+lnmp 网站架构

    <网站架构演变技术研究> 项目实施手册 2019年8月2日 第一章:  实验环境确认 4 1.1-1.系统版本 4 1.1-2.内核参数 4 1.1-3.主机网络参数设置 4 1-1-4 ...

  6. Apache Dolphinscheduler 1.3.x 系列配置文件指南

    前言 本文档为dolphinscheduler配置文件指南,针对版本为 dolphinscheduler-1.3.x 版本. 考虑公众号对markdown文件格式支持不那么友好的问题,建议大家在PC端 ...

  7. 第十章 Kubernetes的CNI网络插件--flannel

    1.简介 1.1前言 Kubernetes设计了网络模型,但却将它的实现讲给了网络插件,CNI网络插件最重要的功能就是实现Pod资源能够跨主机通信 常见的CNI网络插件如下: Flannel: Cac ...

  8. [官方软件] Easy Sysprep v4.3.29.602 【系统封装部署利器】(2016.01.22)--skyfree大神

    [官方软件] Easy Sysprep v4.3.29.602 [系统封装部署利器](2016.01.22) Skyfree 发表于 2016-1-22 13:55:55 https://www.it ...

  9. tilecache2.11在windows apache2.22安装部署

    tilecache2.11在windows apache2.22安装部署 蔡建良 2013-09-03 一.安装环境 操作系统: Windows7 32位 Apache2.22 Python2.5 m ...

随机推荐

  1. centos7下cups + samba共打印服务

    centos7下cups + samba共打印服务 2015年8月21日admin发表评论阅读评论   这个算是rhce课程的篇外篇,Samba除了提供文件共享外,也可以像windows下的共享一样提 ...

  2. Linux_控制服务与守护进程

    一.systemd 1.systemd简介 1️⃣:systemd是用户空间的第一个应用程序,即/sbin/init 2️⃣:init程序的类型: SysV风格:init(centos5),实现系统初 ...

  3. Java 自定义常量

    Java 中的常量就是初始化或赋值后不能再修改,而变量则可以重新赋值. 我们可以使用Java 关键字 final 定义一个常量,如下 final double PI = 3.14; 注意:为了区别 J ...

  4. 9.random_os_sys_shutil_shelve_xml_hashlib

    此章未能精读,待回顾random模块import randomrandom.random() 随机生成一个0-1之间随机的浮点数random.randint(a,b) 随机生成一个a-b之间的整数 a ...

  5. 密码学系列之:碰撞抵御和碰撞攻击collision attack

    密码学系列之:碰撞抵御和碰撞攻击collision attack 简介 hash是密码学和平时的程序中经常会用到的一个功能,如果hash算法设计的不好,会产生hash碰撞,甚至产生碰撞攻击. 今天和大 ...

  6. WEB安全防护相关响应头(上)

    WEB 安全攻防是个庞大的话题,有各种不同角度的探讨和实践.即使只讨论防护的对象,也有诸多不同的方向,包括但不限于:WEB 服务器.数据库.业务逻辑.敏感数据等等.除了这些我们惯常关注的方面,WEB ...

  7. Django settings 描述

    """ Django settings for log_collect_statistics project. Generated by 'django-admin st ...

  8. guava cache 缓存

    1.guava缓存 新建一个缓存对象cache,当取不到key对应的值时,生成一个,并插入到cache中 LoadingCache<String,String> cache = Cache ...

  9. 『动善时』JMeter基础 — 37、将JMeter测试结果写入Excel

    目录 1.环境准备 (1)引入操作Excel文件的基础JAR包 (2)引入封装自定义操作Excel文件的JAR包 2.准备测试需要的数据 3.测试结果写入Excel演示 (1)测试计划内包含的元件 ( ...

  10. 蓝牙mesh网络技术的亮点

    蓝牙mesh网络技术的亮点 The highlights of Bluetooth mesh networking technology 导言 蓝牙是当今最主要的低功耗无线技术之一,对无线设备用户和开 ...