本文亦有参考网上其他资料,篇数较多不一一列出,在此提前一并致谢。

壹、首先MGR多主搭建过程:

环境准备:

VMware

CentOS Linux release 7.3.1611 (Core)

一台虚拟机,IP分配:192.168.1.78;端口使用3306
按照Mysql8.0的单机安装方式进行安装;

然后将该机复制两台,
分别修改IP为192.168.1.78和192.168.1.78,以及两台新机器配置文件的serverid;
vim /etc/hosts
192.168.1.78 mgr-mul1
192.168.1.79 mgr-mul2
192.168.1.80 mgr-mul3

一、单机安装(192.168.1.78)
修改系统的打开文件限制(选做):
vim /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535

配置文件:
vim /etc/my.cnf
-----------------------------------------------------------------------
[client] 
port                            = 3306
socket                          = /tmp/mysql3306.sock 
default_character_set           = utf8mb4

[mysql]
default_character_set           = utf8mb4
 
[mysqld] 
lower_case_table_names          = 1
port                            = 3306
basedir                         = /usr/local/mysql8
datadir                         = /data/mysql3306/mysql3306
socket                          = /tmp/mysql3306.sock
pid_file                        = /data/mysql3306/mysql3306.pid
tmpdir                          = /tmp/
default_authentication_plugin   = mysql_native_password
skip_name_resolve               = 1
character_set_server            = utf8mb4
collation_server                = utf8mb4_unicode_ci
max_connections                 = 2000
max_connect_errors              = 10000
interactive_timeout             = 600
wait_timeout                    = 600
table_open_cache                = 2048
thread_cache_size               = 51
max_allowed_packet              = 16M
tmp_table_size                  = 256M
max_heap_table_size             = 96M
sort_buffer_size                = 4M
read_buffer_size                = 4M #
join_buffer_size                = 4M
read_rnd_buffer_size            = 64M #
bulk_insert_buffer_size         = 64M #
log_error                       = /data/mysql3306/logs/mysql-error.log
log_timestamps                  = system
slow_query_log                  = 1 
slow_query_log_file             = /data/mysql3306/logs/mysql-slow.log
long_query_time                 = 1
log_queries_not_using_indexes   = 1 
log_throttle_queries_not_using_indexes =10
log_slow_admin_statements       = 1
log_slow_slave_statements       = 1
min_examined_row_limit          = 100
log_queries_not_using_indexes   = 1
log_output                      = FILE
relay_log                       = /data/mysql3306/mysql3306/mysql-relay
#binlog
server_id                       = 1783306
log_bin                         = /data/mysql3306/mysql3306/mysql-bin
binlog_expire_logs_seconds      =604800
binlog_format                   = row
max_binlog_size                 = 1024M
max_binlog_cache_size           = 8G
binlog_cache_size               = 4M
sync_binlog                     = 1
master_info_repository          = TABLE
relay_log_info_repository       = TABLE
relay_log_recovery              = ON
log_slave_updates                = 1
#innodb
default_storage_engine          = InnoDB 
innodb_page_size                = 16384
innodb_data_home_dir            = /data/mysql3306/mysql3306/
innodb_data_file_path           = ibdata1:512M:autoextend 
innodb_log_group_home_dir       = /data/mysql3306/mysql3306
innodb_buffer_pool_instances    = 1
innodb_buffer_pool_size         = 1024M
innodb_buffer_pool_dump_pct     = 40
innodb_page_cleaners            = 8
innodb_log_file_size            = 256M 
innodb_log_files_in_group       = 2
innodb_log_buffer_size          = 32M  #default 16M 
innodb_flush_log_at_trx_commit  = 1 
innodb_lock_wait_timeout        = 30 
innodb_strict_mode              = 1
innodb_print_all_deadlocks      = 1    
innodb_buffer_pool_load_at_startup = 1
innodb_buffer_pool_dump_at_shutdown = 1  
innodb_buffer_pool_dump_pct     = 40
innodb_open_files               = 65536
innodb_file_per_table           = 1
innodb_lock_wait_timeout        = 30
innodb_read_io_threads          = 8
innodb_write_io_threads         = 8
innodb_io_capacity              = 200
innodb_flush_log_at_trx_commit  = 1
innodb_flush_method             = O_DIRECT
innodb_purge_threads            = 4
innodb_max_dirty_pages_pct      = 75
transaction_isolation           = READ-COMMITTED
innodb_page_cleaners            = 16
explicit_defaults_for_timestamp = 1
#undo
innodb_undo_directory           = /data/mysql3306/mysql3306/
innodb_undo_tablespaces         = 3    
innodb_undo_log_truncate        = 1
innodb_max_undo_log_size        = 1000M
innodb_purge_rseg_truncate_frequency = 128
#rep
slave-parallel-type=LOGICAL_CLOCK
slave-parallel-workers=16
master_info_repository=TABLE
relay_log_info_repository=TABLE
relay_log_recovery=ON
binlog_checksum=NONE
slave_preserve_commit_order=1
#group_replication_flow_control_mode=DISABLED
log_slave_updates=1
#GR
enforce_gtid_consistency=1
gtid_mode = on
transaction_write_set_extraction    =XXHASH64      #    off
loose-group_replication_group_name    ="a876d35e-9110-11e6-a365-882b2b5s09d6" #注意格式,可以在某个库里使用SELECT UUID()生成。
loose-group_replication_local_address ="192.168.1.78:24900"  #本机IP
loose-group_replication_group_seeds    ="192.168.1.78:24900,192.168.1.79:24900,192.168.1.80:24900"   
loose-group_replication_bootstrap_group  =off      #    off
loose-group_replication_start_on_boot  =off #非常重要
[mysqldump]
max_allowed_packet              = 16M

