Mysql高可用集羣

概述
node

Heartbeat 項目是Linux-HA 工程的一個組成部分,它實現了一個高可用集羣系統。心跳服務和集羣通訊是高可用集羣的兩個關鍵組件,在 Heartbeat 項目裏,由heartbeat 模塊實現了這兩個功能mysql

Heartbeat是Linux-HA工程的一個組件,自1999年開始到如今,發佈了衆多版本,是目前開源Linux-HA項目最成功的一個例子,Linux-HA的全稱是High-Availability Linux;這個開源項目的目標是:經過社區開發者的共同努力,提供一個加強Linux可靠性(reliability)、可用性(availavility)和可服務性(serviceability) RAS的集羣解決方案linux

工做原理sql

Heartbeat(Linux-HA)的工做原理:heartbeat最核心的包括兩個部分,心跳監測部分和資源接管部分,心跳監測能夠經過網絡鏈路和串口進行,並且支持冗餘鏈路,它們之間相互發送報文來告訴對方本身當前的狀態,若是在指定的時間內未收到對方發送的報文,那麼就認爲對方失效,這時需啓動資源接管模塊來接管運行在對方主機上的資源或者服務數據庫

高可用集羣vim

高可用集羣是指一組經過硬件和軟件鏈接起來的獨立計算機,它們在用戶面前表現爲一個單一系統,在這樣的一組計算機系統內部的一個或者多個節點中止工做,服務會從故障節點切換到正常工做的節點上運行,不會引發服務中斷。從這個定義能夠看出,集羣必須檢測節點和服務什麼時候失效,什麼時候恢復爲可用。這個任務一般由一組被稱爲「心跳」的代碼完成。在Linux-HA裏這個功能由一個叫作heartbeat的程序完成
bash


系統規劃:服務器

這裏都是使用Centos 6.4_x86_64操做系統,nod1與nod2主機有兩塊網卡,eth0用於鏈接外部網絡,eth1用於鏈接兩臺Mysql服務器節點,做爲心跳線監控;nod3做爲共享存儲"NFS",只有一塊網卡;網絡

節點類型 IP地址 主機名 IP工做類型
主節點服務器 eth0:172.16.14.2 nod1.allen.com 外部通訊IP
eth1:192.168.14.2 心跳線鏈接IP
eth0:0 172.16.14.10 虛擬IP
備用節點服務器 eth0:172.16.14.4 nod2.allen.com
外部通訊IP
eth1:192.168.14.4 心跳線鏈接IP
NFS服務器 eth0:172.16.14.3 nod3.allen.com 外部通訊IP
網 關 172.16.0.1
也用於仲裁

拓撲圖以下:
ssh

082929829.gif

如上所示:eth0:0 172.16.14.10爲虛擬IP地址,提供外網訪問;172.16.0.1爲出口網關,同時爲了不兩個節點爭搶資源,出口網關作爲仲裁IP;當nod1對NFS服務器操做時,nod2只是監聽狀態不能對NFS服務器作操做;若是nod1掛了,這時nod2會自動啓動本身的Mysql服務,同時對NFS服務器上面的數據有操做權限;若是nod1恢復正常工做,服務會自動切換回nod1上面


基本配置

一、配置IP地址;eth0網卡爲橋接,eth1爲VMnet3;並設置好IP地址

nod1
[root@localhost ~]# ifconfig eth0 |grep "inet addr:";ifconfig eth1 | grep "inet addr:"
          inet addr:172.16.14.2  Bcast:172.16.255.255  Mask:255.255.0.0
          inet addr:192.168.14.2  Bcast:192.168.14.255  Mask:255.255.255.0
nod2
[root@localhost ~]# ifconfig eth0 |grep "inet addr:";ifconfig eth1 | grep "inet addr:"
          inet addr:172.16.14.4  Bcast:172.16.255.255  Mask:255.255.0.0
          inet addr:192.168.14.4  Bcast:192.168.14.255  Mask:255.255.255.0
