一:环境介绍
  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 做一个详细的介绍。水平有限,文中如果有不当或者错误之处,欢迎大家拍砖给我发邮件(chenzhaoguang00@126.com)。欢迎转载,转载请注明来源即可。

MySQL Group Relication 部署环境入门篇的更多相关文章

  1. 使用 gulp 搭建前端环境入门篇(转载)

    本文转载自: 使用 gulp 搭建前端环境入门篇

  2. MGR(MySQL Group Replication)部署测试

    1. 环境说明 192.168.11.131 mgr1 主节点 192.168.11.132 mgr2 从节点 192.168.11.133 mgr3 从节点 2. 在mgr1.mgr2.mgr3上安 ...

  3. 【Mysql sql inject】【入门篇】sqli-labs使用 part 4【18-20】

    这几关的注入点产生位置大多在HTTP头位置处 常见的HTTP注入点产生位置为[Referer].[X-Forwarded-For].[Cookie].[X-Real-IP].[Accept-Langu ...

  4. 【Mysql sql inject】【入门篇】SQLi-Labs使用 part 1【01-11】

    人员流动性过大一直是乙方公司痛点.虽然试用期间都有岗前学习,但老员工忙于项目无暇带新人成长,入职新人的学习基本靠自己不断摸索.期望看相关文档就可以一蹴而是不现实的.而按部就班的学习又很难短期内将知识有 ...

  5. 【Mysql sql inject】【入门篇】sqli-labs使用 part 3【15-17】

      Less-15- Blind- Boolian Based- String 1)工具用法: sqlmap -u --batch --technique BEST 2)手工注入 时间盲注放弃用手工了 ...

  6. 【Mysql sql inject】【入门篇】SQLi-Labs使用 part 2【12-14】

    这几关主要是考察POST形式的SQLi注入闭合 ## Less-12 - POST - Error Based- Double quotes- String ### 1)知识点 主要考察报错注入中的双 ...

  7. CentOS7 + Python3 + Django(rest_framework) + MySQL + nginx + uwsgi 部署 API 开发环境, 记坑篇

    CentOS7 + Python3 + Django(rest_framework) + MySQL + nginx + uwsgi 部署 API 开发环境 CentOS7 + Python3 + D ...

  8. Hadoop生态圈-Hive快速入门篇之Hive环境搭建

    Hadoop生态圈-Hive快速入门篇之Hive环境搭建 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.数据仓库(理论性知识大多摘自百度百科) 1>.什么是数据仓库 数据 ...

  9. MySQL 5.7.17 Group Relication(组复制)搭建手册【转】

    本博文介绍了Group Replication的两种工作模式的架构.并详细介绍了Single-Master Mode的部署过程,以及如何切换到Multi-Master Mode.当然,文末给出了Gro ...

随机推荐

  1. hadoop2.x源码编译

    转载请标明出处: http://blog.csdn.net/zwto1/article/details/50733753: 介绍 本篇主要会涉及以下内容: 学会编译hadoop2.x源码 编译hado ...

  2. Unity3D 打包Standalone(exe文件) Shader丢失

    Shader丢失算是老生常谈了 从刚开始接触Unity时,从别的地方拿过来模型导入 就认识了一个标志性的颜色 就是粉色,或者是紫色 当在Unity中遇到这种颜色 不用怀疑 绝对是Shader或者材质丢 ...

  3. oracle 10g数据库下的 XDB组件的重新安装

    emmmm,这是一个不做死就不会的过程!!! 今天在导出数据库时,遇到了报错信息,其实开发说这个报错没关系了,但作死如楼主,一定要把这个错给解决了,然后就有了下面的作死过程. 错误关键字是:packa ...

  4. openlayers渲染mapbox gl的vector tile

    准备条件 https://openlayers.org/en/v4.6.5/build/ol.js https://cdn.polyfill.io/v2/polyfill.min.js DEMO &l ...

  5. 问题排查:The requested URL /test/index.jsp was not found on this server

    问题描述 添加一个新模块,部署在服务器上.服务器上还部署有其他模块且访问正常,新模块和其他模块共用同一个域名.服务部署之后,请求如下: http://my.domain.com/test/index. ...

  6. python爬微信公众号前10篇历史文章(1)-思路概览

    作为程序员,要时刻保持一颗好奇心和想要学习的姿态. 练习怎样利用搜狗微信爬取某指定微信公众号的历史文章.爬取微信公众号本身难度非常大,感谢搜狗提供了一个可以爬取数据的平台. 代码部分参考于: http ...

  7. 利用sfc文件构建网络渗透

      收集哈希 SCF(Shell命令文件)文件可用于执行一组有限的操作,例如显示Windows桌面或打开Windows资源管理器,这并不是什么新鲜事.然而,一个SCF文件可以用来访问一个特定的UNC路 ...

  8. python变量定义和定义规范

    变量定义的规则: 变量名只能是 字母.数字或下划线的任意组合 变量名的第一个字符不能是数字 以下关键字不能声明为变量名['and', 'as', 'assert', 'break', 'class', ...

  9. 用IDEA在Tomcat上部署项目

    其实每次在需要运行的jsp页面右键=>run也是可以运行的,但是会出现下面这样 正常应该Run==>Edit Con-- 这时候将看到这个页面,千万不要在Defaults中招Tomcat配 ...

  10. poj-1131-(大数)八进制转化成十进制

    Description Fractions in octal (base 8) notation can be expressed exactly in decimal notation. For e ...