天天看點

CentOS 6.4 Heartbeat+mysql+nfs實作高可用的mysql叢集

一、Heartbeat網絡架構

二、準備工作

1、作業系統

1

2

3

4

5

6

7

8

9

10

11

12

<code>CentOS 6.4 X86-64 最小化安裝</code>

<code>由于用源碼編譯安裝heartbeat一直沒有通過,是以沒辦法隻能采用yum安裝。</code>

<code>heartbeat v3</code>

<code>這裡需要強調的就是博文中:</code>

<code># 表示是在node1、node2上都要執行的指令</code>

<code>而</code>

<code>[root@node1 ~]</code><code># 表示僅在node1節點上執行的指令</code>

<code>[root@node2 ~]</code><code># 表示僅在node2節點上執行的指令</code>

<code>[root@node3 ~]</code><code># 表示僅在node3節點上執行的指令</code>

<code>新遇到的問題,本來這邊博文準備把Heartbeat的資料總管由haresources換成crm,但是在配置crm的時候,總是不成功,如果朋友有crm成功的案例,希望能指導指導。謝謝</code>

2、位址規劃

<code>node1 192.168.1.196 255.255.255.0 192.168.0.1 node1.</code><code>test</code><code>.com eth1 Active</code>

<code>node2 192.168.1.197 255.255.255.0 192.168.0.1 node2.</code><code>test</code><code>.com eth1 Passive</code>

<code>node3 192.168.1.198 255.255.255.0 192.168.0.1 node3.</code><code>test</code><code>.com eth1 nfs</code>

<code>vip   192.168.1.223 255.255.255.0</code>

3、主機名解析

<code>[root@node1 ~]</code><code># uname -n</code>

<code>node1.</code><code>test</code><code>.com</code>

<code>[root@node1 ~]</code><code># cat /etc/hosts</code>

<code>127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4</code>

<code>::1         localhost localhost.localdomain localhost6 localhost6.localdomain6</code>

<code>192.168.1.196 node1.</code><code>test</code><code>.com node1</code>

<code>192.168.1.197 node2.</code><code>test</code><code>.com node2</code>

<code>192.168.1.198 node3.</code><code>test</code><code>.com node3</code>

<code>[root@node2 ~]</code><code># uname -n</code>

<code>node2.</code><code>test</code><code>.com</code>

<code>[root@node2 ~]</code><code># cat /etc/hosts</code>

4、雙機互信

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

<code>[root@node1 ~]</code><code># ssh-keygen -t rsa -f ~/.ssh/id_rsa -P ''</code>

<code>Generating public</code><code>/private</code> <code>rsa key pair.</code>

<code>Created directory </code><code>'/root/.ssh'</code><code>.</code>

<code>Your identification has been saved </code><code>in</code> <code>/root/</code><code>.</code><code>ssh</code><code>/id_rsa</code><code>.</code>

<code>Your public key has been saved </code><code>in</code> <code>/root/</code><code>.</code><code>ssh</code><code>/id_rsa</code><code>.pub.</code>

<code>The key fingerprint is:</code>

<code>ce:f3:d7:63:10:9b:d2:86:f8:8a:5a:ee:41:d8:d2:01 root@node1.</code><code>test</code><code>.com</code>

<code>The key's randomart image is:</code>

<code>+--[ RSA 2048]----+</code>

<code>|    E            |</code>

<code>|     .           |</code>

<code>|      .          |</code>

<code>|     + .    .    |</code>

<code>|    o + S. o +   |</code>

<code>|     o o. o *    |</code>

<code>|      o +. o o   |</code>

<code>|     o o o. . +  |</code>

<code>|    .o+ .... . . |</code>

<code>+-----------------+</code>

<code>[root@node1 ~]</code><code># ssh-copy-id -i .ssh/id_rsa.pub [email protected]</code>

<code>The authenticity of host </code><code>'node2.test.com (192.168.0.102)'</code> <code>can't be established.</code>

<code>RSA key fingerprint is 46:b9:7c:11:db:75:93:ad:f1:26:f0:a7:4d:00:40:20.</code>

<code>Are you sure you want to </code><code>continue</code> <code>connecting (</code><code>yes</code><code>/no</code><code>)? </code><code>yes</code>

<code>Warning: Permanently added </code><code>'node2.test.com,192.168.0.102'</code> <code>(RSA) to the list of known hosts.</code>

