前几天分享了下搭建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.

动态创建MySQL Group Replication的节点(r11笔记第84天)相关推荐

  1. mysql group replication 安装配置详解

    一.原起: 之前也有写过mysql-group-replication (mgr) 相关的文章.那时也没有什么特别的动力要写好它.主要是因为在 mysql-5.7.20 之前的版本的mgr都有着各种各 ...

  2. MySQL Group Replication [Single-Primary Mode] 详细搭建部署过程

    1,关于MySQL Group Replication 基于组的复制(Group-basedReplication)是一种被使用在容错系统中的技术.Replication-group(复制组)是由能够 ...

  3. MySQL Group Replication [Multi-Primary Mode] 详细搭建部署过程

    1,关于MySQL Group Replication 基于组的复制(Group-basedReplication)是一种被使用在容错系统中的技术.Replication-group(复制组)是由能够 ...

  4. MySQL Group Replication 学习(部署篇)

    MySQL5.7版本出来有很长时间了,之前也装了玩了下,大概了解了部分功能和特性,但没有系统的学习和测试其主要新增功能,最近也特意抽出时间想去多了解了解,学习学习5.7的主要新特性,这里主要是针对其最 ...

  5. MySQL group replication

    本篇文章主要讲解MySQL group replication介绍,文中有关MySQL,group的内容,希望对大家有所帮助. "MySQL group replication" ...

  6. MySQL Group Replication调研剖析

    以下转自 http://www.iteye.com/news/32090 MySQL Group Replication调研剖析 引用 作者简介:王伟,京东基础平台数据库工程师,京东商城基础平台部门包 ...

  7. MySQL Group Replication 介绍

    2016-12-12,一个重要的日子,mysql5.7.17 GA版发布,正式推出Group Replication(组复制) 插件,通过这个插件增强了MySQL原有的高可用方案(原有的Replica ...

  8. MySQL Group Replication数据安全性保障

    本文来自数据库内核专栏 在之前的文章中,介绍了MGR对数据可靠性.可用性和一致性的实现方案.简单来说,MGR通过基于paxos协议的多副本来实现数据的可靠性,通过多副本上的majority机制来实现可 ...

  9. 从源码分析 MySQL Group Replication 的流控机制

    Group Replication 是一种 Shared-Nothing 的架构,每个节点都会保留一份数据. 虽然支持多点写入,但实际上系统的吞吐量是由处理能力最弱的那个节点决定的. 如果各个节点的处 ...

最新文章

  1. 建博客的原因。。。。
  2. 批量设置word文档的页面格式 word vba代码注释
  3. java 构造方法和析构方法_PHP面向对象程序设计之构造方法和析构方法详解
  4. Java内存管理:深入Java内存区域
  5. 牛客14718 开心的涂刷
  6. java接口+Java支持多继承吗?
  7. elementUI使用
  8. namenode的元数据会被删除吗_欠阿里云0.01元,欠费15天后数据被删除了
  9. 索要ValidateTextBox控件Source Code的朋友rickel****@gmail.com,邮件退回了。各位,与我通信,请不要使用GMAIL,烦。...
  10. 新手学Docker(1)Hello World
  11. 视频教程-OllyDbg(OD)使用教程-其他
  12. 2019年互联网裁员名单
  13. win8计算机休眠的区别,win8系统的休眠和睡眠有什么区别?如何用?
  14. 第一节 细胞是生命活动的基本单位
  15. 01 HA haproxy 功能简介以及应用
  16. [Excel启用编辑]的影响与关闭
  17. 析测结Trimble TILOS v9.0 1CD
  18. 半导体物理实验 04 - | 椭圆仪测量薄膜厚度
  19. Java+MySQL基于Springboot口腔牙科诊所管理系统#毕业设计
  20. [乐意黎转载]CentOS yum 源的配置与使用

热门文章

  1. 解决POI大数据导出Excel内存溢出、应用假死
  2. 百度竞价初学者怎样才能建立一个好的思路
  3. 采访《以魂为中心的领导力》作者之问答
  4. 学 shell (1/5)
  5. 2018计算机专业考研34所,2018考研:计算机专业全球院校排名公布,上海交通大学竟排第一?...
  6. python笑傲江湖统计字数_Udacity.深度学习.用 Python 统计字数.2017-10-30
  7. android:configChanges属性
  8. Linux 删除除某个文件之外的所有文件
  9. 远程分支和本地分支的相互创建和跟踪
  10. 开发了个 Flipper 调试工具的 Flutter 版本 SDK,让 Flutter 应用调试起来更容易 1