Skip to content

Instantly share code, notes, and snippets.

@xdite
Created January 12, 2012 09:47
Show Gist options
  • Save xdite/1599619 to your computer and use it in GitHub Desktop.
Save xdite/1599619 to your computer and use it in GitHub Desktop.
Debian DRBD + MySQL + HeartBeat

Debian DRBD + MySQL + HeartBeat

  • 環境
    作業系統 Debian Lenny
    機器一 Hostname: deb01 IP: 192.168.1.121
    機器二 Hostname: deb02 IP: 192.168.1.122
    HeartBeat 控制服務對外 IP: 192.168.1.123
    對外服務 MySQL
  • 大部分動作兩台都要設定
    看情形可以先在一台設定好
    再將設定檔複製到另外一台
    簡單註明 deb01 deb02
    表示兩台都要做的動作
  • Debian Lenny 加入 backports
    deb01 deb02
    http://backports.org/dokuwiki/doku.php?id=instructions

    vi /etc/apt/sources.list.d/lenny-backports.list
  • 寫入這行設定
    deb http://www.backports.org/debian lenny-backports main contrib non-free
  • 更新
    apt-get update
    apt-get install debian-backports-keyring
  • DRBD 備份的硬碟分割
    deb01 deb02
    兩邊的分割大小需相同
    不要格式化也不要掛載

安裝 DRBD 8.3

  • 安裝 backports 裡的 DRBD
    deb01 deb02

    apt-get install -t lenny-backports drbd8-source drbd8-utils
    module-assistant auto-install drbd8
  • 設定 DRBD 設定檔
    deb01 => deb02
    deb01 設定好複製到 deb02

    vi /etc/drbd.d/global_common.conf
  • 在 syncer 區塊裡加入
    rate 100M;
    DRBD 資源設定

    vi /etc/drbd.d/r0.res
    resource r0 {
    on deb01 {
    device /dev/drbd0;
    disk /dev/sdb1;
    address 192.168.1.121:7789;
    meta-disk internal;
    }
    on deb02 {
    device /dev/drbd0;
    disk /dev/sdb1;
    address 192.168.1.122:7789;
    meta-disk internal;
    }
    }
  • 建立 /dev/drbd0 裝置和資源
    deb01 deb02
    sudo mknod /dev/drbd0 b 147 0
    drbdadm create-md r0
  • 啟動 DRBD 服務
    deb01 deb02

    /etc/init.d/drbd start
    如果遇到 drbd module 無法載入 kernel 的錯誤訊息
    請更新系統後再試試

    apt-get update
    apt-get dist-upgrade
  • 檢查 DRBD 連線狀態
    deb01 deb02

    cat /proc/drbd
  • 第一次設定主要主機
    deb01
    設定完這個步驟會進行同步
    可檢查兩台主機的連線狀態
  • drbdsetup 只有第一次設定需要
  • 以後用 drbdadm 即可
    drbdsetup /dev/drbd0 primary -o
    drbdadm primary r0
  • 分割格式化 DRBD 使用的硬碟
    deb01
    請等第一次硬碟同步完在進行
  • 使用 xfs 格式
    apt-get install xfsdump
  • 格式化硬碟分割
    mkfs.xfs /dev/drbd0
  • 掛載分割磁區
    mkdir /db
    mount -o noatime /dev/drbd0 /db

更動 MySQL 的資料位置

  • 停止 MySQL
    deb01 deb02

    /etc/init.d/mysql stop
  • 移動 MySQL 資料
    deb01

    mv /var/lib/mysql /db
  • 修改 MySQL 設定
    deb01 => deb02
    兩邊的 MySQL 設定也要相同
    因此在 deb01 改完複製到 deb02 上

    vi /etc/mysql/my.cnf
    datadir = /db/mysql
    vi /etc/mysql/debian.cnf
    datadir = /db/mysql
  • 啟動 MySQL
    deb01

    /etc/init.d/mysql start
  • 取消開機自動啟動 MySQL
    deb01 deb02
    因為之後要交給 HeartBeat 接管

    mv /etc/rc2.d/S19mysql /etc/rc2.d/K21mysql

