動態建立MySQL Group Replication的節點(r11筆記第84天)
前幾天分享了下搭建MySQL Group Replication的指令碼,其實感覺還是不太踏實,雖然我成功搭建了3個節點的環境,但是有不少問題還沒有解決,甚至是特意避開了。
1.節點數都是在指令碼里固定的,想搭建4個,6個節點的,完全適應不了
2.模板臃腫,每個節點一個引數模板,其實就幾個引數不一樣
3.單主模式下的節點,其實就一個寫節點的配置略有不同,其它節點配置都是一樣的,但是指令碼里也是寫固定了。
4.埠也是寫固定了,沒法再改了。
。。。。
我能夠一口氣列出很多很多的缺點,但是你說這麼多缺點,搭建3個節點耗時多少,大概不到1分鐘,明顯滿足需求。
在這個方面,看著臃腫的指令碼就有些難受,我決定做些什麼,我自己在想,我想搭建5個節點的環境,能不能秒級完成,最多的節點數是9個,我能不能1分鐘左右模擬出來這個超限的錯誤。所以我重新改了一版指令碼,把之前碰到的問題大部分都做了整合。
◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆首先說兩個配置檔案。這個檔案是動態搭建的核心,每個節點的埠號,節點的編碼(自定義),是否為主節點等都一一做了標識。
[root@grtest data]# cat init.lst
24801 s1 24901 Y
24802 s2 24902 N
24803 s3 24903 N
24804 s4 24904 N
24805 s5 24905 N
24806 s6 24906 N
24807 s7 24907 N
24808 s8 24908 N
24809 s9 24909 N接下來就是引數檔案,裡面的動態部分都使用變數來達到動態替換的效果。
[root@grtest data]# cat s.cnf
[mysqld]
# server configuration
datadir=${base_data_dir}/${node_name}
basedir=${base_dir}
port=${port}
socket=${base_data_dir}/${node_name}/${node_name}.sock
server_id=${port}
gtid_mode=ON
enforce_gtid_consistency=ON
master_info_repository=TABLE
relay_log_info_repository=TABLE
binlog_checksum=NONE
log_slave_updates=ON
log_bin=binlog
binlog_format=ROW
transaction_write_set_extraction=XXHASH64
loose-group_replication_group_name="1bb1b861-f776-11e6-be42-782bcb377193"
loose-group_replication_start_on_boot=off
loose-group_replication_local_address= "127.0.0.1:${v_port}"
loose-group_replication_group_seeds= "${seed_list}"
loose-group_replication_bootstrap_group= off其中難點在於引數group_replication_group_seeds=這個引數值需要花點功夫拼出來。
除此之外,就沒有其它的配置檔案了,直接上我們的核心指令碼。
get_seed_list就是特別處理引數group_replication_group_seeds的值,init_node用來初始化各個節點。
base_dir=/usr/local/mysql
base_data_dir=/home/mysql/data
function get_seed_list
{
while read line
do
tmp_port='127.0.0.1:'`echo $line|awk '{print $3}'`
echo ${tmp_port}
done <init.lst|xargs |sed 's/ /,/g'
}
export seed_list=`get_seed_list`
#echo ${seed_list}
function init_node
{
echo $seed_list
port=$1
node_name=$2
v_port=$3
primary_flag=$4
${base_dir}/bin/mysqld
--initialize-insecure --basedir=${base_dir}
--datadir=${base_data_dir}/${node_name}
--explicit_defaults_for_timestamp
chown -R mysql:mysql ${base_data_dir}/${node_dir}
cp ${base_data_dir}/s.cnf ${base_data_dir}/${node_name}/${node_name}.cnf
sed -i 's:${base_data_dir}:'"${base_data_dir}:g"'' ${base_data_dir}/${node_name}/${node_name}.cnf
sed -i 's:${base_dir}:'"${base_dir}:g"'' ${base_data_dir}/${node_name}/${node_name}.cnf
sed -i 's:${node_name}:'"${node_name}:g"'' ${base_data_dir}/${node_name}/${node_name}.cnf
sed -i 's:${port}:'"${port}:g"'' ${base_data_dir}/${node_name}/${node_name}.cnf
sed -i 's:${v_port}:'"${v_port}:g"'' ${base_data_dir}/${node_name}/${node_name}.cnf
sed -i 's/${seed_list}/'"${seed_list}/g"'' ${base_data_dir}/${node_name}/${node_name}.cnf
chown -R mysql:mysql ${base_data_dir}/${node_name}
${base_dir}/bin/mysqld_safe --defaults-file=${base_data_dir}/${node_name}/${node_name}.cnf &
sleep 5
${base_dir}/bin/mysql -P${port} -S ${base_data_dir}/${node_name}/${node_name}.sock -e "show databases"
if [[ ${primary_flag} = 'Y' ]];then
mysql -P${port} -S ${base_data_dir}/${node_name}/${node_name}.sock -e "
SET SQL_LOG_BIN=0;
CREATE USER rpl_user@'%';
GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%' IDENTIFIED BY 'rpl_pass';
FLUSH PRIVILEGES;
SET SQL_LOG_BIN=1;
CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='rpl_pass'
FOR CHANNEL 'group_replication_recovery';
INSTALL PLUGIN group_replication SONAME 'group_replication.so';
SET GLOBAL group_replication_bootstrap_group=ON;
START GROUP_REPLICATION;
SET GLOBAL group_replication_bootstrap_group=OFF;
select *from performance_schema.replication_group_members;
"
elif [[ ${primary_flag} = 'N' ]];then
mysql -P${port} -S ${base_data_dir}/${node_name}/${node_name}.sock -e "
SET SQL_LOG_BIN=0;
CREATE USER rpl_user@'%';
GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%' IDENTIFIED BY 'rpl_pass';
SET SQL_LOG_BIN=1;
CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='rpl_pass'
FOR CHANNEL 'group_replication_recovery';
INSTALL PLUGIN group_replication SONAME 'group_replication.so';
set global group_replication_allow_local_disjoint_gtids_join=on;
start group_replication;
select *from performance_schema.replication_group_members;
"
else
echo 'Please check variable primary_flag'
fi
}
#MAIN
while read line
do
echo ${seed_list}
init_node $line
done <init.lst我們花一兩分鐘來模擬一下節點數超限的問題。
即在init.lst新增10個節點資訊。
很快就得到了報錯資訊:
ERROR 3191 (HY000) at line 10: The START GROUP_REPLICATION command failed since the group already has 9 members.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-2134189/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 分分鐘搭建MySQL Group Replication測試環境(r11筆記第83天)MySql筆記
- 配置Mysql Group Replication遇到的問題筆記MySql筆記
- MySQL Group ReplicationMySql
- MYSQL Group Replication搭建過程記錄MySql
- 分分鐘搭建MySQL Group Replication測試環境(二)(r12筆記第41天)MySql筆記
- 系統變數group_replication_group_seeds為空導致MySQL節點無法啟動組複製變數MySql
- MySQL 8.0 Reference Manual(讀書筆記90節--Replication)MySql筆記
- MySQL group replication介紹MySql
- MySQL Group Replication小試MySql
- MySQL中的undo截斷(r11筆記第89天)MySql筆記
- 【Mysql】MySQL5.7.17- Group Replication搭建MySql
- MySQL 8.0 Reference Manual(讀書筆記91節--Replication(2))MySql筆記
- MySQL 8.0 Reference Manual(讀書筆記92節--Replication(3))MySql筆記
- MySQL 8.0 Reference Manual(讀書筆記93節--Semisynchronous Replication)MySql筆記
- MySQL 8.0 Reference Manual(讀書筆記94節--Replication(5))MySql筆記
- JavaScript動態建立文字節點JavaScript
- MySQL中的半同步複製(r11筆記第65天)MySql筆記
- MySQL 5.7 General Tablespace學習(r11筆記第34天)MySql筆記
- MySQL Online DDL(二)(r11筆記第88天)MySql筆記
- MySQL Group Replication 學習(部署篇)MySql
- MySQL引數對比淺析(r11筆記第97天)MySql筆記
- 返京途中(r11筆記第61天)筆記
- MGR(MySQL Group Replication)部署搭建測試MySql
- 使用sysbench壓力測試MySQL(一)(r11筆記第3天)MySql筆記
- 動態建立節點並且給建立的元素新增屬性
- Data Guard故障自動切換的想法(r11筆記第40天)筆記
- 我的女兒二三事(r11筆記第87天)筆記
- MySQL和Oracle行值表示式對比(r11筆記第74天)MySqlOracle筆記
- MySQL 5.7組複製(group replication)的要求和限制MySql
- MySQL 5.7.17 組複製(group replication)的要求和限制MySql
- 淺談MySQL中的事務隔離級別(r11筆記第86天)MySql筆記
- 用Oracle的眼光來學習MySQL 5.7的sys(上)(r11筆記第24天)OracleMySql筆記
- 用Oracle的眼光來學習MySQL 5.7的sys(下)(r11筆記第25天)OracleMySql筆記
- 需要了解的pssh(r11筆記第28天)筆記
- 我眼中的寶雞景點(r11筆記第53天)筆記
- 我眼中的兵馬俑(r11筆記第55天)筆記
- MySQL誤運算元據恢復的簡單實踐(r11筆記第67天)MySql筆記
- Data Guard實現故障自動切換(二)(r11筆記第39天)筆記