一、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)" > /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>-> </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: <LOOPBACK,UP,LOWER_UP> 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: <BROADCAST,MULTICAST,UP,LOWER_UP> 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> grant all privileges on *.* to root@</code><code>'%'</code><code>;</code>
<code>Query OK, 0 rows affected (0.05 sec)</code>
<code>mysql> flush privileges;</code>
<code>Query OK, 0 rows affected (0.03 sec)</code>
<code>mysql> \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,如需轉載請自行聯系原作者