?HA專題: Corosync+Pacemaker+drbd實現MySQL高可用

HA專題: Corosync+Pacemaker+drbd實現MySQL高可用


前言

上篇文章我們介紹了drbd的相關原理、編譯安裝、簡單的實現. drbd雖然可以保證數據的可靠性但是我們上次的實現還有很多的缺陷,這次我們將drbd定義為HA集群的一個資源,可以實現讓多個節點自動切換drbd的主從模式并結合MySQL實現其數據的高可用

實驗拓撲

blob.png

實驗環境

主機 IP 功用
node1.anyisalin.com 172.16.1.2 MySQL,DRBD節點
node2.anyisalin.com 172.16.1.2 MySQL,DRBD節點

實驗步驟

安裝前準備工作

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

配置DRBD

過程不做說明, 看我的上篇博客HA專題: 編譯安裝并配置DRBD

做成DRBD的設備為/dev/sdb1, 兩個節點sdb1都為10G

這里教大家一個小技巧, 使用fdisk非交互分區
1. 創建一個分區文件如下, 輸入交互式分區按順序的命令

   [root@node1 ~]# cat sdb
       n
       p
       1
       1
       10G
       w

2. 使用輸入重定向, 如下即可完成

   [root@node1 ~]# fdisk /dev/sdb < sdb