nod3
[root@localhost ~]# ifconfig eth0 | grep "inet addr:"
          inet addr:172.16.14.3  Bcast:172.16.255.255  Mask:255.255.0.0

二、修改主機名稱

######在各個主機上配置主機名稱,編輯配置文件永久有效,須重啓系統
[root@localhost ~]# vim /etc/sysconfig/network
HOSTNAME=nod1.allen.com
[root@localhost ~]# vim /etc/sysconfig/network
HOSTNAME=nod2.allen.com
[root@localhost ~]# vim /etc/sysconfig/network
HOSTNAME=nod3.allen.com
######若是不想編輯配置文件可使用"hostname"命令設置主機名,但重啓後失效如:hostname nod1.allen.com

三、配置各主機之間能相互解析到主機名,修改"/etc/hosts"文件,各主機的hosts文件相同,這裏只作一次介紹如:

######添加以下記錄在nod一、nod二、nod3節點上
[root@nod1 ~]# vim /etc/hosts
192.168.14.2    nod1.allen.com
192.168.14.4    nod2.allen.com
172.16.14.2     nod1.allen.com
172.16.14.4     nod2.allen.com
172.16.14.3     nod3.allen.com

四、配置時間同步,在每臺服務器上作任務計劃使用"ntpdate"命令指定時間服務器自動更新時間如:

[root@nod1 ~]# crontab -e
######每分鐘同步一次,在nod1 nod2 nod3服務器上都作
*/1 * * * * /usr/sbin/ntpdate 172.16.0.1 &> /dev/null

五、配置nod1與nod2雙機信任如:

######在nod1服務器上生成密鑰,一直按回車鍵生成密鑰便可
[root@nod1 ~]# ssh-keygen -t rsa
######將生成的公鑰上傳到nod2服務器上
[root@nod1 ~]# ssh-copy-id -i .ssh/id_rsa.pub 172.16.14.4
=========================================================
######在nod2服務器上生成密鑰
[root@nod2 ~]# ssh-keygen -t rsa
######將生成的公鑰上傳到nod1服務器上
[root@nod2 ~]# ssh-copy-id -i .ssh/id_rsa.pub 172.16.14.2
註釋:作完信任後,測試是否還須要使用密碼,這裏不在演示

配置NFS存儲服務器 NFS詳細介紹點此處

一、配置好YUM並安裝NFS軟件

[root@nod3 ~]# yum -y install nfs-utils rpcbind
######查看已安裝的NFS軟件
[root@nod3 ~]# rpm -qa | grep nfs
nfs-utils-1.2.3-36.el6.x86_64
nfs-utils-lib-1.1.5-6.el6.x86_64
[root@nod3 ~]# rpm -q rpcbind
rpcbind-0.2.0-11.el6.x86_64

二、因爲NFS用戶驗證是靠用戶ID來作驗證,建立用戶用於nod1與nod2服務器掛載NFS文件系統使用

######建立的用戶UID爲300,在nod1與nod2服務器上面建立用戶請保持UID相同
[root@nod3 ~]# useradd -r -u 300 mysql

三、建立NFS共享目錄

[root@nod3 ~]# mkdir -p /mydata/data

四、修改主配置文件,共享NFS目錄;並啓動NFS服務

[root@nod3 ~]# vim /etc/exports
/mydata/data    172.16.14.2(rw,no_root_squash) 172.16.14.4(rw,no_root_squash)
[root@nod3 ~]# service nfs start
Starting NFS services:                                     [  OK  ]
Starting NFS quotas:                                       [  OK  ]
Starting NFS mountd:                                       [  OK  ]
Stopping RPC idmapd:                                       [  OK  ]
Starting RPC idmapd:                                       [  OK  ]
Starting NFS daemon:                                       [  OK  ]

安裝Mysql Mysql編譯安裝點此

一、在nod1上面安裝Mysql服務,這裏直接使用通用二進制包來安裝

