天天看點

heartbeat v1 實作 MariaDB資料庫的高可用

MariaDB資料庫服務的高可用:

使用 heartbeat v1 版實作兩個節點的 MariaDB資料庫服務的高可用。

節點:

    node1        192.168.60.33

    node2        192.168.60.88

MySQL資料庫的資料檔案使用nfs共享檔案系統解決

nfs Server       192.168.60.22

架構如下圖:

<a href="http://s3.51cto.com/wyfs02/M02/48/ED/wKiom1QMRl3gE_cJAAIe0TaKqHs158.jpg" target="_blank"></a>

一、heartbeat 節點之間通信要求的設定;

(1)、解決節點的主機名解析

因為 heartbeat 的節點間通訊基于名稱。基于名稱進行通訊就要實作域名解析:而名稱解析有兩種方法:

1

2

<code>A、 基于本地hosts 檔案實作主機名到IP位址的解析;</code>

<code>B、 使用DNS域名伺服器進行域名解析;</code>

基于效率等方面考慮,使用本地hosts 檔案進行主名與IP位址的解析。

把 192.168.60.88 主機設定為HA高可用的節點2 node2. 

設定基于本地hosts檔案實作域名解析

<code>[root@nfs admin]</code><code># echo "192.168.60.88 node2.9527du.com node2" &gt; /etc/hosts</code>

<code>[root@nfs admin]</code><code># echo "192.168.60.33 node1.9527du.com node2" &gt;&gt; /etc/hosts</code>

把配置好的hosts 檔案複制一份到另一節點:

<code>[root@nfs admin]</code><code># scp -p /etc/hosts [email protected]</code>

(2)、給HA高可用叢集的各節點設定主機名

A)、設定192.168.60.88主機的主機名為:node2.9527du.com

<code>[root@nfs admin]</code><code># vim /etc/sysconfig/network</code>

<code>HOSTNAME=node2.9527du.com</code>

使用【hostname】指令設定主機名立即生效

<code>[root@nfs admin]</code><code># hostname node2.9527du.com</code>

測試主機名能否解析成功

3

4

5

6

7

<code>[root@nfs admin]</code><code># ping -c 1 node2.9527du.com</code>

<code>PING node2.9527du.com (192.168.60.88) 56(84) bytes of data.</code>

<code>64 bytes from node2.9527du.com (192.168.60.88): icmp_seq=1 ttl=64 </code><code>time</code><code>=0.010 ms</code>

<code>--- node2.9527du.com </code><code>ping</code> <code>statistics ---</code>

<code>1 packets transmitted, 1 received, 0% packet loss, </code><code>time</code> <code>0ms</code>

<code>rtt min</code><code>/avg/max/mdev</code> <code>= 0.010</code><code>/0</code><code>.010</code><code>/0</code><code>.010</code><code>/0</code><code>.000 ms</code>

B)、設定192.168.60.33主機的主機名為:node1.9527du.com

<code>[root@www admin]</code><code># vim /etc/sysconfig/network</code>

<code>[root@www admin]</code><code># hostname node1.9527du.com</code>

檢測使用hosts檔案是否能夠解析主機名

<code>[root@www admin]</code><code># ping -c 1 node2.9527du.com</code>

<code>[root@node2 admin]</code><code># ping -c 1 node1.9527du.com</code>

<code>PING node1.9527du.com (192.168.60.33) 56(84) bytes of data.</code>

<code>64 bytes from node1.9527du.com (192.168.60.33): icmp_seq=1 ttl=64 </code><code>time</code><code>=0.010 ms</code>

<code>--- node1.9527du.com </code><code>ping</code> <code>statistics ---</code>

說明:

    從上面測試結果,已經兩個節點都可以成功實作主機名的解析。

2、為了操作heartbeat 友善,把兩節點配置成信任主機。不需要密碼就可以直接通信。

(1)、建立基于密鑰通訊

在node1節點生成密鑰對

<code>[root@node1 ha.d]</code><code># ssh-keygen -t rsa</code>

把“公鑰”拷貝到 node2 節點

<code>[root@node1 ha.d]</code><code># ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]</code>

在 node2 節點生成密鑰對

<code>[root@node2 ~]</code><code># ssh-keygen -t rsa</code>

把“公鑰”拷貝到 node1 節點

<code>[root@node2 ~]</code><code># ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]</code>

