Docker實戰:從零構建高可用的MySQL主從集群與Redis集群

在分布式系統架構中,數據庫集群是保障數據高可用和性能的關鍵組件。本文將通過Docker技術,手把手教你搭建MySQL主從集群和Redis Cluster,并分享獨創的優化技巧與運維實戰經驗。

一、為什么選擇Docker部署集群?

傳統數據庫集群搭建存在環境依賴復雜、配置繁瑣、跨平臺兼容性差等問題。使用Docker可帶來三大核心優勢:

  1. 環境標準化:通過Dockerfile固化鏡像,徹底消除"在我機器能跑"的魔咒
  2. 快速部署:單節點部署從小時級壓縮到分鐘級,集群擴展只需修改Compose文件
  3. 資源隔離:容器化實現進程級隔離,避免多實例間的端口沖突

二、MySQL主從集群實戰(GTID+半同步模式)

2.1 集群架構設計

采用一主兩從架構,結合GTID全局事務標識和半同步復制,確保數據零丟失:

Master (可寫可讀)│├──→ Slave1 (只讀)└──→ Slave2 (只讀)

2.2 Dockerfile優化技巧

# mysql/Dockerfile
FROM mysql:8.0.30
COPY my.cnf /etc/mysql/conf.d/
RUN chmod 644 /etc/mysql/conf.d/my.cnf
# 預置初始化腳本
COPY init_db.sql /docker-entrypoint-initdb.d/

2.3 核心配置解析(my.cnf)

[mysqld]
server-id=1                   # 節點唯一標識
gtid_mode=ON                  # 啟用GTID
enforce_gtid_consistency=ON
rpl_semi_sync_master_enabled=1 # 半同步復制
log-bin=mysql-bin             # 二進制日志
binlog_format=ROW             # 行級復制

2.4 自動初始化腳本(init_db.sql)

-- 創建復制用戶
CREATE USER 'repl'@'%' IDENTIFIED WITH mysql_native_password BY 'Repl@123';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';-- 設置讀寫分離賬號
CREATE USER 'app_user'@'%' IDENTIFIED WITH mysql_native_password BY 'App@123';
GRANT SELECT, INSERT, UPDATE ON app_db.* TO 'app_user'@'%';

2.5 Docker Compose編排

version: '3.8'
services:mysql-master:build: ./mysqlports: ["3306:3306"]environment:MYSQL_ROOT_PASSWORD: Root@123MYSQL_DATABASE: app_dbvolumes:- mysql_master_data:/var/lib/mysqlmysql-slave1:build: ./mysqlports: ["3307:3306"]environment:MYSQL_ROOT_PASSWORD: Root@123volumes:- mysql_slave1_data:/var/lib/mysqldepends_on:- mysql-mastervolumes:mysql_master_data:mysql_slave1_data:

三、Redis Cluster智能部署方案

3.1 六節點集群拓撲

采用三主三從模式,通過哈希槽分配實現數據自動分片:

Master1 (5461) — Slave1 (6379)
Master2 (5462) — Slave2 (6380)
Master3 (5463) — Slave3 (6381)

3.2 自動故障轉移配置

cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-require-full-coverage no # 允許部分節點故障
appendonly yes                   # AOF持久化

3.3 獨創的集群初始化腳本

#!/bin/bash
# 自動檢測并修復集群狀態
redis-cli --cluster check 127.0.0.1:6379
if [ $? -ne 0 ]; thenecho "正在嘗試自動修復集群..."redis-cli --cluster fix 127.0.0.1:6379 --user mypass
fi

3.4 性能監控儀表盤

使用Prometheus+Granfana構建監控體系,關鍵指標包括:

  • 集群節點存活狀態
  • 內存碎片率
  • 命令處理延遲
  • 網絡吞吐量

四、運維黑科技

4.1 MySQL在線DDL神器

-- 使用pt-online-schema-change實現無鎖表結構變更
pt-online-schema-change --alter "ADD COLUMN new_col INT" D=app_db,t=users \
--user=root --password=Root@123 --execute

4.2 Redis內存優化策略

  1. 設置內存軟限制maxmemory 8gb + maxmemory-policy allkeys-lru
  2. 啟用內存碎片整理CONFIG SET activedefrag yes
  3. 監控大Key:使用redis-cli --bigkeys掃描異常數據

4.3 自動化備份方案

# 每天凌晨3點執行全量備份
0 3 * * * docker exec mysql-master mysqldump -u root -pRoot@123 app_db | gzip > /backups/mysql_$(date +\%Y\%m\%d).sql.gz# 每小時增量備份binlog
0 * * * * rsync -avz /var/lib/docker/volumes/mysql_master_data/_data/mysql-bin.* /binlog_backups/

五、性能對比與成本分析

