为了更熟悉 docker 以及为 MySQL 群集做一个测试配置,我给 MySQL Cluster (也叫 NDB 群集) 的各个组件做了一个 docker 镜像。
首先我弄了一个 Fedora 20 容器,然后把所有组件都丢到容器里面运行。能用,而且配置起来也挺简单。不过这些都还没有支持 docker。
然后我为所有的控件做了个 Dockerfile 和一个基础镜像。
基础镜像:
包含了 MySQL 群集软件
安装了 libaio
设置了 mysql 用户和工作组
作为其他镜像的基础服务
管理节点 (ndb_mgmd) 镜像:
设置 ndb_mgmd 作为入口点
设置群集配置文件 config.ini
通过 "--name=mymgm01" 启动
数据节点 (ndbmtd) 镜像:
设置 ndbmtd 作为入口点
用下面的链接字符串: "host=${MGM01_PORT_1186_TCP_ADDR}:1186"
通过 "--link mymgm01:mgm01" 启动,以便允许它连接到管理节点。
你应该为这个类型节点弄 2 个容器,以便用来创建一个有 2 个节点的节点组。
API 节点 (mysqld) 镜像:
设置 my.cnf
运行 mysqld_safe
通过 "--link mymgm01:mgm01" 启动,一边允许它连接到管理节点。
ndb-connectstring 作为 mysqld_safe 的启动参数,因为它来自环境变量。不支持在 my.cnf 中使用环境变量。Docker 应该是支持更新 /etc/hosts 的,不过我这没成功。
暴露 3306 端口给你的应用
管理客户端 (ndb_mgm) 镜像:
设置 ndb_mgm 作为入口点
通过 "--link mymgm01:mgm01" 启动,以便允许它连接到管理节点。
在容器中运行ndb_mgm ,在管理服务器上不需要再公开 1186 端口。更多细节看 这里。
你可以重写入口点来运行其他 NDB 组件,比如说 ndb_desc 或者 ndb_select_all
你可以在这找到镜像https://registry.hub.docker.com/u/dveeden/mysqlcluster72/
可以在这找到 Dockerfiles https://github.com/dveeden/dve-docker
可能的改进
在 config.ini 中使用主机名而不是 IPv4 地址。这可以更灵活。不过这就意味着必须和 DNS 一起更新 /etc/hosts 或 fideling。
在 Dockerfiles 里用 VOLUMES ,可以让数据处理工作更简单。
2KB项目(www.2kb.com,源码交易平台),提供担保交易、源码交易、虚拟商品、在家创业、在线创业、任务交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接买卖、网站交易、广告买卖、站长培训、建站美工等服务