mgr引數之-group_replication_gtid_assignment_block_size小結

賀子_DBA時代發表於2023-10-22
一、官方文件解釋:
This system variable is a group-wide configuration setting,and a full reboot of the replication group is required for a  change to take effect
group_replication_gtid_assignment_block_size specifies the number of consecutive GTIDs that are reserved for each group member. Each member consumes its own blocks and reserves more when needed.
This system variable is a group-wide configuration setting. It must have the same value on all group members, cannot be changed while Group Replication is running, and requires a full reboot of the group (a bootstrap by a server with group_replication_bootstrap_group=ON) in order for the value change to take effect. For instructions to safely bootstrap a group where transactions have been executed and certified, see Section 18.5.2, “Restarting a Group”.
If the group has a value set for this system variable, and a joining member has a different value set for the system variable, the joining member cannot join the group until the value is changed to match. If the group members have a value set for this system variable, and the joining member does not support the system variable, it cannot join the group.
此係統變數是組範圍的配置設定,需要完全重新啟動複製組才能使更改生效
group_replication_gtid_assignment_block_size指定為每個組成員保留的連續gtid的數量。每個成員消耗自己的區塊,並在需要時保留更多。
此係統變數是組範圍內的配置設定。它在所有組成員上都必須具有相同的值,在組複製執行時不能更改,並且需要完全重新啟動組(由group_Replication_bootstrap_group=on的伺服器引導)才能使值更改生效。有關安全引導已執行和認證事務的組的說明,請參閱第18.5.2節“重新啟動組”。
如果組為此係統變數設定了值,而加入成員為系統變數設定的值不同,則在值更改為匹配之前,加入成員無法加入組。如果組成員為此係統變數設定了值,而加入成員不支援該系統變數,則無法加入組。
全域性變數,動態變數,整型型別,預設值為1000000,取值範圍:32位平臺為1~4294967295,64位平臺為1~9223372036854775807,MySQL 5.7.17版本引入
二、個人理解:
1、關於GTID分配機制:
普通主從複製,GTID分配是 server_uuid:id(number)
MGR GTID分配與普通主從複製不同,每個mgr組統一分配  group_replication_group_name(uuid):id(number),但是gtid後面的id號是取自執行節點預留的值,也就是group_replication_gtid_assignment_block_size引數設定的保留的個數!有點類似於tidb自增生成器,每個tidb server預留一部分!
2、group_replication_gtid_assignment_block_size引數:
group_replication_gtid_assignment_block_size為每個成員保留的連續GTID數。每個成員從中進行消耗,並在其需要的時候獲取更多的GTID數(類似於分散式事務中的全域性序列,該系統變數設定的值表示每個成員每一次從全域性序列中獲取多大範圍的連續數字範圍來作為自身寫事務的GTID號)
MGR會為每個例項節點分配一段連續的GTID值,所以當mgr發生主從切換的時候,可能導致叢集gtid_executed事務ID不連續;
舉個例子,叢集中有2個節點,group_replication_gtid_assignment_block_size為1000,那麼為節點A分配的Gtid_set為group_name:1-1000,節點B分配的Gtid_set為group_name:1001-2000。
則group_name:1-1000和group_name:1001-2000分別作為Gtid_set儲存在member_gtids上。A節點的事務T1認證透過後,分配gtid為group_name:1,接著A節點事務T2分配group_name:2,然後B節點事務進入認證模組,認證透過後,為其分配group_name:1001,每分配一次gtid則gtids_assigned_in_blocks_counter增一。當發生主從切換時候,節點B會從1001開始記錄gtid,所以會造成MGR的gtid_executed有時是不連續的多段,如aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1-2:1001-1005
若分配次數gtids_assigned_in_blocks_counter已達到gtid_assignment_block_size,則需要compute_group_available_gtid_intervals()重新計算。基於member_uuid找到該成員可用的gtid區間,若還沒為該成員分配gtid,則呼叫reserve_gtid_block()進行分配。需要注意的是,reserve_gtid_block()是最多分配而不是一定分配block_size大小的gtid序列,是否等於block_size依賴於group_available_gtid_intervals的第一個可用的連續gtid序列大小是否等於或大於block_size
三、該引數設定建議:保持預設即可
對於多主架構減少校驗的複雜度:
為每個成員保留的連續的gtid的數量。每個成員消耗其塊,並在需要時儲備更多。
事務在節點執行完成,commit前傳送到GR做校驗。校驗成功後,GR會給此事務分配一個GTID(如果該事務沒有GTID)。GR會給每個節點預留一個範圍的GTID,(GTID是由server_uuid+數字組成,gr中GTID中的UUID部分都是一樣的,數字部分則為各節點分配一個範圍段,用完了再分配一個新的範圍段)。這個範圍段的大小就是有group_replication_gtid_assignment_block_size變數控制,預設是1000000。這個數字範圍如果很大的話,gtid_executed就不能及時合併,許多GTID interval 會使校驗演算法變得複雜


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29654823/viewspace-2990310/,如需轉載,請註明出處,否則將追究法律責任。

相關文章