1.1 系統環境mysql
內核:3.10.0-862.el7.x86_64
版本:CentOS Linux release 7.5.1804 (Core)
主服務器:hostname = mysql-master-01 心跳通訊 IP = 172.16.1.50
從服務器:hostname = mysql-master-02 心跳通訊 IP = 172.16.1.51linux
1.2 前期準備sql
關閉防火牆和selinux。api
主從服務器的/etc/hosts同樣,
以下:
bash
172.16.1.50 mysql-master-01 172.16.1.51 mysql-master-02
2.1 yum源安裝:服務器
rpm -Uvh https://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
2.2 drbd 安裝:
tcp
yum -y install drbd84-utils kmod-drbd84
2.3 讓內核加載 drbd 模塊測試
[root@mysql-master-01 ~/]# modprobe drbd [root@mysql-master-01 ~/]# lsmod |grep drbd drbd 397041 3 libcrc32c 12644 2 xfs,drbd [root@mysql-master-01 ~/]# echo "modprobe drbd">>/etc/rc.local # 加入開機自啓動 [root@mysql-master-01 ~/]# chmod +x /etc/rc.d/rc.local
3.1 建立全局配置ui
[root@mysql-master-01 ~/]# mv /etc/drbd.d/global_common.conf /etc/drbd.d/global_common.conf.bak [root@mysql-master-01 ~/]# cat > /etc/drbd.d/global_common.conf <<-EOF global { usage-count no; } common { net { protocol C; } } EOF
3.2 建立資源配置文件spa
[root@mysql-master-01 ~/]# cat > /etc/drbd.d/mysql_data.res <<-EOF resource mysql_data { disk /dev/sda4; device /dev/drbd0; meta-disk /dev/sda3[0];
# meta-disk internal; # 內部模式 on mysql-master-01 { address 172.16.1.50:7788; } on mysql-master-02 { address 172.16.1.51:7788; } } EOF
3.3 主從服務器都須要添加以下分區、以下操做: /dev/sda3 爲 500M # 做爲 create-md 這個分區必定不能用 mkfs 來格式化
/dev/sda4 爲 2G # 數據
剛分完區要通知內核:partprobe /dev/sda
3.3.1 格式化:/dev/sda4
[root@mysql-master-01~/]# drbdadm up all && drbdadm -- --overwrite-data-of-peer primary all &&mkfs.xfs /dev/drbd0 或者 mkfs.xfs /dev/sda4
meta-data=/dev/sda4 isize=512 agcount=4, agsize=125120 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=500480, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
3.3.2 初始化設備元文件3.4 啓動系統服務
drbdadm create-md mysql_data 或者 drbdadm create-md all
3.5 啓動系統服務
[root@mysql-master-01~/]#drbdadm up all [root@mysql-master-01~/]#systemctl start drbd
4.1 首次,數據不一致,主覆蓋從令數據一致(自動設爲主盤)
[root@mysql-master-01 ~/]# drbdadm -- --overwrite-data-of-peer primary mysql_data 或者 drbdadm -- --overwrite-data-of-peer primary all
或者強制設置爲主:
[root@mysql-master-01 ~/]# drbdadm primary all --force 或者 drbdadm primary mysql_data --force
4.2 查看同步進程
4.2.1 剛開始同步
[root@mysql-master-01/etc/drbd.d/]# cat /proc/drbd version: 8.4.11-1 (api:1/proto:86-101) GIT-hash: 66145a308421e9c124ec391a7848ac20203bb03c build by mockbuild@, 2018-04-26 12:10:42 0: cs:SyncTarget ro:Secondary/Primary ds:Inconsistent/UpToDate C r----- ns:0 nr:328664 dw:328664 dr:0 al:8 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:1673256 [==>.................] sync'ed: 16.6% (1673256/2001920)K finish: 0:01:47 speed: 15,516 (11,736) want: 22,840 K/sec
4.2.1 同步完成
[root@mysql-master-01~/]# cat /proc/drbd version: 8.4.11-1 (api:1/proto:86-101) GIT-hash: 66145a308421e9c124ec391a7848ac20203bb03c build by mockbuild@, 2018-04-26 12:10:42 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:2001664
提示:若是是 drbd90-utils 版本,顯示結果是不同的。
[root@store-nfs-01~/]#cat /proc/drbd version: 9.0.14-1 (api:2/proto:86-113) GIT-hash: 62f906cf44ef02a30ce0c148fec223b40c51c533 build by mockbuild@, 2018-05-04 03:32:42 Transports (api:16): tcp (9.0.14-1)
4.3 同步完成就能夠掛在,往裏面寫數據了
[root@mysql-master-01~/]# mount /dev/drbd0 /mnt/
4.4 建立測試文件
touch /mnt/file{1..3} ls -l /mnt total 0 -rw-r--r--. 1 root root 0 Jun 10 09:43 file1 -rw-r--r--. 1 root root 0 Jun 10 09:43 file2 -rw-r--r--. 1 root root 0 Jun 10 09:43 file3
4.5 卸載文件系統並切換爲備節點
umount /mnt
drbdadm secondary mysql_data
5.1 確認文件主節點的數據是否同步到從節點
drbdadm primary mysql_data mount /dev/drbd0 /mnt ls -l /mnt total 0 -rw-r--r--. 1 root root 0 Jun 10 09:43 file1 -rw-r--r--. 1 root root 0 Jun 10 09:43 file2 -rw-r--r--. 1 root root 0 Jun 10 09:43 file3
注意:從節點不能提供訪問
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="ip_address" port port="7788" protocol="tcp" accept' firewall-cmd --reload