<code>root@node2.</code><code>test</code><code>.com's password: </code>

<code>Now try logging into the machine, with </code><code>"ssh '[email protected]'"</code><code>, and check </code><code>in</code><code>:</code>

<code>  </code><code>.</code><code>ssh</code><code>/authorized_keys</code>

<code>to </code><code>make</code> <code>sure we haven</code><code>'t added extra keys that you weren'</code><code>t expecting.</code>

<code>[root@node2 ~]</code><code># ssh-keygen -t rsa -f ~/.ssh/id_rsa -P ''</code>

<code>c4:e3:71:f8:82:09:f0:42:9c:e7:20:db:db:ce:</code><code>dc</code><code>:0b root@node2.</code><code>test</code><code>.com</code>

<code>| .o.             |</code>

<code>|..+o.  . .       |</code>

<code>| +.+o   * .      |</code>

<code>|. .... = =       |</code>

<code>|   o  o S .      |</code>

<code>|  . .    .       |</code>

<code>|   +E.           |</code>

<code>|    +..          |</code>

<code>|      ..         |</code>

<code>[root@node2 ~]</code><code># ssh-copy-id -i .ssh/id_rsa.pub [email protected]</code>

<code>The authenticity of host </code><code>'node1.test.com (192.168.0.101)'</code> <code>can't be established.</code>

<code>Warning: Permanently added </code><code>'node1.test.com,192.168.0.101'</code> <code>(RSA) to the list of known hosts.</code>

<code>root@node1.</code><code>test</code><code>.com's password: </code>

<code>Now try logging into the machine, with </code><code>"ssh '[email protected]'"</code><code>, and check </code><code>in</code><code>:</code>

5、時間同步

<code># yum -y install ntpdate</code>

<code># ntpdate asia.pool.ntp.org</code>

6、關閉防火牆

<code># getenforce</code>

<code>Disabled</code>

<code># /etc/init.d/iptables status</code>

<code>iptables:未運作防火牆。</code>

三、安裝heartbeat包

1、安裝epel源

<code># wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm </code>

<code># wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm </code>

<code># rpm -Uvh remi-release-6*.rpm epel-release-6*.rpm</code>

2、修改epel源的配置檔案

<code># sed -i 's/#baseurl/baseurl/g' /etc/yum.repos.d/epel.repo </code>

<code># sed -i 's/mirrorlist/#mirrorlist/' /etc/yum.repos.d/epel.repo</code>

3、安裝heartbeat包

<code># yum install heartbeat heartbeat-libs</code>

4、檢視heartbeat所依賴的包

<a href="http://s3.51cto.com/wyfs02/M02/57/82/wKiom1ScBuqx5uCmAAVQAtkjyr4072.jpg" target="_blank"></a>

四、配置Heartbeat服務

1、heartbeat配置檔案的介紹

<code>heartbeat3個配置檔案</code>

<code>    </code><code>authkeys    </code><code>#節點之間認證的秘鑰key檔案,權限為600</code>

<code>    </code><code>ha.cf       </code><code>#heartbeat服務核心配置檔案</code>

<code>    </code><code>haresources </code><code>#叢集資料總管(haresource | crm)</code>

2、拷貝heartbeat初始配置檔案

<code>[root@node1 ~]</code><code># cp /usr/share/doc/heartbeat-3.0.4/{ha.cf,authkeys,haresources} /etc/ha.d/</code>

3、編輯authkeys檔案

<code>[root@node1 ~]</code><code># dd if=/dev/random bs=512 count=1 | openssl md5  #生成密鑰随機數</code>

<code>記錄了0+1 的讀入</code>

<code>記錄了0+1 的寫出</code>

<code>72位元組(72 B)已複制,4.8467e-05 秒,1.5 MB/秒</code>

<code>(stdin)= acf7401e6b20d4cec482ba1160eb8efe</code>

<code>[root@node1 ~]</code><code># vim /etc/ha.d/authkeys</code>

<code>#注釋:末尾添加以下兩行</code>

<code>auth 1</code>

<code>1 md5 acf7401e6b20d4cec482ba1160eb8efe</code>

<code>[root@node1 ~]</code><code># chmod 600 /etc/ha.d/authkeys</code>

4、編輯ha.cf主配置檔案

<code>[root@node1 ha.d]</code><code># grep -v '^#' ha.cf |sed '/^$/d'</code>

