DRBD-MYSQL分佈式塊設備實現高可用

DRBD-MYSQL分佈式塊設備實現高可用node

 

1、介紹DRBD:

DRBD是一個用軟件實現的、無共享的、服務器之間鏡像塊設備內容的存儲複製解決方案。 DRBD Logo數據鏡像:實時、透明、同步(全部服務器都成功後返回)、異步(本地服務器成功後返回)。DBRD的核心功能經過Linux的內核實現,最接近系統的IO棧,但它不能神奇地添加上層的功能好比檢測到EXT3文件系統的崩潰。DBRD的位置處於文件系統如下,比文件系統更加靠近操做系統內核及IO棧。mysql

2、DRBD安裝:(ha高可用集羣。:在centos7的版本下)

環境:linux

192.168.5.101  cml1算法

192.168.5.102  cml2sql

一、修改hosts文件保證hosts之間可以互相訪問:

[root@cml1 ~]# cat /etc/hostsvim

127.0.0.1  localhost localhost.localdomain localhost4 localhost4.localdomain4centos

::1        localhost localhost.localdomain localhost6 localhost6.localdomain6api

192.168.5.101 cml1 wwwNaNl1.com服務器

192.168.5.102 cml2 wwwNaNl2.com網絡

192.168.5.104 cml3 wwwNaNl3.com

192.168.5.105 cml4 wwwNaNl4.com

二、修改ssh互信:

[root@cml1 ~]# ssh-keygen

[root@cml1 ~]# ssh-copy-id cml2

三、設置時鐘同步:

[root@cml1 ~]# crontab -l

*/5 * * * * ntpdate cn.pool.ntp.org

4.安裝DRBD:

[root@cml1 ~]#  rpm --importhttps://www.elrepo.org/RPM-GPG-KEY-elrepo.org

[root@cml1 ~]#  rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm

[root@cml1 ~]#  yum install -y kmod-drbd84 drbd84-utils

五、主配置文件:

/etc/drbd.conf #主配置文件

/etc/drbd.d/global_common.conf#全局配置文件

六、查看主配置文件:

[root@cml1 ~]# 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";

七、配置文件說明:

[root@cml1 ~]# vim/etc/drbd.d/global_common.conf

global {

   usage-count no;  #是否參加DRBD使用統計,默認爲yes。官方統計drbd的裝機量

    #minor-count dialog-refresh disable-ip-verification

}

common {

   protocol C;      #使用DRBD的同步協議

   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 {

       # wfc-timeout degr-wfc-timeout outdated-wfc-timeout wait-after-sb

    }

   options {

       # cpu-mask on-no-data-accessible

    }

   disk {

       on-io-error detach; #配置I/O錯誤處理策略爲分離

       # size max-bio-bvecs on-io-error fencing disk-barrier disk-flushes

       # disk-drain md-flushes resync-rate resync-after al-extents

       # c-plan-ahead c-delay-target c-fill-target c-max-rate

       # c-min-rate disk-timeout

    }

   net {

 

       # protocol timeout max-epoch-size max-buffers unplug-watermark

       # connect-int ping-int sndbuf-size rcvbuf-size ko-count

       # allow-two-primaries cram-hmac-alg shared-secret after-sb-0pri

       # after-sb-1pri after-sb-2pri always-asbp rr-conflict

       # ping-timeout data-integrity-alg tcp-cork on-congestion

       # congestion-fill congestion-extents csums-alg verify-alg

       # use-rle

    }

   syncer {

       rate 1024M;    #設置主備節點同步時的網絡速率

    }

}

註釋: on-io-error 策略可能爲如下選項之一

detach 分離:這是默認和推薦的選項,若是在節點上發生底層的硬盤I/O錯誤,它會將設備運行在Diskless無盤模式下

pass_on:DRBD會將I/O錯誤報告到上層,在主節點上,它會將其報告給掛載的文件系統,可是在此節點上就每每忽略(所以此節點上沒有能夠報告的上層)