(2)、測試基于密鑰是否能夠實作無障礙通訊

<code>[root@node1 ha.d]</code><code># ssh node2 -- 'hostname'</code>

<code>node2.9527du.com</code>

<code>[root@node2 ~]</code><code># ssh node1 'hostname'</code>

<code>node1.9527.com</code>

    從上述測試結果,兩節點已經能夠實作基于密鑰實作通訊。

二、配置 node1 和 node2 節點的mysql使用者都有 nfs 共享檔案系統的:rwx 權限

    使用nfs伺服器共享MySQL的資料檔案,使用者向MySQL資料庫伺服器,發起SQL操作時,MySQL資料庫伺服器以mysql使用者的身份執行使用者對資料庫的操作的。

    是以,mysql使用者一定要有 nfs 伺服器導出的共享檔案系統的:"讀/寫“ 權限。

而根據 nfs 的資源通路控制模型:

<code>(1)、在nfs伺服器導出的檔案系統中要有讀寫權限。意思是說:nfs設定導出共享檔案系統時,要授權用戶端有:讀寫權限。</code>

<code>(2)、往nfs共享檔案系統中讀寫資料的使用者映射到nfs伺服器的本地檔案系統一定要有讀寫權限。</code>

隻要滿足上述兩個條件,mysql使用者才可以往nfs共享檔案系統中讀寫資料的。

是以,基于上述要求和mysql初始化資料庫時一定要使用mysql使用者等方面的考慮。在HA高可用的每個節點都建立一樣的使用者:

<code>                    </code><code>使用者:               mysql</code>

<code>                  </code><code>UID:                388</code>

<code>             </code><code>屬于那個組:                388</code>

這樣就保證了:兩個節點的 mysqld 都可以使用同一份資料檔案。

    把mysql 建立為系統使用者,且登記shell 為: /sbin/nologin 這樣,即使某人獲得了mysql的密碼也沒法登陸我們的系統的。

1、在node1 節點建立使用者

<code>[root@node1 home]</code><code># groupadd -r -g 388  mysql</code>

<code>[root@node1 home]</code><code># useradd  -r -g 388 -u 388 -M -s /sbin/nologin mysql</code>

<code>[root@node1 home]</code><code># id mysql</code>

<code>uid=388(mysql) gid=388(mysql) </code><code>groups</code><code>=388(mysql) context=user_u:system_r:unconfined_t</code>

<code>[root@node1 home]</code><code># grep "mysql" /etc/passwd</code>

<code>mysql:x:388:388::</code><code>/home/mysql</code><code>:</code><code>/sbin/nologin</code>

2、在node2 節點建立使用者

<code>[root@node2 </code><code>local</code><code>]</code><code># groupadd  -r -g 388 mysql</code>

<code>[root@node2 </code><code>local</code><code>]</code><code># useradd -r -g 388 -u 388 -M -s /sbin/nologin mysql</code>

<code>[root@node2 </code><code>local</code><code>]</code><code># id mysql</code>

<code>uid=388(mysql) gid=388(mysql) </code><code>groups</code><code>=388(mysql)</code>

<code>[root@node2 </code><code>local</code><code>]</code><code># grep "mysql" /etc/passwd</code>

3、建立檔案系統并授權

(1)建立共享目錄

利用lvm 邏輯卷做為資料庫的資料目錄。友善使用lvm的快照功能實作資料庫的實體備份。

檢視myvg卷組是否還有空間建立LV

<code>[root@nfs ~]</code><code># vgdisplay myvg | grep "[[:space:]]*\/[[:space:]]*Size"</code>

<code>  </code><code>Alloc PE / Size       1024 / 4.00 GiB</code>

<code>  </code><code>Free  PE / Size       1536 / 6.00 GiB</code>

建立lv并格式化

<code>[root@nfs ~]</code><code># lvcreate -L 2G -n SHAREDIR myvg</code>

<code>  </code><code>Logical volume </code><code>"SHAREDIR"</code> <code>created</code>

<code>[root@nfs ~]</code><code># mke2fs -t ext4 /dev/myvg/SHAREDIR</code>

<code>[root@nfs ~]</code><code># echo $?</code>

<code>0</code>

建立挂載點

<code>[root@nfs /]</code><code># mkdir /mysqldata</code>

