Docker搭建MySQL集群环境_容器版mysql集群搭建-程序员宅基地

技术标签: mysql  docker  

安装Docker

由于我用的是Windows10,所以我打开了Hyper-V,然后在Dcoker官网下载并安装了Docker。

CentOS 之间使用 yum install docker 安装docker然后使用systemctl start docker启动服务,systemctl enable docker开机启动docker服务。

使Docker容器和Windows10建立局域网连接

Docker创建一个局域网

docker network create --subnet=[IP]/[掩码位数] 子网名称

指令示例:

docker network create --subnet=192.168.100.0/24 homenet

在Windows10中将这个子网添加到路由表中 ,Linux重启即可

route add -p [局域网ip] mask [子网掩码] [经过网关(使用Docker默认网关)]

指令示例(管理员模式下运行指令):

route add -p 192.168.100.0 mask 255.255.255.0 10.0.75.2

简单Mysql持久化

预先准备

先启动一个mysql,查看需要持久化的文件有哪些。

docker run -itd --net homenet --ip 192.168.100.10 --name mysql000 -e MYSQL_ROOT_PASSWORD=00000000 mysql
docker exec -it mysql000 /bin/bash
# find / -name "mysql"

然后发现了以下需要映射的文件
/etc/mysql/my.cnf
/var/lib/mysql
保存一份my.cnf文件到宿主机,挂载文件时需要用到

然后删除刚才创建的Mysql,删除前顺便测试下局域网有没有用

 mysql -h 192.168.100.10 -u root -p
 [mysql]exit
 docker stop mysql000
 docker rm mysql000

启动mysql

然后创建mysql容器,命令示例(在挂载过程中需要输入Windows10密码授权本地文件操作):

docker run -itd --privileged=true --net homenet --ip 192.168.100.10 --name mysql000 -e MYSQL_ROOT_PASSWORD=00000000 -e MYSQL_USER="ovea" -e MYSQL_PASSWORD="00300100" -v /c/Users/OVEA/Documents/Docker/MySQL/MySQL000/etc/my.cnf:/etc/mysql/my.cnf -v /c/Users/OVEA/Documents/Docker/MySQL/MySQL000/varlib:/var/lib/mysql mysql

搭建MySQL集群

预习准备

docker pull mysql/mysql-cluster
docker run -itd --net homenet --ip 192.168.100.10 --name mysql000 -e MYSQL_ROOT_PASSWORD=00000000 mysql/mysql-cluster ndbd

然后查找需要映射的文件
/var/lib/mysql
/var/lib/mysql-files/
/var/lib/mysql-keyring/
/etc/my.cnf
/etc/mysql-cluster.cnf
最后两个文件保存一份到宿主机

docker stop mysql000
docker rm mysql000

修改配置文件

修改my.cnf [Linux下该文件权限应为644或744]

主要是manager以外的节点使用的,ip指向manager节点的IP

[mysqld]
ndbcluster
ndb-connectstring=192.168.100.10
user=mysql

[mysql_cluster]
ndb-connectstring=192.168.100.10

修改mysql-cluster.cnf [Linux下该文件权限应为644或744]

主要配置节点之间的关系和职责

# Copyright (c) 2017, 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

[ndbd default]
NoOfReplicas=4
DataMemory=128M
IndexMemory=16M


[ndb_mgmd]
NodeId=1
hostname=192.168.100.10
datadir=/var/lib/mysql

[ndbd]
NodeId=2
hostname=192.168.100.11
datadir=/var/lib/mysql

[ndbd]
NodeId=3
hostname=192.168.100.12
datadir=/var/lib/mysql

[ndbd]
NodeId=4
hostname=192.168.100.13
datadir=/var/lib/mysql

[mysqld]
NodeId=5
hostname=192.168.100.14

启动5个节点

Windows 指令示例

