1. 程式人生 > >MySQL Group Relication 部署環境入門篇

MySQL Group Relication 部署環境入門篇

_id repo none 主從搭建 pct 插入數據 extend 端口 basedir

一:環境介紹 cenos 6.7 版本 數據庫的版本5.7.19 二:部署規劃單機多實例的部署
端口號 數據目錄 group_repplicatoon 通信接口
3307 /data/mysql/mysql_3306{data,logs,tmp} 23307
3308 /data/mysql/mysql_3307{data,logs,tmp} 23308
3309 /data/mysql/mysql_3308{data,logs,tmp} 23309

環境的準備:

# cd /opt/mysql/ # tar zxvf /path/mysql-5.7.19-linux-glibc2.12-x86_64.tar.gz # cd /usr/local #ln -s /opt/mysql/mysql-5.7.19-linux-glibc2.12-x86_64 mysql 創建數據庫實列需要的數據目錄 # /data/mysql/mysql_3306/{data,logs,tmp} # /data/mysql/mysql_3307/{data,logs,tmp} #/data/mysql/mysql_3308/{data,logs,tmp} 更改目錄的權限: chown -R mysql:mysql /data/mysql/ 配置文件:
#my.cnf [client] port = 3307 socket = /tmp/mysql3307.sock [mysql] prompt="\\u@\\h:\\p [\\d]> #pager="less -i -n -S" #tee=/home/mysql/query.log no-auto-rehash [mysqld] #misc user = mysql basedir = /usr/local/mysql datadir = /data/mysql/mysql_3306/data port = 3306 socket = /tmp/mysql3306.sock event_scheduler = 0 tmpdir=/data/mysql/mysql_3306/tmp #timeout interactive_timeout = 300 wait_timeout = 300 #character set character-set-server = utf8 open_files_limit = 65535 max_connections = 100 max_connect_errors = 100000 # explicit_defaults_for_timestamp #logs log-output=file slow_query_log = 1 slow_query_log_file = slow.log log-error = error.log log_error_verbosity=3 pid-file = mysql.pid long_query_time = 1 #log-slow-admin-statements = 1 #log-queries-not-using-indexes = 1 log-slow-slave-statements = 1 #binlog binlog_format = row log-bin = /data/mysql/mysql_3306/logs/mysql-bin binlog_cache_size = 1M max_binlog_size = 200M max_binlog_cache_size = 2G sync_binlog = 0 expire_logs_days = 10 #group replication server_id=1013307 gtid_mode=ON enforce_gtid_consistency=ON master_info_repository=TABLE relay_log_info_repository=TABLE binlog_checksum=NONE log_slave_updates=ON binlog_format=ROW transaction_write_set_extraction=XXHASH64 loose-group_replication_group_name="3db33b36-0e51-409f-a61d-c99756e90155" loose-group_replication_start_on_boot=off loose-group_replication_local_address= "192.168.5.100:23307" ###註意端口號,要區分開,不要和我們默認的3306混淆了 loose-group_replication_group_seeds= "192.168.5.100:23307,192.168.5.100:23308,192.168.5.100:23309" loose-group_replication_bootstrap_group= off loose-group_replication_single_primary_mode=off loose-group_replication_enforce_update_everywhere_checks=on #relay log skip_slave_start = 1 max_relay_log_size = 500M relay_log_purge = 1 relay_log_recovery = 1 #slave-skip-errors=1032,1053,1062 #buffers & cache table_open_cache = 2048 table_definition_cache = 2048 table_open_cache = 2048 max_heap_table_size = 96M sort_buffer_size = 2M join_buffer_size = 2M thread_cache_size = 256 query_cache_size = 0 query_cache_type = 0 query_cache_limit = 256K query_cache_min_res_unit = 512 thread_stack = 192K tmp_table_size = 96M key_buffer_size = 8M read_buffer_size = 2M read_rnd_buffer_size = 16M bulk_insert_buffer_size = 32M #myisam myisam_sort_buffer_size = 128M myisam_max_sort_file_size = 10G myisam_repair_threads = 1 #innodb innodb_buffer_pool_size = 100M innodb_buffer_pool_instances = 1 innodb_data_file_path = ibdata1:100M:autoextend innodb_flush_log_at_trx_commit = 2 innodb_log_buffer_size = 64M innodb_log_file_size = 256M innodb_log_files_in_group = 3 innodb_max_dirty_pages_pct = 90 innodb_file_per_table = 1 innodb_rollback_on_timeout innodb_status_file = 1 innodb_io_capacity = 2000 transaction_isolation = READ
初始化第一個節點: /usr/local/mysql/bin/mysqld --defaults-file=/data/mysql/mysql_3306.cnf --initialize-insecure 啟動第一個節點 /usr/local/mysql/bin/mysql/mysql_3306/my_3306.cnf& 創建復制賬號
#mysql>SET SQL_LOG_BIN=0 #mysql>CREATE USER rpl_user@‘%‘; #mysql>GRANT REPLICATION SLAVE ON *.* TO ‘rpl_user‘@‘%‘ identified by ‘123456‘; #mysql>SET SQL_LOG_BIN=1
搭建主從:
change master to master_user=‘rpl_user‘,MASTER_PASSWORD=‘123456‘ for channel ‘group_replication_recovery‘;
加載 group replication 的plugin
install plugin group_replication soname ‘group_replication.so‘;
查看 我們剛剛加載的插件:SHOW PLUGINS 技術分享圖片