[mysqldump] 
max_allowed_packet              = 16M 
-----------------------------------------------------------------------
初始化
/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --initialize-insecure  --basedir=/usr/local/mysql  --datadir=/data/mysql3306/mysql3306/ --explicit_defaults_for_timestamp --user=mysql
成功后datadir下应有22个文件。
启动
/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf --ledir=/usr/local/mysql/bin --datadir=/data/mysql3306/mysql3306 --user=mysql &

开机自启
echo "/usr/local/mysql8/bin/mysqld_safe --defaults-file=/etc/my.cnf --ledir=/usr/local/mysql8/bin --datadir=/data/mysql3306/mysql3306 --user=mysql &">>/etc/rc.local
登录建用户及授权:
mysql 
alter user root@localhost identified by '123456';
create user root@'192.168.1.%' identified by '123456';
grant all on *.* to root@'192.168.1.%';
CREATE USER rep@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE ON *.* TO rep@'%';
flush privileges;

保存快照,然后复制两台虚拟机,做以下几处修改:
(1)修改虚拟机IP分别为192.168.1.79和192.168.1.80,并修改各自的主机名hostname与hosts文件对应;
(2)然后修改各自的my.cnf里的server_id和loose-group_replication_local_address改为本机IP;
(3)进入/data/mysql3306/mysql3306里删除auto.cnf文件。
然后各自都保存个快照。

二、多主搭建
1、所有节点上安装组件:
install plugin group_replication soname 'group_replication.so';
show plugins;

2、在192.168.1.78上:(只需要在这个上执行,跟单主模式相同)
CHANGE MASTER TO MASTER_USER='rep',MASTER_PASSWORD='rep' FOR CHANNEL 'group_replication_recovery'; 
set persist group_replication_single_primary_mode=off; --单主的都是ON
临时开启bootstrap:
SET GLOBAL group_replication_bootstrap_group=ON; 
start group_replication;
SET GLOBAL group_replication_bootstrap_group=OFF; 
select * from  performance_schema.replication_group_members;

3、等上述操作完成之后,在192.168.1.79和192.168.1.80上分别执行:
CHANGE MASTER TO MASTER_USER='rep',MASTER_PASSWORD='123456' FOR CHANNEL 'group_replication_recovery';
set persist group_replication_single_primary_mode=off;
START GROUP_REPLICATION;

4、查看多主配置状况,在任意节点执行:select * from  performance_schema.replication_group_members;

+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
| group_replication_applier | 5651f374-97c8-11e8-9966-000c295ce53e | mgr-mul1    |        3306 | ONLINE       | PRIMARY     | 8.0.11         |
| group_replication_applier | 749eb449-97e1-11e8-ab87-000c29ee3a4b | mgr-mul3    |        3306 | ONLINE       | PRIMARY     | 8.0.11         |
| group_replication_applier | 7753edfa-97e1-11e8-a10c-000c296952a6 | mgr-mul2    |        3306 | ONLINE       | PRIMARY     | 8.0.11         |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+

