暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

docker部署mysql集群

一盎司科技 2021-07-02
2125

采用docker部署之前,需要先检查系统是否安装了docker,没安装可自行安装后再做下面的操作。


环境

系统版本:CentOS 7.6 64bit

docker版本:1.13.1

mysql容器版本:8.0.25

服务器信息:172.16.0.17(主),172.16.0.2(从),172.16.0.3(从)


镜像

此处选取的镜像是官方mysql:8.0.25,可先使用下面的命令拉取到本地:

docker pull mysql:8.0.25

当然,也可以直接在创建mysql的docker容器的时候拉取。


命令

以下采用MySQL InnoDB Cluster来实现高可用集群,默认以root用户来操作,需要分别在3台机器做操作,示例集群为一主两从模式(也可创建其他模式):

1.创建目录:在3台机器分别执行一下命令创建目录:

mkdir -p var/mysql/conf.d

mkdir -p var/mysql/data


2.新建配置文件:在/var/mysql/conf.d目录创建配置文件并编辑,vi my.cnf,主要内容如下(以172.16.0.17机器为例,其他2台机器修改红色部分即可)

[mysqld]  

character-set-server=utf8mb4

port=3306   

default-storage-engine=INNODB

#其他机器按ip最后一位可分别设置为2和3

server_id=17

gtid_mode=ON

enforce_gtid_consistency=ON

binlog_checksum=NONE


log_bin=binlog

log_slave_updates=ON

binlog_format=ROW

master_info_repository=TABLE

relay_log_info_repository=TABLE

max_connections=200

max_allowed_packet=16M


transaction_write_set_extraction=XXHASH64

loose-group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"

loose-group_replication_start_on_boot=off

loose-group_replication_local_address="172.16.0.17:33061"

loose-group_replication_group_seeds="172.16.0.17:33061,172.16.0.2:33061,172.16.0.3:33061"

loose-group_replication_ip_whitelist="172.16.0.17,172.16.0.2,172.16.0.3"

loose-group_replication_bootstrap_group=off

loose-group_replication_single_primary_mode=on

loose-group_replication_enforce_update_everywhere_checks=off

disabled_storage_engines=MyISAM,BLACKHOLE,FEDERATED,CSV,ARCHIVE

report_host=172.16.0.17

report_port=3306 


[client]

default-character-set=utf8mb4


[mysql]

default-character-set=utf8mb4


3.创建容器:在3台机器分别执行下面的命令创建mysql容器实例(注意使用--net host模式

docker run -itd --privileged=true --net host -e MYSQL_ROOT_PASSWORD=MyGrp945 --name mysql01 -v var/mysql/conf.d:/etc/mysql/conf.d -v var/mysql/data:/var/lib/mysql mysql:8.0.25

可以通过docker ps -a查看容器状态,如果处于退出状态,可以通过docker logs mysql01查看日志,分析原因后重建容器实例


4.下载组件:通过wget命令下载mysql-shell,mysql-router组件(此处只下载了mysql-shell组件,mysql-router通过容器启动)

wget https://cdn.mysql.com//Downloads/MySQL-Shell/mysql-shell-8.0.25-linux-glibc2.12-x86-64bit.tar.gz

tar -xzvf mysql-shell-8.0.25-linux-glibc2.12-x86-64bit.tar.gz

cd mysql-shell-8.0.25-linux-glibc2.12-x86-64bit/bin


5.创建集群:在解压后的bin目录下执行mysqlsh

连接主数据库

shell.connect('root@172.16.0.17:3306');

配置实例

dba.configureLocalInstance();

检查实例配置

dba.checkInstanceConfiguration("root@172.16.0.17:3306");

创建集群

var cluster = dba.createCluster('myCluster');

查看集群状态

cluster.status();

其中cluster是创建集群后对应的集群实例变量,如果已经创建过,可以通过getCluster获取:

获取集群

var cluster=dba.getCluster("myCluster");


6.添加从数据库:在其他2台集群的mysql容器实例创建好了之后可以使用如下命令添加从库

cluster.addInstance('root@172.16.0.2:3306');

cluster.addInstance('root@172.16.0.3:3306');

执行后会有提示,选择clone,此时会要求重启数据库,重启容器实例即可(分别在从库机器执行docker restart mysql01


7.添加mysql-router组件:此处通过容器实现,也可以下载组件

docker run -itd --privileged=true --net host --name mysql-router -e MYSQL_HOST=172.16.0.17 -e MYSQL_PORT=3306 -e MYSQL_USER=root -e MYSQL_PASSWORD=MyGrp945 mysql/mysql-router:8.0.25

这样就可以通过mysql-router实现mysql集群管理及负载均衡,可以通过以下命令连接集群(连接端口6446为mysql-router服务端口)

docker run -it --net=host --rm mysql mysql -h172.16.0.17 -P6446 -uroot -pMyGrp945


检查

1.查看容器:执行创建容器的命令后,执行docker ps -a可查看容器运行状况(-a选项可以查看所有容器信息,包括异常状态的);对于异常容器,可以执行docker logs [容器名或id] 查看日志信息


2.查看集群:可进入任意一台机器,查看数据库信息(172.16.0.2为例)

docker run -it --net=host --rm mysql mysql -h172.16.0.2 -P3306 -uroot -pMyGrp945

SELECT * FROM performance_schema.replication_group_members;


3.测试集群:可以在主库新建数据库和表后添加数据,然后在从库查询数据(此处主库是读写模式,从库为只读模式)


效果

1.mysqlsh连接主库:

2.配置主库:

3.检查主库状态

4.创建集群:

5.配置从库(172.16.0.2)

6.添加从库到集群(172.16.0.2)

7.配置从库(172.16.0.3)

8.添加从库到集群(172.16.0.3)

9.查看整个集群:


注意事项

1.创建容器一定要使用--net host模式,使用主机网络,否则创建集群会报错(类似There is no local IP address matching the one configured for the local node (172.16.0.17:33061)


2.可以创建一个mysql临时容器来模拟mysql客户端(类似docker run -it --net=host --rm mysql mysql -h172.16.0.17 -uroot -pMyGrp945


3.可以通过scp命令把文件复制到远程机器(类似scp mysqlsh root@172.16.0.2:/var/mysql


文章转载自一盎司科技,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论