<code>注釋:主要修改兩處,其它的都可以預設</code>

<code>logfacility local0</code>

<code>mcast eth1 225.100.100.100 694 1 0     </code><code>#修改心跳資訊的傳播方式|多點傳播</code>

<code>auto_failback on</code>

<code>node node1.</code><code>test</code><code>.com    </code><code>#配置叢集中的節點數</code>

<code>node node2.</code><code>test</code><code>.com    </code><code>#配置叢集中的節點數</code>

5、編輯haresources配置檔案

<code>[root@node1 ha.d]</code><code># grep -v '^#' /etc/ha.d/haresources </code>

<code>node1.</code><code>test</code><code>.com  IPaddr::192.168.1.223 Filesystem::192.168.1.198:</code><code>/mydata</code><code>::</code><code>/mydata</code><code>::nfs mysqld</code>

6、拷貝配置檔案到node2節點

<code>[root@node1 ~]</code><code># scp /etc/ha.d/{ha.cf,haresources,authkeys} [email protected]:/etc/ha.d/</code>

五、建立lvm邏輯卷

1、node3主機增加一塊10G的新硬碟

<a href="http://s3.51cto.com/wyfs02/M01/57/B7/wKiom1SjW8qy81uAAAEKXZQIDp4963.jpg" target="_blank"></a>

2、node3節點硬碟分區,标記為lvm卷

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

<code>[root@node3 ~]</code><code># fdisk /dev/sdb</code>

<code>Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel</code>

<code>Building a new DOS disklabel with disk identifier 0xc42dce64.</code>

<code>Changes will remain </code><code>in</code> <code>memory only, </code><code>until</code> <code>you decide to write them.</code>

<code>After that, of course, the previous content won't be recoverable.</code>

<code>Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)</code>

<code>WARNING: DOS-compatible mode is deprecated. It's strongly recommended to</code>

<code>         </code><code>switch off the mode (</code><code>command</code> <code>'c'</code><code>) and change display </code><code>units</code> <code>to</code>

<code>         </code><code>sectors (</code><code>command</code> <code>'u'</code><code>).</code>

<code>Command (m </code><code>for</code> <code>help): n</code>

<code>Command action</code>

<code>   </code><code>e   extended</code>

<code>   </code><code>p   primary partition (1-4)</code>

<code>p</code>

<code>Partition number (1-4): 1</code>

<code>First cylinder (1-1305, default 1): 1</code>

<code>Last cylinder, +cylinders or +size{K,M,G} (1-1305, default 1305): </code>

<code>Using default value 1305</code>

<code>Command (m </code><code>for</code> <code>help): p</code>

<code>Disk </code><code>/dev/sdb</code><code>: 10.7 GB, 10737418240 bytes</code>

<code>255 heads, 63 sectors</code><code>/track</code><code>, 1305 cylinders</code>

<code>Units = cylinders of 16065 * 512 = 8225280 bytes</code>

<code>Sector size (logical</code><code>/physical</code><code>): 512 bytes / 512 bytes</code>

<code>I</code><code>/O</code> <code>size (minimum</code><code>/optimal</code><code>): 512 bytes / 512 bytes</code>

<code>Disk identifier: 0xc42dce64</code>

<code>   </code><code>Device Boot      Start         End      Blocks   Id  System</code>

<code>/dev/sdb1</code>               <code>1        1305    10482381   83  Linux</code>

<code>Command (m </code><code>for</code> <code>help): t</code>

<code>Selected partition 1</code>

<code>Hex code (</code><code>type</code> <code>L to list codes): 8e</code>

<code>Changed system </code><code>type</code> <code>of partition 1 to 8e (Linux LVM)</code>

<code>/dev/sdb1</code>               <code>1        1305    10482381   8e  Linux LVM</code>

<code>Command (m </code><code>for</code> <code>help): w</code>

<code>The partition table has been altered!</code>

<code>Calling ioctl() to re-</code><code>read</code> <code>partition table.</code>

<code>Syncing disks.</code>

3、建立lvm邏輯卷

<code>[root@node3 ~]</code><code># yum -y install lvm2</code>

<code>[root@node3 ~]</code><code># pvcreate /dev/sdb1</code>

<code>  </code><code>Physical volume </code><code>"/dev/sdb1"</code> <code>successfully created</code>

<code>[root@node3 ~]</code><code># vgcreate myvg /dev/sdb1</code>

