NAS之mysql高可用解決方案

###############################################node

NASmysql

高可用集羣linux

hearbeat v二、crm、NFS實現MySQL高可用集羣sql

NFS做爲共享存儲所存在的問題vim

###############################################bash


NAS
服務器

  • (NetworkAttachedStorage):網絡附屬存儲是一種將分佈、獨立的數據整合爲大型、集中化管理的數據中心,以便於對不一樣主機和應用服務器進行訪問的技術。它經過網絡交換機鏈接存儲系統和服務器,創建專門用於數據存儲的私有網絡,用戶經過TCP/IP協議訪問數據,採用業界標準的文件共享協議如:NFS、HTTP、CIFS來實現基於文件級的數據共享,NAS存儲使文件共享訪問變的快捷方便,而且易增長存儲空間。但NAS自己也有必定的侷限性,它會受到網絡帶寬和網絡擁堵的影響,在必定程度上限制了NAS的網絡傳輸能力。網絡

  • NAS的優勢:NAS具有文件操做和管理系統,kernel的存在有效解決多個進程在同一時間對同一資源徵用帶來的數據崩潰(腦裂split-brain);NAS是共享與獨享兼顧的數據存儲池而且簡單靈活建立成本不高。dom

  • NAS的缺點:NAS自己將會受到網絡帶寬和網絡擁堵的影響;文件級別的數據共享在必定程度上會影響效率。ssh


高可用集羣

  • 高可用集羣,英文原文爲High Availability Cluster,簡稱HA Cluster,簡單的說,集羣(cluster)就是一組計算機,它們做爲一個總體向用戶提供一組網絡資源。這些單個的計算機系統 就是集羣的節點(node)。只有兩個節點的高可用集羣又稱爲雙機熱備,即便用兩臺服務器互相備份。當一臺服務器出現故障時,可由另外一臺服務器承擔服務任務,從而在不須要人工干預的 狀況下,自動保證系統能持續對外提供服務。雙機熱備只是高可用集羣的一種,高可用集羣系統更能夠支持兩個以上的節點,提供比雙機熱備更多、更高級的功能, 更能知足用戶不斷出現的需求變化,邏輯結構圖以下:

135054122.png

  • ccm(Cluster Consensus Menbership Service)監聽節點間心跳信息並計算整個集羣的票數和收斂狀態信息。

  • crmd(Cluster Resource Manager):集羣資源管理器實現了資源的分配,資源分配的每一個動做都要經過crm來實現,是核心組建,每一個節點上的crm都維護一個cib用來定義資源特定的屬性,哪些資源定義在同一個節點上。

  • cib(Cluster Infonation Base):集羣信息基庫是XML格式的配置文件,在內存中的一個XML格式的集羣資源的配置文件。

  • lrmd(Local Resource Manager):本地資源管理器用來獲取本地某個資源的狀態,而且實現本地資源的管理。

  • pengine:PE、TE

  • PE(Policy Engine):策略引擎負責計算集羣資源的粘性

  • TE(Transition Engine):事務引擎根據PE計算結果指揮節點進行資源轉移

  • stonithd(Shoot The Other Node in the Head):切斷故障節點電源。

Messagin Layer軟件

  • heartbeat

  • corosync

  • cman

  • keepalived

  • ultramokey

Cluster Resource Manager Layer軟件

  • crm

  • pacemaker

  • rgmanager

HA經常使用組合

  • heartbeat v2+crm

  • heartbeat v3+pacemaker

  • corosync+pacemaker

  • cman + rgmanager

  • keepalived+lvs



hearbeat v二、crm、NFS實現MySQL高可用集羣

  • 網絡結構圖以下:

113046616.png

註釋:節點1和節點2上運行着HA軟件和mysql服務,數據目錄在NFS服務器端/mydata目錄下,經過HA軟件的實時監控能夠完成節點故障時資源的自動轉移,對於客戶端來講VIP表徵着mysql服務,並持久可用

必備條件

  • 節點名稱必須跟uname -n命令的執行結果一致

  • 節點名稱和IP對應關係保存在/etc/hosts文件,不依賴於DNS

  • 各節點ssh互信通訊

  • 集羣各節點時間須要同步

######修改各節點主機名
hostname node1.soulboy.com
vim /etc/sysconfig/network
HOSTNAME=node1.soulboy.com
######修改hosts文件
vim /etc/hosts
192.168.1.131   node1.soulboy.com       node1
192.168.1.132   node2.soulboy.com       node2
######各節點ssh互信,節點二再也不演示
ssh-keygen -t rsa -f ~/.ssh/id_rsa -P ''
ssh-copy-id -i .ssh/id_rsa.pub root@192.168.1.132
######各節點時間同步,須要時間服務器配合crontab
* */5 * * *  ntpdate 192.168.1.100

部署HA軟件