可以看到三台都在线、各自主机名正确,并且都是primary则表示MGR多主配置成功。
select * from performance_schema.replication_connection_status\G,查看是否有报错;
例如:select * from performance_schema.replication_connection_status\G;
*************************** 1. row ***************************
                                      CHANNEL_NAME: group_replication_recovery
                                        GROUP_NAME: 
                                       SOURCE_UUID: 
                                         THREAD_ID: NULL
                                     SERVICE_STATE: OFF
                         COUNT_RECEIVED_HEARTBEATS: 0
                          LAST_HEARTBEAT_TIMESTAMP: 0000-00-00 00:00:00.000000
                          RECEIVED_TRANSACTION_SET: 
                                 LAST_ERROR_NUMBER: 0
                                LAST_ERROR_MESSAGE: 
                              LAST_ERROR_TIMESTAMP: 0000-00-00 00:00:00.000000
                           LAST_QUEUED_TRANSACTION: 
 LAST_QUEUED_TRANSACTION_ORIGINAL_COMMIT_TIMESTAMP: 0000-00-00 00:00:00.000000
LAST_QUEUED_TRANSACTION_IMMEDIATE_COMMIT_TIMESTAMP: 0000-00-00 00:00:00.000000
     LAST_QUEUED_TRANSACTION_START_QUEUE_TIMESTAMP: 0000-00-00 00:00:00.000000
       LAST_QUEUED_TRANSACTION_END_QUEUE_TIMESTAMP: 0000-00-00 00:00:00.000000
                              QUEUEING_TRANSACTION: 
    QUEUEING_TRANSACTION_ORIGINAL_COMMIT_TIMESTAMP: 0000-00-00 00:00:00.000000
   QUEUEING_TRANSACTION_IMMEDIATE_COMMIT_TIMESTAMP: 0000-00-00 00:00:00.000000
        QUEUEING_TRANSACTION_START_QUEUE_TIMESTAMP: 0000-00-00 00:00:00.000000
*************************** 2. row ***************************
                                      CHANNEL_NAME: group_replication_applier
                                        GROUP_NAME: 8ef01324-97ce-11e8-b4cc-000c295ce53e
                                       SOURCE_UUID: 8ef01324-97ce-11e8-b4cc-000c295ce53e
                                         THREAD_ID: NULL
                                     SERVICE_STATE: ON
                         COUNT_RECEIVED_HEARTBEATS: 0
                          LAST_HEARTBEAT_TIMESTAMP: 0000-00-00 00:00:00.000000
                          RECEIVED_TRANSACTION_SET: 8ef01324-97ce-11e8-b4cc-000c295ce53e:1-7:1000006:2000006
                                 LAST_ERROR_NUMBER: 0
                                LAST_ERROR_MESSAGE: 
                              LAST_ERROR_TIMESTAMP: 0000-00-00 00:00:00.000000
                           LAST_QUEUED_TRANSACTION: 8ef01324-97ce-11e8-b4cc-000c295ce53e:2000006
 LAST_QUEUED_TRANSACTION_ORIGINAL_COMMIT_TIMESTAMP: 2018-08-08 09:30:19.410114
LAST_QUEUED_TRANSACTION_IMMEDIATE_COMMIT_TIMESTAMP: 0000-00-00 00:00:00.000000
     LAST_QUEUED_TRANSACTION_START_QUEUE_TIMESTAMP: 2018-08-08 09:30:19.412069
       LAST_QUEUED_TRANSACTION_END_QUEUE_TIMESTAMP: 2018-08-08 09:30:19.412081
                              QUEUEING_TRANSACTION: 
    QUEUEING_TRANSACTION_ORIGINAL_COMMIT_TIMESTAMP: 0000-00-00 00:00:00.000000
   QUEUEING_TRANSACTION_IMMEDIATE_COMMIT_TIMESTAMP: 0000-00-00 00:00:00.000000
        QUEUEING_TRANSACTION_START_QUEUE_TIMESTAMP: 0000-00-00 00:00:00.000000

三台机器都是group_replication_applier的状态为ON,group_replication_recovery的状态为OFF。
注意:
(1)如果把三台都关闭了尤其是第一台关闭了的话,再重启多主MGR的时候,要再使用bootstrap引导;
(2)如果后续测试出现问题,导致不同步,重新启动加入多主MGR的时候,要先stop group_replication再start group_replication。

