一、实验环境
1.ubuntu14.04虚拟机
2.docker-1.12.3
3、搭建本地私有registry(参考我以前博客)
4。虚拟机ip分别是192.168.110.155(manager节点)和192.168.110.147(worker节点)
二、实验步骤
1、下载mysqcluster安装包(mysql-cluster-gpl-7.4.12-linux-glibc2.5-x86_64.tar.gz)
2、相关配置文件
(1)config.ini,文件内容如下
[NDBD DEFAULT]
NoOfReplicas=2
DataMemory=80M
IndexMemory=18M
[NDB_MGMD]
hostname=mysql-m
datadir=/var/lib/mysql-cluster
[NDBD]
hostname=mysql-d1
datadir=/usr/local/mysql/data/
[NDBD]
hostname=mysql-d2
datadir=/usr/local/mysql/data/
[MYSQLD]
hostname=mysql-s
其中mysql-m是管控节点的service name
mysql-d1是数据节点1的service name
mysql-d2是数据节点2的service name
mysql-s是sql节点的servie name
(2)my.cnf文件,文件内容如下
# Options for mysqld process:
[MYSQLD]
ndbcluster # run NDB engine
datadir=/usr/local/mysql/data
socket=/usr/local/mysql/sock/mysql.sock
ndb-connectstring=mysql-m # location of MGM node
# Options for ndbd process:
[MYSQL_CLUSTER]
ndb-connectstring=mysql-m # location of MGM node
(3)run.sh 文件内容如下
#!/bin/bash
# Parameter values for $1:
# ndb_mgm: console client (default)
# ndbd: data node
# ndb_mgmd: manager node
# mysqld: sql node
# Parameter value for $2 (optionally):
# The ndb_mgmd ip/hostname
MYSQL_CLUSTER_BIN=${MYSQL_CLUSTER_HOME}/bin
MYSQL_MANAGEMENT_SERVER=$2
MYSQL_MANAGEMENT_PORT=1186
INITIAL=""
RELOAD="--reload"
if [ ! -e ${MYSQL_CLUSTER_DATA}/.initial ]; then
echo "First execution detected. Using --initial parameter."
INITIAL="--initial"
RELOAD=""
touch ${MYSQL_CLUSTER_DATA}/.initial
else
echo "Pre-initialized installation detected. Using --reload parameter."
fi
echo "Using management server ${MYSQL_MANAGEMENT_SERVER}"
if [ $1 == "ndbd" ]; then
echo "Starting ndbd..."
exec ${MYSQL_CLUSTER_BIN}/ndbd --nodaemon ${INITIAL} --connect-string="host=${MYSQL_MANAGEMENT_SERVER}:${MYSQL_MANAGEMENT_PORT}"
elif [ $1 == "ndb_mgmd" ]; then
echo "Starting ndb_mgmd..."
exec ${MYSQL_CLUSTER_BIN}/ndb_mgmd --nodaemon ${RELOAD} ${INITIAL} -f ${MYSQL_CLUSTER_CONFIG}
elif [ $1 == "mysqld" ]; then
echo "Starting mysqld_safe..."
exec ${MYSQL_CLUSTER_BIN}/mysqld_safe --ndbcluster --ledir=${MYSQL_CLUSTER_BIN} --ndb-connectstring=${MYSQL_MANAGEMENT_SERVER}
else
echo "Starting ndb_mgm..."
exec ${MYSQL_CLUSTER_BIN}/ndb_mgm ${MYSQL_MANAGEMENT_SERVER}
fi
(4)Dockerfile文件,文件内容如下
FROM debian:wheezy
MAINTAINER Henrik Sachse <t3x7m3@posteo.de>
####################################################
# User and group setup
####################################################
ENV MYSQL_USER mysql
ENV MYSQL_GROUP mysql
RUN groupadd mysql && useradd -g mysql mysql
####################################################
# Installation
####################################################
ENV MYSQL_CLUSTER_VERSION 7.4
ENV MYSQL_CLUSTER_MICRO_VERSION 12
ENV MYSQL_CLUSTER_ARCH x86_64
ENV MYSQL_CLUSTER_ARCHIVE_NAME mysql-cluster-gpl-${MYSQL_CLUSTER_VERSION}.${MYSQL_CLUSTER_MICRO_VERSION}-linux-glibc2.5-${MYSQL_CLUSTER_ARCH}
ENV MYSQL_CLUSTER_ARCHIVE ${MYSQL_CLUSTER_ARCHIVE_NAME}.tar.gz
RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections \
&& apt-get update \
&& apt-get install -y perl-modules libaio1 curl
ENV MYSQL_CLUSTER_HOME /usr/local/mysql
ENV MYSQL_CLUSTER_DATA ${MYSQL_CLUSTER_HOME}/data
ENV MYSQL_CLUSTER_LOG /var/lib/mysql-cluster
ENV MYSQL_CLUSTER_CONFIG /etc/mysql-cluster.ini
COPY mysql-cluster-gpl-7.4.12-linux-glibc2.5-x86_64.tar.gz /var/tmp
RUN cd /var/tmp \
&& mkdir -p ${MYSQL_CLUSTER_HOME} \
&& mkdir -p ${MYSQL_CLUSTER_CONFIG} \
&& mkdir -p /usr/local/mysql/sock \
&& tar --strip 1 -C ${MYSQL_CLUSTER_HOME} -xzvf ${MYSQL_CLUSTER_ARCHIVE} \
&& rm -v ${MYSQL_CLUSTER_ARCHIVE} \
&& mkdir -p ${MYSQL_CLUSTER_DATA} \
&& chown -R root ${MYSQL_CLUSTER_HOME} \
&& chown -R ${MYSQL_USER} ${MYSQL_CLUSTER_DATA} \
&& chown -R mysql.mysql /usr/local/mysql/sock \
&& chgrp -R ${MYSQL_GROUP} ${MYSQL_CLUSTER_HOME}
RUN cd ${MYSQL_CLUSTER_HOME} \
&& ./scripts/mysql_install_db --user=${MYSQL_USER} --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
VOLUME ${MYSQL_CLUSTER_LOG}
VOLUME ${MYSQL_CLUSTER_DATA}
####################################################
# Configuration
####################################################
ADD my.cnf /etc/my.cnf
ADD config.ini ${MYSQL_CLUSTER_CONFIG}
EXPOSE 1186 3306
####################################################
# Startup
####################################################
ADD run.sh /run.sh
RUN chmod +x /run.sh
ENTRYPOINT ["/run.sh"]
CMD ["ndb_mgm"]
3.将Dockerfile、config.ini、my.cnf、run.sh和 mysql-cluster-gpl-7.4.12-linux-glibc2.5-x86_64.tar.gz放在一个目录下,
然后执行如下命令,创建镜像:docker build -t dockertest1:5000/mysql-cluster .
4、相关服务启动脚本
(1)mysql-m.sh 文件内容如下
docker service create \
--name mysql-m \
--network mysql \
--publish 1186:1186 \
dockertest1:5000/mysql-cluster \
ndb_mgmd
(2) mysql-m.sh 文件内容如下
docker service create \
--name mysql-s \
--network mysql \
--publish 3306:3306 \
dockertest1:5000/mysql-cluster \
mysqld mysql-m
(3)
mysql-d1.sh 文件内容如下
docker service create \
--name mysql-d1 \
--network mysql \
dockertest1:5000/mysql-cluster \
ndbd mysql-m
(4) mysql-d2.sh 文件内容如下
docker service create \
--name mysql-d2 \
--network mysql \
dockertest1:5000/mysql-cluster \
ndbd mysql-m
5、分别启动脚本mysql-s.sh mysql-d1.sh mysql-d2.sh mysql-m.sh,注意启动的现货顺序
6、实验结果
root@dockertest1:/home/docker/xu# docker service ls
ID NAME REPLICAS IMAGE COMMAND
a5ueuik6t9to mysql-d1 1/1 dockertest1:5000/mysql-cluster ndbd mysql-m
bystf4li98vb mysql-m 1/1 dockertest1:5000/mysql-cluster mdb_mgmd
e652wdqsozxn mysql-s 1/1 dockertest1:5000/mysql-cluster mysqld mysql-m
f1uo88b3j5ut mysql-d2 1/1 dockertest1:5000/mysql-cluster ndbd mysql-m
看见上面的结果说明实验搭建成功,接下来还需要验证集群的效果,后续文章会介绍