<code>  </code><code>Volume group </code><code>"myvg"</code> <code>successfully created</code>

<code>[root@node3 ~]</code><code># lvcreate -L 9G -n mydata myvg</code>

<code>  </code><code>Logical volume </code><code>"mydata"</code> <code>created</code>

<code>[root@node3 ~]</code><code># lvs |grep mydata</code>

<code>  </code><code>mydata  myvg     -wi-a-----  9.00g</code>

4、格式化lvm邏輯卷

<code>[root@node3 ~]</code><code># mkfs.ext4 /dev/myvg/mydata </code>

<code>mke2fs 1.41.12 (17-May-2010)</code>

<code>檔案系統标簽=</code>

<code>作業系統:Linux</code>

<code>塊大小=4096 (log=2)</code>

<code>分塊大小=4096 (log=2)</code>

<code>Stride=0 blocks, Stripe width=0 blocks</code>

<code>589824 inodes, 2359296 blocks</code>

<code>117964 blocks (5.00%) reserved </code><code>for</code> <code>the super user</code>

<code>第一個資料塊=0</code>

<code>Maximum filesystem blocks=2415919104</code>

<code>72 block </code><code>groups</code>

<code>32768 blocks per group, 32768 fragments per group</code>

<code>8192 inodes per group</code>

<code>Superblock backups stored on blocks: </code>

<code>    </code><code>32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632</code>

<code>正在寫入inode表: 完成                            </code>

<code>Creating journal (32768 blocks): 完成</code>

<code>Writing superblocks and filesystem accounting information: 完成</code>

<code>This filesystem will be automatically checked every 23 mounts or</code>

<code>180 days, whichever comes first.  Use tune2fs -c or -i to override.</code>

六、安裝配置NFS

1、安裝nfs服務

<code>[root@node3 ~]</code><code># yum -y install nfs-utils rpcbind</code>

2、配置nfs共享存儲目錄

<code>[root@node3 ~]</code><code># mkdir /mydata</code>

<code>[root@node3 ~]</code><code># echo "/mydata     192.168.1.0/24(rw,all_squash,anonuid=3306,anongid=3306)" &gt; /etc/exports</code>

3、檢視nfs的共享目錄

<code>[root@node3 ~]</code><code># showmount -e 192.168.1.198</code>

<code>clnt_create: RPC: Port mapper failure - Unable to receive: errno 111 (Connection refused)</code>

<code>[root@node3 ~]</code><code># service nfs start </code>

<code>啟動 NFS 服務:                                            [确定]</code>

<code>啟動 NFS mountd:                                          [失敗]</code>

<code>啟動 NFS 守護程序:rpc.nfsd: writing fd to kernel failed: errno 111 (Connection refused)</code>

<code>rpc.nfsd: unable to </code><code>set</code> <code>any sockets </code><code>for</code> <code>nfsd</code>

<code>                                                           </code><code>[失敗]</code>

<code>[root@node3 ~]</code><code># service rpcbind start</code>

<code>正在啟動 rpcbind:                                         [确定]</code>

<code>啟動 NFS mountd:                                          [确定]</code>

<code>啟動 NFS 守護程序:                                        [确定]</code>

<code>正在啟動 RPC idmapd:                                      [确定]</code>

<code>Export list </code><code>for</code> <code>192.168.1.198:</code>

<code>/mydata</code> <code>192.168.1.0</code><code>/24</code>

4、本地挂載lvm邏輯卷

<code>[root@node3 ~]</code><code># mount /dev/myvg/mydata /mydata/</code>

<code>[root@node3 ~]</code><code># ll /mydata/</code>

<code>總用量 16</code>

<code>drwx------ 2 root root 16384 12月 31 09:02 lost+found</code>

如果以上都沒有問題的話,接下來我們就為安裝配置mysql做準備!!!

七、安裝配置MySQL

1、node3節點上建立使用者

<code>[root@node3 ~]</code><code># useradd -g mysql -u 3306 -s /sbin/nologin -M mysql</code>

<code>[root@node3 ~]</code><code># id mysql</code>

<code>uid=3306(mysql) gid=3306(mysql) 組=3306(mysql)</code>

2、賦予挂載的lvm邏輯卷的宿主群組為mysql

<code>[root@node3 ~]</code><code># chown -R mysql.mysql /mydata/</code>

<code>[root@node3 ~]</code><code># ll -d /mydata/</code>

