mysql5.7.25集群部署和方案設計(附PXC一鍵部署腳本)


腳本后續更新及迭代將由kkitDeploy項目代替
https://github.com/luckman666/kkitdeploy_server
請大家持續關注kkitDeploy

 

還記得我們之前部署mysql集群有多麻煩嘛?波哥來救你們啦!~

我已將項目上傳到了我的github倉庫中,大家可以點擊倉庫地址出現的連接登錄查看相應的代碼!如果覺得不錯別忘了轉發、點贊哦!

部署步驟:

1 git clone https://github.com/luckman666/deploy_mysql_cluster.git
2 cd deploy_mysql_cluster
3 # 編輯bash.config參數
4 chmod -R 755 .
5 ./deploy_mysql_master.sh

以上幾步就完成了一套多節點多主多從故障自動切換的mysql數據庫集群。
使用及注意事項:

如果集群出現某一節點出現故障:

1、集群會立刻將其剔除集群,停止同步。

2、(主節點故障)keepalived兩秒內會感知mysql故障,從集群中踢除本節點mysql,本節點降權並將VIP漂移至完好節點,整個集群繼續提供服務。

3、(從節點故障)keepalived直接關閉該節點服務,將該節點剔除集群。

故障修復后加入集群方式:

恢復節點上執行此命令(注意修改參數):

docker run -d -p 3306:3306 -p 4444:4444 -p 4567:4567 -p 4568:4568 -e MYSQL_ROOT_PASSWORD="mysqlroot密碼" -e CLUSTER_JOIN=主節點主機名(mysql1) -e CLUSTER_NAME=PXC -e XTRABACKUP_PASSWORD="mysqlroot密碼" -v /opt/mysql/data:/var/lib/mysql -v /opt/mysql/backup:/data -v /etc/localtime:/etc/localtime:ro -v /var/run/docker.sock:/var/run/docker.sock --privileged -e character-set-server=utf8mb4 -e collation-server=utf8mb4_unicode_ci --name="故障節點主機名" --net=swarm_mysql docker.io/percona/percona-xtradb-cluster

同步完成后啟動再keepalived

systemctl restart keepalived

檢查keepalived啟動狀態

systemctl status keepalived

通過工具或者查看容器日志查看mysql運行是否良好!

如果發現keepalived啟動后報127異常退出的錯誤

那么請升級系統內核至4+版本腳本內容如下:

 1 #!/bin/bash
 2 
 3 setupkernel(){
 4 
 5 rpm --import [https://www.elrepo.org/RPM-GPG-KEY-elrepo.org](https://www.elrepo.org/RPM-GPG-KEY-elrepo.org)
 6 
 7 rpm -Uvh [http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm](http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm)
 8 
 9 yum --enablerepo=elrepo-kernel install -y kernel-lt kernel-lt-devel
10 
11 grub2-set-default 0
12 
13 reboot
14 
15 }
16 
17 setupkernel

設計這套mysql的集群方案主要是面向我司的賬單系統。因為都是賬單數據,對於數據的丟失的容忍度為0。所以采用多節點強制同步的PXC集群方式。部署采用docker方式,網絡方案采用swarm的overlay網絡,冗余策略是keepalived

大家可能對pxc集群方案略有陌生這里簡單給大家介紹一下:

1、傳統的Repliaction 集群方案(1主多從)

2、PXC 集群方案( Percona XtraDB Cluster 多主多從)

方案場景對比:

 
Repliaction 集群同步方式概覽:
PXC 集群方案( Percona XtraDB Cluster )

可以看到PXC是數據強一致性的集群,事務在所有集群節點要么同時提交,要么不提交。而Replication 采用異步復制,無法保證數據的一致性。

因為項目數據庫是主要用來存儲賬單和錢款的,所以就采用了PXC的集群方式。

為什么用了swarm?

k8s確實強大但是只適合大規模集群,對於中小集群還是swarm最為合適。畢竟是docker親生的兒子。各種角度都集成的比較好。所以在確定了mysql的集群方式為PXC后就選用了swarm來實現分布式管理(以后會單拿出一篇文章來專門寫swarm)。

為什么是keepalived而不是haproxy?

因為是PXC方式,前端代碼又沒做讀寫分離,所以就采用了keepalived的方式來進行集群故障轉移和反向代理工作,這樣所有前端應用會使用集群中的其中一台mysql寫入或讀取數據。這樣避免雙向同步的損耗!

如果您的項目是讀寫分離的,那也可以用keepalived再綁定一個VIP然后放到另一個集群節點上提供讀服務即可!

PS:

還有容器數據備份及集群調優會陸續發布,希望大家持續關注簡書或者我的公眾號哦!我會繼續努力給大家提供技術干貨和開發各種IT實用工具。不過千里之行始於足下,慢慢來吧!加油!

關注公眾號永遠走不丟!還有更實用的工具等您拿!


免責聲明!

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



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