Docker 部署 Redis集群

1. 创建redis镜像

mkdir /opt/docker_redis_cluster
cd /opt/docker_redis_cluster
wget http://download.redis.io/releases/redis-4.0.11.tar.gz
tar xvzf redis-4.0.11.tar.gz
cd redis-4.0.11
make

2.修改redis配置文件

vim /opt/docker_redis_cluster/redis-4.0.11/redis.conf
# 只修改其中的内容
bind 0.0.0.0                              #修改bindip 使其他用户可访问
daemonize no                            #关闭守护进程
requirepass 123456                        #添加密码
masterauth 123456                         #添加主从连接密码
logfile "/var/log/redis/redis-server.log"         #设置日志路径
cluster-enabled yes                          #配置集群相关信息
cluster-config-file nodes-6379.conf
cluster-node-timeout 15000

3. 制作镜像

vim /opt/docker_redis_cluster/Dockerfile
# Redis
# Version 4.0.11
FROM centos:7
ENV REDIS_HOME /usr/local
ADD redis-4.0.11.tar.gz /              # 本地的redis源码包复制到镜像的根路径下.
RUN mkdir -p $REDIS_HOME/redis     # 创建安装目录
ADD redis-4.0.11/redis.conf $REDIS_HOME/redis/  # 将一开始编译产生并修改后的配置复制到安装目录
RUN rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
RUN yum -y update                 # 更新yum源
RUN yum install -y gcc make         # 安装编译需要的工具
WORKDIR /redis-4.0.11
RUN make
RUN mv /redis-4.0.11/src/redis-server  $REDIS_HOME/redis/   # 只保留redis-server
WORKDIR /
RUN rm -rf /redis-4.0.11             # 删除解压文件
RUN yum remove -y gcc make        #删除多余的gcc跟make
VOLUME ["/var/log/redis"]             # 添加数据卷
EXPOSE 6379                       # 暴露6379端口

cd /opt/docker_redis_cluster/
docker build -t lyw/docker_redis_cluster . 

4. 创建集群节点镜像

mkdir /opt/docker_redis_nodes
vim /opt/docker_redis_nodes/Dockerfile
# Redis Node
# Version 4.0.11
FROM lyw/docker_redis_cluster:latest
# MAINTAINER_INFO
MAINTAINER nestor nestor.yang@duxes.cn
ENTRYPOINT ["/usr/local/redis/redis-server", "/usr/local/redis/redis.conf"]

cd /opt/docker_redis_nodes/
docker build -t lyw/docker_redis_nodes .

# 查看
docker images

5. 启动redis容器

docker run -d --name redis-6380 -p 6380:6379 lyw/docker_redis_nodes 
docker run -d --name redis-6381 -p 6381:6379 lyw/docker_redis_nodes 
docker run -d --name redis-6382 -p 6382:6379 lyw/docker_redis_nodes 
docker run -d --name redis-6383 -p 6383:6379 lyw/docker_redis_nodes 
docker run -d --name redis-6384 -p 6384:6379 lyw/docker_redis_nodes 
docker run -d --name redis-6385 -p 6385:6379 lyw/docker_redis_nodes 

6.连接redis

# 宿主机安装redis
yum install y redis

# 获取容器ip
docker ps

docker inspect 8f82b38d45ad  bc7a8ef02c14   0d7aed712a10 94076bca5ee1  87a8e8025f04 d6cb77761db6  |grep IPA
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.2",
                    "IPAMConfig": null,
                    "IPAddress": "172.17.0.2",
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.3",
                    "IPAMConfig": null,
                    "IPAddress": "172.17.0.3",
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.4",
                    "IPAMConfig": null,
                    "IPAddress": "172.17.0.4",
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.5",
                    "IPAMConfig": null,
                    "IPAddress": "172.17.0.5",
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.6",
                    "IPAMConfig": null,
                    "IPAddress": "172.17.0.6",
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.7",
                    "IPAMConfig": null,
                    "IPAddress": "172.17.0.7",
# 连接
[root@jojo redis]# redis-cli -h 172.17.0.2
172.17.0.2:6379> 

7.部署集群

# 关联集群 
172.17.0.2:6379>  CLUSTER MEET 172.17.0.3 6379
OK
172.17.0.2:6379>  CLUSTER MEET 172.17.0.4 6379
OK
172.17.0.2:6379>  CLUSTER MEET 172.17.0.5 6379
OK
172.17.0.2:6379>  CLUSTER MEET 172.17.0.6 6379
OK
172.17.0.2:6379>  CLUSTER MEET 172.17.0.7 6379
OK
# 查看集群
172.17.0.6:6379> CLUSTER NODES
57c264732c27d944b531420b26a5249eab588f55 172.17.0.4:6379@16379 master - 0 1596905575595 2 connected
1eb282b2dd51723a31d230987afc8c5633a8eadd 172.17.0.6:6379@16379 myself,master - 0 1596905575000 4 connected
f23f85f71810cd1bd8d22ce73717d9940cc3a42b 172.17.0.2:6379@16379 master - 0 1596905574000 0 connected
731d616c31b967a56238be82be5243b7440a42cc 172.17.0.3:6379@16379 master - 0 1596905576604 1 connected
782635fc70af0041cafc07491167092049d61a4e 172.17.0.5:6379@16379 master - 0 1596905574587 3 connected
b7483dee44daa99408716d77a73266f017ac0bfb 172.17.0.7:6379@16379 master - 0 1596905574000 5 connected
172.17.0.6:6379> 

