Mysql MIC高可用集群搭建

1、介紹

MySQL InnoDB Cluster(MIC)是基于 MySQL Group Replication(MGR)的高可用性解決方案,結合 MySQL Shell 和 MySQL Router,提供自動故障轉移和讀寫分離功能,非常適合生產環境

2、部署

2.1 環境準備

三臺 Ubuntu 20.04 服務器(IP 分別為 192.168.100.61、192.168.100.62 和 192.168.100.63)

修改主機名稱,添加域名解析

每臺服務器都要執行
hostnamectl set-hostname mysql1

cat >>/etc/hosts<<EOF
192.168.100.61  mysql1
192.168.100.62  mysql2
192.168.100.63  mysql3
EOF

2.2 mysql部署(所有節點都要執行)

MIC 依賴 MySQL 8.0 的特性,因此需要安裝 MySQL Server 8.0

2.2.1 安裝相關工具
apt update
#部署mysql
apt install mysql-server -y#MySQL Shell 是 MIC 的管理工具,提供集群創建和維護的功能
apt install mysql-shell -y#
apt install mysql-router -y
2.2.2 修改root用戶密碼
ALTER USER 'root'@'localhost' IDENTIFIED WITH 'mysql_native_password' BY 'Admin@2025!';
CREATE USER 'root'@'%' IDENTIFIED WITH 'mysql_native_password' BY 'Admin@2025!';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
2.2.3 修改配置文件

/etc/mysql/mysql.conf.d/mysqld.cnf

[mysqld]
#每臺服務器的唯一標識符,必須不同(例如 1、2、3)
server_id = 1
#允許遠程連接
bind-address = 0.0.0.0
#gtid_mode = ON 和 enforce_gtid_consistency = ON:啟用全局事務 ID(GTID),確保事務一致性
gtid_mode = ON
enforce_gtid_consistency = ON
#設置為行格式,支持 Group Replication
binlog_format = ROW
#啟用二進制日志,記錄數據庫變更
log_bin = mysql-bin
#從節點記錄主節點的更新
log_slave_updates = ON
#master_info_repository = TABLE 和 relay_log_info_repository = TABLE:將主從信息存儲在表中,提高可靠性
master_info_repository = TABLE
relay_log_info_repository = TABLE#加載 Group Replication 插件
plugin_load_add = group_replication.so
#定義集群組名,需一致
group_replication_group_name = "my_group"
#避免服務啟動時自動加入集群
group_replication_start_on_boot = off
#本節點的 MGR 通信地址
group_replication_local_address = "192.168.100.61:33061"
#集群所有節點的通信地址列表
group_replication_group_seeds = "192.168.100.61:33061,192.168.100.62:33061,192.168.100.63:33061"
#僅在首次創建集群時啟用
group_replication_bootstrap_group = off

systemctl restart mysql

其他節點僅修改 server_id,group_replication_local_address即可

2.2.4 配置集群
mysqlsh --uri root@192.168.100.61:3306#檢查和配置每個實例以支持 Group Replication,可能需要輸入root賬號 密碼
dba.configureInstance('root@192.168.100.61:3306')
dba.configureInstance('root@192.168.100.62:3306')
dba.configureInstance('root@192.168.100.63:3306')#創建并擴展集群
var cluster = dba.createCluster('my_cluster')
cluster.addInstance('root@192.168.100.62:3306')
cluster.addInstance('root@192.168.100.63:3306')#驗證集群狀態
cluster.status()
2.2.4 測試集群數據同步功能

在mysql1上寫一些測試數據,然后觀察mysql2 mysql3是有有同步數據

CREATE DATABASE test_db;
USE test_db;
CREATE TABLE test_table (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50));
INSERT INTO test_table (name) VALUES ('test1');
2.2.5 router配置

功能

  • 讀寫分離:客戶端連接6446端口訪問主節點(讀寫),連接6447端口訪問從節點(只讀)。
  • 高可用性:若主節點故障,Router自動將請求路由到新的主節點(依賴集群的故障轉移機制)。
  • 負載均衡:在只讀模式下,Router可將請求分發到多個從節點

