一、相關注意事項:
基于heartbeatV2(crm)和nfs共享實作mysql高可用叢集(關鍵點:如果是一主一從兩個node,主若挂掉,從可以取而代之,并且主node上的資料,從node可以通路到;此種架構并不理想,nfs-server易成為單點故障,若再對nfs做高可用共享存儲要用iscsi,這時至少要4台裝置,再者如果有iscsi裝置就可直接使用,不用再中間夾個nfs)
本例中在NFS共享存儲中僅是mysql資料目錄,兩個node均在本地有mysql程式和配置檔案(若NFS上存放mysql程式、mysql資料及配置檔案,如何實作讓mysql到共享存儲上讀配置檔案?使用選項指定)
注:mysql讀取配置檔案的先後次序:/etc/my.cnf-->/etc/mysql/my.cnf-->$MYSQL_HOME/my.cnf-->--default-extra-file=/PATH/TO/FILE-->~/.my.cnf(讓mysqld伺服器端程式接受選項(--default-extra-file=/PATH/TO/FILE),同時将前面幾處位置的不提供配置檔案即可)
OCF格式的RA(可靈活指定很多參數,來配置腳本的工作屬性)
LSB格式的RA(腳本固定,内設好的,不能提供參數)此例使用的是LSB格式的腳本
注:corosync中專門為mysql提供了RA,這個RA可接受參數用于告知mysql程式配置檔案在哪
注意nfs輸出時的UID、GID(mysql通路資料,都要是mysql使用者,mysql組,要對相應目錄有讀寫權限,而且此例中有兩個node,這兩個node的mysql使用者群組的UID、GID最好一樣,若不一樣就得配置nfs在輸出時檔案屬性中要有這兩個node的UID、GID)
mysql資料最好放在LVM上,既友善擴充又友善備份,LVM應在nfs所屬的伺服器上建立
二、操作:
<a href="http://s5.51cto.com/wyfs02/M00/77/10/wKiom1ZiNbzxp9ExAAA9NVBeyI0640.jpg" target="_blank"></a>
注:在同一時刻,node1和node2僅一台提供服務,若目前提供服務的node1-mysql-server挂掉,另一台node2接替其工作
node3-side:
本例是單獨拿出一塊磁盤制作LVM
#fdisk /dev/sdb(大小+5G,分區類型8e)
#partprobe /dev/sdb
#pvcreate /dev/sdb1
#vgcreate myvg /dev/sdb1
#lvcreate -L 5G -n mydata myvg
#lvs
#mke2fs -j /dev/myvg/mydata
#groupadd -g 3306 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
#mount
#mkdir /mydata/data
#chown -R mysql:mysql /mydata/data
#vim /etc/exports
/mydata/data 192.168.41.129/24(no_root_squash,rw) 192.168.41.130/24(no_root_squash,rw) (此處一定要有no_root_squash,預設生效的是root_squash是将root轉為anonymous)
#exportfs -arv
node1-side:
#mount -t nfs 192.168.41.128:/mydata /mydata
#usermod -s /bin/bash mysql(測試下mysql使用者是否對該目錄有寫權限)
#su - mysql
#cd /mydata/data
#touch test.txt
#ll
#usermod -s /sbin/nologin mysql
#tar xf mysql-5.5.45-linux2.6-i686.tar.gz -C /usr/local/
#cd /usr/local
#ln -sv mysql-5.5.45-linux2.6-i686/ mysql
#cd mysql
#chown -R root:mysql ./*
#scripts/mysql_install_db --user=mysql --datadir=/mydata/data
#ll /mydata/data
#cp support-files/my-large.cnf /etc/my.cnf
#vim /etc/my.cnf
[mysqld]
datadir = /mydata/data
innodb_file_per_table = 1
#cp support-files/mysql.server /etc/init.d/mysqld
#chkconfig --add mysqld
#chkconfig mysqld off
#chkconfig --list mysqld
#service mysqld start
#/usr/local/mysql/bin/mysql
>SHOW DATABASES;
>CREATE DATABASE mydb;
>GRANT ALL ON *.* TO ‘root’@’%’ IDENTIFIED BY ‘redhat’;
>FLUSH PRIVILEGES;
>\q
#service mysqld stop
#umount /mydata
#scp /etc/init.d/mysqld node2:/etc/init.d/
#scp /etc/my.cnf node2:/etc/
node2-side:
配置與node1-side相同,node2上不用執行初始化,最後檢視有無node1建立的mydb庫
#hb_gui &
添加如圖組和資源:
add new item:-->選group-->ID:mysql-->resourceID:mysqlip-->選IPaddr-->添加如圖ip、nic、cidr_netmask
add new item:-->選native-->resourceID:mysqlstore-->選filesystem-->添加如圖device、directory、fstype
add new item:-->選native-->resourceID:mysqld-->選mysqld
<a href="http://s2.51cto.com/wyfs02/M01/77/10/wKiom1ZiNdXSZXUdAACV_nkor2E691.jpg" target="_blank"></a>
<a href="http://s1.51cto.com/wyfs02/M01/77/0F/wKioL1ZiNkGR3ic6AACYdBnVk_U607.jpg" target="_blank"></a>
在組上右鍵start
測試:
#mysql -u root -p -h192.168.41.222
>USE mydb;
>CREATE TABLE testtb (id int unsigned not null auto_increment primary key,name char(20));
>SHOW TABLES;
在圖形界面的視窗上,右鍵node2點standby,在node3上再試登入mysql看是否正常
<a href="http://s2.51cto.com/wyfs02/M02/77/0F/wKioL1ZiNn3hf4ZVAACR-whDPZ0462.jpg" target="_blank"></a>
本文轉自 chaijowin 51CTO部落格,原文連結:http://blog.51cto.com/jowin/1719775,如需轉載請自行聯系原作者