您的位置:首页 > 运维架构 > Docker

理解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,升级的过程具体可以参考

版本升级的参考,执行过程如下:
[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-master
mysql-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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  docker mysql集群