博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
docker应用-6(mysql+mycat 搭建数据库集群)
阅读量:7038 次
发布时间:2019-06-28

本文共 5925 字,大约阅读时间需要 19 分钟。

    上一节,通过使用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-binserver-id=101

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

[mysqld]log-bin=mysql-binserver-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" | chpasswdRUN yum -y install net-tools# install javaADD 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

root
TESTDB
user
TESTDB
true

配置root和user用户的密码和逻辑库。

修改 schema.xml 配置datanode。

select user()

主备自动切换测试

此时,可以通过mycat中间件来对数据库进行读写操作,其中8066端口是对数据进行操作,9066端口是控制端口。

[root@0bef73420229 /]# mysql -uroot -p -hmysql-mycat -P8066Enter 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://danal.baihongyu.com/

你可能感兴趣的文章
python基础学习笔记
查看>>
Java的HashMap和HashTable
查看>>
我的友情链接
查看>>
windows系统之WSUS服务器:更改WSUS更新文件的路径
查看>>
Btrace
查看>>
我的友情链接
查看>>
python抓取豆瓣妹子图片并上传到七牛
查看>>
关于Spring Data redis几种对象序列化的比较
查看>>
windows下批处理设置U盘盘符为U【非PE】
查看>>
Windows系统补丁KB2962872导致InstallShield无法启动(解决方案已更新)
查看>>
#每天问自己个问题#0. 每天问自己个问题
查看>>
制作免费的数字签名证书
查看>>
nagios3.3 监控端安装记录
查看>>
linux下拆分文件split
查看>>
BoCloud博云获得CNCF Kubernetes服务提供商认证
查看>>
WebApp 页面自适应
查看>>
【转自中科蓝鲸】集群NAS与集群文件系统的区别
查看>>
tigase网络核心SockThread详解
查看>>
iotop 查看进程IO情况
查看>>
php获取网站域名 及 SERVER 相关变量
查看>>