贰、代理配置

1、Mysql-router的测试:
配置文件:
[DEFAULT]
logging_folder=/usr/local/mysql-router/log
runtime_folder=/usr/local/mysql-router/run
data_folder=/usr/local/mysql-router/data
connect_timeout=30
read_timeout=30

[logger]
level = INFO
[routing:failover]
bind_address = 0.0.0.0
bind_port = 7001
max_connections = 1024
mode = read-write
destinations = 192.168.1.78:3306,192.168.1.79:3306,192.168.1.80:3306

[routing:balancing]
bind_address = 0.0.0.0
bind_port = 7002
max_connections = 1024
mode = read-only
destinations = 192.168.1.78:3306,192.168.1.79:3306,192.168.1.80:3306
它需要读写端和只读端分别使用不同的端口7001和7002,暂时不做进一步测试;
-----------------------------------------------------------------------
2、Atlas代理

这个代理可以做读写分离,后续还支持分表功能,分表暂不做进一步详述,只说一下读写分离与负载均衡功能。

(1)安装

下载:

wget:https://github.com/Qihoo360/Atlas/releases/download/2.2.1/Atlas-2.2.1.el6.x86_64.rpm

安装:

yum  -y localinstall Atlas-2.2.1.el6.x86_64.rpm

(2)先编辑启动文件:
vim /etc/init.d/atlas
#!/bin/bash  
start()
{
        /usr/local/mysql-proxy/bin/mysql-proxyd mgrmul start
}
stop()
{
        /usr/local/mysql-proxy/bin/mysql-proxyd mgrmul stop
}
status()
{
        /usr/local/mysql-proxy/bin/mysql-proxyd mgrmul status
}
restart()
{
        /usr/local/mysql-proxy/bin/mysql-proxyd mgrmul restart
}
ATLAS="/usr/local/mysql-proxy/bin/mysql-proxyd"
[ -f $ATLAS ] || exit 1
# See how we were called.  
case "$1" in
        start)
                start
                ;;
        stop)
                stop
                ;;
        restart)
                restart
                ;;
        status)
                status
                ;;
                # stop    sleep 3   start  ;;  
        *)
                echo $"Usage: $0 {start|stop|status|restart}"  
                exit 1
esac
exit 0
----------------------------------------------
(3)编辑配置文件:
在数据库里准备两个用户:
test@'192.168.1.%',密码test,可以只赋予部分权限
admin@'%',密码123456,可以赋予完整权限.

对使用数据库的用户的密码进行加密:

执行encrypt test获得一个密码串A1YaJzZgEjM=,执行encrypt 123456获得一个密码串/iZxz+0GRoA=;

vim /usr/local/mysql-proxy/conf/mgrmul.cnf
[mysql-proxy]
admin-username =xxx
admin-password =xxx
proxy-backend-addresses=192.168.1.78:3306,192.168.1.79:3306,192.168.1.80:3306
proxy-read-only-backend-addresses= 192.168.1.79:3306@1,192.168.1.80:3306@1 #@1代表权重
pwds =test:A1YaJzZgEjM=,admin:/iZxz+0GRoA=
daemon = true
keepalive = true
event-threads =4
log-level =warning
log-path =/usr/local/mysql-proxy/logs
instance =mgrmul
proxy-address =0.0.0.0:8060
admin-address =0.0.0.0:2345
#tables =testdb.user.id.3
client-ips =127.0.0.1, 192.168.1
---------------------------------------------------------------
(3)测试:
使用代理登录;
mysql -uadmin -p123456 -h 192.168.1.99 -P 8060
读写分离测试:Atlas代理的机制确定了它只会向配置文件中记录的可写节点的第一个可用的去写,如果第一个不可用就会去访问第二个,直到找到一个可用的并一直只向该主机去写;读的话则从配置文件中的所有可读节点去读;

负载均衡测试:select @@hostname,可以查看主机名来自不同的可读主机;

failover测试:
pkill 192.168.1.78上的mysql;
继续使用代理登录,仍可以实现读写操作 。