<code>drwxr-xr-x 3 mysql mysql 4096 12月 31 09:02 </code><code>/mydata/</code>

到了這裡NFS的配置基本就差不多了。接下來我們在node1節點上安裝配置mysql服務

node1:

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

<code>1、建立使用者</code>

<code>[root@node1 ~]</code><code># groupadd -g 3306 mysql</code>

<code>[root@node1 ~]</code><code># useradd -g mysql -u 3306 -s /sbin/nologin -M mysql</code>

<code>[root@node1 ~]</code><code># id mysql</code>

<code>2、解壓MySQL安裝包</code>

<code>[root@node1 ~]</code><code># tar xf mysql-5.6.12-linux-glibc2.5-x86_64.tar.gz -C /usr/local/</code>

<code>[root@node1 ~]</code><code># ln -sv /usr/local/mysql-5.6.12-linux-glibc2.5-x86_64 /usr/local/mysql</code>

<code>"/usr/local/mysql"</code> <code>-&gt; </code><code>"/usr/local/mysql-5.6.12-linux-glibc2.5-x86_64"</code>

<code>3、賦予MySQL安裝包權限</code>

<code>[root@node1 ~]</code><code># chown -R root.mysql /usr/local/mysql/</code>

<code>[root@node1 ~]</code><code># ll /usr/local/mysql/</code>

<code>總用量 76</code>

<code>drwxr-xr-x  2 root mysql  4096 12月 31 09:15 bin</code>

<code>-rw-r--r--  1 root mysql 17987 6月  20 2013 COPYING</code>

<code>drwxr-xr-x  3 root mysql  4096 12月 31 09:16 data</code>

<code>drwxr-xr-x  2 root mysql  4096 12月 31 09:16 docs</code>

<code>drwxr-xr-x  3 root mysql  4096 12月 31 09:16 include</code>

<code>-rw-r--r--  1 root mysql  7469 6月  20 2013 INSTALL-BINARY</code>

<code>drwxr-xr-x  3 root mysql  4096 12月 31 09:16 lib</code>

<code>drwxr-xr-x  4 root mysql  4096 12月 31 09:15 </code><code>man</code>

<code>drwxr-xr-x 10 root mysql  4096 12月 31 09:16 mysql-</code><code>test</code>

<code>-rw-r--r--  1 root mysql  2496 6月  20 2013 README</code>

<code>drwxr-xr-x  2 root mysql  4096 12月 31 09:16 scripts</code>

<code>drwxr-xr-x 28 root mysql  4096 12月 31 09:15 share</code>

<code>drwxr-xr-x  4 root mysql  4096 12月 31 09:16 sql-bench</code>

<code>drwxr-xr-x  3 root mysql  4096 12月 31 09:16 support-files</code>

<code>4、挂載NFS的共享目錄并建立MySQL資料存放目錄</code>

<code>[root@node1 ~]</code><code># mkdir /mydata</code>

<code>[root@node1 ~]</code><code># mount -t nfs4 192.168.1.198:/mydata /mydata</code>

<code>[root@node1 ~]</code><code># ll /mydata/</code>

<code>drwx------ 2 mysql mysql 16384 12月 31 09:02 lost+found</code>

<code>[root@node1 ~]</code><code># mkdir /mydata/data</code>

<code>總用量 20</code>

<code>drwxr-xr-x 2 mysql mysql  4096 12月 31 09:24 data</code>

<code>5、初始化資料庫</code>

<code>[root@node1 ~]</code><code># yum -y install libaio</code>

<code>[root@node1 ~]</code><code># /usr/local/mysql/scripts/mysql_install_db --user=mysql --datadir=/mydata/data/ --basedir=/usr/local/mysql/</code>

<code>6、拷貝配置檔案、服務啟動腳本檔案</code>

<code>[root@node1 ~]</code><code># cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf </code>

<code>cp</code><code>:是否覆寫</code><code>"/etc/my.cnf"</code><code>? </code><code>yes</code>

<code>[root@node1 ~]</code><code># cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld</code>

<code>7、修改MySQL配置檔案</code>

<code>[root@node1 ~]</code><code># vim /etc/my.cnf </code>

<code>datadir = </code><code>/mydata/data</code>

<code>innodb_file_per_table = 1</code>

<code>8、啟動服務并登陸測試</code>

<code>[root@node1 ~]</code><code># service mysqld start</code>