######解壓縮Mysql
[root@nod1 ~]# tar xf mysql-5.5.33-linux2.6-x86_64.tar.gz -C /usr/local/
[root@nod1 ~]# cd /usr/local/
######建立軟連接
[root@nod1 local]# ln -s mysql-5.5.33-linux2.6-x86_64 mysql
[root@nod1 local]# cd mysql
######爲Mysql提供Sysv服務腳本
[root@nod1 mysql]# cp support-files/mysql.server /etc/rc.d/init.d/mysqld
######添加執行權限並加入到系統服務
[root@nod1 mysql]# chmod +x /etc/rc.d/init.d/mysqld
[root@nod1 mysql]# chkconfig --add mysqld
######提供Mysql主配置文件
[root@nod1 mysql]# cp support-files/my-large.cnf /etc/my.cnf
######修改主配置文件數據存放目錄位置
[root@nod1 mysql]# vim /etc/my.cnf
datadir = /data
######添加Mysql的PATH環境變量
[root@nod1 mysql]# echo "PATH=/usr/local/mysql/bin:$PATH" >> /etc/profile
[root@nod1 mysql]# . /etc/profile
######添加Mysql的庫文件
[root@nod1 mysql]# echo "/usr/local/mysql/lib/" >> /etc/ld.so.conf
[root@nod1 mysql]# ldconfig
######添加Mysql頭文件信息
[root@nod1 mysql]# ln -s /usr/local/mysql/include /usr/include/mysql
######建立數據存放目錄,並掛載NFS文件系統
[root@nod1 mysql]# mkdir /data
[root@nod1 ~]# mount -t nfs 172.16.14.3:/mydata/data  /data
######建立Mysql用戶與NFS服務器上面的用戶UID相同,初始化數據庫並啓動
[root@nod1 mysql]# useradd -r -u 300 mysql
[root@nod1 ~]# cd /usr/local/mysql
[root@nod1 mysql]# ./scripts/mysql_install_db --user=mysql --datadir=/data/
[root@nod1 mysql]# service mysqld start
Starting MySQL....                                         [  OK  ]
######登陸Mysql,受權一個用戶爲方便後面測試
[root@nod1 mysql]# mysql
[root@nod1 mysql]# mysql> grant all on *.* to 'root'@'172.16.%.%' identified by 'mypass';
######禁止Mysqld開機自啓動並中止服務,由於要使用heartbeat來管理Mysqld
[root@nod1 mysql]# chkconfig mysqld off
[root@nod1 mysql]# service mysqld stop

2、在nod2服務器上面安裝Mysql

[root@nod2 ~]# tar xf mysql-5.5.33-linux2.6-x86_64.tar.gz -C /usr/local/
[root@nod2 ~]# cd /usr/local/
[root@nod2 local]# ln -s mysql-5.5.33-linux2.6-x86_64 mysql
[root@nod2 local]# cd mysql
[root@nod2 mysql]# cp support-files/mysql.server /etc/rc.d/init.d/mysqld
[root@nod2 mysql]# chmod +x /etc/rc.d/init.d/mysqld
[root@nod2 mysql]# chkconfig --add mysqld
[root@nod2 mysql]# cp support-files/my-large.cnf /etc/my.cnf
[root@nod2 mysql]# mkdir /data
[root@nod2 mysql]# vim /etc/my.cnf
datadir = /data
[root@nod2 mysql]# echo "PATH=/usr/local/mysql/bin:$PATH" >> /etc/profile
[root@nod2 mysql]# . /etc/profile
[root@nod2 mysql]# echo "/usr/local/mysql/lib/" >> /etc/ld.so.conf
[root@nod2 mysql]# ldconfig
[root@nod2 mysql]# ln -s /usr/local/mysql/include /usr/include/mysql
[root@nod2 ~]# cd /usr/local/mysql
[root@nod2 mysql]# useradd -r -u 300 mysql
 ######在啓動前須要把nod1上面的Mysql服務中止,不然不能啓動,這裏不須要初始化數據庫