編輯/etc/fstab檔案,讓它機自動挂載,且要指定支援facl功能

<code>[root@nfs /]</code><code># vim /etc/fstab</code>

<code>/dev/mapper/myvg-SHAREDIR</code>   <code>/mysqldata</code>          <code>ext4    defaults,acl        0 0 </code>

<code>[root@nfs /]</code><code># mount -a</code>

<code>[root@nfs /]</code><code># mount | grep "SHAREDIR"</code>

<code>/dev/mapper/myvg-SHAREDIR</code> <code>on </code><code>/mysqldata</code> <code>type</code> <code>ext4 (rw,acl)</code>

啟動nfs伺服器

<code>[root@nfs /]</code><code># service nfs start</code>

<code>Starting NFS services:                                     [  OK  ]</code>

<code>Starting NFS quotas:                                       [  OK  ]</code>

<code>Starting NFS mountd:                                       [  OK  ]</code>

<code>Starting NFS daemon:                                       [  OK  ]</code>

<code>Starting RPC idmapd:                                       [  OK  ]</code>

(2)、在nfs 伺服器導出的檔案系統配置檔案中授權用戶端有:讀寫權限

 導出檔案系統

<code>[root@nfs ~]</code><code># vim /etc/exports</code>

<code>/mysqldata</code>      <code>192.168.60.0</code><code>/24</code><code>(rw)</code>

不重新開機nfs 服務的情況下重新導出檔案系統

<code>[root@nfs /]</code><code># exportfs -ra</code>

<code>[root@nfs /]</code><code># showmount -e</code>

<code>Export list </code><code>for</code> <code>nfs.9527du.com:</code>

<code>/mysqldata</code> <code>192.168.60.0</code><code>/24</code>

     nfs伺服器已經建立成功。

(3)、在 nfs 伺服器的檔案系統級别授權

    mysql使用者的UID号在 nfs 伺服器中有對應的使用者名的話,就以該使用者的身份執行 mysql使用者發起的函數執行請求。否則的話以nodoby 使用者身份執行。

   這就是nfs中的使用者映射。是以,在檔案系統級别要保證,mysql的UID号映射使用者一定要有nfs共享檔案系統的:讀寫權限。這樣就保證了,挂載 nfs 共享檔案系統的節點有了共享檔案系統的“讀寫”權限。

建立與節點(node1、node2)有一樣UID号的使用者 usenfs

<code>[root@nfs /]</code><code># id usenfs</code>

<code>uid=388(usenfs) gid=388(usenfs) </code><code>groups</code><code>=388(usenfs)</code>

<code>[root@nfs /]</code><code># useradd  -r -u 388 -M -s /sbin/nologin usenfs</code>

設定:ID号為388的使用者有 rwx權限

8

9

10

11

<code>[root@nfs /]</code><code># setfacl -m u:usenfs:rwx /mysqldata/</code>

<code>[root@nfs /]</code><code># getfacl /mysqldata/</code>

<code>getfacl: Removing leading </code><code>'/'</code> <code>from absolute path names</code>

<code># file: mysqldata/</code>

<code># owner: root</code>

<code># group: root</code>

<code>user::rwx</code>

<code>user:usenfs:rwx</code>

<code>group::r-x</code>

<code>mask::rwx</code>

<code>other::r-x</code>

說明: 

    mysql 使用者操作nfs共享檔案系統時,是以usenfs 的身份操作的。

三、安裝二進制版本的 mariadb-5.5.36-linux-i686.tar.gz 資料庫伺服器

1、在 node1 安裝 mariadb 資料庫伺服器

(1)、挂載 nfs 共享檔案系統

<code>[root@node1 /]</code><code># mkdir mydata</code>

檢視 nfs 伺服器共享的檔案系統

<code>[root@node1 /]</code><code># showmount -e 192.168.60.22</code>

<code>Export list </code><code>for</code> <code>192.168.60.22:</code>

挂載

<code>[root@node1 /]</code><code># mount -t nfs 192.168.60.22:/mysqldata /mydata</code>

<code>[root@node1 /]</code><code># mount | grep mysqldata</code>

<code>192.168.60.22:</code><code>/mysqldata</code> <code>on </code><code>/mydata</code> <code>type</code> <code>nfs (rw,addr=192.168.60.22)</code>

建立 mariabd 資料庫的資料目錄為: mysql

