22、部署drdb
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.二进制部署kubernetes
目录 kubernetes的五个组件 master节点的三个组件 kube-apiserver kube-controller-manager kube-scheduler node节点的两个组件 k ...
- 第五章 部署master主控节点
一.部署etcd集群 1.1 集群规划 主机名 角色 IP hdss7-12 leader 10.4.7.12 hdss7-21 follow 10.4.7.21 hdss7-22 follow 10 ...
- Docker Kubernetes 环境搭建
Docker Kubernetes 环境搭建 节点规划 版本 系统:Centos 7.4 x64 Docker版本:18.09.0 Kubernetes版本:v1.8 etcd存储版本:etcd-3. ...
- Nginx+proxy实现简单的负载均衡
环境说明:操作系统centos6.6 64位web操纵系统是:web1=192.168.10.10(LAMP) web2=192.168.10.11(LNMP),这里只是测试nginx实现负载均衡效果 ...
- keepalived+nginx+lnmp 网站架构
<网站架构演变技术研究> 项目实施手册 2019年8月2日 第一章: 实验环境确认 4 1.1-1.系统版本 4 1.1-2.内核参数 4 1.1-3.主机网络参数设置 4 1-1-4 ...
- Apache Dolphinscheduler 1.3.x 系列配置文件指南
前言 本文档为dolphinscheduler配置文件指南,针对版本为 dolphinscheduler-1.3.x 版本. 考虑公众号对markdown文件格式支持不那么友好的问题,建议大家在PC端 ...
- 第十章 Kubernetes的CNI网络插件--flannel
1.简介 1.1前言 Kubernetes设计了网络模型,但却将它的实现讲给了网络插件,CNI网络插件最重要的功能就是实现Pod资源能够跨主机通信 常见的CNI网络插件如下: Flannel: Cac ...
- [官方软件] 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 ...
- tilecache2.11在windows apache2.22安装部署
tilecache2.11在windows apache2.22安装部署 蔡建良 2013-09-03 一.安装环境 操作系统: Windows7 32位 Apache2.22 Python2.5 m ...
随机推荐
- centos7下cups + samba共打印服务
centos7下cups + samba共打印服务 2015年8月21日admin发表评论阅读评论 这个算是rhce课程的篇外篇,Samba除了提供文件共享外,也可以像windows下的共享一样提 ...
- Linux_控制服务与守护进程
一.systemd 1.systemd简介 1️⃣:systemd是用户空间的第一个应用程序,即/sbin/init 2️⃣:init程序的类型: SysV风格:init(centos5),实现系统初 ...
- Java 自定义常量
Java 中的常量就是初始化或赋值后不能再修改,而变量则可以重新赋值. 我们可以使用Java 关键字 final 定义一个常量,如下 final double PI = 3.14; 注意:为了区别 J ...
- 9.random_os_sys_shutil_shelve_xml_hashlib
此章未能精读,待回顾random模块import randomrandom.random() 随机生成一个0-1之间随机的浮点数random.randint(a,b) 随机生成一个a-b之间的整数 a ...
- 密码学系列之:碰撞抵御和碰撞攻击collision attack
密码学系列之:碰撞抵御和碰撞攻击collision attack 简介 hash是密码学和平时的程序中经常会用到的一个功能,如果hash算法设计的不好,会产生hash碰撞,甚至产生碰撞攻击. 今天和大 ...
- WEB安全防护相关响应头(上)
WEB 安全攻防是个庞大的话题,有各种不同角度的探讨和实践.即使只讨论防护的对象,也有诸多不同的方向,包括但不限于:WEB 服务器.数据库.业务逻辑.敏感数据等等.除了这些我们惯常关注的方面,WEB ...
- Django settings 描述
""" Django settings for log_collect_statistics project. Generated by 'django-admin st ...
- guava cache 缓存
1.guava缓存 新建一个缓存对象cache,当取不到key对应的值时,生成一个,并插入到cache中 LoadingCache<String,String> cache = Cache ...
- 『动善时』JMeter基础 — 37、将JMeter测试结果写入Excel
目录 1.环境准备 (1)引入操作Excel文件的基础JAR包 (2)引入封装自定义操作Excel文件的JAR包 2.准备测试需要的数据 3.测试结果写入Excel演示 (1)测试计划内包含的元件 ( ...
- 蓝牙mesh网络技术的亮点
蓝牙mesh网络技术的亮点 The highlights of Bluetooth mesh networking technology 导言 蓝牙是当今最主要的低功耗无线技术之一,对无线设备用户和开 ...