上一节,通过使用overlay网络,搭建了跨主机的docker容器集群。下面,在这个跨主机的docker容器集群环境下,搭建mysql 数据库集群。

mysql主从自动备份和自动切换

从数据安全性考虑,对数据库的数据进行及时备份非常重要。mysql就提供了主从备份的机制,从数据库会非常及时的将主数据库的操作更新到从库上,从而当主数据库down掉之后,数据不会丢失;同时,也可以通过keepalived等程序来实现主库down掉之后,迅速将数据访问服务切换到从库,从而尽可能维护数据库服务的不间断运行。

mycat 数据库中间件

Mycat是一个彻底开源的新颖的数据库中间件产品。它的出现将彻底结束数据库的瓶颈问题,从而使数据库的高可用,高负载成为可能。Mycat功能强大,这里实现利用Mycat来实现主从数据库的读写分离和自动切换。

构建mysql主从结构

使用两台物理机器dev-11, dev-12上的两个container,一个container作为mysql master,另一个作为slave
1. 搭建跨主机的docker 网络
docker network create -d overlay multihost
并创建container-control 容器,用于连接数据库测试。
docker create --name container-contorl --net multihost centos:7 bash
2. 下载镜像
docker pull mysql:5.7
3. 在本地创建文件夹,将数据库数据存放在本地
/home/skc/workspace/gradute_design/docker_data/mysql
4. 创建容器
在dev-11上部署mysql-master容器

docker create -it --name mysql-master \
--net multihost \
-v /home/skc/workspace/graduate_design/docker_data/mysql/data:/var/lib/mysql \
-v /home/skc/workspace/graduate_design/docker_data/mysql/conf.d:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=root mysql:5.7 bash

在dev-12上部署mysql-slave容器

docker create -it --name mysql-slave \
--net multihost \
-v /home/skc/workspace/graduate_design/docker_data/mysql/data:/var/lib/mysql \
-v /home/skc/workspace/graduate_design/docker_data/mysql/conf.d:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=root mysql:5.7 bash

其中,将mysql的数据文件放在 /home/skc/workspace/graduate_design/docker_data/mysql/data 目录下(通过volume映射)
mysql的配置文件放在 /home/skc/workspace/graduate_design/docker_data/mysql/conf.d 目录下,用于配置主从数据库

在dev-11上的 /home/skc/workspace/graduate_design/docker_data/mysql/conf.d/ 目录下,配置文件 101.cnf

[mysqld]
log-bin=mysql-bin
server-id=101

在dev-12上的 /home/skc/workspace/graduate_design/docker_data/mysql/conf.d/ 目录下,配置文件 102.cnf

[mysqld]
log-bin=mysql-bin
server-id=102

5. 配置数据库
在dev-11和dev-12上分别启动 docker start mysql-master/mysql-slave
从container-control容器中连接到mysql-master,查看信息

MySQL [(none)]> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000005 | 154 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

从container-control容器中连接到mysql-slave,进行设置

mysql\> change master to master_host=‘10.0.0.5’, master_user='root', master_password='root',
master_log_file='mysql-bin.000005',master_log_pos=154;
mysql\> start slave;

(创建好之后,会发现master和slave之间会同步,比如master中创建数据库,slave中也会自动创建,在master中更改数据,slave中也会自动修改)

搭建mycat

使用docker容器来运行mycat。
1. 编写Dockerfile

############################################
# version : debugman007/c7-mycat:v1
# desc : centos7 上安装的mycat
############################################
# 设置继承自 centos7 官方镜像
FROM centos:7
RUN echo "root:root" | chpasswd
RUN yum -y install net-tools
# install java
ADD http://mirrors.linuxeye.com/jdk/jdk-7u80-linux-x64.tar.gz /usr/local/
RUN cd /usr/local && tar -zxvf jdk-7u80-linux-x64.tar.gz && rm -f jdk-7u80-linux-x64.tar.gz ENV JAVA_HOME /usr/local/jdk1.7.0_80
ENV CLASSPATH ${JAVA_HOME}/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH $PATH:${JAVA_HOME}/bin
#install mycat
ADD http://dl.mycat.io/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz /usr/local
RUN cd /usr/local && tar -zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz && rm -f Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz VOLUME /usr/local/mycat/conf
EXPOSE 8066 9066
CMD ["/usr/local/mycat/bin/mycat", "console"]

2. 创建镜像
# docker build -t debugman007/c7-mycat .
3. 创建容器

#docker create --name mysql-mycat  --net multihost   \
-v /home/skc/workspace/graduate_design/docker_data/mycat/conf:/usr/local/mycat/conf \
-v /home/skc/workspace/graduate_design/docker_data/mycat/logs:/usr/local/mycat/logs \
-p 8066:8066 -p 9066:9066 \
debugman007/c7-mycat:v1