<code>Starting MySQL.. SUCCESS!</code>

<code>[root@node1 ~]</code><code># /usr/local/mysql/bin/mysql -e "show databases;"</code>

<code>+--------------------+</code>

<code>| Database           |</code>

<code>| information_schema |</code>

<code>| mysql              |</code>

<code>| performance_schema |</code>

<code>| </code><code>test</code>               <code>|</code>

<code>9、拷貝MySQL配置檔案、啟動服務腳本檔案到node2節點上</code>

<code>[root@node1 ~]</code><code># scp /etc/init.d/mysqld /etc/init.d/mysqld</code>

<code>[root@node1 ~]</code><code># scp /etc/init.d/mysqld node2:/etc/init.d/mysqld</code>

<code>10、停止MySQL服務</code>

<code>[root@node1 ~]</code><code># service mysqld stop</code>

<code>Shutting down MySQL.. SUCCESS!</code>

node2:

<code>[root@node2 ~]</code><code># groupadd -g 3306 mysql</code>

<code>[root@node2 ~]</code><code># useradd -g mysql -u 3306 -s /sbin/nologin -M mysql</code>

<code>[root@node2 ~]</code><code># id mysql</code>

<code>[root@node2 ~]</code><code># tar xf mysql-5.6.12-linux-glibc2.5-x86_64.tar.gz -C /usr/local/</code>

<code>[root@node2 ~]</code><code># ln -sv /usr/local/mysql-5.6.12-linux-glibc2.5-x86_64 /usr/local/mysql</code>

<code>[root@node2 ~]</code><code># chown -R root.mysql /usr/local/mysql/</code>

<code>[root@node2 ~]</code><code># ll /usr/local/mysql/</code>

<code>4、挂載NFS的共享目錄</code>

<code>[root@node2 ~]</code><code># mkdir /mydata</code>

<code>[root@node2 ~]</code><code># mount -t nfs4 192.168.1.198:/mydata /mydata</code>

<code>[root@node2 ~]</code><code># ll /mydata/</code>

<code>drwxr-xr-x 5 mysql mysql  4096 12月 31 09:28 data</code>

<code>5、啟動MySQL服務</code>

<code>[root@node2 ~]</code><code># service mysqld start</code>

<code>Starting MySQL. ERROR! The server quit without updating PID </code><code>file</code> <code>(</code><code>/mydata/data/node2</code><code>.</code><code>test</code><code>.com.pid).</code>

<code>6、檢視日志</code>

<code>[root@node2 data]</code><code># tail -f node2.test.com.err </code>

<code>141231 09:39:10 mysqld_safe Starting mysqld daemon with databases from </code><code>/mydata/data</code>

<code>/usr/local/mysql/bin/mysqld</code><code>: error </code><code>while</code> <code>loading shared libraries: libaio.so.1: cannot </code><code>open</code> <code>shared object </code><code>file</code><code>: No such </code><code>file</code> <code>or directory</code>

<code>141231 09:39:10 mysqld_safe mysqld from pid </code><code>file</code> <code>/mydata/data/node2</code><code>.</code><code>test</code><code>.com.pid ended</code>

<code>哦!原來是沒有安裝libaio包</code>

<code>[root@node2 ~]</code><code># yum -y install libaio</code>

<code>再次啟動MySQL服務</code>

八、啟動Heartbeat服務

1、在node1和node2上啟動hearbeat服務

<code>[root@node1 ~]</code><code># service heartbeat start</code>

<code>Starting High-Availability services: INFO:  Resource is stopped</code>

<code>Done.</code>

<code>[root@node1 ~]</code><code># ssh node2 "service heartbeat start"</code>

<code>Starting High-Availability services: 2014</code><code>/12/31_09</code><code>:50:20 INFO:  Resource is stopped</code>

2、檢視vip、共享挂載、MySQL服務

<code>[root@node1 ~]</code><code># ip addr</code>

<code>1: lo: &lt;LOOPBACK,UP,LOWER_UP&gt; mtu 16436 qdisc noqueue state UNKNOWN </code>

<code>    </code><code>link</code><code>/loopback</code> <code>00:00:00:00:00:00 brd 00:00:00:00:00:00</code>

<code>    </code><code>inet 127.0.0.1</code><code>/8</code> <code>scope host lo</code>

<code>    </code><code>inet6 ::1</code><code>/128</code> <code>scope host </code>

