基于heartbeat v2 crm實現基于nfs的mysql高可用集群

前言

因heartbeat v1內置的資源管理器haresource功能比較簡單,且不支持圖形化管理,所以heartbeat v2不再支持haresource,轉而使用更加強大的資源管理器crm進行集群管理。本文將講解如何基于heartbeat v2 crm實現基于nfs的mysql高可用集群。

高可用實現

實驗拓撲

基于heartbeat實現mysql集群高可用.jpg

實驗環境

node1:172.16.10.123 mariadb-5.5.36 CentOS6.6

node2:172.16.10.124 mariadb-5.5.36 CentOS6.6

NFS:172.16.10.125 CentOS6.6

Windows環境需安裝Xmanager Enterprise 5

配置過程

NFS服務器配置

1.jpg

[root@scholar ~]# vim /etc/exports

/mydata         172.16.0.0/16(rw,no_root_squash)

[root@scholar ~]# service nfs start

安裝mysql

#在node1和node2上分別進行如下操作

2.jpg

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

datadir = /mydata/data

log-bin=/mydata/binlogs/master-bin

3.jpg

[root@node1 mysql]# scripts/mysql_install_db --user=mysql --datadir=/mydata/data/

#注意:初始化操作只在一個節點執行即可

啟動服務測試一下

4.jpg

同樣node2上執行以上操作后也啟動測試

5.jpg

測試完成即可卸載共享目錄

[root@node1 mysql]# umount /mydata/

#在兩個節點分別執行

安全起見,此時可將nfs的no_root_squash選項去掉

[root@scholar ~]# vim /etc/exports 

/mydata         172.16.0.0/16(rw)

[root@scholar ~]# exportfs -arv
exporting 172.16.0.0/16:/mydata

heartbeat配置

時間同步

ntpdate

節點解析通信

[root@node1 ~]# vim /etc/hosts
 
172.16.10.123   node1.scholar.com node1
172.16.10.124   node2.scholar.com node2
 
[root@node1 ~]# vim /etc/sysconfig/network
HOSTNAME=node1.scholar.com
 
[root@node1 ~]# uname -n
node1.scholar.com
 
#兩個節點都需如上操作

ssh密鑰配置