這里部署在mysql2主機上,用于測試功能,大家有時間可以改成Keepalived 和 HAProxy 組合實現router的高可用


# 初始化和配置MySQL Router,使其能夠與MySQL InnoDB Cluster(或其他高可用架構)集成
mysqlrouter --bootstrap root@192.168.100.61:3306 --directory /etc/mysqlrouter --user=rootcat >>/etc/systemd/system/mysqlrouter.service<<EOF
[Unit]
Description=MySQL Router Service
Documentation=https://dev.mysql.com/doc/mysql-router/8.0/en/
After=network.target mysql.service[Service]
Type=simple
ExecStart=/usr/bin/mysqlrouter --config /etc/mysqlrouter/mysqlrouter.conf
ExecReload=/bin/kill -HUP 
Restart=on-failure
RestartSec=5s
PIDFile=/var/run/mysqlrouter/mysqlrouter.pid
PrivateTmp=true
LimitNOFILE=65535
StandardOutput=journal
StandardError=journal[Install]
WantedBy=multi-user.target
EOFsystemctl daemon-reload && systemctl enable mysqlrouter && systemctl start mysqlrouter
mysql -h 192.168.100.62 -P 6446 -u root -p
2.2.5 驗證高可用

1、停止mysql1的服務
systemctl stop mysql

2、查看變化
mysqlsh --uri root@192.168.100.62:3306

var cluster = dba.getCluster(‘my_cluster’);
cluster.status()

{"clusterName": "my_cluster", "defaultReplicaSet": {"name": "default", "primary": "mysql3:3306", "ssl": "REQUIRED", "status": "OK_NO_TOLERANCE_PARTIAL", "statusText": "Cluster is NOT tolerant to any failures. 1 member is not active.", "topology": {"mysql1:3306": {"address": "mysql1:3306", "memberRole": "SECONDARY", "mode": "n/a", "readReplicas": {}, "role": "HA", "shellConnectError": "MySQL Error 2003: Could not open connection to 'mysql1:3306': Can't connect to MySQL server on 'mysql1:3306' (111)", "status": "(MISSING)"}, "mysql2:3306": {"address": "mysql2:3306", "memberRole": "SECONDARY", "mode": "R/O", "readReplicas": {}, "replicationLag": "applier_queue_applied", "role": "HA", "status": "ONLINE", "version": "8.0.41"}, "mysql3:3306": {"address": "mysql3:3306", "memberRole": "PRIMARY", "mode": "R/W", "readReplicas": {}, "replicationLag": "applier_queue_applied", "role": "HA", "status": "ONLINE", "version": "8.0.41"}}, "topologyMode": "Single-Primary"}, "groupInformationSourceMember": "mysql3:3306"
}

可以看到mysql1 的狀態變成MISSING ,mysql3 變成主節點了

3、測試是否可以寫入數據

mysql -h 192.168.100.62 -P 6446 -u root -p’Admin@2025!’
mysql> create database test_ha;
mysql> show databases;

結果可以成功寫入

現在恢復mysql1
systemctl start mysql

重復步驟2再次查看集群狀態,發現mysql1的狀態變成ONLINE, "replicationLag"表示復制延遲狀態,applier_queue_applied 表示數據已同步完成。如果有延遲,可能會顯示具體的時間差

查看mysql1丟失的數據是否存在

root@mysql1:~# mysql  -u root -p'Admin@2025!'mysql> show databases;

發現已經成功同步了之前丟失的數據

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

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

相關文章

PERL開發環境搭建>>Windows,Linux,Mac OS

特點 簡單 快速 perl解釋器直接對源代碼程序解釋執行,是一個解釋性的語言, 不需要編譯器和鏈接器來運行代碼>>速度快 靈活 借鑒了C/C, Basic, Pascal, awk, sed等多種語言, 定位于實用性語言,既具備了腳本語言的所有功能,也添加了高級語言功能 開源.免費 沒有&qu…

ubuntu改用戶權限

在 Linux 系統中&#xff0c;賦予普通用戶 sudo 權限可以讓他們執行一些需要 root 權限的命令&#xff0c;而不需要頻繁切換到 root 用戶。以下是具體步驟&#xff1a; 創建用戶(useradd和adduser兩種方式) 首先&#xff0c;需要創建一個新的用戶。可以使用 adduser 或 usera…

藍橋杯 web 學海無涯(axios、ecahrts)版本二

答案&#xff1a; // TODO: 待補充代碼// 初始化圖表的數據&#xff0c;設置周視圖的初始數據 option.series[0].data [180, 274, 253, 324, 277, 240, 332, 378, 101]; // 周數據&#xff08;每周的總學習時長&#xff09; option.xAxis.data ["2月第1周", "…

Java 大視界 -- Java 大數據在智慧文旅虛擬場景構建與沉浸式體驗增強中的技術支撐(168)

&#x1f496;親愛的朋友們&#xff0c;熱烈歡迎來到 青云交的博客&#xff01;能與諸位在此相逢&#xff0c;我倍感榮幸。在這飛速更迭的時代&#xff0c;我們都渴望一方心靈凈土&#xff0c;而 我的博客 正是這樣溫暖的所在。這里為你呈上趣味與實用兼具的知識&#xff0c;也…

API vs 網頁抓取:獲取數據的最佳方式

引言 在當今數字化時代&#xff0c;對于企業、研究人員以及開發人員而言&#xff0c;獲取準確且及時的數據是大多數項目成功的關鍵因素。目前&#xff0c;收集網頁數據主要有兩種常用方法&#xff0c;即使用 API&#xff08;應用程序接口&#xff09;和網頁抓取。然而&#xf…

車載以太網網絡測試-25【SOME/IP-報文格式-1】

目錄 1 摘要2 SOME/IP-報文格式2.1 **Service ID / 16 bits**2.2 **Method ID / Event ID / 16 bits**2.3 **Length / 32 bits**2.4 **Client ID / 16 bits**2.5 Session ID / 16 bits2.6 Protocol Version / 8 bits2.7 Interface Version / 8 bits2.8 Message Type / 8 bits2.…

Python數據可視化-第3章-圖表輔助元素的定制

環境 開發工具 VSCode庫的版本 numpy1.26.4 matplotlib3.10.1 ipympl0.9.7教材 本書為《Python數據可視化》一書的配套內容&#xff0c;本章為第3章-圖表輔助元素的定制 本章主要介紹了圖表輔助元素的定制&#xff0c;包括認識常用的輔助元素、設置坐標軸的標簽、設置刻度范…

小程序30-wxml語法-聲明和綁定數據

小程序頁面中使用的數據均需要在Page() 方法的 data對象中進行聲明定義 在將數據聲明好以后&#xff0c;在 WXML 使用 Mustache 語法 ( 雙大括號{{ }} ) 將變量包起來&#xff0c;從而將數據綁定 在 {{ }} 內部可以做一些簡單的運算&#xff0c;支持如下幾種方式: 算數運算三…

ubuntu開啟黑屏現象解決

文章目錄 前言一、問題描述二、解決方案1. 檢查顯卡驅動解決步驟&#xff1a; 2. 修復 GRUB 配置解決步驟&#xff1a; 3. 使用恢復模式解決步驟&#xff1a; 三、驗證與總結 前言 在使用 Ubuntu 操作系統時&#xff0c;一些用戶可能會遇到開機后屏幕黑屏的現象。這種問題可能…

Modbus TCP轉Profibus DP網關接防撞雷達與PLC通訊

Modbus TCP轉Profibus DP網關接防撞雷達與PLC通訊 在工業自動化領域&#xff0c;通信協議的多樣性既是技術進步的體現&#xff0c;也給系統集成帶來了挑戰。Modbus TCP和Profibus DP是兩種廣泛應用于不同場景下的通信標準&#xff0c;它們各有優勢但也存在著互操作性的需求。本…

分布式鎖方案-Redisson

