天天看點

IV 10 MySQL+heartbeat+nfs

一、相關注意事項:

基于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

&gt;SHOW DATABASES;

&gt;CREATE DATABASE  mydb;

&gt;GRANT ALL  ON  *.* TO  ‘root’@’%’  IDENTIFIED BY  ‘redhat’;

&gt;FLUSH PRIVILEGES;

&gt;\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 &amp;

添加如圖組和資源:

add new item:--&gt;選group--&gt;ID:mysql--&gt;resourceID:mysqlip--&gt;選IPaddr--&gt;添加如圖ip、nic、cidr_netmask

add new item:--&gt;選native--&gt;resourceID:mysqlstore--&gt;選filesystem--&gt;添加如圖device、directory、fstype

add new item:--&gt;選native--&gt;resourceID:mysqld--&gt;選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

&gt;USE mydb;

&gt;CREATE TABLE  testtb  (id int  unsigned  not null  auto_increment  primary key,name  char(20));

&gt;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,如需轉載請自行聯系原作者