推薦-HA專題: 編譯安裝并配置DRBD

HA專題: 編譯安裝并配置DRBD

前言

上篇我們講到使用corosync+pacemaker實現MySQL高可用, 但是NFS容易成為單點故障從而導致數據丟失等嚴重問題, 我們可以使用drbd來實現MySQL數據的高可用, 本文介紹如何編譯安裝drbd并配置drbd實現不同主機的分區鏡像

實驗環境

今天實驗環境比較簡單, 所以就不畫圖了

主機 IP 功用
node1.anyisalin.com 172.16.1.2 drbd節點
node2.anyisalin.com 172.16.1.3 drbd節點

注意: 本文實驗中所有主機SElinux和iptables都是關閉的

DRBD介紹

The Distributed Replicated Block Device (DRBD) is a software-based, shared-nothing, replicated storage solution mirroring the content of block devices (hard disks, partitions, logical volumes etc.) between hosts. 轉自官方文檔: Chapter 1. DRBD Fundamentals

分布式文件塊(DRBD)是一種基于軟件, 無共享的, 復制, 鏡像主機間塊設備的內容(lvm, partition, disk..)的解決方案

DRBD鏡像數據的特點:

  • 實時(in real time): 實時復制鏡像設備的內容

  • 透明(transparently): 對于用戶和應用程序鏡像數據的過程是透明的

  • 同步、異步(synchronously、asynchronously): 同步模式下, 程序會通知所欲主機并在所有的寫操作寫入所有主機才會寫入本地磁盤、異步模式下, 程序會在通知寫操作寫入其他主機之前就寫入本地磁盤

DRBD在Linux內核I/O棧的位置
Alt textblob.png

DRBD的三種協議
上面的圖可以看出DRBD在I/O棧的位置, 也大體可以了解DRBD的工作流程, 其實DRBD有三種工作模型, 我們稱它為三種工作協議, 分別為protcol A, protcol B, protocol C, 我們大體說一下這三種工作協議

  • Protocol A: Asynchronous, 也稱為異步模型, 當DRBD將數據流傳到本機網卡接口時就視為完成傳輸

  • Protocol B: Semi-Synchronous, 也成為半同步模型, 當DRBD將數據流傳到目標主機的網卡接口時視為完成傳輸

  • Protocol C: Synchronous, 也成為同步模型, 當DRBD將數據流傳到目標主機并且目標主機將數據寫入DRBD設備時才視其為完成傳輸

DRBD在用戶空間的管理命令

  • drbdadm: 在drbd套件用較為高級的程序, 配置方法較為簡單, 獲取配置文件中的參數來進行配置, 算是drbdsetup和drbdmeta的前端工具

  • drbdsetup: 可以直接配置加載的DRBD模塊, 配置較為復雜

  • drbdmeta: 允許創建、轉儲、還原和修改DRBD元數據結構, 配置更為復雜

安裝前準備工作

配置一個HA集群的前提需要配置時間同步, 雙機互信, 主機名解析
由于我們以前的博文已經講解過如何配置:可以查看
HA配置準備工作

獲取并編譯安裝DRBD

我這里系統是CentOS 6.7, 通過官方站點DRBD DownLoad下載drbd-8.4.4.tar.gz

[root@node1 ~]# yum groupinstall "Development Tools" "Server Platform Development" -y --nogpgcheck #安裝開發包組

[root@node1 ~]# wget http://oss.linbit.com/drbd/8.4/drbd-8.4.4.tar.gz #下載drbd
[root@node1 ~]# tar xf drbd-8.4.4.tar.gz -C /usr/src/
[root@node1 ~]# cd /usr/src/drbd-8.4.4/


#編譯安裝
[root@node1 drbd-8.4.4]# ./configure --prefix=/usr/local/drbd --sysconfdir=/etc/ --with-km