docker run -itd --privileged=true --net homenet --ip 192.168.100.10 --name mysql-mgmd-000  -v /c/Users/OVEA/Documents/Docker/MySQL/MySQL000/etc/mysql-cluster.cnf:/etc/mysql-cluster.cnf -v /c/Users/OVEA/Documents/Docker/MySQL/MySQL000/varlib:/var/lib/mysql mysql/mysql-cluster ndb_mgmd
docker run -itd --privileged=true --net homenet --ip 192.168.100.11 --name mysql-node-000  -v /c/Users/OVEA/Documents/Docker/MySQL/MySQL001/etc/my.cnf:/etc/my.cnf -v /c/Users/OVEA/Documents/Docker/MySQL/MySQL001/etc/mysql-cluster.cnf:/etc/mysql-cluster.cnf -v /c/Users/OVEA/Documents/Docker/MySQL/MySQL001/varlib:/var/lib/mysql mysql/mysql-cluster ndbd
docker run -itd --privileged=true --net homenet --ip 192.168.100.12 --name mysql-node-001  -v /c/Users/OVEA/Documents/Docker/MySQL/MySQL002/etc/my.cnf:/etc/my.cnf -v /c/Users/OVEA/Documents/Docker/MySQL/MySQL002/etc/mysql-cluster.cnf:/etc/mysql-cluster.cnf -v /c/Users/OVEA/Documents/Docker/MySQL/MySQL002/varlib:/var/lib/mysql mysql/mysql-cluster ndbd
docker run -itd --privileged=true --net homenet --ip 192.168.100.13 --name mysql-node-002  -v /c/Users/OVEA/Documents/Docker/MySQL/MySQL003/etc/my.cnf:/etc/my.cnf -v /c/Users/OVEA/Documents/Docker/MySQL/MySQL003/etc/mysql-cluster.cnf:/etc/mysql-cluster.cnf -v /c/Users/OVEA/Documents/Docker/MySQL/MySQL003/varlib:/var/lib/mysql mysql/mysql-cluster ndbd
docker run -itd --privileged=true --net homenet --ip 192.168.100.14 --name mysql000  -v /c/Users/OVEA/Documents/Docker/MySQL/MySQL004/etc/my.cnf:/etc/my.cnf  -v /c/Users/OVEA/Documents/Docker/MySQL/MySQL004/varlib:/var/lib/mysql -e MYSQL_RANDOM_ROOT_PASSWORD=true mysql/mysql-cluster mysqld

Linux命令示例:

docker run -itd --privileged=true --net homenet --ip 192.168.100.10 --name mysql-mgmd-000  -v /home/ovea/Documents/Docker/MySQL/MySQL000/etc/mysql-cluster.cnf:/etc/mysql-cluster.cnf -v /home/ovea/Documents/Docker/MySQL/MySQL000/varlib:/var/lib/mysql mysql/mysql-cluster ndb_mgmd
docker run -itd --privileged=true --net homenet --ip 192.168.100.11 --name mysql-node-000  -v /home/ovea/Documents/Docker/MySQL/MySQL001/etc/my.cnf:/etc/my.cnf -v /home/ovea/Documents/Docker/MySQL/MySQL001/etc/mysql-cluster.cnf:/etc/mysql-cluster.cnf -v /home/ovea/Documents/Docker/MySQL/MySQL001/varlib:/var/lib/mysql mysql/mysql-cluster ndbd
docker run -itd --privileged=true --net homenet --ip 192.168.100.12 --name mysql-node-001  -v /home/ovea/Documents/Docker/MySQL/MySQL002/etc/my.cnf:/etc/my.cnf -v /home/ovea/Documents/Docker/MySQL/MySQL002/etc/mysql-cluster.cnf:/etc/mysql-cluster.cnf -v /home/ovea/Documents/Docker/MySQL/MySQL002/varlib:/var/lib/mysql mysql/mysql-cluster ndbd
docker run -itd --privileged=true --net homenet --ip 192.168.100.13 --name mysql-node-002  -v /home/ovea/Documents/Docker/MySQL/MySQL003/etc/my.cnf:/etc/my.cnf -v /home/ovea/Documents/Docker/MySQL/MySQL003/etc/mysql-cluster.cnf:/etc/mysql-cluster.cnf -v /home/ovea/Documents/Docker/MySQL/MySQL003/varlib:/var/lib/mysql mysql/mysql-cluster ndbd
docker run -itd --privileged=true --net homenet --ip 192.168.100.14 --name mysql000  -v /home/ovea/Documents/Docker/MySQL/MySQL004/etc/my.cnf:/etc/my.cnf  -v /home/ovea/Documents/Docker/MySQL/MySQL004/varlib:/var/lib/mysql -e MYSQL_RANDOM_ROOT_PASSWORD=true mysql/mysql-cluster mysqld