4. 配置mycat

Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz 解压之后,把mycat/conf
中的内容拷贝到 /home/skc/workspace/graduate_design/docker_data/mycat/conf
中,修改server.xml

    <user name="root">
<property name="password">root</property>
<property name="schemas">TESTDB</property> <!-- 表级 DML 权限设置 -->
<!--
<privileges check="false">
<schema name="TESTDB" dml="0110" >
<table name="tb01" dml="0000"></table>
<table name="tb02" dml="1111"></table>
</schema>
</privileges>
-->
</user> <user name="user">
<property name="password">user</property>
<property name="schemas">TESTDB</property>
<property name="readOnly">true</property>
</user>

配置root和user用户的密码和逻辑库。
修改 schema.xml 配置datanode。

<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
<table name="students_score" type="global" dataNode="dn1" />
</schema> <dataNode name="dn1" dataHost="localhost1" database="db1" />
<dataNode name="dn2" dataHost="localhost1" database="db2" />
<dataNode name="dn3" dataHost="localhost1" database="db3" /> <dataHost name="localhost1" maxCon="1000" minCon="10" balance="2"
writeType="0" dbType="mysql" dbDriver="native" switchType="2" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<!-- can have multi write hosts -->
<writeHost host="mysql-master" url="10.0.0.5:3306" user="root"
password="root">
<!-- can have multi read hosts -->
<readHost host="mysql-slave" url="10.0.0.6:3306" user="root" password="root" />
</writeHost> <writeHost host="mysql-slave" url="10.0.0.6:3306" user="root" password="root">
</writeHost>
</dataHost>

主备自动切换测试
此时,可以通过mycat中间件来对数据库进行读写操作,其中8066端口是对数据进行操作,9066端口是控制端口。

[root@0bef73420229 /]# mysql -uroot -p -hmysql-mycat -P8066
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 7
Server version: 5.6.29-mycat-1.6-RELEASE-20161028204710 MyCat Server (OpenCloundDB) Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MySQL [(none)]>

此时,通过mysql-mycat 接口进行数据库的修改操作,在mysql-mater和mysql-slave中都能看到。
当把mysql-master关闭之后,在mycat 9066端口进去,查看数据库状态,发现mysql-master关掉。

MySQL [(none)]> show @@heartbeat;
+--------------+-------+----------+------+---------+-------+--------+---------+--------------+---------------------+-------+
| NAME | TYPE | HOST | PORT | RS_CODE | RETRY | STATUS | TIMEOUT | EXECUTE_TIME | LAST_ACTIVE_TIME | STOP |
+--------------+-------+----------+------+---------+-------+--------+---------+--------------+---------------------+-------+
| mysql-master | mysql | 10.0.0.5 | 3306 | -2 | 0 | idle | 0 | 1,0,51 | 2017-02-23 03:57:02 | false |
| mysql-slave | mysql | 10.0.0.6 | 3306 | 1 | 0 | idle | 0 | 1,1,1 | 2017-02-23 03:57:22 | false |
| mysql-slave | mysql | 10.0.0.6 | 3306 | 1 | 0 | idle | 0 | 0,1,1 | 2017-02-23 03:57:22 | false |
+--------------+-------+----------+------+---------+-------+--------+---------+--------------+---------------------+-------+

此时,通过mycat修改数据库仍能成功,因为数据库服务已经切换到从库mysql-slave了。

参考

http://blog.yaodataking.com/2016/01/mycat_mysql_docker_sample1.html

