Mysql 8 group replication组复制集群单主配置图解
? ? ? ? ? ? ? ? ? ? ? ? ? ? Mysql 8 MGR集群單主配置圖解
聲明與簡介
本文的數據來自網絡,部分代碼也有所參照,這里做了注釋和延伸,旨在技術交流,如有冒犯之處請聯系博主及時處理。本文主要介紹mysql的MGR集群的配置。
MySQL Group Replication(MGR)是MySQL官方在5.7.17版本引進的一個數據庫高可用與高擴展的解決方案,以插件形式提供,實現了分布式下數據的最終一致性。其特點如下:
- 高一致性:基于分布式paxos協議實現組復制,保證數據一致性;
- 高容錯性:自動檢測機制,只要不是大多數節點都宕機就可以繼續工作,內置防腦裂保護機制;
- 高擴展性:節點的增加與移除會自動更新組成員信息,新節點加入后,自動從其他節點同步增量數據,直到與其他節點數據一致;
- 高靈活性:提供單主模式和多主模式,單主模式在主庫宕機后能夠自動選主,所有寫入都在主節點進行,多主模式支持多節點寫入
注:1 當前MGR集群驗證環節在VVMware虛擬機內,真實環境可略過虛擬機復制環節。
? ? ? ?2 當前虛擬機內mysql庫運行在Centos 8內,版本號是 8.0.23、端口號3306。
? ? ? ?3 MGR集群當前驗證環境192.168.111.128(host_128)是單主節點,host_129、host_130是從節點。
虛擬機復制
Step 1:先選擇一臺虛擬機(鼠標點中),然后找到克隆按鈕。
Step 2:克隆虛擬機當前狀態
?Step 3:選擇創建完整克隆
Step4:配置虛擬機名字和存儲位置
Step 5:耐心等待克隆完畢
Step 6:修改新克隆的虛擬機,修改IP
#修改網卡信息 vi /etc/sysconfig/network-scripts/ifcfg-ens33Step 7:修改主機名,配置IP與主機名映射。
# 定義IP與主機名映射 vi /etc/hostsStep 8:重啟服務器
#重啟虛擬機 reboot nowStep 9:同樣的方式操作另外一臺虛擬機。
準備環境
- 準備3臺版本一致(一樣)的mysql數據庫的主機,當前主服務數據庫服務的操作系統都是linux。詳見虛擬機復制環節。
- 192.168.111.128(host_128)是單主節點,192.168.111.129(host_129)、192.168.111.130(host_130)是從節點。
配置MGR集群
安裝MGR插件
-- 三臺主機里都安裝group_replication插件,可事先三臺都執行該操作。 -- Step 1查看 MGR插件是否安裝,如果已安裝可忽略如下安裝插件環節。 SELECT?? PLUGIN_NAME, PLUGIN_STATUS, PLUGIN_TYPE,?? PLUGIN_LIBRARY, PLUGIN_LICENSE FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE 'group%' AND PLUGIN_STATUS='ACTIVE'; -- Step 2 安裝MGR插件 install PLUGIN group_replication SONAME 'group_replication.so'; -- Step 3 驗證MGR插件狀態 SELECT PLUGIN_NAME, PLUGIN_STATUS, PLUGIN_TYPE, PLUGIN_LIBRARY, PLUGIN_LICENSE FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE 'group%' AND PLUGIN_STATUS='ACTIVE';生成集群組名
-- Way1 :參照官網使用固定的值aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa,該值在三個節點都配置成一樣。-- Way2:通過uuid生成唯一的id。 select replace(uuid(),"-","") as uuid;配置單主節點MGR參數
Step? 1: 修改mysql配置文件/etc/my.cnf,追加引用外部文件參數
!include /etc/my.cnf.d/ mgr_auth.cnf
Step 2:? /etc/my.cnf.d目錄內新建MGR配置文件mgr_auth.cnf
Step 3 mgr_auth.cnf文件內配置如下內容:
[mysqld]
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"
server_id=1 #其它節點相應修改,不能重復
gtid_mode=ON
enforce_gtid_consistency=ON
binlog_checksum=NONE
log_bin=binlog
log_slave_updates=ON
binlog_format=ROW
master_info_repository=TABLE
relay_log_info_repository=TABLE
transaction_write_set_extraction=XXHASH64
plugin_load_add='group_replication.so'
group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
group_replication_start_on_boot=off
group_replication_local_address= "host_128:33091" #修改成節點對應主機名
group_replication_group_seeds= "host_128:33091,host_129:33091,host_130:33091"
group_replication_bootstrap_group=off
注:1 這里的step 1外部引用MGR配置文件是為了mysql配置和MGR參數分離,如果不需要可以將MGR參數放置于mysql的配置文件內。
2 這里的group_replication_group_name來源于生成組名環節。
?端口加入防火墻信任列表
#MGR集群組復制端口33091加入信任列表 firewall-cmd --add-port=33091/tcp --permanent firewall-cmd --reload firewall-cmd --list-all #注:如果防火墻關閉,可忽略此步驟。重啟單主mysql
#重啟單主節點數據庫 service mysqld restart創建同步用戶
--單主節點創建該用戶并賦予從服務復制權限,從節點在配置其它節點環節會有相同的操作。 SET SQL_LOG_BIN=0; create user rpl_user@'%' identified by 'Rpl_user123'; GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%'; GRANT BACKUP_ADMIN ON *.* TO rpl_user@'%'; FLUSH PRIVILEGES; SET SQL_LOG_BIN=1;啟動MGR集群主節點
--在單主節點上啟動MGR集群引導 SET GLOBAL group_replication_bootstrap_group=ON;--用之前創建的用戶rpl_user創建同步規則認證 CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='Rpl_user123' FOR CHANNEL 'group_replication_recovery';-- 啟動MGR start group_replication;-- 查看MGR集群狀態 SELECT * FROM performance_schema.replication_group_members;--在主庫上關閉MGR集群引導 SET GLOBAL group_replication_bootstrap_group=OFF;配置其它從節點
#Step 1:scp分發mysql配置文件到129和130主機上去 scp -r /etc/my.cnf root@host_129:/etc/ scp -r /etc/my.cnf root@host_130:/etc/ #Step 2:分發MGR配置文件到129和130主機上去 scp -r /etc/my.cnf.d/mgr_auth.cnf root@host_129:/etc/my.cnf.d/ scp -r /etc/my.cnf.d/mgr_auth.cnf root@host_130:/etc/my.cnf.d/ #Step3: 分別修改129、130 里的MGR配置文件。 #host_129內mgr_auth.cnf文件里修改部分的參數有: server-id = 2 group_replication_local_address= "host_129:33091"#host_130內mgr_auth.cnf文件里修改部分的參數有: server-id = 3 group_replication_local_address= "host_130:33091"啟動MGR集群從節點
-- 將節點host_129里接入組。 -- Step 1:重復創建同步用戶環節在從節點里創建用戶并賦權。-- Step 2:添加用戶認證 CHANGE REPLICATION SOURCE TO SOURCE_USER='rpl_user', SOURCE_PASSWORD='Rpl_user123' FOR CHANNEL 'group_replication_recovery';-- 注: mysql 8.0.23之前版本用以下命令: /* CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD=' Rpl_user123' FOR CHANNEL 'group_replication_recovery'; */-- Step 3:開始group_replication組復制,使得當前節點接入組。 START GROUP_REPLICATION;-- Step 4:當前節點上查看MGR集群 成員與狀態 SELECT * FROM performance_schema.replication_group_members;以上同樣的操作應用于host130,最終集群的狀態都在線且一個是Primary,另外兩個是SECONDARY。至此MGR單主模式搭建完畢。
驗證
從節點數據庫修改
從庫里插入數據時報錯,符合單主模式的特點(即僅主節點可寫,從節點不可寫)。
ERROR 1290 (HY000): The MySQL server is running with the --super-read-only option so it cannot execute this statement
延展閱讀
查看插件系統路徑
-- SQL命令查看插件的系統路徑 show variables like 'plugin%';查看MGR插件位置
#查看MGR插件系統路徑 ll /usr/lib64/mysql/plugin/ | grep group*查看plugin命令幫助手冊
-- 查看SQL命令的使用說明 ? show plugins;注:show plugins命令官方詳細介紹。
重新初始化數據庫
#Step 1初始化數據庫 #賦予數據目錄訪問權限給mysql用戶 chown -R mysql:mysql /data/mysql/ # 刪除數據目錄下文件 rm -rf /data/mysql/* #初始化數據庫 mysqld --initialize --user=mysql --basedir=/usr/ --datadir=/data/mysql/ # 找到生成的臨時密碼 grep 'temporary password'? /var/log/mysqld.log注:1 初始化數據庫操作僅限于實驗或者新環境。
? ? ? ?2 初始化mysql時配置參數不能有錯誤。
# Step 2 啟動服務修改數據庫密碼 # 啟動mysql服務 service mysqld start # 以初始密碼登入數據庫 mysql -uroot -p'czkik+j)y84A' # 修改新的數據庫密碼(Mysql里操作) alter user root@localhost identified by 'root1234';總結
以上是生活随笔為你收集整理的Mysql 8 group replication组复制集群单主配置图解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 农业银行的卡能在别的银行存钱吗
- 下一篇: Mysql8 group replica