Redis基础镜像
在目录/data下创建redis_base目录。
mkdir redis_base
cd redis_base
vim Dockerfile
Redis基础镜像的Dockerfile如下:
FROM ubuntu
MAINTAINER chen "383936915@qq.com"
ENV REFRESHED_AT 2017-09-16
RUN apt-get -yyq update && apt-get -yqq install redis-server redis-tools
VOLUME [ "/var/lib/redis","/var/log/redis/"]
EXPOSE 6379
CMD []
进入/data/redis_base目录,执行命令:
docker build -t chen/redis_base .
构建完成后,查看镜像:
docker images
可以看到Redis的镜像已经构建完成。
Redis Master节点
在目录/data下创建redis_primary目录。
mkdir redis_primary
cd redis_primary
vim Dockerfile
Redis Master节点镜像的Dockerfile如下:
FROM chen/redis_base
MAINTAINER chen "383936915@qq.com"
ENV REFRESHED_AT 2017-09-22
ENTRYPOINT ["redis-server","--logfile /var/log/redis/redis-server.log"]
进入/data/redis_primary目录,执行命令:
docker build -t chen/redis_primary .
构建完成后,查看镜像:
docker images
可以看到Redis Master的镜像已经构建完成。
创建Docker NetWork
创建express network,Redis集群的节点都运行在express中。
执行以下命令创建express network:
docker network create express
这样我们就创建了一个express network,执行以下命令可以查看express的信息:
docker network inspect express
Redis从节点
步骤跟主节点一致,主要是Dockfile不一样,Dockerfile如下:
FROM chen/redis_replica
MAINTAINER chen "383936915@qq.com"
ENV REFRESHED_AT 2017-09-22
ENTRYPOINT ["redis-server","--logfile /var/log/redis/redis-replica.log","--slaveof redis_primary 6379"]
构建/data/redis_replica目录下执行以下命令:
docker build -t chen/redis_replica .
这样一个Redis从节点的镜像就构建好了。
启动Redis主从节点
我们需要先启动主节点,并运行在express network中,执行以下命令:
docker run -d -h redis_primary --net express --name redis_primary chen/redis_primary
依次启动两个从节点,执行以下命令:
docker run -d -h redis_replica1 --name redis_replica1 --net express chen/redis_replica
docker run -d -h redis_replica2 --name redis_replica2 --net express chen/redis_replica
这样一个主节点和两个从节点都启动起来了。
查看Redis主从节点的日志
先查看Redis Master节点的日志,如下:
docker run -ti --rm --volumes-from redis_replica1 ubuntu cat /var/log/redis/redis-replica.log
可以看到主节点具体的日志输出:
1:S 24 Sep 07:35:15.929 * The server is now ready to accept connections on port 6379
1:S 24 Sep 07:35:15.934 * Connecting to MASTER redis_primary:6379
1:S 24 Sep 07:35:15.939 * MASTER <-> SLAVE sync started
1:S 24 Sep 07:35:15.939 * Non blocking connect for SYNC fired the event.
1:S 24 Sep 07:35:15.939 * Master replied to PING, replication can continue...
1:S 24 Sep 07:35:15.939 * Partial resynchronization not possible (no cached master)
1:S 24 Sep 07:35:15.941 * Full resync from master: 3dc967ddf2be0a82b9c9af0027a478e058f523cf:1
1:S 24 Sep 07:35:16.044 * MASTER <-> SLAVE sync: receiving 18 bytes from master
1:S 24 Sep 07:35:16.044 * MASTER <-> SLAVE sync: Flushing old data
1:S 24 Sep 07:35:16.044 * MASTER <-> SLAVE sync: Loading DB in memory
1:S 24 Sep 07:35:16.044 * MASTER <-> SLAVE sync: Finished with success
从节点的具体日志输出,执行以下命令:
docker run -ti --rm --volumes-from redis_replica1 ubuntu cat /var/log/redis/redis-replica.log
docker run -ti --rm --volumes-from redis_replica2 ubuntu cat /var/log/redis/redis-replica.log
可以看到Redis从节点的日志输出:
1:S 24 Sep 07:48:48.937 * Connecting to MASTER redis_primary:6379
1:S 24 Sep 07:48:48.939 * MASTER <-> SLAVE sync started
1:S 24 Sep 07:48:48.939 * Non blocking connect for SYNC fired the event.
1:S 24 Sep 07:48:48.939 * Master replied to PING, replication can continue...
1:S 24 Sep 07:48:48.939 * Partial resynchronization not possible (no cached master)
1:S 24 Sep 07:48:48.939 * Full resync from master: 3dc967ddf2be0a82b9c9af0027a478e058f523cf:1135
1:S 24 Sep 07:48:48.965 * MASTER <-> SLAVE sync: receiving 18 bytes from master
1:S 24 Sep 07:48:48.966 * MASTER <-> SLAVE sync: Flushing old data
1:S 24 Sep 07:48:48.966 * MASTER <-> SLAVE sync: Loading DB in memory
1:S 24 Sep 07:48:48.966 * MASTER <-> SLAVE sync: Finished with success
这样Redis集群就弄好啦:]