OpenStack中MySQL高可用配置

  採用Heartbeat+DRBD+mysql高可用方案,配置兩個節點的高可用集羣html

 l  配置各節點互相解析node

gb07mysql

 

gb06linux

 

配置各節點時間同步sql

gb07vim

[root@gb07 ~]# ntpdate 10.10.102.7服務器

 

gb06網絡

[root@gb06 ~]# ntpdate 10.10.102.7dom

 

各節點關閉SELinuxide

修改/etc/selinux/config文件中設置SELINUX=disabled ,而後重啓服務器。

 

Corosync 安裝與配置(兩節點上都要安裝配置)

  • 安裝Corosync

gb07 

[root@gb07 ~]# yum install -y corosync

gb06

[root@gb06 ~]# yum install -y corosync

 

  • .配置Corosync

             [root@gb07 ~]# cd /etc/corosync/

[root@gb07 corosync]# mv corosync.conf.example corosync.conf

[root@gb07 corosync]# vim corosync.conf

compatibility: whitetank

totem {                                                                     #心跳信息傳遞層

    version: 2                                    #版本

    secauth: on                                                                  #認證信息  通常on

    threads: 0                                                           #線程

    interface {                                                           #定義心跳信息傳遞的接口

        ringnumber: 0

        bindnetaddr: 10.10.0.0                       #綁定的網絡地址,寫網絡地址

        mcastaddr: 226.94.1.1                                          #多播地址

        mcastport: 5405                                           #多播的端口

        ttl: 1                                                                           #生存週期

    }

}

logging {                             #日誌

    fileline: off

    to_stderr: no                 #是否輸出在屏幕上

    to_logfile: yes               #定義本身的日誌

    to_syslog: no                 #是否由syslog記錄日誌

    logfile: /var/log/cluster/corosync.log  #日誌文件的存放路徑

    debug: off

    timestamp: on                 #時間戳是否關閉

    logger_subsys {

        subsys: AMF

        debug: off

    }

}

amf {

    mode: disabled

}

service {

     ver: 0

     name: pacemaker       #pacemaker做爲corosync的插件進行工做

}

aisexec {

     user: root

     group: root

}

              [root@gb07 corosync]#  scp corosync.conf gb06:/etc/corosync/

 

  • 認證文件

[root@gb07 corosync]# corosync-keygen

Corosync Cluster Engine Authentication key generator.

Gathering 1024 bits for key from /dev/random.

Press keys on your keyboard to generate entropy (bits = 152).

#遇到這個狀況,表示電腦的隨機數不夠,能夠不停的隨便敲鍵盤生成隨機數

[root@gb07 corosync]# scp authkey gb06:/etc/corosync/

#把認證文件也複製到gb06主機上

l  Pacemaker配置與安裝(兩節點上都要安裝配置)

  • 安裝pacemaker

gb07

[root@gb07 ~]# yum install -y pacemaker

gb06

[root@gb06 ~]# yum install -y pacemaker

 

  • 安裝crmsh

gb07

[root@gb07 ~]# yum –y install crm

gb06

[root@gb06 ~]# yum –y install crm

 

安裝完成後,啓動corosync  service corosync start; 啓動pacemaker

service pacemaker start

 

DRBD 安裝與配置(兩個節點上都要安裝配置)

  • 安裝drbd

gb07

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

gb06

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

     若是yum源找不到包,嘗試在網上搜一下drbd安裝,下載相應的yum源文件再安裝

  • 配置drbd

[root@gb07 ~]# cat /etc/drbd.d/global_common.conf

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;

        }

}

       [root@gb07 drbd.d]# cat mysql.res #資源配置文件

              resource mysql {

            on gb07 {

                 device    /dev/drbd0;

                 disk      /dev/sda3;     #預留的硬盤分區

                 meta-disk internal;

                 address ipv4 10.10.102.7:7700;  

            }

            on gb06 {

                 device    /dev/drbd0;

                 disk      /dev/sda3;

                 meta-disk internal;

                 address ipv4 10.10.102.6:7700;

            }

}

[root@gb07 drbd.d]# scp global_common.conf mydata.res gb06:/etc/drbd.d/

 

  • 初始化drbd的資源並啓動

 

 DRBD元數據的初始化和將元數據的初始設置寫入 /dev/data/mysql,必須兩個節點上都完成