方案部署時間故障恢復資源消耗擴展性
傳統物理機8小時30分鐘
虛擬機+手動配置4小時15分鐘一般
Docker容器化方案15分鐘2分鐘極優

六、進階玩法

  1. 混合云部署:結合Docker Swarm實現跨AZ容災
  2. 智能路由:使用ProxySQL實現MySQL讀寫分離+查詢緩存
  3. Redis模塊擴展:集成RedisTimeseries實現時間序列數據存儲
  4. 混沌工程:使用ChaosBlade模擬節點故障驗證集群健壯性

結語

通過Docker容器化技術,我們實現了數據庫集群的快速部署與智能運維。這種方案不僅降低了運維復雜度,更通過GTID、半同步復制等機制保障了數據一致性。后續可結合Kubernetes實現真正的云原生數據庫即服務(DBaaS),讓數據庫管理像使用水電一樣簡單。

立即實踐:復制文中代碼到你的服務器,15分鐘即可擁有生產級數據庫集群!遇到問題歡迎在評論區交流,點贊關注獲取更多運維干貨!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/76819.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/76819.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/76819.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

STM32電機庫 電機控制特性

ST MC FW庫提供FOC和六步法兩種電機控制方式。這使得它能夠驅動永磁同步電機 (PMSM) 和無刷直流電機 (BLDC)。FOC 更適合 PMSM,而六步法更適合 BLDC 電機。該固件可以驅動內嵌式PMSM 和標貼式PMSM。 ST Motor Control 固件庫提供以下功能: FOC SVPWM 生成: 可配置的 PW…

Go:方法

方法聲明 type point struct { X, Y float64 }// 普通函數 func Distance(p, q Point) float64 {return math.Hypot(q.x - p.x, q.y - p.Y) }// Point類型的方法 func (p Point) Distance(q Point) float64 {return math.Hypot(q.x - p.x, q.y - p.Y) }方法聲明與普通函數聲…

前端基礎之《Vue(4)—響應式原理》

一、什么是響應式 1、響應式英文reactive 當你get/set一個變量時&#xff0c;你有辦法可以“捕獲到”這種行為。 2、一個普通對象和一個響應式對象對比 &#xff08;1&#xff09;普通對象 <script>// 這種普通對象不具備響應式var obj1 {a: 1,b: 2} </script>…

【技術派部署篇】Windows本地部署技術派

一、技術派簡介 技術派是一個采用 Spring Boot、MyBatis-Plus、MySQL、Redis、ElasticSearch、MongoDB、Docker、RabbitMQ 等技術棧的社區系統&#xff0c;其 1.0 版已正式上線。該項目的技術棧按階段集成引入&#xff0c;開發者可根據自身需求選擇不同版本進行學習。 二、環…

DeepSeek和ChatGPT的全面對比

DeepSeek和ChatGPT作為當前領先的大語言模型&#xff0c;代表了AI發展的不同技術路徑和應用理念。以下從技術架構到用戶體驗的全面對比分析&#xff0c;將揭示兩者在AI競賽中的獨特定位。 一、模型架構與原理 1. DeepSeek 架構特點&#xff1a;采用混合專家系統&#xff08;…

Python星球日記 - 第20天:數據分析入門

??引言: 歡迎來到Python星球??的第20天!今天我們將踏入數據分析的世界,學習如何使用pandas處理數據并提取有價值的信息。無論你是想分析商業銷售數據、股票市場趨勢還是科學實驗結果,pandas都是你必不可少的工具! 上一篇:Python星球日記 - 第19天:Web開發基礎 名人…

算力云平臺部署—SadTalker的AI數字人視頻

選擇算力 部署選擇 選擇鏡像 機器管理 控制臺 通過平臺工具進入服務器 認識管理系統 打開命令行 進入目錄 stable-diffusion-webui# cd 增加執行權限 chmod x ./webui.sh 運行命令 bash ./webui.sh sudo apt install -y python3 python3-venv git 安裝軟件 Creating the …

Linux目錄結構:核心目錄功能與用途解析

引言 Linux的目錄結構就像一棵精心設計的大樹&#x1f333;&#xff0c;每個分支都有其特定的用途和規范&#xff01;與Windows不同&#xff0c;Linux采用單一的目錄層次結構&#xff0c;所有設備、分區和網絡資源都掛載在這個統一的目錄樹下。本文將帶你深入探索Linux目錄結構…

【學習筆記】兩個類之間的數據交互方式

在面向對象編程中&#xff0c;兩個類之間的數據交互可以通過以下幾種方式實現&#xff0c;具體選擇取決于需求和設計模式&#xff1a; 1. 通過方法調用 一個類通過調用另一個類的公共方法來獲取或傳遞數據。這是最常見的方式&#xff0c;符合封裝原則。 class ClassA:def __…

