shell腳本安裝MySql InnoDB Cluster集群(centos7+mysql5.7)


shell腳本安裝MySql InnoDB Cluster集群

 

       MySQL InnoDB Cluster 是最新GA的MySQL高可用方案,利用MySQL Group Replication和MySQL Shell、MySQL Router可以輕松搭建強壯的高可用方案。

       MySQL Shell 是新的mysql 客戶端工具支持x protocol和mysql protocol,具備JavaScript和python可編程能力,作為搭建InnoDB Cluster管理工具。

       MySQL Router 是訪問路由轉發中間件,提供應用程序訪問的failover能力。

       MySQL Group Replication 是最新GA的同步復制方式,具有以下特點:

 

    •   支持單主和多主模式
    •   基於Paxos算法,實現數據復制的一致性
    •   插件化設計,支持插件檢測,新增節點小於集群當前節點主版本號,拒絕加入集群,大於則加入,但無法作為主節點
    •   沒有第三方組件依賴
    •   支持全鏈路SSL通訊
    •   支持IP白名單
    •   不依賴網絡多播

 


 

mysql的集群架構有很多種。官方提供了shell腳本安裝。所以接下來就通過腳本進行安裝。

一、環境准備

1、資源列表

Centos7(CentOS-7-x86_64-Everything-1708.iso)

Mysql5.7.21(mysql-5.7.21-1.el7.x86_64.rpm-bundle.tar)

Mysqlshell8.0.12(mysql-shell-8.0.12-1.el7.x86_64.rpm)

Mysqlrouter8.0.12(mysql-router-8.0.12-1.el7.x86_64.rpm)

下載地址:https://dev.mysql.com/downloads/

https://download.csdn.net/download/qq540061627/10606115

准備環境

centos7物理機或者虛擬機三台(python版本要在2.7以上)

192.168.111.131

192.168.111.132

192.168.111.133

由於mysql集群連接是通過本機的hostname進行連接所以要對集群內的節點進行映射

vi /etc/hosts

192.168.111.131  vm001

192.168.111.132  vm002

192.168.111.133  vm003

分別設置hostname

hostnamectl set-homename vm001

hostnamectl set-homename vm002

hostnamectl set-homename vm003

另:需要設置下 131到132、133的免密登陸

在192.168.111.131機器執行如下命令

ssh-keygen -t rsa

ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.111.132

ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.111.133

2、其它依賴

純凈的centos7環境,需要安裝perl。

使用iso文件作為yum源

先創建一個目錄作為掛載點

mkdir /media/CentOS

使用ios文件,需要把iso文件先上傳

mount -o loop /root/CentOS.iso /media/CentOS

使用光驅

mount /dev/cdrom /media/CentOS

到/etc/yum.repos.d目錄下

修改CentOS-Media.repo文件

把gpgcheck改為0,enabled改為1

然后運行

yum clean all

這樣就可以離線安裝iso文件里包含的軟件包了

二、安裝MySql集群

1、卸載mariadb和清空Mysql安裝文件(重復安裝時)

首先卸載 相關mysql

rpm -qa | grep mysql

rpm -qa | grep -i mysql | xargs rpm -e --nodeps

刪除mariadb數據庫

rpm -qa | grep mariadb

rpm -e mariadb-libs-5.5.52-1.el7.x86_64 --nodeps

刪除mysql相應目錄(遇到問題時,可使用此恢復到初始狀態)

find / -name mysql

rm -rf /var/lib/mysql

rm -rf /usr/share/mysql

2、關閉防火牆和selinux

systemctl status firewalld

systemctl stop firewalld

systemctl disable firewalld

關閉 selinux

使用getenforce命令查看狀態

修改文件

vi /etc/selinux/config

設置

SELINUX=disabled

需要重啟

3、安裝mysql-server

1)       安裝rpm

如:把所需rpm放入home目錄下

cd /home

yum install *.rpm

mysql-community-client-5.7.21-1.el7.x86_64.rpm

mysql-community-common-5.7.21-1.el7.x86_64.rpm