docker应用-6(mysql+mycat 搭建数据库集群)的更多相关文章

  1. 手把手教你用Mysql-Cluster-7.5搭建数据库集群

    前言 当你的业务到达一定的当量,肯定需要一定数量的数据库来负载均衡你的数据库请求,我在之前的博客中已经说明了,如何实现负载均衡,但是还有一个问题就是数据同步,因为负载均衡的前提就是,各个服务器的数据库 ...

  2. 简单使用Mysql-Cluster-7.5搭建数据库集群

    阅读目录 前言 mysql cluster中的几个概念解释 架构图及说明 下载mysql cluster 安装mysql cluster之前 安装配置管理节点 安装配置数据和mysql节点 测试 启动 ...

  3. 【转】MYSQL-CLUSTER-7.5搭建数据库集群

    阅读目录 前言 mysql cluster中的几个概念解释 架构图及说明 下载mysql cluster 安装mysql cluster之前 安装配置管理节点 安装配置数据和mysql节点 测试 启动 ...

  4. mysql与mycat搭建实现集群与读写分离

    数据库性能优化普遍采用集群方式,oracle集群软硬件投入昂贵,今天花了一天时间搭建基于mysql的集群环境. 主要思路 简单说,实现mysql主备复制-->利用mycat实现负载均衡. 比较了 ...

  5. 2020-05-08:mycat部署数据库集群的时候 遇到了哪些坑

    福哥答案2020-05-08:答案仅供参考,来自群员 使用activity时,连接mycat设置进去的序列化的流程变量,反序列化会报错这个类型字段类型是blob类型,mycat对这种类型处理时有点问题

  6. MyCAT+MySQL搭建高可用企业级数据库集群视频课程

    原文地址:https://www.guangboyuan.cn/mycatmysql%E6%90%AD%E5%BB%BA%E9%AB%98%E5%8F%AF%E7%94%A8%E4%BC%81%E4% ...

  7. 这次一定要教会你搭建Redis集群和MySQL主从同步(非Docker)

    前言 一直都想自己动手搭建一个Redis集群和MySQL的主从同步,当然不是依靠Docker的一键部署(虽然现在企业开发用的最多的是这种方式),所以本文就算是一个教程类文章吧,但在动手搭建之前,会先聊 ...

  8. mycat数据库集群系列之mysql主从同步设置

    最近在梳理数据库集群的相关操作,现在花点时间整理一下关于mysql数据库集群的操作总结,恰好你又在看这一块,供一份参考.本次系列终结大概包括以下内容:多数据库安装.mycat部署安装.数据库之读写分离 ...

  9. 【Data Cluster】真机环境下MySQL数据库集群搭建

    真机环境下MySQL-Cluster搭建文档  摘要:本年伊始阶段,由于实验室对不同数据库性能测试需求,才出现MySQL集群搭建.购置主机,交换机,双绞线等一系列准备工作就绪,也就开始集群搭建.起初笔 ...

随机推荐

  1. 【倍增】Tak and Hotels II @ABC044&ARC060/upcexam6463

    6463: Tak and Hotels II 时间限制: 1 Sec  内存限制: 128 MB 题目描述 N hotels are located on a straight line. The ...

  2. 前端工程化系列[06]-Yeoman脚手架核心机制

    在前端工程化系列[05] Yeoman脚手架使用入门这边文章中,对Yeoman的使用做了简单的入门介绍,这篇文章我们将接着探讨Yeoman这个脚手架工具内部的核心机制,主要包括以下内容 ❏ Yeoma ...

  3. C# StreamReader.ReadLine统计行数的问题

    要实现一个功能: 从 lua 文件中提取字符串放到 excel 中,再将 excel 给海外同事,翻译完成后,用翻译的文本替换相应中文. 整个功能并不复杂,要点有二点: 1.提取字符串,一行中文如&q ...

  4. 毕业论文Word格式技巧

    word利用多级列表功能实现章节标题自动编号 坑:在选择级别1后,直接在当前对话框直接继续设置级别2:然后选中级别2,设置相应的格式,主要在将级别链接到样式处选择为标题2,然后要在库中显示的级别选择级 ...

  5. 海康威视(iOS集成)

    一.注意事项 1.在开发海康威视的SimpleDemo时,最好使用真机,因为海康提供的5个库不支持模拟的i386架构. 2.在XCode9.3版本上运行SimpleDemo时,对.mm文件进行编辑时, ...

  6. 高仿MT4行情终端(K线图+操控+简单架构)

    技术:VS2015 Update3 + QT 5.11.2 + BOOST 1.68 + QT VS Tools + C++11   概述 模仿外汇MT4的界面 详细 代码下载:http://www. ...

  7. 【Apache】Apache的安装和配置

    Apache是世界非常流行的Web服务器软件.它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一. Apache在Win7上的安装 下载apa ...

  8. 分析轮子(十)- HashMap.java 之概念梳理

    注:玩的是JDK1.7版本 一:还是原来的风格,先上一下类的继承关系图,这样能够比较清楚的知道此类的相关特性 二:HashMap.java 的代码比较难看,所以,我看了几天,写的话也分开来写,这样能表 ...

  9. Effective Java 第三版——83. 明智谨慎地使用延迟初始化

    Tips 书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code 注意,书中的有些代码里方法是基于Java 9 API中的,所 ...

  10. Python 爬虫实例(7)—— 爬取 新浪军事新闻

    我们打开新浪新闻,看到页面如下,首先去爬取一级 url,图片中蓝色圆圈部分 第二zh张图片,显示需要分页, 源代码: # coding:utf-8 import json import redis i ...