<code>[root@node1 mydata]</code><code># mkdir  mysql</code>

(2)、安裝 mariadb 資料服務

解壓到 /usr/local 目錄下

<code>[root@node1 admin]</code><code># tar -xf mariadb-5.5.36-linux-i686.tar.gz  -C /usr/local/</code>

<code>[root@node1 admin]</code><code># cd /usr/local/</code>

做軟連結,為了以後更新友善

<code>[root@node1 </code><code>local</code><code>]</code><code># ln -sv mariadb-5.5.36-linux-i686 mysql</code>

<code>create symbolic link `mysql</code><code>' to `mariadb-5.5.36-linux-i686'</code>

<code>[root@node1 </code><code>local</code><code>]</code><code># ll | grep mysql</code>

<code>lrwxrwxrwx  1 root root   25 Sep  7 09:49 mysql -&gt; mariadb-5.5.36-linux-i686</code>

<code>[root@node1 </code><code>local</code><code>]</code><code># cd mysql/</code>

修改mysql 目錄下的所有檔案的屬主屬組都為 mysql 使用者,因為執行資料庫的初如化時,是以mysql身份運作一些程式進行完成資料庫的初始化工作的

<code>[root@node1 mysql]</code><code># chown -R mysql:mysql ./*</code>

初始化資料庫

<code>[root@node1 mysql]</code><code># ./scripts/mysql_install_db --datadir=/mydata/mysql  --user=mysql</code>

<code>Installing MariaDB</code><code>/MySQL</code> <code>system tables </code><code>in</code> <code>'/mydata/mysql'</code> <code>...</code>

<code>OK</code>

<code>Filling help tables...</code>

    從初始化資料庫時,輸出的資訊可以看出,資料庫已經初始化成功。

(2)、為啟動資料庫伺服器準備一些必備條件

為mysqld 提供配置檔案,并且設定資料目錄的位置。

<code>[root@node1 mysql]</code><code># cp support-files/my-large.cnf /etc/my.cnf</code>

<code>[root@node1 mysql]</code><code># vim /etc/my.cnf</code>

<code>thread_concurrency = 2        </code>

<code>datadir = </code><code>/mydata/mysql/</code>

為啟動mariadb伺服器提供啟動腳本

<code>[root@node1 mysql]</code><code># cp support-files/mysql.server /etc/init.d/mysqld</code>

<code>[root@node1 mysql]</code><code># ll /etc/init.d/mysqld</code>

<code>-rwxr-xr-x 1 root root 11844 Sep  7 09:59 </code><code>/etc/init</code><code>.d</code><code>/mysqld</code>

<code>[root@node1 mysql]</code><code># chown -R root:mysql ./*</code>

(3)、啟動資料庫伺服器并測試

<code>[root@node1 mysql]</code><code># service mysqld start</code>

<code>Starting MySQL...                                          [  OK  ]</code>

為了執行指令友善,導出 mariadb 資料庫的工具程式。

<code>[root@node1 mysql]</code><code># vim /etc/profile.d/mysql.sh</code>

<code>PATH=$PATH:</code><code>/usr/local/mysql/bin</code>

<code>[root@node1 mysql]</code><code># . /etc/profile</code>

連接配接資料庫伺服器

<code>[root@node1 mysql]</code><code># mysql</code>

<code>Welcome to the MariaDB monitor.  Commands end with ; or \g.</code>

<code>Your MariaDB connection </code><code>id</code> <code>is 2</code>

<code>Server version: 5.5.36-MariaDB-log MariaDB Server</code>

<code>Copyright (c) 2000, 2014, Oracle, Monty Program Ab and others.</code>

<code>Type </code><code>'help;'</code> <code>or </code><code>'\h'</code> <code>for</code> <code>help. Type </code><code>'\c'</code> <code>to </code><code>clear</code> <code>the current input statement.</code>

<code>MariaDB [(none)]&gt;</code>

    從上述要以看出,在node1 節點已經成功安裝好 mariadb 資料庫伺服器。

(4)、停止 mariadb 資料庫伺服器,并設定開機不能自動啟動

<code>[root@node1 mysql]</code><code># service mysqld stop</code>

<code>[root@node1 mysql]</code><code># chkconfig mysqld off</code>

<code>[root@node1 mysql]</code><code># chkconfig --list mysqld</code>