[root@nod2 mysql]# service mysqld start
Starting MySQL...                                          [  OK  ]
[root@nod2 mysql]# chkconfig mysqld off
[root@nod2 mysql]# service mysqld stop
Shutting down MySQL.                                       [  OK  ]

安裝Heartbeat

一、在nod1與nod2服務器上安裝Heartbeat

######在nod1服務器上安裝Heartbeat依賴環境
[root@nod1 ~]# yum -y install PyXML libnet ipvsadm net-snmp-libs
######這裏使用rpm包安裝
[root@nod1 ~]# rpm -ivh heartbeat-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.x86_64.rpm heartbeat-pils-2.1.4-12.el6.x86_64.rpm
######在nod2服務器上安裝Heartbeat依賴環境
[root@nod2 ~]# yum -y install PyXML libnet ipvsadm net-snmp-libs
[root@nod2 ~]# rpm -ivh heartbeat-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.x86_64.rpm heartbeat-pils-2.1.4-12.el6.x86_64.rpm

二、在nod1服務器上面配置Heartbeat認證文件、主配置文件與資源文件並拷貝到nod2服務器

######切換目錄爲Heartbeat提供配置文件
[root@nod1 ~]# cd /usr/share/doc/heartbeat-2.1.4/
[root@nod1 heartbeat-2.1.4]# cp ha.cf authkeys haresources /etc/ha.d/
######切換到Heartbeat配置文件目錄
[root@nod1 heartbeat-2.1.4]# cd /etc/ha.d/
######生成一個隨機數
[root@nod1 ha.d]# openssl rand -hex 4
dca1f0ac
######修改認證文件
[root@nod1 ha.d]# vim authkeys
auth 3            #啓用的哪個認證,就把下面所對應的認證開啓
#1 crc
#2 sha1 HI!
3 md5 dca1f0ac
====================================================================
######修改主配置文件
[root@nod1 ha.d]# vim ha.cf
logfile /var/log/ha-log        #日誌文件開啓
#logfacility    local0         #與上面日誌文件開啓任意一個便可
keepalive 2                    #發送通知頻率
mcast eth0 225.14.2.1 694 1 0  #組播
auto_failback on               #開啓此項爲若是主節點從故障恢復到正常狀態是否把服務自動切換到主節點
node    nod1.allen.com         #節點主機名稱,把全部節點都須要加入
node    nod2.allen.com
ping 172.16.0.1                #仲裁IP地址
compression     bz2            #啓用壓縮
compression_threshold 2        #大於多少KB啓用壓縮,默認2KB
====================================================================
######修改資源文件
[root@nod1 ha.d]# vim haresources
######設置資源類型
nod1.allen.com  IPaddr::172.16.14.10/16/eth0 Filesystem::172.16.14.3:/mydata/data::/data::nfs mysqld
註釋:
nod1.allen.com:爲主節點主機名稱
IPaddr:虛擬IP地址
Filesystem: 要掛載的文件系統資源:掛載點:文件系統類型
mysqld:服務類型,爲哪一個服務作高可用
====================================================================
######拷貝Mysqld的服務腳本到Heartbeat資源目錄
[root@nod1 ha.d]# cp /etc/rc.d/init.d/mysqld resource.d/
######將配置文件拷貝到nod2一份
[root@nod1 ha.d]# scp -p authkeys ha.cf haresources 172.16.14.4:/etc/ha.d

三、在nod1服務器上面啓動Heartbeat服務並查看Heartbeat與Mysqld是否啓動

[root@nod1 ~]# service heartbeat start
[root@nod1 ~]# netstat -naput|grep 3306
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      36711/mysqld
[root@nod1 ~]# netstat -naput|grep 694
udp        0      0 225.14.2.1:694              0.0.0.0:*                               35926/heartbeat: wr

四、啓動nod2服務器上面的Heartbeat服務並查看Heartbeat啓動

