mysql5.7.26搭建MGR单主及多主模式
生活随笔
收集整理的這篇文章主要介紹了
mysql5.7.26搭建MGR单主及多主模式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
使用mysql5.7.26搭建MGR單主及多主模式(參考鏈接https://www.jianshu.com/p/ca1af156f656)一、搭建單主1.1前言:MySQL Group Replication(MGR)是MySQL官方在5.7.17版本引進的一個數據庫高可用與高擴展的解決方案,以插件形式提供,實現了分布式下數據的最終一致性,總結MGR特點如下:高一致性:基于分布式paxos協議實現組復制,保證數據一致性;高容錯性:自動檢測機制,只要不是大多數節點都宕機就可以繼續工作,內置防腦裂保護機制;高擴展性:節點的增加與移除會自動更新組成員信息,新節點加入后,自動從其他節點同步增量數據,直到與其他節點數據一致;高靈活性:提供單主模式和多主模式,單主模式在主庫宕機后能夠自動選主,所有寫入都在主節點進行,多主模式支持多節點寫入。1.2網絡拓撲192.168.56.141 centos7.node2 ##從192.168.56.149 docker.node01 ##主192.168.56.150 centos7.node1 ##從1.3安裝mysql1.3.1 從官網下載mysql安裝包1.3.2 安裝過程(每臺服務器都做一遍)配置集群中全部節點的免密登錄(以其中一個節點為例,其它的節點類似操作即可):[root@docker .ssh]# ssh-keygen -t rsa [root@docker .ssh]# ssh-copy-id -i ./id_rsa.pub root@192.168.56.150[root@docker .ssh]# ssh-copy-id -i ./id_rsa.pub root@192.168.56.141測試(所有節點操作)[root@docker .ssh]# ssh root@192.168.56.150[root@docker .ssh]# ssh root@192.168.56.141安裝mysql5.7(所有節點操作)[root@docker local]# tar -zxvf mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz -C /usr/local/[root@docker local]# cd /usr/local/[root@docker local]# ln -s mysql-5.7.26-linux-glibc2.12-x86_64/ mysql[root@docker local]# groupadd mysql[root@docker local]# useradd -r -g mysql mysql ##創建系統用戶,并設置組[root@docker local]# chown -R mysql . ## 設置軟件產品目錄的屬主[root@docker local]# chgrp -R mysql .[root@docker local]# vim /etc/profile.d/mysql.sh ##添加環境變量,添加如下內容export MYSQL_HOME=/usr/local/mysqlexport PATH=$MYSQL_HOME/bin:$PATH[root@docker local]# source /etc/profile[root@docker mysql]# cp support-files/mysql.server /etc/init.d/mysqld ##添加啟動uni files/mysql[root@centos7 mysql_data]# systemctl stop firewalld.service ##關閉防火墻[root@centos7 mysql_data]# systemctl disable firewalld.service [root@centos7 mysql_data]# vim /etc/hosts添加如下內容:192.168.56.141 centos7.node2192.168.56.149 docker.node01192.168.56.150 centos7.node1[root@centos7 mysql_data]# vim /etc/my.cnf ###添加內容,下面的配置每臺機器注意修改server-id、report_host、bind_address、group_replication_local_address都不一樣,其它都一樣[client]user=rootpassword=wiki123[mysqld]########basic settings########server-id = 11port = 3306user = mysqlbind_address = 192.168.56.149report_host=192.168.56.149report_port=3306autocommit = 0character_set_server=utf8mb4skip_name_resolve = 1max_connections = 800max_connect_errors = 1000datadir = /data/mysql_datatransaction_isolation = READ-COMMITTEDexplicit_defaults_for_timestamp = 1join_buffer_size = 134217728tmp_table_size = 67108864tmpdir = /tmpmax_allowed_packet = 16777216sql_mode = "STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER"interactive_timeout = 1800wait_timeout = 1800read_buffer_size = 16777216read_rnd_buffer_size = 33554432sort_buffer_size = 33554432########log settings########log_error = error.logslow_query_log = 1slow_query_log_file = slow.loglog_queries_not_using_indexes = 1log_slow_admin_statements = 1log_slow_slave_statements = 1log_throttle_queries_not_using_indexes = 10expire_logs_days = 90long_query_time = 2min_examined_row_limit = 100########replication settings########master_info_repository = TABLErelay_log_info_repository = TABLElog_bin = bin.logsync_binlog = 1gtid_mode = onenforce_gtid_consistency = 1log_slave_updatesbinlog_format = rowbinlog_checksum=NONErelay_log = relay.logrelay_log_recovery = 1binlog_gtid_simple_recovery = 1slave_skip_errors = ddl_exist_errors########innodb settings########innodb_page_size = 8192innodb_buffer_pool_size = 2Ginnodb_buffer_pool_instances = 8innodb_buffer_pool_load_at_startup = 1innodb_buffer_pool_dump_at_shutdown = 1innodb_lru_scan_depth = 2000innodb_lock_wait_timeout = 5innodb_io_capacity = 4000innodb_io_capacity_max = 8000innodb_flush_method = O_DIRECTinnodb_file_format = Barracudainnodb_file_format_max = Barracudainnodb_log_group_home_dir = /redolog/innodb_undo_directory = /undolog/innodb_undo_logs = 128innodb_undo_tablespaces = 3innodb_flush_neighbors = 1innodb_log_file_size = 1Ginnodb_log_buffer_size = 524288 ##512Minnodb_purge_threads = 4innodb_large_prefix = 1innodb_thread_concurrency = 64innodb_print_all_deadlocks = 1innodb_strict_mode = 1innodb_sort_buffer_size = 67108864########semi sync replication settings########plugin_dir=/usr/local/mysql/lib/pluginplugin_load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so;group_replication=group_replication.so"###group_replication.so是mgr插件loose_rpl_semi_sync_master_enabled = 1loose_rpl_semi_sync_slave_enabled = 1loose_rpl_semi_sync_master_timeout = 5000####MGR SETTING#######loose-group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"loose-group_replication_start_on_boot=OFFloose-group_replication_local_address= "docker.node01:33061"loose-group_replication_group_seeds= "docker.node01:33061,centos7.node1:33061,centos7.node2:33061"loose-group_replication_bootstrap_group=OFF[mysqld-5.7]innodb_buffer_pool_dump_pct = 40innodb_page_cleaners = 4innodb_undo_log_truncate = 1innodb_max_undo_log_size = 524288 ##512Minnodb_purge_rseg_truncate_frequency = 128binlog_gtid_simple_recovery=1log_timestamps=systemtransaction_write_set_extraction=XXHASH64show_compatibility_56=on創建目錄(所有節點操作):創建my.cnf配置文件中的全部目錄,并授權,下面以datadir = /data/mysql_data為例[root@docker local]# mkdir -pv /data/mysql_data[root@docker local]# chown -R mysql:mysql /data[root@docker local]# chmod -R 770 /data#######################################到這里,安裝的準備工作已經完成,下面開始初始化數據庫初始化數據庫(所有節點操作)[root@docker local]# mysqld --initialize --user=mysql[root@docker local]# mysqld_safe --user=mysql & ##啟動數據庫#######################################到這里,所有節點的數據都已經出事化完畢1.3.4 設置復制賬號(所有節點操作)mysql> SET SQL_LOG_BIN=0;mysql> CREATE USER repl@'%' IDENTIFIED BY 'repl';mysql> GRANT REPLICATION SLAVE ON *.* TO repl@'%';mysql> FLUSH PRIVILEGES;mysql> SET SQL_LOG_BIN=1;mysql> CHANGE MASTER TO MASTER_USER='repl', MASTER_PASSWORD='repl' FOR CHANNEL 'group_replication_recovery';1.3.5 啟動MGR單主模式# 啟動MGR,在主庫(192.168.56.149)上執行mysql> SET GLOBAL group_replication_bootstrap_group=ON;mysql> START GROUP_REPLICATION;mysql> SET GLOBAL group_replication_bootstrap_group=OFF;# 查看MGR組信息mysql> SELECT * FROM performance_schema.replication_group_members;+---------------------------+--------------------------------------+----------------+-------------+--------------+| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |+---------------------------+--------------------------------------+----------------+-------------+--------------+| group_replication_applier | 16855150-f223-11e9-9b22-000c294aef44 | 192.168.56.149 | 3306 | ONLINE |+---------------------------+--------------------------------------+----------------+-------------+--------------+# 其他節點加入MGR,在從庫(192.168.56.150,192.168.56.141)上執行mysql> START GROUP_REPLICATION; ##啟動時報錯ERROR 3092 (HY000): The server is not configured properly to be an active member of the group. Please see more details on error log.出現這個現象的原因:MySQL是新裝的沒問題,但是每次新裝MySQL都要修改密碼,如果在修改密碼的時候就已經把binlog_format=on配在了/etc/my.cnf中,那么修改密碼的記錄是存在在binlog日志中的。所以就會提示前文中的日志錯誤。解決方案(每一個從節點執行):mysql> RESET MASTERmysql> START GROUP_REPLICATION; ##從新啟動,問題解決(錯誤解決參考鏈接:https://blog.csdn.net/snowhite91/article/details/83791997)# 查看MGR組信息(在主庫(192.168.56.149)上執行)mysql> SELECT * FROM performance_schema.replication_group_members;+---------------------------+--------------------------------------+----------------+-------------+--------------+| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |+---------------------------+--------------------------------------+----------------+-------------+--------------+| group_replication_applier | 16855150-f223-11e9-9b22-000c294aef44 | 192.168.56.149 | 3306 | ONLINE || group_replication_applier | 2d1b48ec-dbd1-11e9-9f76-000c2995d20d | 192.168.56.141 | 3306 | ONLINE || group_replication_applier | 6bd815d0-f22b-11e9-b02f-000c29b9031b | 192.168.56.150 | 3306 | ONLINE |+---------------------------+--------------------------------------+----------------+-------------+--------------+mysql> show variables like '%read_only%';##192,168.56.149自動為讀寫+-----------------------+-------+| Variable_name | Value |+-----------------------+-------+| read_only | OFF || super_read_only | OFF |其它庫,默認啟動就為只讀mysql> show variables like '%read_only%';+-----------------------+-------+| Variable_name | Value |+-----------------------+-------+| read_only | ON || super_read_only | ON |可以看到,3個節點狀態為online,并且主節點為192.168.56.149,只有主節點可以寫入,其他節點只讀,MGR單主模式搭建成功1.3.6 測試插入數據mysql> create table t1(a int);mysql> insert into t1 values(1),(2),(3);ERROR 3098 (HY000): The table does not comply with the requirements by an external plugin.錯誤的原因是在MGR下,表必須要有主鍵mysql> create table t1(a int primary key);mysql> insert into t1 values(1),(2),(3);Query OK, 3 rows affected (0.00 sec)二、將單主模式切換為多主模式2.1 要求MGR切換模式需要重新啟動組復制,因些需要在所有節點上先關閉組復制,設置 group_replication_single_primary_mode=OFF 等參數,再啟動組復制。2.2 切換步驟# 停止組復制(所有節點執行):mysql> stop group_replication;mysql> set global group_replication_single_primary_mode=OFF;mysql> set global group_replication_enforce_update_everywhere_checks=ON;# 隨便選擇某個節點執行mysql> SET GLOBAL group_replication_bootstrap_group=ON; mysql> START GROUP_REPLICATION; mysql> SET GLOBAL group_replication_bootstrap_group=OFF;# 其他節點執行mysql> START GROUP_REPLICATION; # 查看組信息,所有節點的 MEMBER_ROLE 都為 PRIMARYmysql> SELECT * FROM performance_schema.replication_group_members;+---------------------------+--------------------------------------+----------------+-------------+--------------+| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |+---------------------------+--------------------------------------+----------------+-------------+--------------+| group_replication_applier | 16855150-f223-11e9-9b22-000c294aef44 | 192.168.56.149 | 3306 | ONLINE || group_replication_applier | 2d1b48ec-dbd1-11e9-9f76-000c2995d20d | 192.168.56.141 | 3306 | ONLINE || group_replication_applier | 6bd815d0-f22b-11e9-b02f-000c29b9031b | 192.168.56.150 | 3306 | ONLINE |+---------------------------+--------------------------------------+----------------+-------------+--------------+可以看到所有節點狀態都是online,都可以讀寫,角色都是PRIMARY,MGR多主模式搭建成功。三、從多主切換為單主# 所有節點執行mysql> stop group_replication;mysql> set global group_replication_enforce_update_everywhere_checks=OFF;mysql> set global group_replication_single_primary_mode=ON;# 主節點(192.168.56.149)執行SET GLOBAL group_replication_bootstrap_group=ON; START GROUP_REPLICATION; SET GLOBAL group_replication_bootstrap_group=OFF;# 從節點(192.168.56.150、192.168.56.149)執行START GROUP_REPLICATION; # 查看MGR組信息mysql> SELECT * FROM performance_schema.replication_group_members;
?
總結
以上是生活随笔為你收集整理的mysql5.7.26搭建MGR单主及多主模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 移动互联网SP计费
- 下一篇: linux cmake编译源码,linu