<code>mysqld          0:off   1:off   2:off   3:off   4:off   5:off   6:off</code>

2、在 node2 節點安裝 mariadb 資料庫伺服器

<code>[root@node2 /]</code><code># mkdir mydata</code>

<code>[root@node2 /]</code><code># showmount -e 192.168.60.22</code>

<code>[root@node2 /]</code><code># mount -t nfs 192.168.60.22:/mysqldata /mydata</code>

<code>[root@node2 /]</code><code># mount | grep "mydata"</code>

(2)、安裝 mariadb 資料庫伺服器

解壓到指定目錄下。

<code>[root@node2 admin]</code><code># tar -xf mariadb-5.5.36-linux-i686.tar.gz -C /usr/local</code>

<code>[root@node2 admin]</code><code># cd /usr/local/</code>

為了以後更新友善設定軟連結

<code>[root@node2 </code><code>local</code><code>]</code><code># ln -sv mariadb-5.5.36-linux-i686 mysql</code>

<code>[root@node2 </code><code>local</code><code>]</code><code># ll | grep "mysql"</code>

<code>lrwxrwxrwx  1 root root   25 Sep  7 10:11 mysql -&gt; mariadb-5.5.36-linux-i686</code>

<code>[root@node2 mysql]</code><code># chown -R root:mysql ./*</code>

由于 node1 與 node2 是共享資料的,這裡不需要資料庫的初始化。

隻需要保證兩個節點的資料庫配置檔案相同即可

複制 node1 的配置檔案和啟動腳本

<code>[root@node2 mysql]</code><code># scp -p node1:/etc/my.cnf /etc</code>

<code>my.cnf                                        100% 4926     4.8KB</code><code>/s</code>   <code>00:00</code>

<code>[root@node2 mysql]</code><code># scp -p node1:/etc/init.d/mysqld /etc/init.d/</code>

<code>mysqld                                        100%   12KB  11.6KB</code><code>/s</code>   <code>00:00</code>

(3)、啟動資料庫并測試

12

13

14

15

16

17

18

19

20

<code>[root@node2 /]</code><code># service  mysqld start</code>

<code>[root@node2 /]</code><code># mysql</code>

<code>MariaDB [(none)]&gt; show databases;</code>

<code>+--------------------+</code>

<code>| Database           |</code>

<code>| information_schema |</code>

<code>| mysql              |</code>

<code>| performance_schema |</code>

<code>| </code><code>test</code>               <code>|</code>

<code>4 rows </code><code>in</code> <code>set</code> <code>(0.01 sec)</code>

    從上述資訊可以看出,在 node2 已經成功安裝好 mariadb 資料庫

(4)、由于安裝資料庫時,預設安裝了很多使用者都是沒有密碼的,極其不安全。是以,要給資料庫伺服器的使用者設定密碼

清理安裝資料庫時預設安裝的使用者,添加能遠端管理資料庫的使用者

<code>MariaDB [(none)]&gt; drop user </code><code>'root'</code><code>@</code><code>'localhost'</code><code>;</code>

<code>MariaDB [(none)]&gt; drop user </code><code>'root'</code><code>@</code><code>'node1.9527du.com'</code><code>;</code>

<code>MariaDB [(none)]&gt; drop user </code><code>'root'</code><code>@</code><code>'::1'</code><code>;</code>

<code>MariaDB [(none)]&gt; drop user </code><code>''</code><code>@</code><code>'localhost'</code><code>;</code>

<code>MariaDB [(none)]&gt; drop user </code><code>''</code><code>@</code><code>'node1.9527du.com'</code><code>;</code>

給保留的使用者設定密碼

<code>MariaDB [(none)]&gt; </code><code>set</code> <code>password </code><code>for</code> <code>'root'</code><code>@</code><code>'127.0.0.1'</code> <code>= password(</code><code>'root'</code><code>);</code>

<code>Query OK, 0 rows affected (0.07 sec)</code>

設定遠端管理的使用者

<code>MariaDB [(none)]&gt; grant all on *.* to </code><code>'admin'</code><code>@</code><code>'%.%.%.%'</code> <code>identified by </code><code>'admin'</code><code>;</code>

<code>Query OK, 0 rows affected (0.00 sec)</code>

現在 MariaDB 資料庫的使用者

<code>MariaDB [(none)]&gt; </code><code>select</code> <code>user,host,password from mysql.user;</code>