######各節點安裝軟件包
yum --nogpgcheck localinstall heartbeat-2.1.4-9.el5.i386.rpm heartbeat-gui-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 perl-MailTools-1.77-1.el5.noarch.rpm
######各節點提供配置文件
cp /usr/share/doc/heartbeat-2.1.4/{authkeys,ha.cf,haresources} /etc/ha.d/
chmod 600 /etc/ha.d/authkeys
######修改密鑰文件authkeys
dd if=/dev/random count=1 bs=512 | md5sum   生成隨機數
vim /etc/ha.d/authkeys
auth 1
1 md5 b20f227f85d8f51f76f9feec992061ed
######各節點修改核心配置文件
vim /etc/ha.d/ha.cf
mcast eth0 225.0.100.20 694 1 0   組播
node    node1.soulboy.com
node    node2.soulboy.com
crm     respawn                 crm今後代替haresources,並實現CRM功能
######複製node1祕鑰文件到node2
scp /etc/ha.d/authkeys node2:/etc/ha.d/ -P  複製到node2
######各節點啓動服務
service hearbeat start

151843347.png

部署NFS服務器

partprobe /dev/sdb
pvcreate /dev/sdb1
vgcreate myvg /dev/sdb1
lvcreate -L 6G -n mydata myvg
mke2fs -j /dev/myvg/mydata
groupadd -g 3306 mysql     添加mysql用戶組
useradd -u 3306 -g mysql -s /sbin/nologin -M mysql
mkdir /mydata              建立共享目錄
vim /etc/fstab             開機自動掛載
/dev/myvg/mydata    /mydata    ext3    defaults    0  0
mount -a                   掛載
mkdir /mydata/data         建立數據目錄
chown -R mysql.mysql /mydata/data/     修改目錄爲mysql用戶
vim /etc/exports
/mydata         192.168.1.0/24(no_root_squash,rw)   修改共享權限
exportfs -arv

部署mysql服務

######各節點中止heartbeat服務
service heartbeat stop
######建立mysql用戶和組
groupadd -g 3306 mysql
useradd -g 3306 -u 3306 -s /sbin/nologin -M mysql
mkdir /mydata
mount 192.168.1.230:/mydata /mydata    掛載目錄
usermod -s /bin/bash mysql             測試是否可寫
su - mysql
touch /mydata/data/a
rm /mydata/data/a
logout
usermod -s /sbin/nologin mysql
umount /mydata                         測試正常
#####在節點一上安裝mysql
tar xf mysql-5.5.28-linux2.6-i686.tar.gz -C /usr/local/
ln -sv /usr/local/mysql-5.5.28-linux2.6-i686 /usr/local/mysql
chown -R root:mysql /usr/local/mysql/*
mount 192.168.1.230:/mydata /mydata     掛載NFS共享目錄到本地mydata目錄
#####初始化mysql
/usr/local/mysql                        切換目錄
scripts/mysql_install_db --user=mysql --datadir=/mydata/data/  初始化
#####修改相關配置文件
cp /usr/local/mysql/support-files/my-large.cnf  /etc/my.cnf
vim /etc/my.cnf
datadir = /mydata/data
innodb_file_per_table = 1               表空間獨立
cp /usr/local/mysql/support-files/mysql.server  /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig mysqld off                    禁止開機自啓動
service mysqld start                    啓動服務
/usr/local/mysql/bin/mysql              客戶端工具
######爲Mysql受權遠程用戶
/usr/local/mysql/bin/mysql
mysql> GRANT ALL ON *.* to 'root'@'%' IDENTIFIED BY 'redhat';
mysql> FLUSH PRIVILEGES;
mysql> create database testdb;
mysql> use testdb
mysql> create table student (id int unsigned not null auto_increment primary key, name char(20));
######中止服務卸載目錄
service mysqld stop                     關閉mysql服務
umount /mydata                          卸載mydata目錄
######同步配置文件和啓動腳本到node2
cp /etc/my.cnf  node2:/etc/  
scp /etc/init.d/mysqld  node2:/etc/init.d/
######爲node2建立/mydata目錄
mkdir /mydata

使用crm定義資源

######配置GUI登錄帳戶密碼
passwd hacluster
######打開GUI登錄窗口(請確保鏈接DC)
hb_gui &

一、登錄crm

155651155.png

二、定義資源組

160056467.png

三、定義VIP

162037241.png

四、定義NFS存儲

162133808.png

五、定義mysql服務

162220523.png

六、啓動資源組

162331433.png

七、查看資源已運行在node2上

162404119.png

八、使用客戶端登錄測試

163240658.png

模擬故障測試HA功能是否生效

一、資源組此時運行在node2節點,node1並沒有任何資源,此時讓node2變爲standy。

164353542.png

二、crm顯示全部資源已成功轉移至node1

164448108.png

三、切換至node1端驗證真實性

164530674.png

四、mysql客戶端第二次查詢

164647159.png

crm的補充(關於資源約束)

165116824.png


location 資源對節點的傾向程度,同一節點全部資源(進程)之和。

caloation:資源間互斥性,兩個資源傾向於在一塊兒仍是分開。

order: 資源採起動做的次序。


NFS做爲共享存儲所存在的問題

  • 單點故障的問題顯而易見

相關文章
相關標籤/搜索