8. 分配槽位

主节点 副本
172.17.0.2 172.17.0.5
172.17.0.3 172.17.0.6
172.17.0.4 172.17.0.7
[root@jojo redis]# redis-cli -p 6379 -h 172.17.0.2 CLUSTER ADDSLOTS {0..5461}
OK
[root@jojo redis]# redis-cli -p 6379 -h 172.17.0.3 CLUSTER ADDSLOTS {5462..10922}
OK
[root@jojo redis]# redis-cli -p 6379 -h 172.17.0.4 CLUSTER ADDSLOTS {10923..16383}
OK

# 插入数据测试
 vim data.sh 
#!/bin/bash
for i in {1..1000};do
    redis-cli -c -p 6379 -h 172.17.0.2 set k${i} v${i}
done

[root@jojo ~]# redis-cli -h 172.17.0.2
172.17.0.2:6379> DBSIZE
(integer) 341
172.17.0.2:6379> 
[root@jojo ~]# redis-cli -h 172.17.0.3
172.17.0.3:6379> DBSIZE
(integer) 332
172.17.0.3:6379> 
[root@jojo ~]# redis-cli -h 172.17.0.4
172.17.0.4:6379> DBSIZE
(integer) 327
172.17.0.4:6379> 

9.副本节点

# 查看节点
172.17.0.4:6379> CLUSTER NODES
57c264732c27d944b531420b26a5249eab588f55 172.17.0.4:6379@16379 myself,master - 0 1596906388000 2 connected 10923-16383
f23f85f71810cd1bd8d22ce73717d9940cc3a42b 172.17.0.2:6379@16379 master - 0 1596906388000 0 connected 0-5461
782635fc70af0041cafc07491167092049d61a4e 172.17.0.5:6379@16379 master - 0 1596906387000 3 connected
b7483dee44daa99408716d77a73266f017ac0bfb 172.17.0.7:6379@16379 master - 0 1596906389697 5 connected
1eb282b2dd51723a31d230987afc8c5633a8eadd 172.17.0.6:6379@16379 master - 0 1596906388689 4 connected
731d616c31b967a56238be82be5243b7440a42cc 172.17.0.3:6379@16379 master - 0 1596906387683 1 connected 5462-10922

# 配置主从
172.17.0.5 的 172.17.0.2的从库
172.17.0.6 的 172.17.0.3的从库
172.17.0.7 的 172.17.0.4的从库
[root@jojo ~]# redis-cli -h 172.17.0.5 
172.17.0.5:6379> CLUSTER REPLICATE f23f85f71810cd1bd8d22ce73717d9940cc3a42b
[root@jojo ~]# redis-cli -h 172.17.0.6
172.17.0.6:6379> CLUSTER REPLICATE 731d616c31b967a56238be82be5243b7440a42cc
[root@jojo ~]# redis-cli -h 172.17.0.7
172.17.0.7:6379> CLUSTER REPLICATE 57c264732c27d944b531420b26a5249eab588f55
 
 172.17.0.7:6379> CLUSTER NODES
57c264732c27d944b531420b26a5249eab588f55 172.17.0.4:6379@16379 master - 0 1596907035095 2 connected 10923-16383
1eb282b2dd51723a31d230987afc8c5633a8eadd 172.17.0.6:6379@16379 slave 731d616c31b967a56238be82be5243b7440a42cc 0 1596907034000 4 connected
f23f85f71810cd1bd8d22ce73717d9940cc3a42b 172.17.0.2:6379@16379 master - 0 1596907031000 0 connected 0-5461
782635fc70af0041cafc07491167092049d61a4e 172.17.0.5:6379@16379 slave f23f85f71810cd1bd8d22ce73717d9940cc3a42b 0 1596907033080 3 connected
b7483dee44daa99408716d77a73266f017ac0bfb 172.17.0.7:6379@16379 myself,slave 57c264732c27d944b531420b26a5249eab588f55 0 1596907032000 5 connected
731d616c31b967a56238be82be5243b7440a42cc 172.17.0.3:6379@16379 master - 0 1596907034088 1 connected 5462-10922

posted @ 2020-08-16 20:10  JoJoblog  阅读(258)  评论(0)    收藏  举报