[root@node1 drbd-8.4.4]# make DIR=/usr/src/kernels/2.6.32-573.el6.x86_64/
[root@node1 drbd-8.4.4]# make install
[root@node1 drbd-8.4.4]# cd drbd
[root@node1 drbd]# make KDIR=/usr/src/kernels/2.6.32-573.el6.x86_64/
[root@node1 drbd]# cp drbd.ko /lib/modules/2.6.32-573.el6.x86_64/kernel/lib/

#裝載模塊
[root@node1 drbd]# depmod
[root@node1 drbd]# modprobe drbd
[root@node1 drbd]# lsmod | grep drbd
drbd                  327242  0 
libcrc32c               1246  1 drbd

node2的操作同上, 由于篇幅原因不做敘述

配置DRBD

分區

注意:創建完分區后不能對其進行格式化, 下面的操作在node1和node2都需要執行

[root@node1 ~]# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0xa5927bb4.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-2610, default 1): 
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +10G

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@node1 ~]# partx -a /dev/sdb
BLKPG: Device or resource busy
error adding partition 1
[root@node1 ~]# partx -a /dev/sdb
BLKPG: Device or resource busy
error adding partition 1

配置文件

配置文件如下, /etc/drbd.d/glob-common.conf, 并復制到node2上

global {
        usage-count no;
        # minor-count dialog-refresh disable-ip-verification
}

common {
        protocol C;

        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";
                # fence-peer "/usr/lib/drbd/crm-fence-peer.sh";
                # split-brain "/usr/lib/drbd/notify-split-brain.sh root";
                # out-of-sync "/usr/lib/drbd/notify-out-of-sync.sh root";
                # before-resync-target "/usr/lib/drbd/snapshot-resync-target-lvm.sh -p 15 -- -c 16k";
                # after-resync-target /usr/lib/drbd/unsnapshot-resync-target-lvm.sh;
        }

        startup {
                #wfc-timeout 120;
                #degr-wfc-timeout 120;
        }

        disk {
                on-io-error detach;
                #fencing resource-only;
        }

        net {
                cram-hmac-alg "sha1";
                shared-secret "mydrbdlab";
        }

        syncer {
                rate 1000M;
        }

配置文件如下, /etc/drbd.d/data.res, 并復制到node2上

resource data {
        on node1.anyisalin.com  {
         device  /dev/drbd0;
         disk   /dev/sdb1;
         address 172.16.1.2:7789;
         meta-disk   internal;
        }
        on node2.anyisalin.com {
         device  /dev/drbd0;
         disk   /dev/sdb1;
         address 172.16.1.3:7789;
         meta-disk  internal;
        }

}

啟動并設置DRBD

首先我們先在node1node2分別初始化資源

[root@node1 drbd.d]# drbdadm create-md data  #node1運行
[root@node2 drbd.d]# drbdadm create-md data  #node2運行

同時在node1node2上啟動drbd

[root@node1 drbd.d]# service drbd start  #node1運行
[root@node2 drbd.d]# service drbd start  #node2運行

設置node1為主節點

[root@node1 drbd.d]# drbdadm primary --force data 
[root@node1 drbd.d]# cat /proc/drbd #可以看到同步過程, 手慢了沒截到圖

# 同步完成后
 0: cs:Connected ro:Primary/Secondary ds:UpToDate/Diskless C r-----
 ns:0 nr:0 dw:0 dr:792 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:10490052

格式化并掛載

我們需要對drbd設備格式化并掛載才能使用, P.S drbd正常情況下只有主節點能夠掛載

[root@node1 drbd.d]# mkfs.ext4 /dev/drbd0  #格式化drbd設備
[root@node1 drbd.d]# mkdir /data
[root@node1 drbd.d]# mount /dev/drbd0 /data/ #掛載到data目錄
[root@node1 drbd.d]# cd /data/
[root@node1 data]# touch node1.anyisalin.com  #創建文件在data目錄

驗證冗余性

