HA專題: 使用pacemaker+corosync實現MySQL高可用
前言
上篇文章我們介紹了使用
pacemkaer+corosync
實現簡單的nginx
高可用, 這篇文章我們介紹如何使用pacemaker+corosync
實現MySQL
高可用, 并且此次我們手動編輯配置文件來實現corosync
的配置
實驗拓撲
實驗環境
主機 | IP | 功用 |
---|---|---|
node1.anyisalin.com | 172.16.1.2 | MySQL服務, HA節點 |
node2.anyisalin.com | 172.16.1.3 | MySQL服務, HA節點 |
nfs.anyisalin.com | 172.16.1.4 | 提供nfs服務,數據庫文件 |
注意: 本文實驗中所有主機SElinux和iptables都是關閉的
實驗步驟
準備工作
高可用集群必須保證所有節點主機互信, 主機名解析一致, 時間同步
配置hosts文件同步
配置互信
時間同步
安裝HA組件并配置
我們這次直接安裝并手動配置
pacemaker+corosync
安裝corosync+pacemaker在兩個節點上 [root@node1 ~]# yum install corosync pacemaker -y &> /dev/null && echo success success [root@node1 ~]# ssh node2.anyisalin.com "yum install corosync pacemaker -y &> /dev/null && echo success" success
編輯配置文件
[root@node1 corosync]# vim corosync.conf totem { version: 2 crypto_cipher: none crypto_hash: none interface { ringnumber: 0 bindnetaddr: 172.16.1.0 mcastaddr: 239.185.1.31 mcastport: 5405 ttl: 1 } } nodelist { node { ring0_addr: 172.16.1.2 nodeid: 1 } node { ring0_addr: 172.16.1.3 nodeid: 2 } } logging { fileline: off to_stderr: no to_logfile: yes logfile: /var/log/cluster/corosync.log to_syslog: no debug: off timestamp: on logger_subsys { subsys: QUORUM debug: off } } quorum { provider: corosync_votequorum }
啟動corosync和pacemaker
[root@node1 corosync]# scp corosync.conf node2.anyisalin.com:/etc/corosync/ [root@node1 corosync]# systemctl start corosync pacemkaer [root@node1 corosync]# ssh node2.anyisalin.com "systemctl start corosync pacemkaer"
查看集群節點狀態
[root@node1 corosync]# crm status #各節點都在線 Last updated: Sun Apr 10 22:23:13 2016 Last change: Sun Apr 10 22:16:43 2016 by root via cibadmin on node1.anyisalin.com Stack: corosync Current DC: node1.anyisalin.com (version 1.1.13-10.el7_2.2-44eb2dd) - partition with quorum 2 nodes and 0 resources configured Online: [ node1.anyisalin.com node2.anyisalin.com ]
配置NFS
對于NFS配置這次比較復雜
[root@nfs ~]# vim /etc/exports /datadir 172.16.1.0/24(rw,no_root_squash) [root@nfs ~]# useradd -u 3306 mysql #創建mysql用戶 [root@nfs ~]# mkdir /datadir [root@nfs ~]# setfacl -m u:mysql:rwx /datadir/ #賦予mysql用戶權限 [root@nfs ~]# exportfs -rv #重新導出目錄 exporting 172.16.1.0/24:/datadir
配置MySQL
MySQL我們使用通用二進制的包安裝, 安裝過程有疑問的可以看我以前的LAMP安裝的文章
在node1上操作 [root@node1 corosync]# tar xf mysql-5.5.33-linux2.6-x86_64.tar.gz -C /usr/src/ [root@node1 corosync]# cd /usr/src/mysql-5.5.33-linux2.6-x86_64/ [root@node1 mysql-5.5.33-linux2.6-x86_64]# groupadd -g 3306 -r mysql [root@node1 mysql-5.5.33-linux2.6-x86_64]# useradd -u 3306 -g mysql mysql [root@node1 mysql-5.5.33-linux2.6-x86_64]# mkdir /datadir [root@node1 mysql-5.5.33-linux2.6-x86_64]# mount -t nfs 172.16.1.4:/datadir /datadir/ #掛載nfs到本地 [root@node1 mysql-5.5.33-linux2.6-x86_64]# ./scripts/mysql_install_db --user=mysql --datadir=/datadir #初始化MySQL生成數據庫文件 [root@node1 mysql-5.5.33-linux2.6-x86_64]# ls /datadir/ mysql performance_schema test [root@node1 mysql-5.5.33-linux2.6-x86_64]# cp support-files/my-large.cnf /etc/my.cnf [root@node1 mysql-5.5.33-linux2.6-x86_64]# vim /etc/my.cnf #添加以下幾行 datadir=/datadir innodb_file_per_table = on skip_name_resolve = on [root@node1 mysql-5.5.33-linux2.6-x86_64]# cp support-files/mysql.server /etc/init.d/mysqld [root@node1 mysql-5.5.33-linux2.6-x86_64]# cd /usr/local/ [root@node1 local]# ln -sv /usr/src/mysql-5.5.33-linux2.6-x86_64/ mysql #創建軟鏈接 [root@node1 ~]# service mysqld start #啟動mysql Starting MySQL.. SUCCESS! [root@node1 ~]# /usr/local/mysql/bin/mysql #登錄成功 mysql> 在node2上操作 [root@node2 ~]# tar xf mysql-5.5.33-linux2.6-x86_64.tar.gz -C /usr/src/ [root@node2 ~]# mkdir /datadir [root@node2 ~]# mount -t nfs 172.16.1.4:/datadir /datadir/ [root@node2 ~]# ls /datadir/ ibdata1 ib_logfile0 ib_logfile1 mysql mysql-bin.000001 mysql-bin.000002 mysql-bin.index node1.anyisalin.com.err node1.anyisalin.com.pid performance_schema test [root@node2 ~]# scp node1.anyisalin.com:/etc/my.cnf /etc/ [root@node2 ~]# scp node1.anyisalin.com:/etc/init.d/mysqld /etc/init.d/ [root@node2 ~]# cd /usr/local/ [root@node2 local]# groupadd -g 3306 -r mysql [root@node2 local]# useradd -g mysql -u 3306 mysql [root@node2 local]# ln -sv /usr/src/mysql-5.5.33-linux2.6-x86_64/ mysql ‘mysql’ -> ‘/usr/src/mysql-5.5.33-linux2.6-x86_64/’ [root@node2 ~]# service mysqld start #因為node1在運行所以不能運行 Starting MySQL........ [root@node2 ~]# ssh node1.anyisalin.com "service mysqld stop" [root@node2 local]# service mysqld start #啟動成功 Starting MySQL SUCCESS! [root@node2 local]# /usr/local/mysql/bin/mysql #能夠登錄 mysql> #測試完成后將mysql服務停止并卸載nfs [root@node2 local]# service mysqld stop Shutting down MySQL. SUCCESS! [root@node2 local]# umount /datadir/ [root@node1 ~]# umount /datadir/
配置HA資源
crm(live)# configure crm(live)configure# primitive dataip ocf:heartbeat:IPaddr params ip=172.16.1.8 crm(live)configure# primitive datastore ocf:heartbeat:Filesystem params device="172.16.1.4:/datadir" fstype="nfs" directory="/datadir" crm(live)configure# primitive mysql service:mysqld crm(live)configure# property stonith-enabled=false colocation dataip_with_datastore inf: mysql ( dataip datastore ) #設置排列約束 order dataip_then_webstore Mandatory: dataip datastore #設置順序約束 order datastore_then_mysql Mandatory: datastore mysql crm(live)configure# commit
測試
總結
這樣我們就能實現一個MySQL HA集群了, 但是NFS是個單點故障. 如果NFS的數據掛了怎么辦? 很快我們就會寫drbd實現MySQL高可用了. 本系列文章主要側重于實驗. 對理論知識不做闡述, 還請多多諒解
作者水平很低, 如果有錯誤及時指出, 如果你覺得本文寫的好請點一波贊~(≧▽≦)/~
作者: AnyISaIln QQ: 1449472454
感謝: MageEdu
原創文章,作者:Net18-AnyISalIn,如若轉載,請注明出處:http://www.www58058.com/14645
這些鏈接是怎么實現的,博客有這個功能么
@Net18-天津-康康:可以通過錨點來實現,具體你可以在群里問我