Mysql 8.0 --MGR多主+Atlas代理(提一下Mysql-router代理)相关推荐

  1. mysql mgr 三节点_详解MySQL 5.7 MGR单主确定主节点方法

    我们行MGR年底要上线了,每天都要看官方文档学习,做测试,坚持每天写一个小知识点,有想一起学习的么~ MySQL 5.7 MGR单主确定主节点是哪个,我们可以通过成员ID来判断,然后结合read_on ...

  2. mysql 8.0 集群_集群架构03·MySQL初识,mysql8.0环境安装,mysql多实例

    官方网址 https://dev.mysql.com/downloads/mysql/ 社区版本分析 MySQL5.5:默认存储引擎改为InnoDB,提高性能和可扩展性,增加半同步复制 MySQL5. ...

  3. Mysql 8配置MGR单主多从集群

    一.MGR介绍 1.官方文档 Chapter 18 Group Replication 2.MGR介绍 MySQL Group Replication(下简称:MGR)是MySQL官方推出的一种基于P ...

  4. MySQL 8.0查找my.ini文件位于C:\ProgramData\MySQL\MySQL Server 8.0

    打开隐藏项目 打开文件夹 C:\ProgramData\MySQL\MySQL Server 8.0

  5. mysql mgr vip_MySQL 8.0 MGR(组复制)高可用VIP切换脚本

    mgr_failover_vip MySQL 8.0 MGR(组复制)高可用VIP切换脚本 简介:MGR(组复制)官方推荐用MySQL router中间件去做MGR高可用故障转移,但其多过了一层网络, ...

  6. MySQL 8.0 OCP(1Z0-908)中文题库解析

    作者介绍:姚远,Oracle ACE(Oracle和MySQL数据库方向),华为云MVP,<MySQL 8.0运维与优化>的作者.中国第一个Oracle高可用大师,拥有包括 Oracle ...

  7. 组复制系统变量 | 全方位认识 MySQL 8.0 Group Replication

    本节列出特定于 MGR 插件的系统变量.每个系统变量的前缀都是"group_replication"字符串. 组复制的大多数系统变量都是动态的,它们的值可以在MySQL Serve ...

  8. 发布json数据_技术分享 | MySQL 8.0.17 GA 发布!

    昨日 MySQL 官网正式发布 8.0.17 / 5.7.27 / 5.6.45 三个(维护)版本,距离上一个 GA 版本(8.0.16)发布时隔仅 88 天! MySQL 各开发团队的博客网站,同一 ...

  9. 汇总:MySQL 8.0 运维便捷命令

    墨墨导读:有人说目前为止8.0是最好的版本,我们来看看在运维方面MySQL 8.0带来了哪些便捷命令. 自MySQL 8.0 GA版本发布以来,MySQL生态发生了很大的变化,推出了很多功能 ,有人说 ...

最新文章

  1. 聊聊nginx报错499问题
  2. VTK:Rendering之Skybox_PBR
  3. JavaScript入门(part6)--运算符
  4. HDU - 1998 奇数阶魔方
  5. LeetCode题 - 83. 删除排序链表中的重复元素 python实现
  6. 剑指offer 面试题63. 股票的最大利润
  7. 解决在Spring整合Hibernate配置tx事务管理器出现错误的问题
  8. 使用Jenkins搭建持续集成环境的方法(一)
  9. educoder考试可以切屏吗_线上考试真的好多人作弊吗?
  10. 16种床上动作的内涵图,你都看懂了吗?
  11. jsp是在html里面嵌入哪种代码?_是否要从单片机转嵌入式Linux?
  12. IP Forwarding打开
  13. 计算机文化基础—IT概论
  14. 能否用计算机证明数学定理大全,那些教材中未给出证明的定理,到底能否使用?...
  15. 23种设计模式-观察者模式
  16. 精彩来袭!华为将携手数据库领域专家出席NDBC 2021
  17. 大学生简历个人优势怎么写? 有吸引力的简历制作要有重点
  18. VM中调节系统窗口大小
  19. OpenRisc-OptiMSoC
  20. 如何看服务器电源型号,AcBel CRPS 服务器电源系列介绍

热门文章

  1. webERP 添加客户-amp;gt;分公司信息 'vtiger_accountid' doesn't have a default value
  2. 你可以成为测试界的李子柒
  3. nginx_tcp转发
  4. Cadence Allegro PCB设计88问解析(四) 之 Allegro中快捷键Funckey与alias设置
  5. input的type属性整理
  6. UWB_安信可NodeMCU-BU01的使用
  7. Linux命令之nslookup
  8. 二维插值-MATLAB
  9. Api 数据自动入库
  10. 引力产生的原因是什么