<code>+------+-----------+-------------------------------------------+</code>

<code>| user | host      | password                                  |</code>

<code>| root | 127.0.0.1 | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |</code>

<code>| admin | %.%.%.%   | *4ACFE3202A5FF5CF467898FC58AAB1D615029441 |</code>

<code>2 rows </code><code>in</code> <code>set</code> <code>(0.00 sec)</code>

測試是否可以登陸

<code>[root@node2 /]</code><code># mysql -uroot -h127.0.0.1 -p</code>

<code>Enter password:</code>

<code>Your MariaDB connection </code><code>id</code> <code>is 3</code>

(5)、停止 mariadb 資料庫伺服器,并設定開機不能自動啟動

<code>[root@node2 /]</code><code># service mysqld stop</code>

<code>[root@node2 /]</code><code># chkconfig mysqld off</code>

<code>[root@node2 /]</code><code># chkconfig --list mysqld</code>

    在兩個節點已經安裝好 MariaDB 資料庫軟體。

四、安裝heartbeat

HA高可用叢集服務大概的工作原理:

             通過 Messaging Layer 層各節點傳遞”心跳資訊“------&gt; 實作節點的備援

             通過資源代理(Resource Agent)腳本的檢測功能把節點啟動的資源的運作狀況,

             報告給 CRM(Cluster Resource Manager)資料總管中的本地資料總管

             LRM(Local Resource Manager)。資料總管中的PE(Policy Engine)會根據HA叢集

             的節點是否線上和在節點的資源運作狀态等資訊做出決策。

             把決策通過 Messaging Layer傳遞到各節點。節點接收到決策,CRM資料總管

     的本地資源管理元件LRM(Local Resource Manager)指揮資源代理(Resource Agent)   

             做:start,stop,監測等操作 ---------&gt; 實作節點資源的備援。

是以說,我們配置HA高可用叢集要解決三個問題:

<code>        </code><code>1、HA高可用叢集之間的心跳資訊能夠互相傳遞;</code>

<code>    </code><code>2、把需要配置成高可用叢集的資源告訴 Cluster Reslurce Manager 資料總管  </code>

<code>    </code><code>3、配置成高可用服務的資源要有相對應的資源代理Reslurce Agent腳本,</code>

heartbeat v1 版本:

<code>  </code><code>ha.cf              配置底層 Messaging Layer 的工作特性</code>

<code>  </code><code>haresources        資料總管的配置檔案,可以在這個檔案配置高可用叢集的資源</code>

<code>  </code><code>資源代理            hearebeat 支援使用LSB風格的腳本做為資源代理(服務的啟動腳本)。</code>

在 node1 節點安裝 heartbeat v2 版本,讓它以 heartbeat v1 版本的工作方式工作。

1、安裝 heartbeat 并複制配置檔案

<code>[root@node1 admin]</code><code># yum localinstall --gpgcheck heartbeat-2.1.4-9.el5.i386.rpm heartbeat-pils-2.1.4-10.el5.i386.rpm  heartbeat-stonith-2.1.4-10.el5.i386.rpm libnet-1.1.4-3.el5.i386.rpm</code>

<code>[root@node1 ha.d]</code><code># cp -p /usr/share/doc/heartbeat-2.1.4/{ha.cf,haresources,authkeys} /etc/ha.d/</code>

該檔案的的權限一定要是:600,否則的話 heartbeat不讓啟用的。

<code>[root@node1 ha.d]</code><code># chmod 600 authkeys</code>

2、配置HA高可用的節點的心跳資訊傳遞

<code>[root@node1 ha.d]</code><code># vim ha.cnf</code>

<code>mcast eth1 225.99.99.99  694 1 0  ---&gt; 使用多點傳播的方式傳遞節點心跳資訊(通常用于HA的備用節點不隻一台時使用)</code>

<code>auto_failback on           -----&gt; 當主節點恢複後,服務自動切回。</code>

<code>node    node1.9527du.com    ----&gt; 主節點主機名。</code>

<code>node    node2.9527du.com   -----&gt; 備用節點主機名。</code>

<code>ping</code> <code>192.168.60.1           ----&gt; </code><code>ping</code> <code>節點,用來測試網絡連接配接</code>

<code>compression     bz2         ----&gt; 叢集事務資訊壓縮傳輸</code>