<code>       </code><code>valid_lft forever preferred_lft forever</code>

<code>2: eth1: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc pfifo_fast state UP qlen 1000</code>

<code>    </code><code>link</code><code>/ether</code> <code>00:0c:29:c7:14:97 brd ff:ff:ff:ff:ff:ff</code>

<code>    </code><code>inet 192.168.1.196</code><code>/24</code> <code>brd 255.255.255.255 scope global eth1</code>

<code>    </code><code>inet 192.168.1.223</code><code>/24</code> <code>brd 255.255.255.255 scope global secondary eth1</code>

<code>    </code><code>inet6 fe80::20c:29ff:fec7:1497</code><code>/64</code> <code>scope link </code>

<code>[root@node1 ~]</code><code># df -h</code>

<code>檔案系統          容量  已用  可用 已用%% 挂載點</code>

<code>/dev/mapper/VolGroup-lv_root</code>

<code>                       </code><code>16G  2.7G   12G  19% /</code>

<code>tmpfs                 495M     0  495M   0% </code><code>/dev/shm</code>

<code>/dev/sda1</code>             <code>485M   32M  428M   7% </code><code>/boot</code>

<code>192.168.1.198:</code><code>/mydata</code>

<code>                      </code><code>8.9G  259M  8.2G   4% </code><code>/mydata</code>

<code>[root@node1 ~]</code><code># service mysqld status</code>

<code> </code><code>SUCCESS! MySQL running (3650)</code>

3、賦予授權使用者權限

因為涉及到MySQL的高可用,那麼用戶端肯定要遠端登入MySQL,是以首先賦予遠端登入的權限。

<code>[root@node1 ~]</code><code># /usr/local/mysql/bin/mysql</code>

<code>Welcome to the MySQL monitor.  Commands end with ; or \g.</code>

<code>Your MySQL connection </code><code>id</code> <code>is 1</code>

<code>Server version: 5.6.12 MySQL Community Server (GPL)</code>

<code>Copyright (c) 2000, 2013, Oracle and</code><code>/or</code> <code>its affiliates. All rights reserved.</code>

<code>Oracle is a registered trademark of Oracle Corporation and</code><code>/or</code> <code>its</code>

<code>affiliates. Other names may be trademarks of their respective</code>

<code>owners.</code>

<code>Type </code><code>'help;'</code> <code>or </code><code>'\h'</code> <code>for</code> <code>help. Type </code><code>'\c'</code> <code>to </code><code>clear</code> <code>the current input statement.</code>

<code>mysql&gt; grant all privileges on *.* to root@</code><code>'%'</code><code>;</code>

<code>Query OK, 0 rows affected (0.05 sec)</code>

<code>mysql&gt; flush privileges;</code>

<code>Query OK, 0 rows affected (0.03 sec)</code>

<code>mysql&gt; \q</code>

<code>Bye</code>

九、測試MySQL服務的高可用

1、測試前的準備工作

注釋:解除安裝node1和node2節點的挂載共享目錄、停止MySQL服務并開機不自啟動

<code>[root@node1 ~]</code><code># df</code>

<code>檔案系統             1K-塊      已用      可用 已用% 挂載點</code>

<code>                      </code><code>16134560   2786364  12528588  19% /</code>

<code>tmpfs                   506272         0    506272   0% </code><code>/dev/shm</code>

<code>/dev/sda1</code>               <code>495844     32418    437826   7% </code><code>/boot</code>

<code>[root@node1 ~]</code><code># chkconfig mysqld off</code>

<code>[root@node1 ~]</code><code># chkconfig --list mysqld</code>

<code>mysqld             0:關閉    1:關閉    2:關閉    3:關閉    4:關閉    5:關閉    6:關閉</code>

<code> </code><code>ERROR! MySQL is not running</code>

<code>[root@node2 ~]</code><code># df</code>

<code>                      </code><code>16134560   2786256  12528696  19% /</code>

<code>[root@node2 ~]</code><code># chkconfig mysqld off</code>

<code>[root@node2 ~]</code><code># chkconfig --list mysqld</code>

<code>[root@node2 ~]</code><code># service mysqld status</code>

2、啟動node1和node2節點的hearbeat服務并檢視相關資訊

<code>[root@node1 ~]</code><code># ssh node2 "service heartbeat restart"</code>

<code>Stopping High-Availability services: Done.</code>

