Corosync + Pacemaker 搭建高可用MariaDB服務

Corosync + Pacemaker 搭建高可用MariaDB服務


實驗描述

1.本實驗的目的是為了通過手動配置corosync配置文件,實現MariaDB服務的高可用,集群心跳傳遞使用組播方式。
2.三個節點的主機名分別為:node5.redhat.comnode6.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 Server

Copyright (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.confauthkey都復制到另外的節點上去。

[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.在所有節點啟動corosyncpacemaker服務。

[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查看節點是否全部加了進來

Alt text1.jpg

可以看到三個節點已經全部加進了集群里面。

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查看節點狀態

Alt text2.jpg

顯示沒有問題.

2.這里將NFS服務器當作測試節點,在節點上安裝mysql的客戶端并進行測試。

[root@centos6 ~]# yum install mysql -y
[root@centos6 ~]# mysql -h172.16.100.100 -uha -predhat

Alt text3.jpg

能夠正常訪問,并且我們在里面創建了一個mydb庫。

3.現在我們將node5設置為standby狀態,測試資源是否能夠遷移成功

[root@node5 ~]# crm node standby node5.redhat.com
[root@node5 ~]# crm status

Alt text4.jpg

可以看到資源遷移成功。

4.再次進行測試。

[root@centos6 ~]# mysql -h172.16.100.100 -uha -predhat

Alt text5.jpg

還是訪問我們的VIP172.16.100.100能夠正常訪問,并且成功的在之前創建的mydb庫上又創建了一個測試表。

5.現在我們將node6也設置為standby狀態,測試資源是否還能夠遷移成功

[root@node5 ~]# crm node standby node6.redhat.com
[root@node5 ~]# crm status

Alt text6.jpg

可以看到資源被成功的遷移到了node7上。
現在我們將node5和node6全部設置回online狀態。

[root@node5 ~]# crm node online node5.redhat.com
[root@node5 ~]# crm node online node6.redhat.com
[root@node5 ~]# crm status

Alt text7.jpg

可以看到節點又成功的回來了,這樣就成功的實現了MariaDB的高可用。

菜鳥一枚,以上配置如有問題,歡迎指正。謝謝?。。?/p>

原創文章,作者:張小凡,如若轉載,請注明出處:http://www.www58058.com/14358

(0)
張小凡張小凡
上一篇 2016-04-05
下一篇 2016-04-07

相關推薦

  • LAMP 基于httpd 2.4

    一 安裝前準備 說明 操作系統:CentOS 7 64位 Apache 版本:httpd-2.4.6-40.el7.centos.x86_64 httpd服務器ip:192.168.1.4   1.  配置好IP、DNS 、網關,確保使用遠程連接工具能夠連接服務器 2.     &nbsp…

    Linux干貨 2016-04-05
  • Linux系統常用命令介紹

    [root@alibaba ~]# ifconfig?#查看或者配置網絡適配器的接口信息 eth0????? Link encap:Ethernet? HWaddr 00:16:3E:0A:7B:2A inet addr:172.18.10.115? Bcast:172.18.15.255? Mask:255.255.240.0 [root@alibaba …

    Linux干貨 2018-03-04
  • 初識linux

    Linux 是什么?2014年之前我都沒有聽說過linux。 簡單來說,Linux是一種操作系統,我們知道Windows吧,Linux也是一種操作系統。 特性: (1)字符界面(當然現在也有圖形界面了) (2)一切皆文件 (3)許多小工具程序組合 Linux脫胎于Unix,Unix是由貝爾實驗開發的。符合posix 標準,Unix系統上面的應用程序大部分可以…

    Linux干貨 2016-06-01
  • N28-第二周

    1. Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。
    2. bash的工作特性之命令執行狀態返回值和命令行展開所涉及的內容及其示例演示。
    3. 請使用命令行展開功能來完成以下練習:
    (1) 創建/tmp目錄下的a_c、a_d、b_c、b_d。
    (2) 創建/tmp/mylinux目錄下的bin、boot/grub、dev、etc/rc.d/init.d、etc/sysconfig/network-scripts、lib/modules、
    lib64、proc、sbin、sys、tmp、usr/local/bin、usr/local/sbin、var/lock、var/log、var/run目錄。
    4. 如何查看文件的元數據,其信息有哪些,分別表示什麼含意?如何修改文件的時間戳信息?
    5. 如何定義一個命令的別名?如何在命令中引用另一個命令的執行結果?
    6. 顯示/var目錄下所有以L小寫開頭,以一個小寫字母結尾,且中間至少出現一位數字(可以有其它字符)的文件或目錄。
    7. 顯示/etc目錄下,以任意一個數字開頭,且以非數字結尾的文件或目錄。
    8. 顯示/etc目錄下,以非字母開頭,後面跟了一個字母以及其他任意長度任意字符的文件或目錄。
    9. 在/tmp目錄下創建以tfile開頭,後跟當前日期和時間的文件,文件名形如:tfile-2016-05-27-09-32-22。
    10. 複製/etc目錄下所有以p開頭,以非數字結尾的文件或目錄到/tmp/mytest1目錄中。
    11. 複製/etc目錄下所有以.d結尾的文件或目錄至/tmp/mytest2目錄中。
    12. 複製/etc目錄下所有以L小寫或m或n開頭,以.conf結尾的文件至/tmp/mytest3目錄中。

    Linux干貨 2017-12-14
  • 搭建個人博客&論壇(LAMP):wordpress、discuz、phpMyAdmin

    搭建個人博客&論壇(LAMP):wordpress、discuz、phpMyAdmin 一、快速部署LAMP架構平臺 1.CentOS 6系統部署 所需安裝包:httpd, php, mysql-server, php-mysql ]# yum install -y  httpd php&n…

    Linux干貨 2016-10-17
  • MySQL/MariaDB數據庫基于SSL實現主從復制

    前言 備份數據庫是生產環境中的首要任務,重中之重,有時候不得不通過網絡進行數據庫的復制,由于MySQL/MariaDB的主從復制是明文傳送的,如果在生產環境中跨網絡傳送,數據的安全性就無法完全保證,為了解決這一問題,我們需要一種安全的方式進行傳送,即基于SSL加密進行數據傳輸。 部署配置 實驗拓撲 實驗環境 系統環境:CentOS6.6 數據庫版本:mari…

    Linux干貨 2015-06-21
欧美性久久久久