建立/ dev/drbd0設備節點,將DRBD設備與本地存儲設備相連,必須在兩個節點上都完成

使初始設備同步,讓設備成爲主要的角色(可寫和可讀)。查看DRBD資源的主要角色和次要角色更詳細的說明請參考DRBD用戶指南。只能完成一個節點,就是你將繼續建立文件系統的那個節點

 

  • 格式化drbd分區(主節點上完成)

mkfs -t xfs /dev/drbd0

mount /dev/drbd0 /mysql

 

l  將mysql資源加入pacemaker

  • 定義drbd資源

[root@jie2 ~]# crm

crm(live)# configure

crm(live)configure# property stonith-enabled=false

crm(live)configure# property no-quorum-policy=ignore

crm(live)configure# primitive mysqldrbd ocf:linbit:drbd params drbd_resource=mysql op monitor role=Master interval=10 timeout=20  op monitor  role=Slave interval=20 timeout=20 op start timeout=240 op stop timeout=100

crm(live)configure#verify   #檢查語法

 

  • 定義drbd的主從資源

crm(live)configure# ms ms_mysqldrbd mysqldrbd meta master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true

crm(live)configure# verify

 

  • 定義文件系統資源和約束關係

crm(live)configure# primitive mystore ocf:heartbeat:Filesystem params device="/dev/drbd0" directory="/mysql" fstype="xfs" op monitor interval=40 timeout=40 op start timeout=60 op stop timeout=60

crm(live)configure# verify

crm(live)configure# colocation mystore_with_ms_mysqldrbd inf: mystore ms_mysqldrbd:Master

crm(live)configure# order ms_mysqldrbd_before_mystore mandatory: ms_mysqldrbd:promote mystore:start

crm(live)configure# verify

 

  • 定義vip資源、mysql服務的資源約束關係

crm(live)configure# primitive myvip ocf:heartbeat:IPaddr params ip="10.10.42.96" op monitor interval=20 timeout=20 on-fail=restart

crm(live)configure# primitive myserver lsb:mysqld op monitor interval=20 timeout=20 on-fail=restart

crm(live)configure# verify

crm(live)configure# colocation myserver_with_mystore inf: myserver mystore

crm(live)configure# order mystore_before_myserver mandatory: mystore:start myserver:start

crm(live)configure# verify

crm(live)configure# colocation myvip_with_myserver inf: myvip myserver

crm(live)configure# order myvip_before_myserver mandatory: myvip myserver

crm(live)configure# verify

crm(live)configure# commit

                  commit以後能夠查看節點的運行狀態,切換節點,看資源是否轉移

 

  • 關閉drbd的服務和關閉mysql的服務

mysqldrbd都是集羣的資源,由集羣管理的資源開機是必定不可以自行啓動的。

[root@gb07 ~]#chkconfig mysqld off

[root@gb07 ~]#chkconfig drbd off

[root@gb06 ~]#chkconfig mysqld off

[root@gb06 ~]#chkconfig drdb off

  • 爲高可用Mysql配置Openstack服務

  如今,OpenStack的服務必須指向MySQL配置高可用,虛擬羣集IP地址 - 而不是像往常同樣的MySQL服務器的物理IP地址。

  對於Openstack中的glance,若是Mysql服務的ip地址是10.10.102.7,將會用到如下幾行在OpenStack鏡像註冊配置文件中(glance-registry.conf):

    sql_connection = mysql://glancedbadmin:<password>@10.10.42.96/glance

 

l  可能會遇到的問題

  • 腦裂故障

正常狀態下,查看集羣中drbd資源的鏈接狀態爲:

 

但因爲網絡或機器的故障可能會出現drbd腦裂故障,集羣的drbd資源鏈接中斷:

0:mysql/0  StandAlone Secondary/Unknown UpToDate/-- C r-----

解決辦法查看官方連接http://www.drbd.org/users-guide/s-resolve-split-brain.html

  • 集羣管理器pacemaker沒法啓動mysql,啓動失敗; 控制節點內存要足夠,mysql中有個插件innodb,mysqld啓動時innodb插件會初始化一個內存緩衝池,約2.3G,若是沒有足夠的內存,mysqld啓動就會失敗;
  • 偶爾一個節點掛掉,修復完成後,crm resource list看到該節點的資源狀態仍然是stopped,沒法start,可能須要重啓一下drbd和pacemaker;
相關文章
相關標籤/搜索