[root@node1 ~]# ssh-keygen -t rsa -P ''
[root@node1 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@node2
[root@node2 ~]# ssh-keygen -t rsa -P ''
[root@node2 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@node1
[root@node1 ~]# date; ssh node2 'date' #測試
Mon Jun  8 16:33:36 CST 2015
Mon Jun  8 16:33:36 CST 2015

安裝所需軟件包

#解決依賴關系
[root@node1 ~]# yum install perl-TimeDate net-snmp-libs libnet PyXML -y #需epel源支持
[root@node1 ~]# cd heartbeat2/
[root@node1 heartbeat2]# ls
heartbeat-2.1.4-12.el6.x86_64.rpm             heartbeat-pils-2.1.4-12.el6.x86_64.rpm
heartbeat-gui-2.1.4-12.el6.x86_64.rpm         heartbeat-stonith-2.1.4-12.el6.x86_64.rpm
heartbeat-ldirectord-2.1.4-12.el6.x86_64.rpm
[root@node1 heartbeat2]# rpm -ivh heartbeat-2.1.4-12.el6.x86_64.rpm heartbeat-pils-2.1.4-
12.el6.x86_64.rpm heartbeat-stonith-2.1.4-12.el6.x86_64.rpm heartbeat-gui-2.1.4-12.el6.x8
6_64.rpm

#兩個節點都執行以上操作

準備配置文件

[root@node1 ~]# cp /usr/share/doc/heartbeat-2.1.4/{ha.cf,authkeys} /etc/ha.d
[root@node1 ~]# chmod 600 /etc/ha.d/authkeys

配置算法密鑰

[root@node1 ~]# openssl rand -hex 8
4d8fd6cb49d2047b
[root@node1 ~]# vim /etc/ha.d/authkeys
 
auth 2
2 sha1 4d8fd6cb49d2047b

配置主配置文件

#配置文件如下
[root@node1 ~]# grep -v "#" /etc/ha.d/ha.cf |grep -v "^$"
logfile /var/log/ha-log  #日志存放位置
keepalive 2              #指定心跳使用間隔時間
deadtime 30              #指定備用節點接管主節點服務資源超時時間
warntime 10              #指定心跳延遲的時間
initdead 120             #解決網絡啟動延時
udpport 694              #設置廣播通信端口
mcast eth0 225.0.25.1 694 1 0 #定義廣播地址
auto_failback on              #定義當主節點恢復后,是否將服務自動切回
node    node1.scholar.com     #主節點
node    node2.scholar.com     #備用節點
ping 172.16.0.1               #仲裁設備
crm on                        #啟用crm

將配置文件傳給備用節點

6.jpg

啟用crm圖形界面時需要登錄密碼,在安裝heartbeat-gui時會自動創建一個名為hacluster的用戶,在任一節點上設置hacluster的密碼即可

7.jpg

啟動heartbeat

8.jpg

查看集群狀態

[root@node1 ~]# crm_mon

9.jpg

啟動gui界面

[root@node1 ~]# hb_gui &

10.jpg

11.jpg

Node:節點列表
Resources:資源列表
Constraints:限制約束
Locations:位置約束,資源對某節點運行的傾向性
Orders:順序約束,屬于同一服務的多個資源運行在同一節點時,其啟動及關閉的次序約束
Colocations:排列約束,定義資源彼此間的傾向性(是否在一起)
資源類型:
primitive, native: 主資源,其僅能運行某一節點
group: 組資源,可用于實現限制多個資源運行于同一節點及對此些資源統一進行管理
clone: 克隆資源,一個資源可以運行于多個節點
       應該指定:最大克隆的份數,每個節點最多可以運行的克隆
master/slave: 主從資源,特殊的克隆資源

mysql的高可用需要3個資源:ip,mysqld,nfs,這3個資源都要運行在一個節點上,而且mysqld要在nfs啟動之后出能啟動,ip地址和mysqld服務之間沒有先后關系,服務準備好后再啟動ip也是可以的。高可用的httpd服務需要先啟動ip,因為服務啟動的時候明確需要ip地址的資源,這兩類高可用資源之間是不同的。

添加資源

首先定義一個組

12.jpg

13.jpg

添加第一個資源

14.jpg

添加第二個資源

15.jpg

16.jpg

添加第三個資源

17.jpg

添加資源約束

nfs要和mysqld在一個節點

18.jpg

19.jpg

ip要和mysqld在一個節點

20.jpg

定義排列約束后這3個資源會同時運行在同一個節點上,需要注意的是mysqld服務要在nfs掛載之后啟動,所以需要定義資源順序約束

21.jpg

22.jpg

定義好順序約束之后還可定義位置約束,可定義更傾向運行在哪個節點

23.jpg

24.jpg

添加表達式及對該節點的傾向性

25.jpg

啟動所有資源

26.jpg

27.jpg

因為傾向于node1,所以資源運行于node1上,我們在node1授權一個用戶測試

28.jpg

在其他客戶端測試

29.jpg

此時模擬node1掛掉了,將node1設置為standby模式

30.jpg

再次連接數據庫測試

31.jpg

數據沒有受到絲毫影響,再次將node1上線,資源會再次回到node1,這里就不再演示了,至此,基于heartbeat v2 crm實現基于nfs的mysql高可用集群完成

The end

本次實驗就進行到這里了,實驗過程出現問題可以留言交流,后文將會提供另一種高可用方案:mysql + drbd + corosync,有興趣可以繼續關注。以上僅為個人學習整理,如有錯漏,大神勿噴~~~

原創文章,作者:書生,如若轉載,請注明出處:http://www.www58058.com/5171

(0)
書生書生
上一篇 2015-06-11
下一篇 2015-06-12

相關推薦

  • 練習

    練習 顯示/proc/meminfo文件中以大小s開頭的行;     顯示/etc/passwd文件中不以/bin/bash結尾的行     找出/etc/passwd中的兩位或三位數     顯示/etc/grub2.cfg文件中,至少以一個空白字符開頭的 且后面存非空白字符的行   &…

    Linux干貨 2016-08-12
  • tar ,cpio打包解壓. shell腳本for,while,until循環. rpm包管理,循環的特殊用法. select循環菜單,函數function,rpm包查詢,yum

    tar  tar -cf 路徑+文件名字后續.tar  +路徑 創建歸檔壓縮 tar cf /testdir/etc.tar /etc/ tar cvf 可以查看解壓過程 tar tvf 預覽作用 tar xvf 解壓文件  tar zcvf /testdir/etc2.tar.gz /etc/ 解壓再壓縮到指定路徑,文件格式 …

    Linux干貨 2016-08-21
  • 創建目錄樹

    創建目錄樹 [wing@bogon ~]$ mkdir -pv /tmp/mylinux/{bin,boot/grub,dev,etc/{rc.d/init.d,\ sysconfig/network-scripts},\ lib/modules,lib64,proc,sbin,sys,tmp,usr/local{bin,sbin},\ var/{lock,…

    Linux干貨 2017-07-24
  • 淺談bash shell 變量

    一、簡述 變量是指內存空間的命名,指向內存中一個或一組地址。bash shell中的變量屬于弱類型變量,使用變量無需聲明、不需要指定類型,默認為字符型變量。 二、變量命名、賦值、引用 (1)命名規則:     1.只能使用字母,數字,下劃線;并且不能使用數字開頭。     2.不…

    Linux干貨 2016-08-15
  • PPTPD搭建

    1、檢查服務器是否支持PPTP服務[root@centos1 ~]# modprobe ppp-compress-18 && echo okok以上命令執行出來顯示是“OK”的話,繼續往下進行![root@centos1 ~]# cat /dev/net/tuncat: /dev/net/tun: 文件描述符處于錯誤狀態以上命令執行出來顯示報…

    Linux干貨 2017-06-09
  • 配置Nginx作為反向代理服務器

    配置Nginx作為反向代理服務器      一、nginx作為反向代理的工作模型: 1、nginx作為反向代理的工作模型       nginx工作在應用層,其能理解并可以提取出http請求報文中的首部信息中的請求方法、url、http協議版本等信息。   &…

    Linux干貨 2016-10-29

評論列表(3條)

  • sqeues
    sqeues 2015-08-31 15:54

    root@node1 ~]# hb_gui &
    [1] 1690
    [root@node1 ~]# Traceback (most recent call last):
    File “/usr/bin/hb_gui”, line 41, in
    import gtk, gtk.glade, gobject
    File “/usr/lib64/python2.6/site-packages/gtk-2.0/gtk/__init__.py”, line 64, in
    _init()
    File “/usr/lib64/python2.6/site-packages/gtk-2.0/gtk/__init__.py”, line 52, in _init
    _gtk.init_check()
    RuntimeError: could not open display

    [1]+ Exit 1 hb_gui

  • sqeues
    sqeues 2015-08-31 16:10

    centos6.4最小化安裝,Xmanager Enterprise 5執行hb_gui一直報錯

欧美性久久久久