理解docker部署springboot-搭建mysql主从集群(二)
2017-09-29 17:43
1531 查看
搭建mysql集群目的是为springboot提供数据服务
这一篇文章主要是记录了在docker环境下搭建MySQL主从集群的过程,以及在准备搭建的过程中遇到的一些问题,问题主要包括docker版本的升级以及centos内核的升级。在执行docker restart ID命令重启容器经常会出现崩溃并且network等命令在1.7版本中无法使用(network命令1.9之后提供),所以把docker升级到更高的版本,这必须要升级centos的内核版本,由于阿里云的服务器的内核版本是2.6不能满足大部分docker版本的要求,固升级内核版本为3.1,升级的过程具体可以参考
版本升级的参考,执行过程如下:
在升级的过程中,如果发现docker的旧版本已经安装就会报冲突的错误,因此在安装新的版本之前应该使用yum remove docker命令将旧的移除。
主从MySQL集群总体的思路:
1、下载MySQL镜像
2、在虚拟机(或者windows等)中配置MySQL的配置文件
3、根据配置文件运行MySQL的docker镜像
4、修改master和slave主从数据库的关系
在centos中的以下两个配置目录中新建以下两个文件,并将上述配置填入
/docker/mysql-cluster/master/my-m.cnf以及/docker/mysql-cluster/slave/my-s.cnf,my-m.cnf和my-s.cnf唯一的不同是server-id=1和server-id=2,server-id用来标识主从数据库
一些参数解释:
-d,表示Detached mode,后台运行
-t,让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上
-i,让容器的标准输入保持打开,可以-it配合用,与-d相对应
-e,表示传入的环境变量
-p,表示暴露的端口,即本机端口与docker端口映射
-v,表示挂载文件,这里挂载了本地的文件夹到docker的文件夹
--name,表示给容器起的名字,方便查看,若要配置主从,
执行命令结束后可以看到
同样方式进入slave库,执行:
可以看到,在master上建立sdata库后,slave中也存了相同的库,主从关系搭建完毕
参考文章:
http://blog.csdn.net/qq362228416/article/details/48569293 http://www.jianshu.com/p/12c34395e76e http://www.cnblogs.com/felixzh/p/5194527.html
这一篇文章主要是记录了在docker环境下搭建MySQL主从集群的过程,以及在准备搭建的过程中遇到的一些问题,问题主要包括docker版本的升级以及centos内核的升级。在执行docker restart ID命令重启容器经常会出现崩溃并且network等命令在1.7版本中无法使用(network命令1.9之后提供),所以把docker升级到更高的版本,这必须要升级centos的内核版本,由于阿里云的服务器的内核版本是2.6不能满足大部分docker版本的要求,固升级内核版本为3.1,升级的过程具体可以参考
版本升级的参考,执行过程如下:
[root@iZwz9cps5bpzjurg8m4ax0Z bin]# curl -sSL -O https://get.docker.com/builds/Linux/x86_64/docker-1.9.1 && chmod +x docker-1.9.1 && mv docker-1.9.1 /usr/local/bin/docker mv: overwrite `/usr/local/bin/docker'? y [root@iZwz9cps5bpzjurg8m4ax0Z bin]# cp /usr/local/bin/docker /usr/bin/docker cp: overwrite `/usr/bin/docker'? y [root@iZwz9cps5bpzjurg8m4ax0Z bin]# service docker start Starting docker: [ OK ] [root@iZwz9cps5bpzjurg8m4ax0Z bin]# docker -v Docker version 1.9.1, build a34a1d5
在升级的过程中,如果发现docker的旧版本已经安装就会报冲突的错误,因此在安装新的版本之前应该使用yum remove docker命令将旧的移除。
主从MySQL集群总体的思路:
1、下载MySQL镜像
2、在虚拟机(或者windows等)中配置MySQL的配置文件
3、根据配置文件运行MySQL的docker镜像
4、修改master和slave主从数据库的关系
下载MySQL镜像
第一次尝试通过docker search mysql直接搜的,下载特别慢,后来经过查找发现下边这两种是比较快速的:docker pull daocloud.io/mysql docker pull hub.c.163.com/library/mysql:latest这两个都是国内的镜像,下载速度非常快
在虚拟机(或者windows等)中配置MySQL的配置文件
配置文件和非docker方式的mysql集群的配置一致,如下:# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; version 2 of the License. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # # The MySQL Community Server configuration file. # # For explanations see # http://dev.mysql.com/doc/mysql/en/server-system-variables.html [client] port = 3306 socket = /var/run/mysqld/mysqld.sock [mysqld_safe] pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock nice = 0 [mysqld] user = mysql pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock port = 3306 basedir = /usr datadir = /var/lib/mysql tmpdir = /tmp lc-messages-dir = /usr/share/mysql explicit_defaults_for_timestamp log-bin = mysql-bin server-id = 1 # Instead of skip-networking the default is now to listen only on # localhost which is more compatible and is not less secure. #bind-address = 127.0.0.1 #log-error = /var/log/mysql/error.log # Recommended in standard MySQL setup sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 # * IMPORTANT: Additional settings that can override those from this file! # The files must end with '.cnf', otherwise they'll be ignored. # !includedir /etc/mysql/conf.d/
在centos中的以下两个配置目录中新建以下两个文件,并将上述配置填入
/docker/mysql-cluster/master/my-m.cnf以及/docker/mysql-cluster/slave/my-s.cnf,my-m.cnf和my-s.cnf唯一的不同是server-id=1和server-id=2,server-id用来标识主从数据库
根据配置文件运行MySQL的docker镜像
#master库 docker run -d -e MYSQL_ROOT_PASSWORD=testcode --name mysql-master -v /docker/mysql-cluster/master/my-m.cnf:/etc/mysql/my.cnf -p 3307:3306 daocloud.io/mysql #slave库 docker run -d -e MYSQL_ROOT_PASSWORD=testcode --name mysql-slave -v /docker/mysql-cluster/slave/my-s.cnf:/etc/mysql/my.cnf -p 3308:3306 daocloud.io/mysql
一些参数解释:
-d,表示Detached mode,后台运行
-t,让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上
-i,让容器的标准输入保持打开,可以-it配合用,与-d相对应
-e,表示传入的环境变量
-p,表示暴露的端口,即本机端口与docker端口映射
-v,表示挂载文件,这里挂载了本地的文件夹到docker的文件夹
--name,表示给容器起的名字,方便查看,若要配置主从,
执行命令结束后可以看到
[root@iZwz9cps5bpzjurg8m4ax0Z master]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 812b841b5422 daocloud.io/mysql "docker-entrypoint.sh" 4 seconds ago Up 3 seconds 0.0.0.0:3308->3306/tcp mysql-slave 33225198ecc3 daocloud.io/mysql "docker-entrypoint.sh" 2 minutes ago Up 2 minutes 0.0.0.0:3307->3306/tcp mysql-mastermysql-master和mysql-slave两个基于daocloud.io/mysql镜像的容器被先后启动。由于daocloud.io/mysql镜像中包含了vi,不需要再单独进行安装,docker logs 容器的ID 可以查看容器运行的日志。
修改master和slave主从数据库的关系
执行docker exec -it mysql-master bash进去master库的vim环境中,执行mysql -uroot -p,进入docker中的mysql,执行mysql> GRANT REPLICATION SLAVE ON *.* to 'backup'@'%' identified by 'master_123'; mysql> show master status; +------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+-------------------+ | mysql-bin.000003 | 439 | | | | +------------------+----------+--------------+------------------+-------------------+
同样方式进入slave库,执行:
change master to master_host='对外主机IP',master_user='backup',master_password='master_123',master_log_file='mysql-bin.000003',master_log_pos=439,master_port=3307;这里边有一些对应关系要注意。
可以看到,在master上建立sdata库后,slave中也存了相同的库,主从关系搭建完毕
参考文章:
http://blog.csdn.net/qq362228416/article/details/48569293 http://www.jianshu.com/p/12c34395e76e http://www.cnblogs.com/felixzh/p/5194527.html
相关文章推荐
- 社交网站部署——Nginx服务器+PHP服务器搭建+MySQL主从集群
- 理解docker部署springboot-为什么要用docker(六)
- 基于springboot,quartz,mysql搭建quartz集群
- 理解docker部署springboot-容器内存优化的反思(五)
- SpringBoot + maven + Jenkins + docker 实现docker集群一键自动化部署
- 理解docker部署springboot-构建和运行(一)
- 服务器入门:docker下的集群操作,docker+nginx+springboot+redis+mysql。
- 使用docker快速搭建MySQL主从集群
- 理解docker部署springboot-容器日志处理(四)
- 理解docker部署springboot-容器网络使用(三)
- jenkins自动化部署搭建。jenkins+docker+maven+git+springboot
- 一步一图搭建-分布式服务器部署之mysql集群-主从复制与读写分离
- springboot+mysql实现quartz集群搭建
- docker搭建nginx+springboot集群
- 二. Spring Boot使用DockerFile maven插件自动化部署
- docker搭建mysql集群
- 基于springboot+redis+bootstrap+mysql开发一套属于自己的分布式springcloud云权限架构(十七)【权限架构系统(基础框架搭建)】
- redis主从集群搭建及容灾部署(哨兵sentinel)
- docker部署springboot:使用外部tomcat部署