神經網絡學習--誤差反向傳播法

最近在學習神經網絡&#xff0c;主要是依據書本《深度學習入門&#xff08;基于Python的理論與實現&#xff09;》&#xff0c;現對第5章“誤差反向傳播法”中的示例程序進行注釋修改如下&#xff0c;以備后續查閱。 編程軟件用的是Eric7&#xff0c;界面如下&#xff1a; 神經…

前端常用組件庫全覽與推薦

&#x1f4cc; 一、組件庫生態全景圖 &#x1f680; 二、React 生態組件庫推薦 名稱簡介官網Ant Design阿里出品&#xff0c;企業級 UI 系統&#xff0c;設計規范完整&#xff0c;適合后臺系統https://ant.designMaterial UIGoogle Material Design 實現&#xff0c;樣式響應式…

群暉如何通過外網訪問

1、進入群暉控制面板-》連接性-》外部訪問-》DDNS 2、新增&#xff0c;添加DDNS 選擇服務供應商&#xff0c;我這里以DNSPod.cn為例。 3、這一步開始&#xff0c;需要前往DNSPod.cn進行注冊域名&#xff08;也可以使用你已有的域名&#xff0c;轉入即可&#xff09;&#xff0…

3.2.2.1 Spring Boot配置靜態資源映射

在Spring Boot中配置靜態資源映射&#xff0c;可以通過默認路徑或自定義配置實現。默認情況下&#xff0c;Spring Boot會在classpath:/static/等目錄下查找靜態資源。若需自定義映射&#xff0c;可通過實現WebMvcConfigurer接口的addResourceHandlers方法或在全局配置文件中設置…

【概念】什么是UI(User interface)什么是UX(User experience)?

1. 軟件生命周期管理 (Software Life Cycle Management) 解釋&#xff1a; 中文&#xff1a; 軟件生命周期管理是指從軟件規劃、設計、開發、測試、部署到后續維護甚至退役的整個過程。English: Software Life Cycle Management refers to the systematic process of plannin…

第十六屆藍橋杯大賽軟件賽省賽 C/C++ 大學B組

由于官方沒有公布題目的數據, 所以代碼僅供參考 1. 移動距離 題目鏈接&#xff1a;P12130 [藍橋杯 2025 省 B] 移動距離 - 洛谷 【問題描述】 小明初始在二維平面的原點&#xff0c;他想前往坐標 (233, 666)。在移動過程中&#xff0c;他 只能采用以下兩種移動方式&#xf…

??IPerf工具使用筆記(基于MobaXterm串口終端)?

??一、問題現象?? ??終端輸入無響應?? 啟動iperf服務器后&#xff0c;終端被阻塞&#xff0c;無法輸入其他命令&#xff08;如圖中重復輸出日志覆蓋輸入區域&#xff09;。??直接原因??&#xff1a;iperf_server線程未正確處理退出標志&#xff0c;導致select或acc…

【從C到C++的算法競賽遷移指南】第五篇:現代語法糖精粹 —— 寫出優雅的競賽代碼

系列導航&#xff1a; [第一篇] 基礎語法與競賽優勢[第二篇] 動態數組與字符串革命[第三篇] 映射與集合的終極形態[第四篇] STL算法與迭代器[? 本篇] 現代語法糖精粹[第六篇] 競賽實戰技巧 一、范圍for循環&#xff1a;告別索引的束縛 1.1 C風格遍歷的四大痛點 // 痛點示例&…

mongodb在window10中創建副本集的方法

創建Mongodb的副本集最好是新建一個文件夾&#xff0c;如D:/data&#xff0c;不要在mongodb安裝文件夾里面創建副本集&#xff0c;雖然這樣也可以&#xff0c;但是容易造成誤操作或路徑混亂&#xff1b;在新建文件夾里與現有 MongoDB 數據隔離&#xff0c;避免誤操作影響原有數…

使用Python進行AI圖像生成:從GAN到風格遷移的完整指南

AI圖像生成是一個非常有趣且前沿的領域&#xff0c;結合了深度學習和計算機視覺技術。以下是一些使用Python和相關庫進行AI圖像生成的創意和實現思路&#xff1a; 1. 使用GAN&#xff08;生成對抗網絡&#xff09; 基本概念&#xff1a;GAN由兩個神經網絡組成&#xff1a;生成…

P10413 [藍橋杯 2023 國 A] 圓上的連線

題意&#xff1a; 給定一個圓&#xff0c;圓上有 n2023 個點從 1 到 n 依次編號。 問有多少種不同的連線方式&#xff0c;使得完全沒有連線相交。當兩個方案連線的數量不同或任何一個點連接的點在另一個方案中編號不同時&#xff0c;兩個方案視為不同。 答案可能很大&#x…