-local-in-error:調用本地磁盤I/O處理程序定義的命令;這須要有相應的local-io-error調用的資源處理程序處理錯誤的命令;這就給管理員有足夠自由的權力命令命令或是腳本調用local-io-error處理I/O錯誤定義一個資源

八、建立配置文件:

[root@cml1 ~]# cat/etc/drbd.d/mysql.res

resource mysql {   ##資源名稱

protocol C;                  ##使用協議

meta-disk internal;

device /dev/drbd1;    ##DRBD設備名稱

syncer {

verify-alg sha1;                   ##加密算法

}

net {

allow-two-primaries;

}

on cml1 {

disk /dev/sdb1;            ##drbd使用的磁盤分區爲「mysql」(能夠不想同的磁盤名字)

address 192.168.5.101:7789;    ##設置DRBD監聽地址的端口

}

on cml2 {

disk /dev/sdb1;

address 192.168.5.102:7789;

}

}

 

九、而後把配置文件copy到對面的機器上:

[root@cml1 ~]# scp -rp /etc/drbd.d/*cml2:/etc/drbd.d/

##而後在兩臺機器上安裝mariadb

[root@cml1 ~]# yum install -ymariadb-server mariadb

[root@cml1 ~]# mkdir /data/

[root@cml1 ~]# cat /etc/my.cnf

[mysqld]

datadir=/data

socket=/var/lib/mysql/mysql.sock

# Disabling symbolic-links is recommendedto prevent assorted security risks

symbolic-links=0

# Settings user and group are ignored whensystemd is used.

# If you need to run mysqld under adifferent user or group,

# customize your systemd unit file formariadb according to the

# instructions inhttp://fedoraproject.org/wiki/Systemd

 

[mysqld_safe]

log-error=/var/log/mariadb/mariadb.log

pid-file=/var/run/mariadb/mariadb.pid

 

#

# include all files from the configdirectory

#

!includedir /etc/my.cnf.d

[root@cml1 ~]# chown mysql:mysql /data/

十、在node2上面啓動:

[root@cml1 ~]#  drbdadm create-md mysql

initializing activity log

initializing bitmap (160 KB) to all zero

Writing meta data...

New drbd meta data block successfullycreated.

[root@cml1 ~]# modprobe drbd

##查看內核是否已經加載了模塊:

[root@cml1 drbd.d]# lsmod | grep drbd

drbd                  396875  1

libcrc32c              12644  4 xfs,drbd,ip_vs,nf_conntrack

###

 

[root@cml1 ~]# drbdadm up mysql

[root@cml1 ~]# drbdadm -- --force primarymysql

##查看狀態:

[root@cml1 ~]# cat /proc/drbd

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

GIT-hash: a4d5de01fffd7e4cde48a080e2c686f9e8cebf4cbuild by mockbuild@, 2017-09-15 14:23:22

 

 1:cs:WFConnection ro:Primary/Unknown ds:UpToDate/DUnknown C r----s

   ns:0 nr:0 dw:0 dr:912 al:8 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:foos:5240636

十一、在對端節點執行:

[root@cml2 ~]# chown mysql:mysql /data/

[root@cml2 ~]# drbdadm create-md mysql

[root@cml2 ~]# modprobe drbd

[root@cml2 ~]# drbdadm up mysql

在從上面能夠查看數據同步的狀態:

[root@cml2 ~]# cat /proc/drbd

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

GIT-hash:a4d5de01fffd7e4cde48a080e2c686f9e8cebf4c build by mockbuild@, 2017-09-1514:23:22

 

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

   ns:0 nr:1513472 dw:1513472 dr:0 al:8 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:foos:3727164

       [====>...............] sync'ed: 29.0% (3636/5116)M

       finish: 0:01:32 speed: 40,192 (38,804) want: 102,400 K/sec

十二、格式化並掛載:

[root@cml1 ~]# mkfs.ext4 /dev/drbd1

meta-data=/dev/drbd1             isize=512    agcount=4, agsize=327540 blks

        =                      sectsz=512   attr=2, projid32bit=1

        =                       crc=1        finobt=0, sparse=0

data    =                      bsize=4096   blocks=1310159,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

[root@cml1 ~]# mount /dev/drbd1 /mnt