測試 DRBD

  • deb01
    先登入 MySQL 做一些修改

    mysql -u root -p
    create database created_at_deb01;
    quit;
    停止 MySQL

    /etc/init.d/mysql stop
    卸載 /db

    umount /db
    DRBD 切回 Secondary

    drbdadm secondary r0
  • deb02
    將 deb02 上的 DRBD 切成 Primary

    drbdadm primary r0
    掛載 /dev/drbd0 到 /db

    mount /dev/drbd0 /db
    啟動 MySQL

    /etc/init.d/mysql start
    檢查在 deb01 的修改是否有同步過來

    mysql -u root -p
    show databases;

安裝及設定 HeartBeat

  • 安裝 backports 裡的 HeartBeat
    deb01 deb02

    apt-get install -t lenny-backports heartbeat
  • 編輯 DRBD 設定加入 HeartBeat dopd (DRBD outdate-peer daemon)
    deb01 deb02

    vi /etc/drbd.d/global_common.conf
  • handlers 的區域裡加入
    outdate-peer “/usr/lib/heartbeat/drbd-peer-outdater -t 6”;
  • disk 的區域裡加入
    fencing resource-only;
  • HeartBeat 的 dopd plugin 需要有 root 的權限執行 drbdsetup 和 drbdmeta
    deb01 deb02

    chgrp haclient /sbin/drbdsetup
    chmod o-x /sbin/drbdsetup
    chmod u+s /sbin/drbdsetup

chgrp haclient /sbin/drbdmeta
chmod o-x /sbin/drbdmeta
chmod u+s /sbin/drbdmeta

  • HeartBeat 三個主要檔案
    deb01 deb02

    /etc/ha.d/authkeys
    /etc/ha.d/ha.cf
    /etc/ha.d/haresources
  • 可以複製系統的範例檔修改
    cp /usr/share/doc/heartbeat/authkeys
    cp /usr/share/doc/heartbeat/ha.cf.gz
    cp /usr/share/doc/heartbeat/haresources.gz
  • 產生 HeartBeat 驗證檔案 authkeys
    deb01 => deb02
    deb01 做完複製到 deb02

    ( echo -ne "auth 1\n1 sha1 "; dd if=/dev/urandom bs=512 count=1 | openssl md5 ) > /etc/ha.d/authkeys
  • 修改權限
    chmod 0600 /etc/ha.d/authkeys
  • 編輯 HeartBeat 設定檔
    deb01 => deb02
    deb01 做完複製到 deb02

    vi /etc/ha.d/ha.cf
    logfile /var/log/ha-log
    logfacility local0
    keepalive 2
    deadtime 15
    warntime 10
    initdead 60
    udpport 694
    bcast eth0
    auto_failback off
    node deb01
    node deb02
    ping 192.168.1.1
    respawn hacluster /usr/lib/heartbeat/ipfail
    respawn hacluster /usr/lib/heartbeat/dopd
    apiauth dopd gid=haclient uid=hacluster
  • 設定 HeartBeat 資源檔
    deb01 => deb02
    deb01 做完複製到 deb02
    啟動時由左到右
    關閉時由右到左

    vi /etc/ha.d/haresources
    deb01 192.168.1.123/24 drbddisk::r0 Filesystem::/dev/drbd0::/db::xfs::noatime mysql
  • deb01
    設定為 HeartBeat 主要主機
  • 192.168.1.123/24
    設定給 HeartBeat 控制提供服務的 IP
  • drbddisk::r0
    設定 DRBD 的資源
  • Filesystem::/dev/drbd0::/db::xfs::noatime
    設定 DRBD 的硬碟掛載到 /db ,格式為 xfs ,掛載時帶入參數 noatime
  • mysql
    設定啟動或關閉的服務

測試 HeartBeat

deb01 上關閉 HeartBeat


/etc/init.d/heartbeat stop
deb02 應該接手跑以下流程

  1. 啟動 deb02 上的服務 IP: 192.168.1.123
  2. DRBD 設為 Primary
  3. 將 /dev/drbd0 掛載 /db
  4. 啟動 MySQL 服務
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment