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
# 操作系统镜像,最好提前pull到本地,这样制作镜像的时候就不会再去网上pull了
FROM centos:latest     
MAINTAINER zy "279790279@qq.com"

#定义变量
ENV REDIS_HOME /usr/local

# 创建安装目录 更新yum源 安装编译需要的工具
RUN mkdir -p $REDIS_HOME/redis \
    && yum -y update \
    && yum install -y gcc make 

# 本地的redis源码包复制到镜像的根路径下,ADD命令会在复制过后自动解包。被复制的对象必须处于Dockerfile同一路径,且ADD后面必须使用相对路径
ADD redis-3.0.3.tar.gz /
# 将一开始编译产生并修改后的配置复制到安装目录
ADD redis-3.0.3/redis.conf $REDIS_HOME/redis/  

#把目录转到文件夹内
WORKDIR /redis-3.0.3

#编译 编译后,容器中只需要可执行文件redis-server
RUN make \
    && mv /redis-3.0.3/src/redis-server  $REDIS_HOME/redis/

#设置工作访问时候的WORKDIR路径,登陆落脚点
WORKDIR /

# 删除解压文件 安装编译完成之后 删除多余的gcc跟make
RUN rm -rf /redis-3.0.3 \
    && yum remove -y gcc make 
  
# 添加数据卷
VOLUME ["/var/log/redis"]

# 暴露端口
EXPOSE 6379

#入口点
ENTRYPOINT ["/usr/local/redis/redis-server", "/usr/local/redis/redis.conf"]

构建镜像

[root@docker01 docker_redis_cluster]# docker build -t rising_zy/cluster-redis-node:3.0.3 .
......
Complete!
Removing intermediate container 7c9cc1bed2be
---> 528db1f8fea9
Step 11/13 : VOLUME ["/var/log/redis"]
---> Running in 729b7e4dc9f4
Removing intermediate container 729b7e4dc9f4
---> 9061b4240f52
Step 12/13 : EXPOSE 6379
---> Running in ebf95090f698
Removing intermediate container ebf95090f698
---> 506964ec2e5c
Step 13/13 : ENTRYPOINT ["/usr/local/redis/redis-server", "/usr/local/redis/redis.conf"]
---> Running in 428a90bf22a7
Removing intermediate container 428a90bf22a7
---> d70e8f3db0ad
Successfully built d70e8f3db0ad
Successfully tagged rising_zy/cluster-redis-node:3.0.3

查看

[root@docker01 docker_redis_cluster]# docker images
REPOSITORY                         TAG                 IMAGE ID            CREATED             SIZE
rising_zy/cluster-redis-node      3.0.3               d70e8f3db0ad        26 seconds 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/cluster-redis-node:3.0.3
[root@docker01 ~]# docker run -di --name redis-6380 -p 6380:6379 rising_zy/cluster-redis-node:3.0.3
[root@docker01 ~]# docker run -di --name redis-6381 -p 6381:6379 rising_zy/cluster-redis-node:3.0.3
[root@docker01 ~]# docker run -di --name redis-6382 -p 6382:6379 rising_zy/cluster-redis-node:3.0.3
[root@docker01 ~]# docker run -di --name redis-6383 -p 6383:6379 rising_zy/cluster-redis-node:3.0.3
[root@docker01 ~]# docker run -di --name redis-6384 -p 6384:6379 rising_zy/cluster-redis-node: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> 

 

posted @ 2019-01-24 10:39  青衫仗剑  阅读(692)  评论(0编辑  收藏  举报