[root@cml1 ~]# df -h

Filesystem           Size Used Avail Use% Mounted on

/dev/mapper/cl-root   17G 6.9G   11G  41% /

devtmpfs             588M     0 588M   0% /dev

tmpfs                599M     0 599M   0% /dev/shm

tmpfs                599M   34M 565M   6% /run

tmpfs                599M     0 599M   0% /sys/fs/cgroup

/dev/sda1           1014M  168M 847M  17% /boot

/dev/drbd1           5.0G   33M 5.0G   1% /mnt

注####要想使得從能夠掛載,咱們必須,先把主切換成叢,而後再到從上面掛載:

 

有以下資源:

資源的鏈接狀態;一個資源可能有如下鏈接狀態中的一種

StandAlone 獨立的:網絡配置不可用;資源尚未被鏈接或是被管理斷開(使用 drbdadm disconnect 命令),或是因爲出現認證失敗或是腦裂的狀況

Disconnecting 斷開:斷開只是臨時狀態,下一個狀態是StandAlone獨立的

Unconnected 懸空:是嘗試鏈接前的臨時狀態,可能下一個狀態爲WFconnection和WFReportParams

Timeout 超時:與對等節點鏈接超時,也是臨時狀態,下一個狀態爲Unconected懸空

BrokerPipe:與對等節點鏈接丟失,也是臨時狀態,下一個狀態爲Unconected懸空

NetworkFailure:與對等節點推進鏈接後的臨時狀態,下一個狀態爲Unconected懸空

ProtocolError:與對等節點推進鏈接後的臨時狀態,下一個狀態爲Unconected懸空

TearDown 拆解:臨時狀態,對等節點關閉,下一個狀態爲Unconected懸空

WFConnection:等待和對等節點創建網絡鏈接

WFReportParams:已經創建TCP鏈接,本節點等待從對等節點傳來的第一個網絡包

Connected 鏈接:DRBD已經創建鏈接,數據鏡像如今可用,節點處於正常狀態

StartingSyncS:徹底同步,有管理員發起的剛剛開始同步,將來可能的狀態爲SyncSource或PausedSyncS

StartingSyncT:徹底同步,有管理員發起的剛剛開始同步,下一狀態爲WFSyncUUID

WFBitMapS:部分同步剛剛開始,下一步可能的狀態爲SyncSource或PausedSyncS

WFBitMapT:部分同步剛剛開始,下一步可能的狀態爲WFSyncUUID

WFSyncUUID:同步即將開始,下一步可能的狀態爲SyncTarget或PausedSyncT

SyncSource:以本節點爲同步源的同步正在進行

SyncTarget:以本節點爲同步目標的同步正在進行

PausedSyncS:以本地節點是一個持續同步的源,可是目前同步已經暫停,多是由於另一個同步正在進行或是使用命令(drbdadm pause-sync)暫停了同步

PausedSyncT:以本地節點爲持續同步的目標,可是目前同步已經暫停,這能夠是由於另一個同步正在進行或是使用命令(drbdadm pause-sync)暫停了同步

VerifyS:以本地節點爲驗證源的線上設備驗證正在執行

VerifyT:以本地節點爲驗證目標的線上設備驗證正在執行

1三、查看資源角色命令:

[root@cml1 ~]# cat /proc/drbd

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

GIT-hash:a4d5de01fffd7e4cde48a080e2c686f9e8cebf4c build by mockbuild@, 2017-09-1514:23:22

 

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

   ns:10526345 nr:340312 dw:392669 dr:10488683 al:24 bm:0 lo:0 pe:0 ua:0ap:0 ep:1 wo:f oos:0

1四、在剛纔的環境模擬腦裂的狀況:

[root@cml1 etc]# drbd-overview

NOTE: drbd-overview will be deprecatedsoon.

Please consider using drbdtop.

 

 1:mysql/0 Connected Secondary/Primary UpToDate/UpToDate

You have new mail in /var/spool/mail/root

 

node3如今是master狀態:

[root@cml2 ~]# drbd-overview

NOTE: drbd-overview will be deprecatedsoon.

Please consider using drbdtop.

 

 1:mysql/0 Connected Primary/Secondary UpToDate/UpToDate /test xfs 5.0G 33M 5.0G 1%

You have new mail in /var/spool/mail/root

 

1五、咱們模擬故障,我在node3上面開啓iptables,是的不能互相通訊,模擬master故障:

[root@cml2 ~]# iptables -P INPUT DROP.  ##注意這裏要先開啓22端口:

 

###咱們查看一下cml1的狀態:

[root@cml1 etc]# drbd-overview

NOTE: drbd-overview will be deprecatedsoon.

Please consider using drbdtop.

 

 1:mysql/0 WFConnection Secondary/Unknown UpToDate/DUnknown

You have new mail in /var/spool/mail/root

 

###如今是Unknown狀態,是不可用的:

 

1六、咱們將cml1升級爲master:

[root@cml1 etc]# drbdadm primary mysql

[root@cml1 etc]# drbd-overview

NOTE: drbd-overview will be deprecatedsoon.

Please consider using drbdtop.

 

 1:mysql/0 WFConnection Primary/Unknown UpToDate/DUnknown

[root@cml1 etc]# mount /dev/drbd1 /mnt/

[root@cml1 etc]# ls /mnt/

xiaoluo.txt

1七、這個時候加入node3網絡恢復了,就會出現腦裂的狀況:

iptables -P INPUT ACCEPT

 

##查看兩個結點的狀態:

[root@cml1 etc]# drbdadm role mysql

Primary/Unknown

[root@cml2 ~]# drbdadm role mysql

Primary/Unknown

 

##查看兩個的連接狀態:

[root@cml1 etc]# drbd-overview

NOTE: drbd-overview will be deprecatedsoon.

Please consider using drbdtop.

 

 1:mysql/0 StandAlone Primary/Unknown UpToDate/DUnknown /mnt xfs 5.0G 33M 5.0G 1%

 

[root@cml2 ~]# drbd-overview

NOTE: drbd-overview will be deprecatedsoon.

Please consider using drbdtop.

 

 1:mysql/0 StandAlone Primary/Unknown UpToDate/DUnknown /test xfs 5.0G 33M 5.0G 1%

 

1八、如今在cml1上面作處理辦法,把他將爲備用結點:

[root@cml1 ~]# umount /mnt/

[root@cml1 ~]# drbdadm disconnect mysql

??: Failure: (162) Invalid configurationrequest

additional info from kernel:

unknown connection

Command 'drbdsetup-84 disconnectipv4:192.168.113.143:7789 ipv4:192.168.113.144:7789' terminated with exit code10

要把mariadb stop掉才能夠切成secondary

 

[root@cml1 ~]# drbdadm secondary mysql

[root@cml1 ~]# drbd-overview

NOTE: drbd-overview will be deprecatedsoon.

Please consider using drbdtop.

 

 1:mysql/0 StandAlone Secondary/Unknown UpToDate/DUnknown

[root@cml1 ~]# drbdadm connect--discard-my-data mysql  ##在從主機上作

 

##如今咱們查看一下集羣結點仍是不能用的:

[root@cml1 ~]# drbd-overview

NOTE: drbd-overview will be deprecatedsoon.

Please consider using drbdtop.

 

 1:mysql/0 WFConnection Secondary/Unknown UpToDate/DUnknown

 

1九、最後再到node3結點上從新鏈接:

[root@cml2 ~]# drbdadm connect mysql   ##在主的主機上面作

 

##而後咱們再查看一下狀態:

[root@cml2 ~]# drbd-overview

NOTE: drbd-overview will be deprecatedsoon.

Please consider using drbdtop.

 

 1:mysql/0 Connected Primary/Secondary UpToDate/UpToDate /test xfs 5.0G 33M 5.0G 1%

 

[root@cml1 ~]# drbd-overview

NOTE: drbd-overview will be deprecatedsoon.

Please consider using drbdtop.

 

 1:mysql/0 Connected Secondary/Primary UpToDate/UpToDate

相關文章
相關標籤/搜索