<code>compression_threshold 2      ---&gt; 資訊大于2kb就壓縮</code>

<code># crm respawn               ----&gt; 不啟用 heartbeat v2 版本的資料總管。</code>

<code>其它使用預設。</code>

3、配置HA高可用叢集的資源

<code>[root@node1 ha.d]</code><code># vim haresources</code>

<code>node1.9527du.com 192.168.60.24</code><code>/32/eth0/192</code><code>.168.255.255 Filesystem::192.168.60.22:</code><code>/mysqldata</code><code>::</code><code>/mydata</code><code>::nfs mysqld ------&gt; 配置主節點node1上的高可用資源</code>

    MySQL資料庫的高可用的資源有:mariadb 資料庫伺服器的IP位址、mysqld二進制運作程式、共享的 nfs 檔案系統

    一個完整的資料庫服務是由該三個資源組成的,意思是說,這三個資源都要運作正常才可以提供資料庫的服務的。

    是以,我們要定義資源限制。如:三個資源的啟動順序(關閉資源的順序是逆過來的,是以不需要定義)。

    heartbeat v1 版本的資源的啟動順序的限制是由:定義在節點的先後順序決定的。是以,越要先啟動的資源要寫在最前面。

    mariaDB資料庫的高可用服務資源的順序如下:

    先配置上資料庫的IP位址 ------&gt; 挂載 nfs 共享的檔案系統(資料庫的資料目錄)------&gt; 啟動 mysqld 程序。

 4、heartbeat 節點的心跳資訊是經過加密後再傳輸的,要配置加密檔案 

生成随機碼用于叢集資訊加密

<code>[root@node2 ~]</code><code># openssl rand -base64 5</code>

<code>IvW8H20=</code>

配置加密使用的算法

<code>[root@node1 ha.d]</code><code># vim authkeys</code>

<code>auth 2</code>

<code>2 sha1 IvW8H20=</code>

5、複制 heartbeat 叢集所需要的配置檔案到 node2 節點。

<code>[root@node1 ha.d]</code><code># scp -p ha.cf haresources authkeys node2:/etc/ha.d/</code>

<code>ha.cf                                         100%   10KB  10.4KB</code><code>/s</code>   <code>00:00</code>

<code>haresources                                   100% 5967     5.8KB</code><code>/s</code>   <code>00:00</code>

<code>authkeys                                      100%  669     0.7KB</code><code>/s</code>   <code>00:00</code>

注意:

   要驗證另外一個節點的認證檔案的權限是否符合要求。

<code>[root@node1 ha.d]</code><code># ssh node2 'ls -l /etc/ha.d/ | grep "authkeys"'</code>

<code>-rw------- 1 root root   669 Sep  7 01:56 authkeys</code>

五、測試使用 heartbeart v1 實作資料庫服務的高可用是否成功

   在啟動 heartbeart 之前,要保證HA的各節點這間的時間是同步。

1、在 node1 節點啟動 heartbeat 服務

<code>[root@node1 mydata]</code><code># service heartbeat start</code>

<code>Starting High-Availability services:</code>

<code>2014</code><code>/09/07_10</code><code>:56:03 INFO:  Resource is stopped</code>

<code>                                                           </code><code>[  OK  ]</code>

2、檢視 mariaDB 資料庫的三個資源是否啟動了

<code>[root@node1 mydata]</code><code># ifconfig  | grep "192.168.60.24"</code>

<code>          </code><code>inet addr:192.168.60.24  Bcast:192.168.255.255  Mask:255.255.255.255</code>

<code>[root@node1 mydata]</code><code># netstat -anptl | grep "mysqld"</code>

<code>tcp        0      0 :::3306                     :::*                        LISTEN      7811</code><code>/mysqld</code>

<code>root@node1 mydata]</code><code># ps aux | grep "mysqld"</code>

<code>root      7508  0.0  0.2   4536  1260 ?        S    10:56   0:00 </code><code>/bin/sh</code> <code>/usr/local/mysql/bin/mysqld_safe</code> <code>--datadir=</code><code>/mydata/mysql/</code> <code>--pid-</code><code>file</code><code>=</code><code>/mydata/mysql//node1</code><code>.9527du.com.pid</code>

