Corosync + Pacemaker 搭建高可用MariaDB服務
實驗描述
1.本實驗的目的是為了通過手動配置corosync配置文件,實現MariaDB服務的高可用,集群心跳傳遞使用組播方式。
2.三個節點的主機名分別為:node5.redhat.com
、node6.redhat.com
、node7.redhat.com
。地址為172.16.100.5
、172.16.100.6
、172.16.100.7
。
3.利用nfs做后端存儲,NFS地址為172.16.0.254
。
3.VIP地址為172.16.100.100
4.三個節點系統全部為CentOS7.2,NFS節點為CentOS6.5。
5.配置高可用集群的前三個步驟:節點時間同步
、主機名解析
和SSH互信
這里就再演示了。
配置步驟
一、NFS節點的配置
1.首先在此節點安裝NFS服務并創建共享目錄
[root@centos6 ~]# yum install nfs-utils -y
[root@centos6 ~]# mkdir /data/{mydata,logs} -pv
mkdir: created directory “data”
mkdir: created directory “/data/mydata”
mkdir: created directory “/data/logs”
[root@centos6 ~]# vim /etc/exports
/data 172.16.0.0/16(rw,no_root_squash)設置共享目錄及其權限3.
配置完成之后啟動NFS服務service nfs restart
。
2.創建mysql用戶和用戶組,并賦予共享目錄權限。注意:所有節點上的mysql用戶和組的ID號一定要一樣
[root@centos6 ~]# groupadd -r -g 240 mysql
[root@centos6 ~]# useradd -r -u 240 -g 240 mysql[root@centos6 ~]# chmod -R 775 /data
[root@centos6 ~]# chown -R mysql.root /data
二、將MariaDB服務在三個節點都配置好
1.首先在node5.redhat.com
節點上安裝nfs-utils
包,以支持掛載nfs格式的文件系統。
[root@node5 ~]# yum install nfs-utils -y
2.在node5.redhat.com
節點上創建mysql用戶和組。
[root@node5 ~]# groupadd -r -g 240 mysql
[root@node5 ~]# useradd -r -u 240 -g 240 mysql
3.創建/data目錄并掛載NFS服務到/data。
[root@node5 ~]# mkdir /data
[root@node5 ~]# mount -t nfs 172.16.0.254:/data /data
4.解壓mariadb
的二進制
程序包并創建鏈接。
[root@node5 ~]# tar xf mariadb-10.0.24-linux-x86_64.tar.gz -C /usr/local/
[root@node5 ~]# cd /usr/local/
[root@node5 local]# ln -sv mariadb-10.0.24-linux-x86_64 mysql
‘mysql’ -> ‘mariadb-10.0.24-linux-x86_64’
5.安裝并配置mariadb
服務。
[root@node5 local]# cd mysql/
[root@node5 mysql]# ./scripts/mysql_install_db –datadir=/data/mydata –user=mysql腳本安裝過程這里就省略了。。。
[root@node5 mysql]# cp support-files/mysql.server /etc/init.d/mysqld
[root@node5 mysql]# cp support-files/my-large.cnf /etc/my.cnf
cp: overwrite ‘/etc/my.cnf’? y
[root@node5 mysql]# echo “export PATH=/usr/local/mysql/bin:$PATH” > /etc/profile.d/mysqld.sh
[root@node5 mysql]# . /etc/profile.d/mysqld.sh
[root@node5 mysql]# vim /etc/my.cnf
my.cnf
文件示例。
[client] port = 3306 socket = /tmp/mysql.sock [mysqld] port = 3306 socket = /tmp/mysql.sock skip-external-locking key_buffer_size = 256M max_allowed_packet = 1M table_open_cache = 256 sort_buffer_size = 1M read_buffer_size = 1M read_rnd_buffer_size = 4M myisam_sort_buffer_size = 64M thread_cache_size = 8 query_cache_size= 16M thread_concurrency = 2 datadir = /data/mydata innodb_file_per_table = 1 log-bin=/data/logs/mysql-bin binlog_format=mixed server-id = 1 [mysqldump] quick max_allowed_packet = 16M [mysql] no-auto-rehash [myisamchk] key_buffer_size = 128M sort_buffer_size = 128M read_buffer = 2M write_buffer = 2M [mysqlhotcopy] interactive-timeout
6.啟動mariadb服務并創建一個測試用戶,方便最后我們測試使用。之后將mariadb服務關閉。并將NFS共享目錄卸載。
[root@node5 mysql]# /etc/init.d/mysqld start
Starting MySQL.. SUCCESS!
[root@node5 mysql]# mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 4
Server version: 10.0.24-MariaDB MariaDB ServerCopyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.
Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.
MariaDB [(none)]>
GRANT ALL ON *.* TO 'ha'@'%' IDENTIFIED BY 'redhat';
Query OK, 0 rows affected (0.04 sec)MariaDB [(none)]>
FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.03 sec)MariaDB [(none)]> quit
Bye
[root@node5 mysql]# /etc/init.d/mysqld stop
Shutting down MySQL… SUCCESS![root@node5 ~]# umount /data
5.將my.cnf
復制到其它節點,并在其它節點上配置上述1
、2
、3
、4
步驟.。注意:在執行第三步的時候只要創建目錄即可、不需要再掛載了
,并且需要再多執行一步:cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
#復制mariadb啟動腳本。
[root@node5 ~]# scp /etc/my.cnf node6.redhat.com:/etc/my.cnf
[root@node5 ~]# scp /etc/my.cnf node7.redhat.com:/etc/my.cnf
node6.redhat.com
[root@node6 ~]# yum install nfs-utils -y
[root@node6 ~]# groupadd -r -g 240 mysql
[root@node6 ~]# useradd -r -u 240 -g 240 mysql
[root@node6 ~]# mkdir /data
[root@node6 ~]# tar xf mariadb-10.0.24-linux-x86_64.tar.gz -C /usr/local/
[root@node6 ~]# cd /usr/local/
[root@node6 local]# ln -sv mariadb-10.0.24-linux-x86_64 mysql
[root@node6 local]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
node7.redhat.com
[root@node7 ~]# yum install nfs-utils -y
[root@node7 ~]# groupadd -r -g 240 mysql
[root@node7 ~]# useradd -r -u 240 -g 240 mysql
[root@node7 ~]# mkdir /data
[root@node7 ~]# tar xf mariadb-10.0.24-linux-x86_64.tar.gz -C /usr/local/
[root@node7 ~]# cd /usr/local/
[root@node7 local]# ln -sv mariadb-10.0.24-linux-x86_64 mysql
[root@node7 local]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
三、配置corosync集群,實現MariaDB的高可用
1.在三個節點都安裝上corosync+pacemaker服務
[root@node5 ~]# yum install corosync pacemaker -y
[root@node6 ~]# yum install corosync pacemaker -y
[root@node7 ~]# yum install corosync pacemaker -y
2.然后我們在一個節點上創建并配置corosync.conf文件,文件路徑為/etc/corosync/corosync.conf(默認沒有這個文件)。
配置文件示例:
totem { version: 2 crypto_cipher: aes128 crypto_hash: sha1 secauth: on interface { ringnumber: 0 bindnetaddr: 172.16.0.0 mcastaddr: 239.255.1.1 mcastport: 5405 ttl: 1 } } nodelist { node { ring0_addr: 172.16.100.5 nodeid: 1 } node { ring0_addr: 172.16.100.6 nodeid: 2 } node { ring0_addr: 172.16.100.7 nodeid: 3 } } logging { fileline: off to_stderr: no to_logfile: yes logfile: /var/log/cluster/corosync.log to_syslog: yes debug: off timestamp: on logger_subsys { subsys: QUORUM debug: off } } quorum { provider: corosync_votequorum }
3.之后使用corosync-keygen
命令,會自動在/etc/corosync/目錄下創建一個authkey
文件。注意:如果遇到卡在生成隨機數的地方,可以用如下方法解決:
[root@node5 corosync]# cd /dev/
[root@node5 dev]# mv random random.bak
[root@node5 dev]# ln -sv urandom random
‘random’ -> ‘urandom’[root@node5 dev]# corosync-keygen
Corosync Cluster Engine Authentication key generator.
Gathering 1024 bits for key from /dev/random.
Press keys on your keyboard to generate entropy.
Writing corosync key to /etc/corosync/authkey.[root@node5 dev]# rm -rf random
[root@node5 dev]# mv random.bak random
4.之后將corosync.conf
和authkey
都復制到另外的節點上去。
[root@node5 ~]# cd /etc/corosync/
[root@node5 corosync]# scp corosync.conf authkey node6.redhat.com:/etc/corosync/
[root@node5 corosync]# scp corosync.conf authkey node7.redhat.com:/etc/corosync/
5.在所有節點啟動corosync
和pacemaker
服務。
[root@node5 ~]# systemctl start corosync.service
[root@node5 ~]# systemctl start pacemaker.service[root@node6 ~]# systemctl start corosync.service
[root@node6 ~]# systemctl start pacemaker.service[root@node7 ~]# systemctl start corosync.service
[root@node7 ~]# systemctl start pacemaker.service
使用crm_mon
查看節點是否全部加了進來
可以看到三個節點已經全部加進了集群里面。
6.,在node5.redhat.com上面安裝crmsh
,完成資源配置。注意
:”CentOS 7以后默認不自帶crmsh,需要自己去網上下載,這里我使用的是在網上找到的crmsh-scripts-2.2.0-7.1.noarch.rpm
,crmsh-2.2.0-7.1.noarch.rpm
,python-parallax-1.0.1-10.1.noarch.rpm
。”
[root@node5 ~]# yum install crmsh-2.2.0-7.1.noarch.rpm crmsh-scripts-2.2.0-7.1.noarch.rpm python-parallax-1.0.1-10.1.noarch.rpm -y
[root@node5 ~]# crm configure
關閉stonith
crm(live)configure# property stonith-enabled=false配置VIP資源
crm(live)configure# primitive mysqlip ocf:heartbeat:IPaddr params ip=’172.16.100.100’ op start timeout=60s op stop timeout=60s op monitor interval=20s timeout=40s配置NFS資源
crm(live)configure# primitive mysqlstore ocf:heartbeat:Filesystem params device=’172.16.0.254:/data’ directory=’/data’ fstype=’nfs’ op start timeout=60s op stop timeout=60s op monitor interval=20s timeout=40s配置Mariadb資源,這里我們使用的是lsb腳本
crm(live)configure# primitive mysqlserver lsb:mysqld params op start timeout=60s op stop timeout=60s op monitor interval=20s timeout=40s將三個資源加入到同一組
crm(live)configure# group mysqlservice mysqlip mysqlstore mysqlserver設置排序約束
crm(live)configure# order mysqlip_before_mysqlstore Mandatory: mysqlip mysqlstore
crm(live)configure# order mysqlstore_before_mysqlserver Mandatory: mysqlstore mysqlserver檢測語法錯誤
crm(live)configure# verify檢測語法沒有報錯的話就可以提交配置了
crm(live)configure# commit
crm(live)configure# bye
這樣我們整個集群的資源就配置好了。
測試步驟
1.首先使用crm status
查看節點狀態
顯示沒有問題.
2.這里將NFS服務器當作測試節點,在節點上安裝mysql的客戶端并進行測試。
[root@centos6 ~]# yum install mysql -y
[root@centos6 ~]# mysql -h172.16.100.100 -uha -predhat
能夠正常訪問,并且我們在里面創建了一個mydb
庫。
3.現在我們將node5設置為standby狀態,測試資源是否能夠遷移成功
[root@node5 ~]# crm node standby node5.redhat.com
[root@node5 ~]# crm status
可以看到資源遷移成功。
4.再次進行測試。
[root@centos6 ~]# mysql -h172.16.100.100 -uha -predhat
還是訪問我們的VIP172.16.100.100
能夠正常訪問,并且成功的在之前創建的mydb
庫上又創建了一個測試表。
5.現在我們將node6也設置為standby狀態,測試資源是否還能夠遷移成功
[root@node5 ~]# crm node standby node6.redhat.com
[root@node5 ~]# crm status
可以看到資源被成功的遷移到了node7上。
現在我們將node5和node6全部設置回online狀態。
[root@node5 ~]# crm node online node5.redhat.com
[root@node5 ~]# crm node online node6.redhat.com
[root@node5 ~]# crm status
可以看到節點又成功的回來了,這樣就成功的實現了MariaDB的高可用。
菜鳥一枚,以上配置如有問題,歡迎指正。謝謝?。。?/p>
原創文章,作者:張小凡,如若轉載,請注明出處:http://www.www58058.com/14358