分布式鎖&#xff1a;Redisson還實現了Redis文檔中提到像分布式鎖Lock這樣的更高階應用場景。事實上Redisson并沒有不止步于此&#xff0c;在分布式鎖的基礎上還提供了聯鎖&#xff08;MultiLock&#xff09;&#xff0c;讀寫鎖&#xff08;ReadWriteLock&#xff09;&#xff…

【AI插件開發】Notepad++ AI插件開發實踐:從Dock窗口集成到功能菜單實現

一、項目背景與技術選型 在上篇文章實現"選中即問AI"功能的基礎上&#xff0c;本文重點解決AI對話窗口的集成與核心功能菜單的開發。通過Notepad插件體系&#xff0c;我們將實現以下功能矩陣&#xff1a; AI交互系統&#xff1a;支持自然語言提問與任務執行代碼智能…

ControlNet-Tile詳解

一、模型功能與應用 1. 模型功能 ControlNet-Tile模型的主要功能是圖像的細節增強和質量提升。它通過以下幾個步驟實現這一目標&#xff1a; 語義分割&#xff1a;模型首先對輸入的圖像進行語義分割&#xff0c;識別出圖像中不同的區域和對象。這一步是為了讓模型理解圖像的內…

英飛凌高信噪比MEMS麥克風驅動人工智能交互

導言 在英飛凌&#xff0c;我們一直堅信卓越的音頻解決方案對于提升消費類設備的用戶體驗至關重要。我們堅定不移地致力于創新&#xff0c;在主動降噪、語音透傳、錄音室錄音、音頻變焦和其他相關技術方面取得了顯著進步&#xff0c;對此我們深感自豪。作為MEMS麥克風的領先供…

【Azure】如何使用 Docker CLI 和 Compose 將容器部署到 Azure ACI

推薦超級課程: 本地離線DeepSeek AI方案部署實戰教程【完全版】Docker快速入門到精通Kubernetes入門到大師通關課AWS云服務快速入門實戰在云中運行容器可能既困難又令人困惑。有太多選項可供選擇,而且還需要理解從虛擬網絡到安全性的不同云服務的工作方式。更不用說編排器了。…

結構化剪枝(Structured Pruning)與動態蒸餾(Dynamic Distillation)

結構化剪枝&#xff08;Structured Pruning&#xff09;技術詳解 核心原理 結構化剪枝通過模塊級&#xff08;如層、通道、塊&#xff09;而非單個權重的方式去除冗余參數&#xff0c;保留關鍵子網絡。其優勢在于&#xff1a; 硬件友好性&#xff1a;生成規則稀疏模式&#x…

linux shell 刪除空行(remove empty lines)

命令行 grep -v ^$ file sed /^$/d file 或 sed -n /./p file awk /./ {print} file 或 awk {if($0!" ") print} tr -s "n"vim交互 %s/^n//g

數據庫6(數據庫指令)

之前所學的指令均為查找指令&#xff0c;即select相關語句 接下來的語句是增刪改查的其他三部分&#xff0c;即增刪改 1.刪除 刪除操作是三個操作中較為簡單的&#xff0c;因為它只需要考慮數據的完整性 在實驗時可以用表的復件來操作&#xff0c;防止操作不當導致數據庫被…

web網頁上實現錄音功能(vue3)

文章目錄 一. 前言二. 技術實現1.核心API介紹2.模板部分3.核心邏輯實現 4. 關鍵功能點解析 三. 完整代碼四. 功能擴展建議 一. 前言 在Web開發中實現音頻錄制功能是許多應用場景的常見需求。本文將通過一個完整的Vue 3組件示例&#xff0c;詳細解析如何利用現代瀏覽器API實現網…

安美數字酒店寬帶運營系統存在SQL注入漏洞

免責聲明&#xff1a;本號提供的網絡安全信息僅供參考&#xff0c;不構成專業建議。作者不對任何由于使用本文信息而導致的直接或間接損害承擔責任。如涉及侵權&#xff0c;請及時與我聯系&#xff0c;我將盡快處理并刪除相關內容。 漏洞描述 安美數字酒店寬帶運營系統的lang…