corosync + pacemaker搭建高可用mysql

一、實驗圖

   1.png

二、環境準備

 1)確保時間同步

[root@SQL1 ~]# crontab -e 
*/5 * * * * /usr/sbin/ntpdate 172.16.2.15
[root@SQL2 ~]# crontab -e 
*/5 * * * * /usr/sbin/ntpdate 172.16.2.15

 2)確保可以基于主機名通信

[root@SQL1 ~]# vim /etc/hosts
172.16.2.12 SQL1.linux.com SQL1
172.16.2.14 SQL2.iinux.com SQL2
[root@SQL2 ~]# vim /etc/hosts
172.16.2.12 SQL1.linux.com SQL1
172.16.2.14 SQL2.iinux.com SQL2

 3)確??梢曰趕sh秘鑰通信

[root@SQL1 ~]# ssh-keygen -P ''
[root@SQL1 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@172.16.2.14
root@172.16.2.14's password:
[root@SQL2 ~]# ssh-keygen -P ''
[root@SQL2 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@172.16.2.12
root@172.16.2.12's password:

 4)測試

[root@SQL1 ~]# date; ssh SQL2 'date'
Tue Jun 30 11:12:37 CST 2015
Tue Jun 30 11:12:37 CST 2015
[root@SQL2 ~]# date; ssh SQL1 'date'
Tue Jun 30 11:14:01 CST 2015
Tue Jun 30 11:14:01 CST 2015

三、安裝配置corosync;pacemaker

 安裝corosync

[root@SQL1 ~]# yum -y install corosync
[root@SQL2 ~]# yum -y install corosync

 安裝pacemaker

[root@SQL1 ~]# yum -y install pacemaker
[root@SQL2 ~]# yum -y install pacemaker

 配置corosync

[root@SQL1 ~]# cd /etc/corosync   \\切換到corosync的配置文件目錄
[root@SQL1 corosync]# cp corosync.conf.example corosync.conf  \\提供corosync的配置文件
[root@SQL1 corosync]# vim corosync.conf
   compatibility: whitetank   \\兼容舊版本的corosync
   totem {   \\用來設置監聽集群之間心跳信息傳遞機制
        version: 2     \\corosync的版本,默認即可
        secauth: on     \\啟用安全秘鑰機制
        threads: 0      \\啟動多少個線程傳遞心跳信息
        interface {   
                ringnumber: 0   \\循環次數   
                bindnetaddr: 172.16.2.0  \\綁定的網絡地址,是一個網絡地址不是具體的ip地址  
                mcastaddr: 239.225.100.10   \\定義組播地址          
                mcastport: 5405         \\定義監聽端口號
                ttl: 1    \\ 信息傳遞只允許在當前網絡中傳輸
         }
    }
     logging {
         fileline: off     \\默認即可
         to_stderr: no    \\是否將錯誤輸出到終端,no為禁止輸出到終端,保持默認即可
         to_logfile: yes  \\記錄為日志文件
         logfile: /var/log/cluster/corosync.log \\記錄日志文件路徑
         #to_syslog: yes\\是否啟用rsyslog日志,這里已經啟用corosync自己記錄日志功能,所有這里注釋掉,不使用
         debug: off   \\debug日志;只有在調試的時候開啟
         timestamp: on  \\記錄日志的時間戳,會有IO操作,根據實際情況開啟
         logger_subsys {
           subsys: AMF  \\默認即可
           debug: off   \\默認即可
         }
      }
           service {   \\定義pacemaker以corosync的插件方式運行
                 ver: 0   \\版本;定義pacemaker的版本
                 name: pacemaker \\定義名稱
           } 
           aisexec {   \\定義運行的用戶和用戶組
               user: root
               group: root
            }

 生成秘鑰

[root@SQL1 corosync]# corosync-keygen   \\這里需要輸入隨機數,用于秘鑰生成

 復制相同的配置文件與秘鑰給SQL2服務器

[root@SQL1 corosync]# scp -p authkey corosync.conf SQL2:/etc/corosync

 啟動corosync

[root@SQL1 corosync]# service corosync start
[root@SQL2 ~]# service corosync start

 查看日志,確保corosync,pacemaker正常啟動

[root@SQL1 ~]# grep -e "Corosync Cluster Engine" -e  "configration file" /var/log/cluster/corosync.log 
Jun 30 11:15:20 corosync [MAIN  ] Corosync Cluster Engine ('1.4.7'): started and ready to provide service.
Jun 30 11:18:32 corosync [MAIN  ] Corosync Cluster Engine exiting with status 0 at main.c:2055.
Jun 30 11:18:50 corosync [MAIN  ] Corosync Cluster Engine ('1.4.7'): started and ready to provide service.
[root@SQL1 ~]# grep pcmk_startup  /var/log/cluster/corosync.log 
Jun 30 11:15:20 corosync [pcmk  ] info: pcmk_startup: CRM: Initialized
Jun 30 11:15:20 corosync [pcmk  ] Logging: Initialized pcmk_startup
Jun 30 11:15:20 corosync [pcmk  ] info: pcmk_startup: Maximum core file size is: 18446744073709551615
Jun 30 11:15:20 corosync [pcmk  ] info: pcmk_startup: Service: 9
Jun 30 11:15:20 corosync [pcmk  ] info: pcmk_startup: Local hostname: SQL1.linux.com
[root@SQL1 ~]# grep TOTEM /var/log/cluster/corosync.log
Jun 30 11:15:20 corosync [TOTEM ] Initializing transport (UDP/IP Multicast).
Jun 30 11:15:20 corosync [TOTEM ] Initializing transmit/receive security: libtomcrypt SOBER128/SHA1HMAC (mode 0).
Jun 30 11:15:20 corosync [TOTEM ] The network interface [172.16.2.12] is now up.
Jun 30 11:15:20 corosync [TOTEM ] A processor joined or left the membership and a new membership was formed.
Jun 30 11:15:30 corosync [TOTEM ] A processor joined or left the membership and a new membership was formed.
[root@SQL1 ~]# grep ERROR: /var/log/cluster/corosync.log | grep -v unpack_resources  
Jun 30 11:15:20 corosync [pcmk  ] ERROR: process_ais_conf: You have configured a cluster using the Pacemaker plugin for Corosync. The plugin is not supported in this environment and will be removed very soon.

四、配置高可用mysql

  配置nfs

[root@nfs ~]# groupadd -g 350 mysql \\由于nfs限制,需要在nfs服務器上創建mysql用戶和mysql組
[root@nfs ~]# useradd -u 350 -g 350 mysql
[root@nfs ~]# vim /etc/exports
/mydata   172.16.2.0/24(rw,no_root_squash)
[root@nfs ~]# mkdir -pv  /mydata/data
[root@nfs ~]# chown -R mysql.mysql /mydata/data
[root@nfs ~]# service nfs start 
 
 掛載測試:
[root@SQL1 ~]# mount -t nfs 172.16.2.13:/mydata /mnt
[root@SQL1 ~]# ls /mnt
data
[root@SQL1 ~]# umount /mnt

[root@SQL2 ~]# mount -t nfs 172.16.2.13:/mydata /mnt
[root@SQL2 ~]# ls /mnt
data
[root@SQL2 ~]# umount /mnt

 配置mariadb

[root@SQL1 ~]# tar xf mariadb-5.5.36-linux-x86_64.tar.gz  -C /usr/local/
[root@SQL1 ~]# cd /usr/local/
[root@SQL1 local]# ln -sv mariadb-5.5.36-linux-x86_64/ mysql
[root@SQL1 local]# groupadd  -g 350 mysql \\mysql的UID和GID要與NFS服務器上的mysql的UID和GID相同
[root@SQL1 local]# useradd -u 350  -g 350 mysql
[root@SQL1 local]# cd mysql/
[root@SQL1 mysql]# mkdir /mydata
[root@SQL1 mysql]# mount -t nfs 172.16.2.13:/mydata/  /mydata/
[root@SQL1 mysql]# chown -R  root.mysql ./
[root@SQL1 mysql]# scripts/mysql_install_db --user=mysql --datadir=/mydata/data/
[root@SQL1 mysql]# mkdir /etc/mysql
[root@SQL1 mysql]# cp support-files/my-large.cnf /etc/mysql/my.cnf
    datadir=/mydata/data
    innodb_file_per_table = on
    skip_name_resolve = on
[root@SQL1 mysql]# cp support-files/mysql.server /etc/init.d/mysqld
[root@SQL1 mysql]# chkconfig  --add /etc/init.d/mysqld
[root@SQL1 mysql]# service mysqld start
Starting MySQL..... SUCCESS! 
[root@SQL1 ~]# mysql
mysql> CREATE DATABASE hamysql;
mysql> CREATE DATABASE hamysql;
mysql> CREATE TABLE  hatest(id INT);
mysql> GRANT ALL ON hamysql.* TO "hamysql"@"172.16.2.%"  IDENTIFIED BY  "hamysql";
mysql> FLUSH PRIVILEGES;
[root@SQL1 ~]# service mysqld stop
Shutting down MySQL. SUCCESS!
[root@SQL2 ~]# tar xf mariadb-5.5.36-linux-x86_64.tar.gz -C  /usr/local
[root@SQL2 ~]# groupadd  -g 350 mysql 
[root@SQL2 ~]# useradd -u 350 -g 350 mysql
[root@SQL2 ~]# mkdir /mydata
[root@SQL2 ~]# mount -t nfs 172.16.2.13:/mydata/  /mydata/
[root@SQL2 ~]# cd /usr/local/
[root@SQL2 local]# ln -sv mariadb-5.5.36-linux-x86_64/ mysql
[root@SQL2 local]# cd mysql/
[root@SQL2 mysql]# mkdir /etc/mysql
[root@SQL2 mysql]# cp  support-files/my-large.cnf /etc/mysql/my.cnf
[root@SQL2 mysql]# vim /etc/mysql/my.cnf
    datadir = /mydata/data
    innodb_file_per_table = on
    skip_name_resolve = on
[root@SQL2 mysql]# cp support-files/mysql.server /etc/init.d/mysqld
[root@SQL2 mysql]# chkconfig --add /etc/init.d/mysqld
[root@SQL2 mysql]# chown -R  root.mysql ./
[root@SQL2 mysql]# service mysqld start
Starting MySQL..... SUCCESS!
[root@SQL2 mysql]# mysql -h 172.16.2.14 -u hamysql -p
mysql> SHOW DATABASES;
+--------------------+
| Database     |
+--------------------+
| information_schema|
| hamysql      |
| test       |
+--------------------+
[root@SQL2 mysql]# service mysqld stop
[root@SQL2 mysql]# umount /mydata/

 安裝crmsh(配置yum源:http://download.opensuse.org/repositories/network:/ha-clustering:/Stable/CentOS_CentOS-6/)

[root@SQL1 ~]# vim /etc/yum.repos.d/crmsh.repo
[suse_crmsh]
name=crmsh
baseurl=http://download.opensuse.org/repositories/network:/ha-clustering:/Stable/CentOS_CentOS-6/
enabled=1
gpgcheck=0

[root@SQL1 ~]# yum -y install crmsh

 修改全局屬性:

[root@SQL1 ~]# crm 
crm(live)# configure
crm(live)configure# property stonith-enabled=false
crm(live)configure# verify
crm(live)configure# commit
crm(live)configure# property no-quorum-policy=ignore
crm(live)configure# verify
crm(live)configure# commit
crm(live)configure# property default-resource-stickiness=200
crm(live)configure# verify
crm(live)configure# commit

 配置VIP資源:

crm(live)configure# primitive hamysql_vip ocf:heartbeat:IPaddr params ip="172.16.2.10" nic="eth0" cidr_netmask="24" broadcast="172.16.2.255" op monitor timeout=20s interval=10s 
crm(live)configure# verify
crm(live)configure# commit

 配置nfs資源:

crm(live)configure# primitive hamysql_fs  ocf:heartbeat:Filesystem params device="172.16.2.13:/mydata" 
directory="/mydata" fstype="nfs" op monitor timeout=40s interval=20s op start timeout=60s op stop timeout=60s
crm(live)configure# verify
crm(live)configure# commit

 配置mysql資源:

crm(live)configure# primitive hamysql_mysql lsb:mysqld op monitor timeout=15s interval=15s
crm(live)configure# verify
crm(live)configure# commit

 定義order限制:

crm(live)configure# order hamysql_fs_after_hamysql_vip inf: hamysql_vip hamysql_fs
crm(live)configure# verify
crm(live)configure# commit
crm(live)configure# order hamysql_mysql_after_hamysql_fs inf: hamysql_fs hamysql_mysql
crm(live)configure# verify
crm(live)configure# commit

 定義組資源:

crm(live)configure# group hasql hamysql_vip hamysql_fs hamysql_mysql
INFO: resource references in order:hamysql_fs_after_hamysql_vip updated
INFO: resource references in order:hamysql_fs_after_hamysql_vip updated
INFO: resource references in order:hamysql_mysql_after_hamysql_fs updated
INFO: resource references in order:hamysql_mysql_after_hamysql_fs updated
crm(live)configure# verify
crm(live)configure# commit

查看mysql運行狀態:

crm(live)# status
Last updated: Tue Jun 30 14:17:47 2015
Last change: Tue Jun 30 14:17:42 2015
Stack: classic openais (with plugin)
Current DC: SQL1.linux.com - partition with quorum
Version: 1.1.11-97629de
2 Nodes configured, 2 expected votes
3 Resources configured


Online: [ SQL1.linux.com SQL2.linux.com ]

 Resource Group: hasql
     hamysql_vip	(ocf::heartbeat:IPaddr):	Started SQL1.linux.com 
     hamysql_fs	(ocf::heartbeat:Filesystem):	Started SQL1.linux.com 
     hamysql_mysql	(lsb:mysqld):	Started SQL1.linux.com

測試:

[root@SQL2 ~]# mysql -h 172.16.2.10 -uhamysql -p
mysql> SHOW DATABASES;
+--------------------+
| Database     |
+--------------------+
| information_schema|
| hamysql      |
| test       |
+--------------------+

由于字數限制,好了就寫到這里吧…..

原創文章,作者:馬行空,如若轉載,請注明出處:http://www.www58058.com/5802

(0)
馬行空馬行空
上一篇 2015-06-30
下一篇 2015-06-30

相關推薦

  • bash的特性總結

    什么是bash:       shell作為用戶與計算機內核交互的接口,是用戶與計算機溝通的橋梁,而bash(borne again shell)是眾多shell里面最為流行一種,bash作為眾多shell里面的一種有著眾多的特性,掌握bash的眾多特性將會是我們今后學習linux必經之路。&nbs…

    Linux干貨 2015-10-27
  • Linux之計劃任務

    Linux 之計劃任務    任務計劃Linux任務計劃、周期性任務執行未來的某時間點執行一次任務:atbatch:系統自行選擇空閑時間去執行此處指定的任務周期性運行某任務:cron   at任務at命令:at [option] TIME常用選項:-V 顯示版本信息:-l: 列出指定隊列中等待運行的作業;相當于atq-d: 刪除…

    Linux干貨 2016-09-11
  • oracle6.7使用udev作為asm

    1、需求 oracle6.7使用udev作為asm /dev/sdb <–> /dev/asm-diskb /dev/sdc <–> /dev/asm-diskc /dev/sdd <–> /dev/asm-diskd /dev/sde <–> /dev/asm-…

    Linux干貨 2016-07-29
  • 說說linux權限管理(1)

    在這篇文章當中你可以看到: 1、linux系統文件普通權限 2、文件所屬主的設置,組的指定 3、特殊權限 4、acl權限 5、su命令及其注意事項和sudo權限 6、權限管理的注意點 0、首先,在linux下用戶賬戶是分角色的,由于角色的不同,每個角色,每個用戶的的權限和所能完成的任務也不同。而在實際管理中,用戶的角色是通過UID(用戶id號)來標識的,每個…

    Linux干貨 2016-04-30
  • 馬哥教育網絡班21期-第1周課程練習

    1、  描述計算機的組成及其功能。 計算機由硬件系統和軟件系統兩部分組成。硬件系統由運算器,控制器,存儲器,輸入設備和輸出設備組成.     運算器:計算機中進行算術運算和邏輯運算的部件。     控制器:計算機的控制中心。協調和指揮計算機系統的操作。  &n…

    Linux干貨 2016-07-12
  • inotify介紹及rsync + inotify 實時同步備份

    1、前言 rsync (remote sync)是一款非常好的數據同步工具,能夠通過對比同步雙方的數據變動,實現增量同步,還可以通過LAN/WAN實現遠程多臺主機間文件的同步,還能結合crond任務計劃來執行自動備份,又可以結合ssh實現遠程數據備份的安全,種種特性使他看起來相當優秀。但如果需備份數據十分龐大時,它的不足之處就顯現出來了,比如每次執…

    Linux干貨 2016-06-15
欧美性久久久久