啟動第一個節點的 Group Replication:
#mysql> set global group_replication_bootstrap_group=ON; # 只在第一個節點使用 #mysq>START GROUP_REPLICATION;
停止組復制:
stop group_replication;
確認節點加入情況:
select * from performance_schema.replication_group_members;
確認每個節點加入成功 技術分享圖片

創建一個測試庫

create database czg; use czg; create table t1 (id int not null,name varchar(32), primary key(id)); insert into t1 values(1,‘chen‘),(‘2‘,‘zhang‘);
第二個節點的安裝: 初始化實列:
./mysqld --defaults-file=/data/mysql/mysql_3308/my_3308.cnf --initialize-insecure
建立復制賬號:
#mysql>SET SQL_LOG_BIN=0 #mysql>CREATE USER rpl_user@‘%‘; #mysql>GRANT REPLICATION SLAVE ON *.* TO ‘rpl_user‘@‘%‘ identified by ‘123456‘; #mysql>SET SQL_LOG_BIN=1
搭建主從:
change master to master_user=‘rpl_user‘,MASTER_PASSWORD=‘123456‘ for channel ‘group_replication_recovery‘;
加載 group replication 的plugin
install plugin group_replication soname ‘group_replication.so‘;
確認節點加入的情況:
select * from performance_schema.replication_group_members;
技術分享圖片

第三個節點的安裝:

初始化實列

./mysqld --defaults-file=/data/mysql/mysql_3309/my_3309.cnf --initialize-insecure

創建復制的賬號:
#mysql>SET SQL_LOG_BIN=0 #mysql>CREATE USER rpl_user@‘%‘; #mysql>GRANT REPLICATION SLAVE ON *.* TO ‘rpl_user‘@‘%‘ identified by ‘123456‘; #mysql>SET SQL_LOG_BIN=1
搭建主從
change master to master_user=‘rpl_user‘,MASTER_PASSWORD=‘123456‘ for channel ‘group_replication_recovery‘;
加載 group replication 的plugin
install plugin group_replication soname ‘group_replication.so‘;
確認節點加入的情況 技術分享圖片

測試:我在第3個節點插入數據: 技術分享圖片

其它兩臺的機器也會看到新增加數據

技術分享圖片

技術分享圖片

到此我們的主從環境就算搭建完成。

小結:其實環境的搭建還是比較的簡單,你只要按文檔說明基本能順利的搭建下來。

註意事項:

集群工作的兩種模式 基於sigle-master 環境(參考下面的圖1) 在Group Repilication 配置中,默認的模式是:Single-master 模式,在Singel-master模式中,只有一個節點是可以進行寫操作,其它節點是開啟著:read-only 模式。 當主節點掛了其他節點中會選舉出來一個new-master。這裏面看起來還是主從結構的概念。 在該流程中,主節點掛掉後,會從原來的節點選舉出一個節點成為新的primary節點,其它節點依舊是read-only狀態。 在single-master 模式中,可以利用下面SQL 發現誰是主節點:
select variable_value from performance_schema.global_status where variable_name=‘group_replication_primary_member‘;
基於multi-master環境((參考下面的圖2) 該結構不是默認模式,如果需要使用需要配置文件【mysqld】 部分添加: #multi-master loose-group_replication_single_primary_mode=off loose-group_replication_enforce_update_everywhere_checks=on 在該結構中需要註意,在使用中,不能同時在不同的節點對同一行數據進行update操作,如果進行,客戶端會收到報錯。在使用這個結構時,需要應用自己去控制並行度。 在該結構中,所有的節點上都可以進行寫和讀操作,任何一個節點掛掉後,可以從負載設備中自動摘除掉就可以,例如(haproxy,proxysql) 在 multi-master 結構中,使用下面語句查詢誰是主節點直接返回是一個空的,這個需要自己註意一下
select variable_value from performacne_schema.global_status where variable_name=‘group_repliation_primary_member‘;

技術分享圖片

技術分享圖片

另外一個問題就是啟動的問題:

集群重啟分成兩種情況 一類是:滾動重啟 節點啟動後,執行:start group_replication,確認狀態即可 二類是: 全部一塊重啟(集體掉電)第一個節點啟動(single-master & multi-master 都一樣) set global group_replication_bootstrap_group=on; start group_replication; 其他節點的啟動:start group_replication;

錯誤排查: 查看錯誤日誌文件;

技術分享圖片

看日誌就是我們的端口爭用。主要是我們的配置文件的時候,沒有把端口設置好,設置沖突了。

技術分享圖片

總結:主從搭建的環境就寫到這裏,後續還會針對Group Relication 做一個詳細的介紹。水平有限,文中如果有不當或者錯誤之處,歡迎大家拍磚給我發郵件([email protected])。歡迎轉載,轉載請註明來源即可。

MySQL Group Relication 部署環境入門篇