[root@node1 ~]# yum groupinstall "Development Tools" "Server Platform Development" --nogpgcheck -y
[root@node1 ~]# wget http://oss.linbit.com/drbd/8.4/drbd-8.4.4.tar.gz
[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 --sysconf=/etc/ --with-km
[root@node1 drbd-8.4.4]# make KDIR=/usr/src/kernels/2.6.32-573.el6.x86_64/
[root@node1 drbd-8.4.4]# make install
[root@node1 drbd-8.4.4]# cp drbd/drbd.ko /lib/modules/2.6.32-573.el6.x86_64/kernel/lib/
[root@node1 drbd-8.4.4]# depmod
[root@node1 drbd-8.4.4]# modprobe drbd



drbd配置文件如下, 僅供參考
[root@node1 drbd-8.4.4]# grep -v "[[:space:]]#" /etc/drbd.d/global_common.conf
global {
   usage-count yes;
}

common {
   handlers {

   }

   startup {
   }

   options {
   }

   disk {
       on-io-error detach;
   }

   net {
       cram-hmac-alg "sha1";
       shared-secret "anyisalin.com";
   }
   syncer {
       rate 1000M;
   }
}


資源配置文件如下
[root@node1 drbd-8.4.4]# cat /etc/drbd.d/data.res
resource data {
   device /dev/drbd0;
   disk /dev/sdb1;
   meta-disk internal;
   on node1.anyisalin.com {
       address 172.16.1.2:7789;
   }
   on node2.anyisalin.com {
       address 172.16.1.3:7789;
   }
}


node2將以上操作重復一遍后, 進行如下操作

[root@node1 drbd-8.4.4]# drbdadm create-md data   #node1上操作
[root@node2 drbd-8.4.4]# drbdadm create-md data   #node2上操作
[root@node1 drbd-8.4.4]# service drbd start       #node1上操作
[root@node2 drbd-8.4.4]# service drbd start       #node2上操作
[root@node1 drbd-8.4.4]# cat /proc/drbd  #查看進度, 等待同步完成
[root@node1 drbd-8.4.4]# drbdadm primary --force data #node1設置為Primary
[root@node1 drbd-8.4.4]# mkfs.ext4 /dev/drbd0  #格式化文件系統為ext4

配置MySQL

這里通過通用二進制格式進行安裝

[root@node1 ~]# service drbd start
[root@node1 ~]# mount /dev/drbd0 /data/  #掛載dbrd設備到/data下
[root@node1 ~]# tar xf mysql-5.5.33-linux2.6-x86_64.tar.gz  -C /usr/local/
[root@node1 local]# ln -sv mysql-5.5.33-linux2.6-x86_64/ mysql
[root@node1 local]# groupadd -r -g 3306 mysql
[root@node1 local]# useradd -g mysql -u 3306 -r mysql
[root@node1 local]# cd mysql
[root@node1 mysql]# ./scripts/mysql_install_db --datadir=/data/ --user=mysql
[root@node1 mysql~]# chown mysql:mysql /data/
[root@node1 mysql]# cp support-files/mysql.server /etc/rc.d/init.d/mysqld
[root@node1 mysql]# cp support-files/my-large.cnf /etc/my.cnf  

[root@node1 mysql]# vim /etc/my.cnf   #編輯配置文件, 添加下列字段
datadir = /data
skip_name_resolve = on
innodb_file_per_table = on


測試啟動
[root@node1 ~]# service mysqld start
Starting MySQL..                                           [  OK  ]

[root@node1 ~]# /usr/local/mysql/bin/mysql

mysql> GRANT ALL  ON *.*  TO anyisalin@'%' IDENTIFIED BY 'passwd';  #創建用戶
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES ;
Query OK, 0 rows affected (0.00 sec)

mysql> CREATE DATABASE TESTDB; #創建測試數據庫
Query OK, 1 row affected (0.00 sec)



為node2配置

[root@node1 ~]# service mysqld stop  #停止MySQL
Shutting down MySQL.                                       [  OK  ]

[root@node1 ~]# umount /data/  
[root@node1 ~]# drbdadm secondary data   #將drbd設置為從模式

同步MySQL的文件到node2上
[root@node1 local]# rsync -av mysql node2.anyisalin.com:/usr/local/
[root@node1 local]# rsync -av mysql-5.5.33-linux2.6-x86_64 node2.anyisalin.com:/usr/local/
[root@node1 local]# scp /etc/rc.d/init.d/mysqld node2.anyisalin.com:/etc/rc.d/init.d/
[root@node1 local]# scp /etc/my.cnf node2.anyisalin.com:/etc/

注意: 以下操作在node2執行
[root@node2 ~]# drbdadm primary data   #將drbd設置為主模式
[root@node2 ~]# mkdir /data
[root@node2 ~]# mount /dev/drbd0 /data  #掛載
[root@node2 ~]# groupadd -g 3306 -r mysql  #創建MySQL用戶
[root@node2 ~]# useradd -u 3306 -g mysql -r mysql  #創建MySQL用戶

[root@node2 ~]# service mysqld start  #啟動MySQL
Starting MySQL..                                           [  OK  ]

[root@node2 ~]# mysql -uanyisalin -ppasswd  #使用我們剛才創建的用戶登錄

mysql> SHOW DATABASES;  #剛創建的數據庫還在
+---------------------+
| Database            |
+---------------------+
| information_schema  |
| TESTDB              |
| #mysql50#lost+found |
| mysql               |
| performance_schema  |
+---------------------+
5 rows in set (0.00 sec)

以上操作完成后需要關閉MySQL并卸載掛載的文件系統, 并將每個節點的drbd設置為從模式

配置Corosync+Pacemaker

安裝及配置過程不做說明, 可以看我以前的文章 AnyISalIn的文章, crmsh可去SUSE官方站點下載SUSE Centos HA

[root@node1 ~]# yum install corosync pacemaker crmsh -y --nogpgcheck 
[root@node1 ~]# cd /etc/corosync/
[root@node1 corosync]# corosync-keygen
[root@node1 corosync]# chmod 600 authkey

配置文件如下: /etc/corosync/corosync.conf

[root@node1 corosync]# grep -v "[[:space:]]*#" /etc/corosync/corosync.conf
compatibility: whitetank

totem {
   version: 2

   secauth: on

   threads: 0

   interface {
       ringnumber: 0
       bindnetaddr: 172.16.1.0
       mcastaddr: 239.255.1.1
       mcastport: 5405
       ttl: 1
   }
}

logging {
   fileline: off
   to_stderr: no
   to_logfile: yes
   logfile: /var/log/cluster/corosync.log
   to_syslog: no
   debug: off
   timestamp: on
   logger_subsys {
       subsys: AMF
       debug: off
   }
}


service {
  ver: 0
  name: pacemaker
}

aisexec {
 user: root
 group: root
}


[root@node2 ~]# yum install corosync pacemaker crmsh -y --nogpgcheck
[root@node2 ~]# scp -p node1.anyisalin.com:/etc/corosync/{authkey,corosync.conf} /etc/corosync/


在兩個節點上啟動corosync
[root@node1 ~]# service corosync start
[root@node1 ~]# ssh node2.anyisalin.com -- /etc/init.d/corosync start

[root@node1 ~]# crm status  #查看節點狀態

Last updated: Wed Apr 13 15:07:52 2016
Last change: Wed Apr 13 15:07:22 2016
Stack: classic openais (with plugin)
Current DC: node2.anyisalin.com - partition with quorum
Version: 1.1.11-97629de
2 Nodes configured, 2 expected votes
0 Resources configured


Online: [ node1.anyisalin.com node2.anyisalin.com ]

Full list of resources:


配置資源


crm(live)# configure
crm(live)configure# edit    #配置如下, 僅供參考

node node1.anyisalin.com \
       attributes standby=on
node node2.anyisalin.com \
       attributes standby=off
primitive data_drbd ocf:linbit:drbd \
       params drbd_resource=data \
       op monitor role=Master interval=10s timoue=20s \
       op monitor role=Slave interval=20s timeout=20s \
       op start interval=0 timeout=240 \
       op stop interval=0 timeout=120
primitive myip IPaddr \
       params ip=172.16.1.8
primitive mysql service:mysqld
primitive mysqldatafs Filesystem \
       params device="/dev/drbd0" directory="/data" fstype=ext4 \
       op start interval=0 timeout=60 \
       op stop interval=0 timeout=60
ms MS_data_drbd data_drbd \
       meta master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true
colocation myip_with_mysql inf: myip mysql
order mysql_after_mysqldatafs inf: mysqldatafs mysql
colocation mysql_with_mysqldatafs inf: mysql mysqldatafs
order mysqldatafs_afer_MS_data_drbd inf: MS_data_drbd:promote mysqldatafs:start
colocation mysqldatafs_with_MS_data_drbd inf: mysqldatafs MS_data_drbd:Master
property cib-bootstrap-options: \
       dc-version=1.1.11-97629de \
       cluster-infrastructure="classic openais (with plugin)" \
       expected-quorum-votes=2 \
       stonith-enabled=false \
       last-lrm-refresh=1460541144 \
       no-quorum-policy=ignore


測試

現在node1是Master


blob.png

連接數據庫進行測試


blob.png

我們先將node1 standby


blob.png

再次連接數據進行測試


blob.png

查看drbd的狀態


blob.png

我遇到的問題

這個實驗我做了很久, 遇到了很多的問題, 大部分通過自己的排查和Google都解決了, 所以特定寫下來希望能夠幫助大家排查錯誤

  • 在CentOS6.X的系統中很可能出現連接不到CIB的問題, 錯誤提示信息could not establish cib_ro connection: connection refused (111)

    解決方法: 排除是自己的問題之后, 使用互聯網上的各種軟件倉庫之一對pacemaker更新后并重啟corosync即可解決

  • 在手動配置DRBD資源前一定配置好DBRD, 如果DRBD的配置有問題會影響整體效果

    我在這里說一下我的問題, 做DRBD的之前我在node2創建分區, 分完后忘記partx -a /dev/sdb,但是很奇怪的是, DRBD竟然配置成功了,并且兩個節點都能手動切換主從和掛載, 數據也沒問題!!!!, 到了最后做兩個節點自動切換資源的時候, 資源總是默認傾向于node1節點并且不能切換到node2, 最后才排查出來并解決

總結

這個實驗真心累, 做了接近20個小時, 都快沒耐心了, 還好昨晚調整好了心態, 但是今天也做了十二個小時左右, 最后得知自己因為這種小錯誤才失敗的時候真是…. 唉大家做實驗一定要好好檢查錯誤, 實在不行就重做吧, 也不知道哪里挖了坑. HA專題應該還有兩篇左右, 敬請期待

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

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

(0)
Net18-AnyISalInNet18-AnyISalIn
上一篇 2016-04-13
下一篇 2016-04-14

相關推薦

  • linux 基礎(8)—— 變量

    變量:命名的內存空間 1.作用:①數據存儲格式                         ②參與的運算                 &nbs…

    2017-08-05
  • linux軟件包管理

    linux軟件包管理 簡介     在Linux系統中,軟件包的安裝和管理是很重要的知識,而linux/unix一個麻煩的地方就是軟件安裝程序比較麻煩和復雜,尤其是當所安裝的軟件包要處理較多的包依賴關系,這就更讓人頭疼了,最常見linux軟件安裝方式有三種:     本文主要介紹Linux中RedHat或CentOS發…

    系統運維 2016-05-05
  • 馬哥教育首屆IT技術博客大賽–結果揭曉

    號外、號外??!馬哥教育首屆博客大賽已圓滿結束。感謝小伙伴們的積極參與! 噼里啪啦,小伙伴們掌聲響起來,啤酒烤鴨high起來~~咳咳,跑題了,小編好像忘了一件很重要的事: 馬幫博客大賽就是與眾不同,全銀河系也就僅此一家,為啥這么說呢,您看啊,咱就喜歡原創,鼓勵原創,酷愛原創,以原創博客作為技術交流的平臺供大家隨意圍觀和吐槽,您看看,除了馬哥這里,哪里還有這么自…

    Linux干貨 2016-06-22
  • N26-第三周作業-邢巖

    馬哥門徒-N26-邢巖   “精深練習×一萬小時=世界級技能”。髓鞘質是不可逆的,就讓我們包裹一層厚厚的髓鞘質吧!今天繼續我的練習。   第一題,列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可  ~]# who | cut -d' ' -f1 | sort -u &nbs…

    Linux干貨 2017-02-14
  • RAID+LVM詳解

                                        一.RAID篇 一.什么是RAID   磁盤陣列全名是『Redundant Arrays…

    Linux干貨 2016-09-07
  • 磁盤管理和高級文件系統管理-習題

    高級文件系統管理-習題 1、 創建一個可用空間為40G 的RAID1 設備,要求其chunk大小為128k ,文件系統為ext4 ,有一個空閑盤,開機可自動掛載至/backup目錄 [root@centos7 ~]# mdadm -C /dev/md0 -c 128 -a yes -l 1 -n 2 -x 1 /dev/sdb /dev/sdc /dev/s…

    Linux干貨 2016-09-01

評論列表(5條)

  • wangy8961
    wangy8961 2016-04-14 09:39

    你好,能貼一下你的corosync+pacemaker的版本么?
    不同的版本這里配置不同。
    service {
    # Load the Pacemaker Cluster Resource Manager
    name: pacemaker
    ver: 1
    }

    • Net18-AnyISalIn
      Net18-AnyISalIn 2016-04-15 09:06

      @wangy89611.X corosync + 1.X pacemaker 配置都是一樣的吧,都是將pacemaker作為plugin來運行 也就是ver: 0

  • 螃蟹
    螃蟹 2016-04-28 12:36

    排版不錯,請問是用什么工具實現的?

欧美性久久久久