我們將node1設置為seondary并將node2設置為primary

[root@node1 ~]# umount /data/   #首先要卸載drbd0
[root@node1 ~]# drbdadm secondary data  #設置為secondary
[root@node2 ~]# drbdadm primary data   #設置node2為primary

[root@node2 ~]# cat /proc/drbd   #現在為Primary
 2016-04-12 10:29:41 0: cs:Connected ro:Primary/Secondary ds:Diskless/UpToDate C r-----
    ns:0 nr:664 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0

[root@node2 ~]# mkdir /data
[root@node2 ~]# mount /dev/drbd0 /data/  #掛載到/data
[root@node2 ~]# cd /data/  
[root@node2 data]# ls  #還是能查看到node1創建的文件
lost+found  node1.anyisalin.com
[root@node2 data]# touch node2.anyisalin.com

總結

本篇文章的DRBD還不算特別完整, 只能通過手動來切換主從, 我們下篇文章介紹如何將DRBD配置成集群資源并結合MySQL, 實現MySQL數據庫的高可用

作者水平很低, 如果有錯誤及時指出, 如果你覺得本文寫的好請點一波贊~(≧▽≦)/~
作者: AnyISaIln QQ: 1449472454
感謝: MageEdu

原創文章,作者:Net18-AnyISalIn,如若轉載,請注明出處:http://www.www58058.com/14703

(0)
Net18-AnyISalInNet18-AnyISalIn
上一篇 2016-04-11 17:06
下一篇 2016-04-12 16:00

相關推薦

  • 8-10 bash變量淺談

    8-10 作業 一、腳本 1、編寫腳本/root/bin/systeminfo.sh,顯示當前主機系統信息,包括主機名,IPv4地址,操作系統版本,內核版本,CPU型號,內存大小,硬盤大小。 2、編寫腳本/root/bin/backup.sh,可實現每日將/etc/目錄備份到/root/etcYYYY-mm-dd中 3、編寫腳本/root/bin/disk.…

    Linux干貨 2016-08-15
  • Linux網絡配置

    (1)、ifcfg家庭命令配置: ifconfig/route/netstat ifup/ifdown   (2)、ip命令配置: ip addr | route | link   (3)、修改配置文件 IP、MASK、GW、DNS相關配置文件:/etc/sysconfig/network-scripts/ifcfg-IFACE 路由相關…

    2018-01-30
  • 日志SYSLOGD_OPTIONS 參數

    SYSLOGD_OPTIONS 參數

    Linux干貨 2018-03-26
  • 計算機及Linux系統基礎簡介

    一、計算機的組成及其功能 計算機由運算器,控制器,存儲器,輸入裝置和輸出裝置五大部件組成計算機,每一部件分別按要求執行特定的基本功能。 運算器或稱算術邏輯單元(Arithmetical and Logical Unit) 運算器的主要功能是對數據進行各種運算。這些運算除了常規的加、減、乘、除等基本的算術運算之外,還包括能進行“邏輯判斷”的邏輯處理能力,即“與…

    Linux干貨 2017-07-02
  • Linux yum客戶端的配置及yum命令

    一、什么是yum我們在Linux系統上安裝處理軟件,一般是使用RPM,它是通過預先編譯完成并且把軟件打包為RPM文件格式后,再加以安裝的一種方式,使用者只要拿到這個打包好的軟件,然后將里頭的文件放置到應該擺放的目錄,這樣就完成了安裝。但是,由于有些軟件是有依賴于其他軟件的,當你要安裝某個RPM類型的軟件時,RPM會檢驗RPM軟件數據庫,它所依賴的相關軟件包是…

    2017-06-11
  • 網絡管理之nmcli命令的使用

    nmcli命令      地址配置工具:nmcli nmcli[ OPTIONS ] OBJECT { COMMAND | help }     device -show and manage network interfaces     …

    Linux干貨 2016-09-19
欧美性久久久久