必须一次启动成功,否则将会导致无法正确运行!启动完前一个节点再启动下一个节点。
结果:
启动集群
启动完成后
在日志中找到密码然后登录

docker logs mysql000
docker exec mysql000 /bin/bash
# mysql -u root -p

需要把-v挂载除配置文件外的其他选项(持久化集群)都取消掉才能正常打开mysqld服务,原因不明……而且错误也没有写入日志中!

解决方案,先停止所有容器,然后全部启动。(虽然这样是启动了,但是密码就不知道了)
Windows10

docker stop $(docker ps -q)
docker start $(docker ps -a -q)

Linux

sudo docker stop $(sudo docker ps -q)
sudo docker start $(sudo docker ps -a -q)

启动所有集群

参考资料

https://www.jianshu.com/p/cc837360c9e7

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Alisebeast/article/details/100006747

智能推荐

手把手教你写openwrt的makefile_makefile for openwrt-程序员宅基地

文章浏览阅读7.6k次,点赞6次,收藏28次。一般情况下,我们下载openwrt源码之后,我们都会基于openwrt的环境,定制化开发一些功能,openwrt里面不一定包含我们所有需要的库,可能我们需要的用到的库要自己加上去,这就涉及到如何我把我需要的模块添加到openwrt中编译。 网上也有许多关于openwrt下makefile编写的文章,但是恰好工作需要,我也从不懂到熟悉,现在把学习的过程及结果分享给大家,希望给有需要帮_makefile for openwrt

PHP preg_replace() 正则替换所有符合条件的字符串-程序员宅基地

文章浏览阅读685次。大多数语言的正则表达式都是由“/”作为定界符的,而在PHP中,还可以使用“#”定界,如果字符串中包含大量“/”字符,在使用“/”定界的时候,就需要对这些“/”转义,而使用“#”就不需要转义,更简洁。而正则表达式必须要使用定界符包围起来,在Javascript中定界符是“/”,而在PHP中,比较常见的是用“/”定界,也可以用“#”定界,而且外面还需要用引号包围起来。也就是说所有正则字符都有特定含义,如果需要再用来表示原字符含义,就需要在前面加“\”转义,即使非正则字符,用“\”转义也是没有问题的。_preg_replace

POI导出word,POI写word并导出.POI word相关类详解_poi生成word 在cell中新建p-程序员宅基地

文章浏览阅读397次。目录需求:用POI写一个Word并导出需求:用POI写一个Word并导出想到一个小品,问把大象装冰箱需要几步?_poi生成word 在cell中新建p

ISTQB初级认证-知识点及脑图总结-程序员宅基地

文章浏览阅读4.6k次,点赞17次,收藏72次。前言此文章为本人利用课余时间进行的ISTQB初级认证知识和考点的总结。总结过程主要参考了“ISTQB测试人员认证初级大纲(2011版)”,由于作者能力与精力有限,此篇文章可能会存在纰漏,望见谅并及时指出。谢谢!ISTQB思维脑图上图中红色字体部分为重要考点和易错点。ISTQB(初级)知识和考点总结软件测试基础(1)为什么需要测试(1.1)缺陷带来的危害(1.1.1)资金受..._istqb初级

Qt C++ 实现无边框窗体自定义缩放和拖动_qt无边框窗口缩放-程序员宅基地