<code>Waiting to allow resource takeover to complete:Done.</code>

<code>Starting High-Availability services: 2014</code><code>/12/31_10</code><code>:27:01 INFO:  Resource is stopped</code>

<code>[root@node1 ~]</code><code># service heartbeat restart</code>

<code>[root@node1 ~]</code><code># df -H</code>

<code>                        </code><code>17G   2.9G    13G  19% /</code>

<code>tmpfs                  519M      0   519M   0% </code><code>/dev/shm</code>

<code>/dev/sda1</code>              <code>508M    34M   449M   7% </code><code>/boot</code>

<code>                       </code><code>9.6G   272M   8.8G   4% </code><code>/mydata</code>

<code> </code><code>SUCCESS! MySQL running (4853)</code>

3、用戶端連接配接測試

首先:當vip在node1上的時候,登入測試

<a href="http://s3.51cto.com/wyfs02/M02/57/B7/wKiom1SjX4uBWGCVAAJx7-0Ru0g544.jpg" target="_blank"></a>

<a href="http://s3.51cto.com/wyfs02/M00/57/B7/wKiom1SjX4zwcHpCAAI2nsRIc14757.jpg" target="_blank"></a>

其次:停止node1上的heartbeat服務,或者直接關機,用戶端登入驗證

<code>[root@node1 ~]</code><code># init 0</code>

node2

<code>[root@node2 ha.d]</code><code># ip addr</code>

<code>    </code><code>link</code><code>/ether</code> <code>00:0c:29:ad:9f:36 brd ff:ff:ff:ff:ff:ff</code>

<code>    </code><code>inet 192.168.1.197</code><code>/24</code> <code>brd 255.255.255.255 scope global eth1</code>

<code>    </code><code>inet6 fe80::20c:29ff:fead:9f36</code><code>/64</code> <code>scope link </code>

<code>[root@node2 ha.d]</code><code># df</code>

<code>                      </code><code>16134560   2786276  12528676  19% /</code>

<code>                       </code><code>9289088    264704   8552512   4% </code><code>/mydata</code>

<code>[root@node2 ha.d]</code><code># service mysqld status</code>

<code> </code><code>SUCCESS! MySQL running (6494)</code>

<a href="http://s3.51cto.com/wyfs02/M00/57/B5/wKioL1SjYaKj39JsAAJx7-0Ru0g261.jpg" target="_blank"></a>

<a href="http://s3.51cto.com/wyfs02/M00/57/B5/wKioL1SjYaOC5osLAAI2nsRIc14017.jpg" target="_blank"></a>

這個模拟測試的意思就是:

無論你在node1節點上是關閉hearbeat服務還是直接關閉主機電源都不影響用戶端正常的使用資料庫系統;

反過來也就是說:

無論你在node2節點上是關閉hearbeat服務還是直接關閉電源也都不會影響用戶端正常的使用資料庫系統。

不足之處,雖然通過Hearbeat對MySQl服務做了高可用,無論是對node1節點進行操作還是對node2節點進行操作,都不會影響資料庫系統的使用,但是如果node3節點出現了故障,那麼我們的資料庫系統就無法使用了。是以,我就想起了之前在網上看了一篇技術性文章MFS,似乎是NFS的更新版,可以解決NFS的單點故障,這也很大程度上的彌補了架構的不足,我也會在後續章節中介紹MFS的使用。

這裡有一點十分重要,也就是這一點困擾了我很長一段時間:

NFS有四個版本 V1版本是sun公司内部使用的,V2是第一個公開使用的版本,V3是目前主流的版本也是RedHat 5.x自帶的預設版本,但是在RedHat 6.x上NFS的版本卻變成了V4版本,V4版本在前版本的基礎上做了很大的補充,如果你還是用V3的方式去挂載NFS共享目錄,那麼你就會走到一個誤區,導緻後續的實驗無法進行,至于NFS V4的介紹可以參考連結的相關資料

<a href="http://www.cyberciti.biz/faq/centos-fedora-rhel-nfs-v4-configuration/" target="_blank">http://www.cyberciti.biz/faq/centos-fedora-rhel-nfs-v4-configuration/</a>

如有不足之處,希望朋友指出。謝謝

     本文轉自zys467754239 51CTO部落格,原文連結:http://blog.51cto.com/467754239/1597624,如需轉載請自行聯系原作者

繼續閱讀