MGR 之 docker快速安装

docker 安装mysql 8.0 MGR

1、基础环境
2、安装docker和docker私有仓库
3、build最新mysql 8.0镜像,并push到私有仓库
4、配置docker network
5、mysql镜像打包
6、MGR3节点的 docker创建命令
7、创建group复制账号(各节点执行)
8、MGR-master开启group复制
9、MGR-2个slave开启group复制

分步解读一下:

1、基础环境:centos7单台,8H16G
2、(1)安装docker
使用本地yum安装(图省事儿、也可以指定版本安装)
$ yum install docker
$ service docker start
#查看docker版本
$ docker -v
Docker version 1.13.1, build 64e9980/1.13.1

(2)安装本地docker私有仓库
#目的:方便镜像管理
$ docker pull registry:2.1.1
$ docker run -d -p 5000:5000 -v /opt/registry:/var/lib/registry --restart=always --name registry registry:2.1.
打开浏览器,访问http://IP:5000/v2/_catalog,可以查看到{"repositories": []}表示现在仓库中,没有镜像images

#私有仓库安装完成之后,push镜像测试
报错:
Get https://192.168.61.128:5000/v1/_ping: http: server gave HTTP response to HTTPS client 
解决方法:
a、需要关注docker的版本,不通版本解决方案不同
b、在”/etc/docker/“目录下,创建”daemon.json“文件。在文件中写入:
{ "insecure-registries":["192.168.1.100:5000"] }
3、拉取dockerhub中mysql 8.0最新的镜像
使用方法:dockerfile bulid (也可直接pull mysql8.0)
$ pwd
/mysqldata/mysql_dockerfile/8.0
$  ls
config  docker-entrypoint.sh  Dockerfile
$ docker build -t 192.168.16.252:5000/mysql8.0:test  (网络差的话,可能会很慢)
$ docker  push 192.168.16.252:5000/mysql8.0:test (上传镜像到私有仓库)
4、配置docker network
#目的:类似k8s 中同一namespace的互信原则
我们需要保证MGR集群几个节点之间可以相互通过主机名+端口访问
# 创建专门的网络,连接各个容器
$ docker network create mysql_mgr
$ docker network ls
5、MGR_mysql镜像打包
(1)基于镜像仓库内的mysql 8.0镜像继续镜像build(提升速度)
#dockerfile的打包,示例:
$ ls
config  Dockerfile
$ cat Dockerfile 
FROM 192.168.16.252:5000/mysql8.0:test
COPY config/ /etc/mysql/

(2)my.cnf的替换
a、替换方式
$ more Dockerfile 
FROM 192.168.16.252:5000/mysql8.0:test
COPY config/ /etc/mysql/   #重点在这一行,config文件夹内有一个my.cnf文件,替换成自己的即可

b、mysql-mgr,my.cnf配置,目前只贴上mgr-master节点的my.cnf:
[mysqld]
server_id=1
datadir=/var/lib/mysql
gtid_mode=on
enforce_gtid_consistency=on
binlog_format=row
master_info_repository=table
relay_log_info_repository=table
binlog_checksum=none
log_slave_updates=on
#开启组复制
transaction_write_set_extraction=XXHASH64
loose-group_replication_group_name='a00f8377-a78c-11e9-9b76-00163e0f7310'
loose-group_replication_start_on_boot=off
loose-group_replication_local_address='mgrmaster:33061'
loose-group_replication_group_seeds='mgrmaster:33061,mgrslave1:33061,mgrslave2:33061'
loose-group_replication_bootstrap_group=off
plugin_load_add='group_replication.so'
relay-log-recovery=ON
loose-group-replication-single-primary-mode=ON
loose-group-replication-enforce-update-everywhere-checks=OFF
#错误日志时区一致性
log_timestamps = SYSTEM
#事务级别
transaction_isolation= READ-COMMITTED
socket=/var/lib/mysql/mysql.sock
#skip_name_resolve=on
character-set-server=utf8
log_bin=mysql-bin
lower_case_table_names=1
innodb_autoextend_increment=1000
innodb_open_files=1000
innodb_buffer_pool_size=1G   
innodb_buffer_pool_instances=1
innodb-use-native-aio=ON
#query_cache_size=0
tmp_table_size=512M
max_connections=3000
join_buffer_size=2M
sort_buffer_size=2M
explicit_defaults_for_timestamp=on
wait_timeout=259200
interactive_timeout=259200
slave_net_timeout=600
secure_file_priv=/var/lib/mysql
slow_query_log_file=/var/lib/mysql/localhost-slow.log 
slow-query-log = on
long_query_time=1
log-error=/var/lib/mysql/mysql_err.log
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
symbolic-links=0
[mysql]
protocol=tcp
c、从库两个节点my.cnf 需要更改的地方:
service_id
loose-group_replication_local_address='mgrmaster:33061'
#将这两个参数改成自己的,其余的和MGR-master节点my.cnf一致