mysql-community-libs-5.7.21-1.el7.x86_64.rpm

mysql-community-server-5.7.21-1.el7.x86_64.rpm

2)       安裝完畢后,配置mysql

  • 找出密碼:

grep 'temporary password' /var/log/mysqld.log

mysql -uroot -p

輸入 上面 查找出的密碼

  • 執行mysql查詢出現錯誤如下:

mysql> use mysql;

ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

  • 首次使用需要修改密碼:

alter user 'root'@'localhost' identified by 'Mlamp123_';

  • 添加遠程訪問

grant all privileges on *.* to root@'%' identified by 'Mlamp123_' with grant option;

flush privileges;

至此,可以通過mysql命令行或者工具遠程訪問數據庫啦。


 

4、安裝Mysql-shell

同樣把mysql-shell-8.0.12-1.el7.x86_64.rpm放入/home目錄下

yum install mysql-shell-8.0.12-1.el7.x86_64.rpm

5、利用mysql-shell配置集群

1)     每台機器分別執行(dba.configureLocalInstance()):

mysqlsh --uri root@vm001:3306

dba.configureLocalInstance()

y

y

dba.checkInstanceConfiguration('root@vm001:3306')

ctrl + z退出,然后 systemctl restart mysqld

如圖:

 

2)     再次 檢查一遍 三台服務器是否准備就緒

mysqlsh (只在131服務器執行檢查即可)

dba.checkInstanceConfiguration('root@vm001:3306')

dba.checkInstanceConfiguration('root@vm002:3306')

dba.checkInstanceConfiguration('root@vm003:3306')

 

3)     創建cluster

//只需要在一台機器上執行

var cluster = dba.createCluster('mlampCluster')

//添加另外兩台機器

cluster.addInstance('root@vm002:3306')

cluster.addInstance('root@vm003:3306')

查看狀態 為ONLINE 說明集群安裝成功

cluster.status()

6、安裝Mysql-router

同樣把mysql-router-8.0.12-1.el7.x86_64.rpm放入/home目錄下

yum install mysql-router-8.0.12-1.el7.x86_64.rpm

mysqlrouter --bootstrap root@vm001:3306 --user=mysqlrouter

 

vi /etc/mysqlrouter/mysqlrouter.conf

 

設置連接數

[routing:mlampCluster_default_rw]

max_connections=1024

 

重啟 router

systemctl restart mysqlrouter

7、…

三、問題匯總

1、集群所有節點發生重啟

當集群的所有節點都offline,直接獲取集群信息失敗,如何重新恢復集群

mysql-js> var cluster=dba.getCluster('mycluster')

Dba.getCluster: This function is not available through a session to a standalone instance (RuntimeError)

執行rebootClusterFromCompleteOutage命令,可恢復集群

mysql-js> dba.rebootClusterFromCompleteOutage('mlampCluster') 

單節點 重啟

cluster.rejoinInstance('root@vm003:3306')

2、狀態屬性

  • 節點狀態
    ONLINE  - 節點狀態正常。
    OFFLINE  -   實例在運行,但沒有加入任何Cluster。
    RECOVERING - 實例已加入Cluster,正在同步數據。
    ERROR  -  同步數據發生異常。
    UNREACHABLE -  與其他節點通訊中斷,可能是網絡問題,可能是節點crash。
    MISSING 節點已加入集群,但未啟動group replication
  • 集群狀態
    OK – 所有節點處於online狀態,有冗余節點。
    OK_PARTIAL – 有節點不可用,但仍有冗余節點。
    OK_NO_TOLERANCE – 有足夠的online節點,但沒有冗余,例如:兩個節點的Cluster,其中一個掛了,集群就不可用了。
    NO_QUORUM – 有節點處於online狀態,但達不到法定節點數,此狀態下Cluster無法寫入,只能讀取。
    UNKNOWN – 不是online或recovering狀態,嘗試連接其他實例查看狀態。
    UNAVAILABLE – 組內節點全是offline狀態,但實例在運行,可能實例剛重啟還沒加入Cluster。

3、…

 轉載 請說明出處。贊助作者:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM