Docker构建redis cluster集群
准备工作
安装gcc ruby
解压编译redis
Redis 是 c 语言开发的。安装 redis 需要 c 语言的编译环境。如果没有 gcc 需要在线安装。
yum install gcc-c++
使用yum命令安装 ruby (我们需要使用ruby脚本来实现集群搭建)
yum install ruby
yum install rubygems
下载安装包
[root@docker01 ~]# mkdir zy_redis_cluster
[root@docker01 ~]# cd zy_redis_cluster/
[root@docker01 zy_redis_cluster]# mkdir docker_redis_cluster
[root@docker01 zy_redis_cluster]# cd docker_redis_cluster/
[root@docker01 docker_redis_cluster]# wget http://download.redis.io/releases/redis-3.0.3.tar.gz
解压编译
[root@docker01 docker_redis_cluster]# tar -zxvf redis-3.0.3.tar.gz
[root@docker01 docker_redis_cluster]# cd redis-3.0.3/
[root@docker01 redis-3.0.3]# make
修改配置文件
[root@docker01 redis-3.0.3]# vi redis.conf
#守护进程设置为no
daemonize no
#修改绑定ip
#bind 127.0.0.1
bind 0.0.0.0
#设置日志路径
logfile "/var/log/redis/redis-server.log"
#开启集群功能
cluster-enabled yes
#其他配置修改
cluster-config-file nodes-6379.conf
cluster-node-timeout 15000
镜像制作
创建镜像dockerfile文件
[root@docker01 ~]# cd /root/zy_redis_cluster/docker_redis_cluster
[root@docker01 docker_redis_cluster]# vi Dockerfile
# Redis
# Version 3.0.3
FROM centos:latest # 操作系统镜像,最好提前pull到本地,这样制作镜像的时候就不会再去网上pull了
ENV REDIS_HOME /usr/local
ADD redis-3.0.3.tar.gz / # 本地的redis源码包复制到镜像的根路径下,ADD命令会在复制过后自动解包。被复制的对象必须处于Dockerfile同一路径,且ADD后面必须使用相对路径
RUN mkdir -p $REDIS_HOME/redis # 创建安装目录
ADD redis-3.0.3/redis.conf $REDIS_HOME/redis/ # 将一开始编译产生并修改后的配置复制到安装目录
RUN yum -y update # 更新yum源
RUN yum install -y gcc make # 安装编译需要的工具
WORKDIR /redis-3.0.3
RUN make
RUN mv /redis-3.0.3/src/redis-server $REDIS_HOME/redis/ # 编译后,容器中只需要可执行文件redis-server
WORKDIR /
RUN rm -rf /redis-3.0.3 # 删除解压文件
RUN yum remove -y gcc make # 安装编译完成之后,可以删除多余的gcc跟make
VOLUME ["/var/log/redis"] # 添加数据卷
EXPOSE 6379 # 暴露6379端口,也可以暴露多个端口,这里不需要如此
构建镜像
[root@docker01 docker_redis_cluster]# docker build -t rising_zy/cluster-redis .
Sending build context to Docker daemon 48.83MB
Step 1/15 : FROM centos:latest
---> 1e1148e4cc2c
......
Successfully built 147b05e2df29
Successfully tagged rising_zy/cluster-redis:latest
查看
[root@docker01 docker_redis_cluster]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
rising_zy/cluster-redis latest 147b05e2df29 About a minute ago 451MB
registry latest 116995fd6624 3 days ago 25.8MB
centos latest 1e1148e4cc2c 6 weeks ago 202MB
创建redis节点镜像dockerfile文件
[root@docker01 ~]# cd /root/zy_redis_cluster/
[root@docker01 zy_redis_cluster]# mkdir docker_redis_nodes
[root@docker01 zy_redis_cluster]# cd docker_redis_nodes
[root@docker01 docker_redis_nodes]# vi Dockerfile
# Redis Node
# Version 3.0.3
FROM rising_zy/cluster-redis:latest
# MAINTAINER_INFO
MAINTAINER zy [email protected]
ENTRYPOINT ["/usr/local/redis/redis-server", "/usr/local/redis/redis.conf"]
构建redis节点镜像
[root@docker01 docker_redis_nodes]# docker build -t rising_zy/nodes-redis:3.0.3 .
Sending build context to Docker daemon 2.048kB
Step 1/3 : FROM rising_zy/cluster-redis:latest
---> 147b05e2df29
Step 2/3 : MAINTAINER zy [email protected]
---> Running in 7e1c6b756f6a
Removing intermediate container 7e1c6b756f6a
---> 637b7f2f6b68
Step 3/3 : ENTRYPOINT ["/usr/local/redis/redis-server", "/usr/local/redis/redis.conf"]
---> Running in a6a4ff438ba5
Removing intermediate container a6a4ff438ba5
---> c632679f3677
Successfully built c632679f3677
Successfully tagged rising_zy/nodes-redis:3.0.3
查看
[root@docker01 docker_redis_nodes]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
rising_zy/nodes-redis 3.0.3 c632679f3677 26 seconds ago 451MB
rising_zy/cluster-redis latest 147b05e2df29 5 minutes ago 451MB
registry latest 116995fd6624 3 days ago 25.8MB
centos latest 1e1148e4cc2c 6 weeks ago 202MB
创建redis集群
运行6个docker节点
[root@docker01 ~]# docker run -di --name redis-6379 -p 6379:6379 rising_zy/nodes-redis:3.0.3
[root@docker01 ~]# docker run -di --name redis-6380 -p 6380:6379 rising_zy/nodes-redis:3.0.3
[root@docker01 ~]# docker run -di --name redis-6381 -p 6381:6379 rising_zy/nodes-redis:3.0.3
[root@docker01 ~]# docker run -di --name redis-6382 -p 6382:6379 rising_zy/nodes-redis:3.0.3
[root@docker01 ~]# docker run -di --name redis-6383 -p 6383:6379 rising_zy/nodes-redis:3.0.3
[root@docker01 ~]# docker run -di --name redis-6384 -p 6384:6379 rising_zy/nodes-redis:3.0.3
分别查看节点ip
[root@docker01 ~]# docker inspect redis-63xx
安装ruby用户搭建redis集群的脚本
上传redis-3.0.0.gem到机器上 这个文件可在网上下载
安装
[root@docker01 ~]# gem install redis-3.0.0.gem
使用ruby脚本搭建redis集群(每个reids保证启动状态)
[root@docker01 ~]# cd zy_redis_cluster/docker_redis_cluster/redis-3.0.3/src/
[root@docker01 src]# ./redis-trib.rb create --replicas 1 172.17.0.3:6379 172.17.0.4:6379 172.17.0.5:6379 172.17.0.6:6379 172.17.0.7:6379 172.17.0.8:6379
>>> Creating cluster
Connecting to node 172.17.0.3:6379: OK
......
M: b9745b519f74485ee582607de31afee93ad86650 172.17.0.3:6379
slots:0-5460 (5461 slots) master
M: 5a2a5e862290d615b6a7576524a5b5de8367344e 172.17.0.4:6379
slots:5461-10922 (5462 slots) master
M: 5e94e07f136b1d83e35ac7f2c682c52fed7c620c 172.17.0.5:6379
slots:10923-16383 (5461 slots) master
M: 8838aef56ca0045aea231e8c211a2eb99a06fab5 172.17.0.6:6379
slots: (0 slots) master
replicates b9745b519f74485ee582607de31afee93ad86650
M: 0b61287211cb3c6118924bcadfad169b988096b0 172.17.0.7:6379
slots: (0 slots) master
replicates 5a2a5e862290d615b6a7576524a5b5de8367344e
M: 4d4dad7c0c787e4de99729d3f7a911d1bbd21a7f 172.17.0.8:6379
slots: (0 slots) master
replicates 5e94e07f136b1d83e35ac7f2c682c52fed7c620c
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
查看集群
[root@docker01 src]# ./redis-cli -h 172.17.0.3 -p 6379 -c
127.0.0.1:6379> cluster nodes
4d4dad7c0c787e4de99729d3f7a911d1bbd21a7f 172.17.0.8:6379 slave 5e94e07f136b1d83e35ac7f2c682c52fed7c620c 0 1548175276225 6 connected
5a2a5e862290d615b6a7576524a5b5de8367344e 172.17.0.4:6379 master - 0 1548175275208 2 connected 5461-10922
b9745b519f74485ee582607de31afee93ad86650 172.17.0.3:6379 myself,master - 0 0 1 connected 0-5460
8838aef56ca0045aea231e8c211a2eb99a06fab5 172.17.0.6:6379 slave b9745b519f74485ee582607de31afee93ad86650 0 1548175271127 4 connected
5e94e07f136b1d83e35ac7f2c682c52fed7c620c 172.17.0.5:6379 master - 0 1548175274181 3 connected 10923-16383
0b61287211cb3c6118924bcadfad169b988096b0 172.17.0.7:6379 slave 5a2a5e862290d615b6a7576524a5b5de8367344e 0 1548175272150 5 connected
127.0.0.1:6379>