(3)mysql datadir的挂载与持久化
方式: docker -v
6、附上MGR3节点的 docker创建命令:
(1)mgrmaster
docker run -itd -m 3G --memory-reservation 1G --name mgrmaster -p 3307:3306 -v /mysqldata/data/mgrmaster:/var/lib/mysql --net=mysql_mgr --hostname=mgrmaster --privileged=true  -e MYSQL_ROOT_PASSWORD=123456 192.168.16.252:5000/mysql8.0:mgrmaster1
(2)mgrslave1                                                                              
docker run -itd  -m 2G --memory-reservation 1G --name mgrslave1 -p 3308:3306 -v /mysqldata/data/mgrslave1:/var/lib/mysql --net=mysql_mgr --hostname=mgrslave1 --privileged=true -e MYSQL_ROOT_PASSWORD=123456 192.168.16.252:5000/mysql8.0:mgrslave1
(3)mgrslave2                                                                              
docker run -itd  -m 2G --memory-reservation 1G --name mgrslave2 -p 3309:3306 -v /mysqldata/data/mgrslave2:/var/lib/mysql --net=mysql_mgr --hostname=mgrslave2 --privileged=true -e MYSQL_ROOT_PASSWORD=123456 192.168.16.252:5000/mysql8.0:mgrslave2
7、创建group复制账号(各节点执行)
#mysql 8.0创建用户密码的方式有所改变:
mysql> SET SQL_LOG_BIN=0; 
mysql> create user 'group_repl'@'%' identified by 'group_repl';
mysql> grant replication slave on *.* to group_repl@'%';
mysql> flush privileges;
mysql> SET SQL_LOG_BIN=1;
8、MGR-master开启group复制
#开启的时候,盯着mysql的error.log
mysql>  set global group_replication_bootstrap_group=ON;
mysql>  start GROUP_REPLICATION;
mysql>  set global group_replication_bootstrap_group=OFF;
9、MGR-2个slave开启group复制
mysql>  start GROUP_REPLICATION;
#slave报错
2020-07-09T05:49:56.060231-00:00 0 [ERROR] [MY-011526] [Repl] Plugin group_replication reported: 'This member has more executed transactions than those present in the group. Local transactions: 39306f3e-c1a4-11ea-a623-0242ac120003:1-5 > Group transactions: a00f8377-a78c-11e9-9b76-00163e0f7310:1,
bcb754b4-c1a2-11ea-aec8-0242ac120002:1-5'
2020-07-09T05:49:56.060352-00:00 0 [ERROR] [MY-011522] [Repl] Plugin group_replication reported: 'The member contains transactions not present in the group. The member will now exit the group.'
#解决方法:
slave: reset master;

至此,一个MGR就搭建起来了,在搭建过程中,参考了以下文章,感觉不错,分享给大家:
https://blog.csdn.net/qianglei6077/article/details/104754792/
注:若转载本文,请附上本文转载链接,码字不易,希望理解!

你可能感兴趣的:(MGR 之 docker快速安装)