<code>mysql     7811  0.0 15.9 815388 82080 ?        Sl   10:56   0:00 </code><code>/usr/local/mysql/bin/mysqld</code> <code>--basedir=</code><code>/usr/local/mysql</code> <code>--datadir=</code><code>/mydata/mysql/</code> <code>--plugin-</code><code>dir</code><code>=</code><code>/usr/local/mysql/lib/plugin</code> <code>--user=mysql --log-error=</code><code>/mydata/mysql//node1</code><code>.9527du.com.err --pid-</code><code>file</code><code>=</code><code>/mydata/mysql//node1</code><code>.9527du.com.pid --socket=</code><code>/tmp/mysql</code><code>.sock --port=3306</code>

    從上述結果得知,資料庫高可用的三個資源已經成功在node1啟動。

3、遠端連接配接測試資料庫:

D:\&gt;mysql -uadmin -h192.168.60.24 -p

Enter password: *****

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 10

Server version: 5.5.36-MariaDB-log MariaDB Server

Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql&gt; show databases;

+--------------------+

| Database           |

| information_schema |

| mysql              |

| performance_schema |

| test               |

4 rows in set (0.01 sec)

   已經能夠遠端連接配接。

4、建立資料庫和表

<code>mysql&gt; create database testdb;</code>

<code>Query OK, 1 row affected (0.01 sec)</code>

<code>mysql&gt; create table testdb.tb1(Uname varchar(20));</code>

<code>Query OK, 0 rows affected (0.38 sec)</code>

    在 node1 節點已經可以使用資料庫了。

5、在 node2 節點啟動 heartbeat 服務

<code>[root@node1 mydata]</code><code># ssh node2 'service heartbeat start'</code>

<code>2014</code><code>/09/07_11</code><code>:14:03 INFO:  Resource is stopped</code>

<code>[  OK  ]</code>

6、在node2關閉node1,觀察資源是否會轉移

<code>[root@node2 /]</code><code># ssh node1 'service heartbeat stop'</code>

<code>Stopping High-Availability services:</code>

<code>[root@node2 /]</code><code># ifconfig | grep "192.168.60.24"</code>

<code>[root@node2 /]</code><code># netstat -anptl | grep "mysqld"</code>

<code>tcp        0      0 :::3306                     :::*                        LISTEN      5096</code><code>/mysqld</code>

<code>[root@node2 /]</code><code># ps aux | grep "mysqld"</code>

<code>root      4793  0.0  0.2   4536  1260 ?        S    11:15   0:00 </code><code>/bin/sh</code> <code>/usr/local/mysql/bin/mysqld_safe</code> <code>--datadir=</code><code>/mydata/mysql/</code> <code>--pid-</code><code>file</code><code>=</code><code>/mydata/mysql//node2</code><code>.9527du.com.pid</code>

<code>mysql     5096  0.1 15.4 811292 79776 ?        Sl   11:15   0:00 </code><code>/usr/local/mysql/bin/mysqld</code> <code>--basedir=</code><code>/usr/local/mysql</code> <code>--datadir=</code><code>/mydata/mysql/</code> <code>--plugin-</code><code>dir</code><code>=</code><code>/usr/local/mysql/lib/plugin</code> <code>--user=mysql --log-error=</code><code>/mydata/mysql//node2</code><code>.9527du.com.err --pid-</code><code>file</code><code>=</code><code>/mydata/mysql//node2</code><code>.9527du.com.pid --socket=</code><code>/tmp/mysql</code><code>.sock --port=3306</code>

    從上述測試結果,可以看出,資料庫服務需要的三個資源已經在 node2 節點成功啟動。

7、在遠端測試是否還可以使用資料庫

<code>D:\&gt;mysql -uadmin -h192.168.60.24 -p</code>

<code>。。。。</code>

<code>mysql&gt; show databases;</code>

<code>| testdb             |</code>

<code>5 rows </code><code>in</code> <code>set</code> <code>(0.01 sec)</code>

當在 node2 節點啟動 資料庫的高可用伺服器,删除在 node1 建立的資料庫是否成功?

<code>mysql&gt; drop database testdb;</code>

<code>Query OK, 1 row affected (0.39 sec)</code>

   從上述測試結果得出,mariaDB 資料庫的高可用已經搭建成功。

     本文轉自成長的小蟲 51CTO部落格,原文連結http://blog.51cto.com/9528du/1549805:,如需轉載請自行聯系原作者