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、…
轉載 請說明出處。贊助作者:

