国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

MySQL Group Replication

IT那活兒 / 2415人閱讀
MySQL Group Replication
點(diǎn)擊上方“IT那活兒”公眾號(hào),關(guān)注后了解更多內(nèi)容,不管IT什么活兒,干就完了!!!

MySQL異步復(fù)制技術(shù)

1. 主從復(fù)制

傳統(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ù)一致性。

2. 半同步復(fù)制

除了異步復(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ù)雜。

  • 從庫(kù)Slave的讀壓力太大會(huì)導(dǎo)致復(fù)制延遲不斷增加。

Group Replication

為了解決以上問(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 特性;

1. Group Replication特點(diǎn)

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ě)入。

2. Group Replication限制

  • 僅支持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è)與部分部分回滾;

  • 二進(jìn)制日志不支持binlog event checksum。

Group Replication配置實(shí)踐

以下為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

1. 設(shè)置MGR相關(guān)參數(shù)

三節(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ā)限流。

2. 安裝組復(fù)制插件及創(chuàng)建用戶

各個(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;

3. 第一個(gè)節(jié)點(diǎn)加入MGR

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;

4. 其余節(jié)點(diǎn)加入MGR

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)加入:

5. 簡(jiǎn)單測(cè)試數(shù)據(jù)同步

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ù):

6. 手工切換主節(jié)點(diǎn)

手工將主節(jié)點(diǎn)切換到mgr03節(jié)點(diǎn):

7. 切換到多主模式

8. 切換到單主模式

也可以指定主節(jié)點(diǎn):

9. 其它補(bǔ)充

如果是已有的系統(tǒng)改造為MGR架構(gòu),需要檢查是否滿足相關(guān)條件。

1)檢查非INNODB表

SELECT table_name

,table_schema

,engine

FROM information_schema.tables

WHERE engine != innodb

AND table_schema NOT IN (mysql, information_schema, performance_schema);

如存在,許改造為innodb引擎表。

2)檢查無(wú)主鍵或者唯一約束的表

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;

如存在需要改造:添加主鍵或唯一約束。


本文作者:張雷員(上海新炬王翦團(tuán)隊(duì))

本文來(lái)源:“IT那活兒”公眾號(hào)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/129349.html

相關(guān)文章

  • MySQL集群MGR升級(jí)實(shí)施測(cè)試方案

    MySQL集群MGR升級(jí)實(shí)施測(cè)試方案 img{ display:block; margin:0 auto !important; width:100%; } body{ width:75%; ...

    IT那活兒 評(píng)論0 收藏1318
  • Mac 的mysql5.7沒(méi)有配置文件,如何解決only_full_group_by 問(wèn)題

    摘要:屬性是在數(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...

    Flands 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<