文章浏览阅读1.8k次。在本文中,我们使用Qt C++中创建了一个无边框窗体,并实现自定义缩放和拖动功能。我们利用标志隐藏了窗体的边框,并通过事件过滤器监听了窗体和顶部栏的事件,从而实现了窗口的拖动和缩放功能。我们还通过辅助函数判断鼠标所处的边缘区域,并设置相应的鼠标样式,提供了直观的用户反馈。_qt无边框窗口缩放

随便推点

上海科技大学信息科学与技术学院夏令营_csdn 上海科技大学-程序员宅基地

文章浏览阅读4.1w次。上海科技大学信息科学与技术学院(以下简称“信息学院”)以中国科学院的科研平台为支撑,聚焦人工智能、芯片(含计算机架构、电路与器件)、虚拟现实、大数据、量子通信与计算、云计算与边缘计算、无人驾驶、电动汽车、新能源、智能医学等前沿研究领域。学院下设七大研究中心:视觉与数据智能中心、智能网络中心、后摩尔器件与集成系统中心、智慧电力与能源系统中心、自动化与机器人中心、系统与安全中心、智能医学信息研究中心。信息学院为学生提供国际化的科研环境:信息学院常任教授100%毕业于或曾就职于海外一流高校,特聘教授是聘自中国_csdn 上海科技大学

DDR5相比DDR4有什么新特性?-程序员宅基地

文章浏览阅读2.9k次,点赞2次,收藏29次。关注、星标公众号,不错过精彩内容作者:黄工素材来源:网络公众号:strongerHuang第五代双倍数据率同步动态随机存取存储器(英语:double data rate fifth-ge..._ddr4和ddr5的性能差距

java百度天气接口解析_Java调用天气接口(百度天气)解析返回的JSON数据-程序员宅基地

文章浏览阅读678次。简介:本文详细讲述了通过Java调用百度天气接口的方法,取得返回的JSON格式的数据,并且通过第三方包解析JSON格式的数据。通过百度天气API调用网络编程接口接收返回的JSON格式的数据。关于百度天气接口的详细说明可以参考文章: http://www..com/txw1958/p/baidu-weather-forecast-api.html使用百度提供的天气接口,也就是通过一个URL访问百..._java百度天气api接口

改造智能风扇之——普通BLDC风扇拆机分析篇_fu6831 bldc-程序员宅基地

文章浏览阅读4.5k次,点赞6次,收藏20次。拆机学院:直流变频塔扇一、概述随着国内经济的快速发展,如今的电风扇如已一改在人们印象中的传统形象,在外观和功能上都更追求个性化。当然风扇的动力核心也由最初的交流电机,延伸出使用直流电机。这次我们通过拆解一款直流变频塔扇,从硬件上学习一下目前这种直流变频风扇的工作方式。二、直流变频风扇从某宝买了一台,对其进行拆机,可从结构上,可将风扇拆解为3个部分,顶部的控制部门,中间出风口和扇叶,底部的电机和电源驱动部分。外壳除了螺丝还有卡扣,拆的时候需要注意下,太暴力,可能会造成塑料卡扣断裂,拆开外壳,下面我_fu6831 bldc

Linux系统VsCode 配置C/C++环境_linux vscode配置c/c++环境-程序员宅基地

文章浏览阅读1.8w次,点赞30次,收藏210次。Linux系统VsCode 配置C/C++环境_linux vscode配置c/c++环境

骨架图的模拟js实现_js 骨架图-程序员宅基地

文章浏览阅读592次。骨架图的模拟js实现场景​ 为了提升体验,我们这边在页面初始渲染时加入了骨架图来代替loading,在拿到数据后再渲染数据,更改组件的展示。感觉确实比loading要提升体验,开始没接触过,对这部分比较感兴趣,就尝试着用html+css+js实现了一个简略版的骨架图,其效果如下​ [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JJgeBzIe-1613973854534)(./骨架图.gif)]​ 骨架图本质上也是在数据未接收到时的页面初始展示,相比于loading体_js 骨架图