###############################################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)。只有兩個節點的高可用集羣又稱爲雙機熱備,即便用兩臺服務器互相備份。當一臺服務器出現故障時,可由另外一臺服務器承擔服務任務,從而在不須要人工干預的 狀況下,自動保證系統能持續對外提供服務。雙機熱備只是高可用集羣的一種,高可用集羣系統更能夠支持兩個以上的節點,提供比雙機熱備更多、更高級的功能, 更能知足用戶不斷出現的需求變化,邏輯結構圖以下:
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高可用集羣
網絡結構圖以下:
註釋:節點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
部署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
二、定義資源組
三、定義VIP
四、定義NFS存儲
五、定義mysql服務
六、啓動資源組
七、查看資源已運行在node2上
八、使用客戶端登錄測試
模擬故障測試HA功能是否生效
一、資源組此時運行在node2節點,node1並沒有任何資源,此時讓node2變爲standy。
二、crm顯示全部資源已成功轉移至node1
三、切換至node1端驗證真實性
四、mysql客戶端第二次查詢
crm的補充(關於資源約束)
location: 資源對節點的傾向程度,同一節點全部資源(進程)之和。
caloation:資源間互斥性,兩個資源傾向於在一塊兒仍是分開。
order: 資源採起動做的次序。
NFS做爲共享存儲所存在的問題
單點故障的問題顯而易見