傳統(tǒng)的MySQL復(fù)制提供了一個(gè)簡(jiǎn)單的主從復(fù)制方法。一個(gè)主節(jié)點(diǎn),一個(gè)或多個(gè)從節(jié)點(diǎn)。主節(jié)點(diǎn)執(zhí)行事務(wù)、提交事務(wù),然后異步將所作的操作發(fā)送給從節(jié)點(diǎn),從節(jié)點(diǎn)重放這些操作。所有的節(jié)點(diǎn)默認(rèn)都具有一個(gè)數(shù)據(jù)的完整拷貝。
傳統(tǒng)的 MySQL 主從復(fù)制架構(gòu)是 MySQL 保持?jǐn)?shù)據(jù)一致性的最基本架構(gòu),如下圖所示,從庫(kù)給主庫(kù)發(fā)起讀數(shù)據(jù)請(qǐng)求后,主庫(kù)會(huì)通過(guò) dump線程把 binlog 日志文件推送給從庫(kù),從庫(kù)的 I/O 線程把接收到數(shù)據(jù)更新到 relay log,之后從庫(kù)的 SQL 線程把 relay log 應(yīng)用為 binlog 日志,直到主庫(kù)與從庫(kù)的 binlog 日志文件完全數(shù)據(jù)一致,達(dá)到主從同步。
該架構(gòu)模式下:應(yīng)用發(fā)來(lái)的事務(wù)請(qǐng)求,經(jīng)過(guò)執(zhí)行之后寫(xiě)入 binlog,主庫(kù)把 binlog日志推送給從庫(kù),主庫(kù)不需要等到從庫(kù)是否成功更新數(shù)據(jù)到 relay log,主庫(kù)直接提交事務(wù)即可。
這種模式犧牲了數(shù)據(jù)一致性,不能很好保證主從數(shù)據(jù)一致性。
除了異步復(fù)制,還有半同步復(fù)制,它在異步復(fù)制基礎(chǔ)上添加了一個(gè)同步操作。主節(jié)點(diǎn)需要等待從節(jié)點(diǎn)的ack回復(fù),然后才能提交事務(wù)。
一主兩從半同步架構(gòu),應(yīng)用發(fā)來(lái)的事務(wù)請(qǐng)求,在主庫(kù)執(zhí)行后寫(xiě)入binlog,主庫(kù)把binlog日志推送給兩個(gè)從庫(kù),半同步主庫(kù)需要等待其中任意一個(gè)從庫(kù)更新數(shù)據(jù)到relay log成功并且告知主庫(kù),主庫(kù)才提交事務(wù),這樣保證至少有一個(gè)從庫(kù)同步上數(shù)據(jù)了,也縮短了延遲時(shí)間,保證了數(shù)據(jù)安全。
該模也存在兩個(gè)問(wèn)題:
MySQL無(wú)法自動(dòng)切換,需要借助外力切庫(kù),運(yùn)維復(fù)雜。
為了解決以上問(wèn)題,組復(fù)制應(yīng)運(yùn)而,MGR(MySQL Group Replication)是是MySQL官方推出的一款高可用與高擴(kuò)展的解決方案,是多個(gè) MySQL Server 節(jié)點(diǎn)共同組成的分布式集群,每個(gè) Server 都有完整的數(shù)據(jù)副本;它是基于 ROW格式的二進(jìn)制日志文件和 GTID 特性;
MGR提供了高可用、高擴(kuò)展、高可靠的MySQL集群服務(wù),具有以下特點(diǎn):
強(qiáng)一致性:基于原生復(fù)制和paxos協(xié)議,保證數(shù)據(jù)傳輸?shù)囊恢滦院驮有裕?/span>
高容錯(cuò)性:只要大多數(shù)節(jié)點(diǎn)沒(méi)有出現(xiàn)故障,集群就可對(duì)外提供服務(wù);
高擴(kuò)展性:節(jié)點(diǎn)的加入和移除都是自動(dòng)的,不需要人為過(guò)多干預(yù);
高靈活性:具有單主模式和多主模式,單主模式在主宕機(jī)后自動(dòng)選主,多主模式多節(jié)點(diǎn)寫(xiě)入。
僅支持InnoDB表,并且每張表一定要有一個(gè)主鍵,用于做write set的沖突檢測(cè);
必須打開(kāi)GTID特性,二進(jìn)制日志格式必須設(shè)置為ROW,用于選主與write set;
COMMIT可能會(huì)導(dǎo)致失敗,類(lèi)似于快照事務(wù)隔離級(jí)別的失敗場(chǎng)景;
目前一個(gè)MGR集群最多支持9個(gè)節(jié)點(diǎn);
不支持外鍵于save point特性,無(wú)法做全局間的約束檢測(cè)與部分部分回滾;
以下為MGR配置過(guò)程實(shí)踐,配置安裝MySQL過(guò)程此處不再贅述.當(dāng)前環(huán)境如下:
主機(jī)名 | IP | 版本 |
MGR01 | 192.168.79.13 | 8.0.29 |
MGR02 | 192.168.79.14 | 8.0.30 |
MGR03 | 192.168.79.15 | 8.0.31 |
三節(jié)點(diǎn)設(shè)置如下參數(shù):
####: for binlog
binlog_format =row
log_bin =/data/mysql-8.0/binary/mysql-bin
binlog_checksum =none
####: for gtid
gtid_mode =on
enforce_gtid_consistency =on
####: for replication
master_info_repository =table
relay_log_info_repository =table
slave_parallel_type =logical_clock
slave_parallel_workers =4
#MGR
plugin_load_add=group_replication.so
transaction_write_set_extraction =XXHASH64
group_replication_group_name ="3db33b36-0e51-409f-a61d-c99756e90155"
group_replication_start_on_boot =off
group_replication_local_address = "192.168.79.159:33061"
group_replication_group_seeds = "192.168.79.157:33061,192.168.79.158:33061,192.168.79.159:33061"
group_replication_bootstrap_group = off
# mgr for multi master
group_replication_single_primary_mode =off
group_replication_enforce_update_everywhere_checks =on
# mgr more set
binlog_transaction_dependency_tracking = WRITESET
配置MGR必須開(kāi)啟gtid和binlog;
group_replication_group_name 集群名字,各個(gè)節(jié)點(diǎn)必須一致可以使用uuidgen生成;
group_replication_local_address 本機(jī)ip和端口;
group_replication_group_seeds 組的成員和端口;
group_replication_consistency = BEFORE_ON_PRIMARY_FAILOVER # 當(dāng)Primary掛了的時(shí)候,備選Primary只有把事務(wù)全部執(zhí)行完畢,才提供客戶端讀寫(xiě)操作;
group_replication_flow_control_mode = DISABLED # 關(guān)閉流控,避免業(yè)務(wù)高峰觸發(fā)限流。
各個(gè)節(jié)點(diǎn)安裝mgr插件及創(chuàng)建用戶:
set sql_log_bin=0;
set global super_read_only=0;
set global read_only=0;
create user rplmgr@192.168.79.1_ identified WITH mysql_native_password by Rep&%set123;
grant replication slave on *.* to rplmgr@%;
FLUSH PRIVILEGES;
install plugin group_replication soname group_replication.so;
show plugins;
change master to master_user=rplmgr, master_password=Rep&%set123 for channel group_replication_recovery;
SET GLOBAL group_replication_bootstrap_group=ON;
start group_replication;
SET persist group_replication_bootstrap_group=off;
SELECT * FROM performance_schema.replication_group_members;
select @@read_only,@@super_read_only;
change master to master_user=rplmgr, master_password=Rep&%set123 for channel group_replication_recovery;
start group_replication;
SET persist group_replication_bootstrap_group=off;
SELECT * FROM performance_schema.replication_group_members;
select @@read_only,@@super_read_only;
第二節(jié)點(diǎn)加入:
第三節(jié)點(diǎn)加入:
MGR當(dāng)前運(yùn)行在單主模式下,簡(jiǎn)單測(cè)試數(shù)據(jù)同步:
在主節(jié)點(diǎn)創(chuàng)建測(cè)試數(shù)據(jù):
create database test;
use test;
create table t1(id int not null, name varchar(32), primary key(id));
insert into t1(id, name) values(,張三);
在其余節(jié)點(diǎn)驗(yàn)證數(shù)據(jù):
手工將主節(jié)點(diǎn)切換到mgr03節(jié)點(diǎn):
也可以指定主節(jié)點(diǎn):
如果是已有的系統(tǒng)改造為MGR架構(gòu),需要檢查是否滿足相關(guān)條件。
SELECT table_name
,table_schema
,engine
FROM information_schema.tables
WHERE engine != innodb
AND table_schema NOT IN (mysql, information_schema, performance_schema);
如存在,許改造為innodb引擎表。
SELECT concat(T1.TABLE_SCHEMA,".",T1.TABLE_NAME)
FROM INFORMATION_SCHEMA.COLUMNS T1
JOIN INFORMATION_SCHEMA.TABLES T2 ON T1.TABLE_SCHEMA=T2.TABLE_SCHEMA
AND T1.TABLE_NAME=T2.TABLE_NAME
WHERE T1.TABLE_SCHEMA NOT IN (SYS,
MYSQL,
INFORMATION_SCHEMA,
PERFORMANCE_SCHEMA)
AND T2.TABLE_TYPE=BASE TABLE
GROUP BY T1.TABLE_SCHEMA,
T1.TABLE_NAME HAVING group_concat(COLUMN_KEY) NOT REGEXP PRI|UNI;
如存在需要改造:添加主鍵或唯一約束。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/129349.html
MySQL集群MGR升級(jí)實(shí)施測(cè)試方案 img{ display:block; margin:0 auto !important; width:100%; } body{ width:75%; ...
摘要:屬性是在數(shù)據(jù)庫(kù),表中,點(diǎn)進(jìn)去,可以看到默認(rèn)屬性是解決這個(gè)問(wèn)題,就需要修改這個(gè)字段的屬性。方法二修改配置的文件在安裝這個(gè)版本的的時(shí)候,我沒(méi)有發(fā)現(xiàn)的配置文件。 showImg(https://segmentfault.com/img/bVXPg9?w=980&h=1246); 數(shù)據(jù)庫(kù)版本是5.7.19,在寫(xiě)語(yǔ)句的時(shí)候,只要涉及ORDER BY,就會(huì)報(bào)錯(cuò), ERROR 1055 (42000...
閱讀 1346·2023-01-11 13:20
閱讀 1684·2023-01-11 13:20
閱讀 1132·2023-01-11 13:20
閱讀 1858·2023-01-11 13:20
閱讀 4099·2023-01-11 13:20
閱讀 2704·2023-01-11 13:20
閱讀 1385·2023-01-11 13:20
閱讀 3594·2023-01-11 13:20