HA專題: 使用pacemaker+corosync實現MySQL高可用

HA專題: 使用pacemaker+corosync實現MySQL高可用

前言

上篇文章我們介紹了使用pacemkaer+corosync實現簡單的nginx高可用, 這篇文章我們介紹如何使用pacemaker+corosync實現MySQL高可用, 并且此次我們手動編輯配置文件來實現corosync的配置

實驗拓撲

Alt textblob.png

實驗環境

主機 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文件同步
Alt textblob.png

配置互信
Alt text

Alt textblob.png

blob.png

時間同步
blob.pngAlt text

安裝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

測試

Alt textblob.png

blob.png

Alt text

Alt textblob.png

blob.png

blob.png

Alt text

Alt text

總結

這樣我們就能實現一個MySQL HA集群了, 但是NFS是個單點故障. 如果NFS的數據掛了怎么辦? 很快我們就會寫drbd實現MySQL高可用了. 本系列文章主要側重于實驗. 對理論知識不做闡述, 還請多多諒解

作者水平很低, 如果有錯誤及時指出, 如果你覺得本文寫的好請點一波贊~(≧▽≦)/~
作者: AnyISaIln QQ: 1449472454
感謝: MageEdu

原創文章,作者:Net18-AnyISalIn,如若轉載,請注明出處:http://www.www58058.com/14645

(2)
Net18-AnyISalInNet18-AnyISalIn
上一篇 2016-04-11 11:52
下一篇 2016-04-11 15:29

相關推薦

  • N28-第三周

    1. 列出當前系統上所有已經登入的用戶的用戶名,注意:同一個用戶登入多次,則只顯示一次即可。
    2. 取出最後登入到當前系統的用戶的相關信息。
    3. 取出當前系統上被用戶當做其默認shell的最多的那個shell。
    4. 將/etc/passwd中的第三個字段數值最大的後10個用戶的信息全部改為大寫後保存至/tmp/maxusers.txt文件中。
    5. 取出當前主機的IP地址,提示:對ifconfig命令的結果進行切分。
    6. 列出/etc目錄下所有以.conf結尾的文件的文件名,並將其名字轉換為大寫後保存至/tmp/etc.conf文件中。
    7. 顯示/var目錄下一級子目錄或文件的總各數。
    8. 取出/etc/group文件中第三個字段數值最小的10個組的名字。
    9. 將/etc/fstab和/etc/issue文件的內容合併為同一個內容後保存至/tmp/etc.test文件中。
    10. 請總結描述用戶和組管理類命令的使用方法並完成以下練習:
    (1) 創建組distro,其GID為2016。
    (2) 創建用戶mandriva,其ID號為1005,基本組為distro。
    (3) 創建用戶mageia,其ID號為1100,家目錄為/home/linux。
    (4) 給用戶mageia添加密碼,密碼為mageedu。
    (5) 刪除mandriva,但保留其家目錄。
    (6) 創建用戶slackware,其ID號為2002,基本組為distro,附加組peguin。
    (7) 修改slackware的默認shell為/bin/tcsh。
    (8) 為用戶slackware新增附加組admins。

    2017-12-19
  • 磁盤管理

    1、拿到一塊硬盤,通常來講,第一步是分區,然后是文件系統的創建,管理文件系統,第三步是掛載設備。 2、linux(準確的說是UNIX)哲學,whindows一切皆窗口,一切皆圖形。 3、磁盤是一個硬件設備,存放在/dev/目錄下,會有相應的文件來對應的表示這些設備文件,在這個目錄下存放的全是設備。 4、在/dev目錄下和設備相關的有兩種,一種是c開頭為字符,…

    Linux干貨 2017-04-22
  • Linux文件系統:從inode理解軟鏈接與硬鏈接

    什么是inode? 在Linux磁盤存儲文件系統中,我們以塊劃分磁盤為兩部分:超級塊(superblock)和數據塊(data block);同時劃分單文件為用戶數據(user data)和元數據(meta data)兩個部分。 用戶數據記錄的是文件的真實內容。比如你的血液、骨骼和各器官等等。 元數據這是附加于文件的屬性信息。比如身高、體重、血型和年齡等等?!?/p>

    Linux干貨 2016-08-07
  • Linux系統基礎(二)

    一、Linux文件管理命令及其常用方法 1、cd(切換目錄)這個命令應該是Linux中用的最頻繁的一個命令之一了,因為我們經常需要進行目錄的切換。在詳解這個命令之前,首先得補充一個重要的知識,就是我們常用的一些比較特殊的目錄: .        代表當前目錄 .. &n…

    Linux干貨 2016-09-24
  • 軟件管理

    rpm:操作復雜、編譯時間長、極易出現問題、依賴關系復雜、管理方便、 保存依賴關系,需要手工解決。
    yum:自動解決依賴關系、可以對rpm進行分組,基于組進行安裝操作、引入倉庫概念,支持多個倉庫、配置簡單

    2018-03-21
  • 設計模式(二)單件模式Singleton(創建型)

      幾乎所有面向對象的程序中,總有一些類的對象需要是唯一的,例如,通過數據庫句柄到數據庫的連接是獨占的。您希望在應用程序中共享數據庫句柄,因為在保持連接打開或關閉時,它是一種開銷。再如大家最經常用的IM,如QQ,在同一臺電腦,一個帳號只能有唯一的登錄。 1. 問題 怎樣確保一個特殊類的實例是獨一無二的(它是這個類的唯一實例),并且這個實例…

    Linux干貨 2015-06-24

評論列表(2條)

  • Net18-天津-康康
    Net18-天津-康康 2016-04-11 13:48

    這些鏈接是怎么實現的,博客有這個功能么

欧美性久久久久