[root@nod1 ~]# ssh nod2.allen.com 'service heartbeat start'
[root@nod1 ~]# ssh nod2.allen.com 'netstat -naput|grep 694'
udp        0      0 225.14.2.1:694              0.0.0.0:*                               39592/heartbeat: wr
註釋:在nod2服務器Mysqld不會啓動,若是把nod1服務器的Heartbeat服務中止,這裏會自動運行Mysqld服務

五、在nod1服務器上建立數據庫並查看,而後中止Heartbeat服務

[root@nod1 ~]# mysql -e 'create database allen;'
[root@nod1 ~]# mysql -e 'show databases;'
+--------------------+
| Database           |
+--------------------+
| information_schema |
| allen              |
| log                |
| mysql              |
| performance_schema |
| test               |
+--------------------+
[root@nod1 ~]# service heartbeat stop

六、查看nod2服務器上面的Mysqld服務是否啓動,而後鏈接到數據庫查看數據庫

[root@nod1 ~]# ssh nod2.allen.com 'netstat -naput|grep 3306'
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      40473/mysqld
[root@nod1 ~]# mysql -h 172.16.14.4 -e 'show databases;'
+--------------------+
| Database           |
+--------------------+
| information_schema |
| allen              |
| log                |
| mysql              |
| performance_schema |
| test               |
+--------------------+

七、假設把nod1服務器已經修復,啓動Heartbeat服務,查看Mysqld是否能自動切換到nod1服務器

[root@nod1 ~]# mysql -h 172.16.14.4 -e 'create database allen_yang;'
[root@nod1 ~]# service heartbeat start
######查看數據庫,能查看到說明已經啓動
[root@nod1 ~]# mysql -e 'show databases;'
+--------------------+
| Database           |
+--------------------+
| information_schema |
| allen              |
| allen_yang         |
| log                |
| mysql              |
| performance_schema |
| test               |
+--------------------+

八、測試使用客戶端工具使用虛擬IP「172.16.14.10」鏈接Mysqld服務

093144944.gif


>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>


使用CRM圖形化界面來管理集羣資源

一、在nod1服務器上面修改Heartbeat主配置文件並拷貝到nod2服務器,使用兩臺服務器配置保持一致

######切換到Heartbeat配置文件目錄
[root@nod1 ~]# cd /etc/ha.d/
######修改主配置文件
[root@nod1 ha.d]# vim ha.cf
######添加以下內容;下面兩個任選其一配置便可
crm respawn | crm on
######在啓動CRM圖形管理界面時會須要此用戶的密碼,因此先爲此用戶添加密碼
[root@nod1 ha.d]# echo hacluster | passwd --stdin hacluster

二、啓動圖形化配置界面並鏈接到服務器

[root@nod1 ha.d]# hb_gui &

095014340.gif

三、建立資源組用於統一管理

095102906.gif

四、設置組名及組的屬性

095105846.gif

五、添加虛擬IP資源

095400568.gif

五、添加虛擬IP的其餘屬性

095403516.gif

六、肯定添加虛擬IP資源

095406404.gif

七、添加文件系統資源並選擇添加的資源類型

100256549.gif

八、肯定添加文件系統資源

100259456.gif

九、添加數據庫資源

100520776.gif

100523707.gif

十、啓動資源以下

100708751.gif

十一、已經成功在nod2服務器上運行

100711783.gif

十二、使用客戶端工具測試鏈接虛擬IP

100856348.gif

1三、已以成功鏈接到數據庫

100858289.gif

1四、暫停nod2服務器上的資源,測試是否會切換到nod1服務器

101120264.gif

1五、資源已經成功切換到nod1服務器

101124366.gif

1六、再次使用客戶端工具測試使用虛擬IP鏈接Mysqld

101348525.gif

1七、已經成功鏈接到Mysqld

101352740.gif

到此Mysql高可用集羣就此結束;後面將會介紹其餘開源集羣軟件的安裝配置及使用;敬請期待...

相關文章
相關標籤/搜索