首先要先在服务器上安装好docker和docker-compose,可以参考之前写过的教程。
然后准备需要的一些配置文件:
1、Dockerfile
FROM ubuntu
USER root
RUN apt-get update && apt-get install -y redis-server
RUN mkdir /root/redis
COPY redis.conf /etc/redis/redis.conf
RUN apt-get install -y ruby
COPY redis-trib.rb /etc/redis/redis-trib.rb
RUN gem install redis
RUN chmod a+x /etc/redis/redis-trib.rb
RUN chmod 777 -R /root/redis
RUN apt-get install -y iputils-ping
RUN apt-get install -y net-tools
RUN echo 'Asia/Shanghai' >/etc/timezone
EXPOSE 6379
2、redis.conf模板
bind 0.0.0.0
port 6379
tcp-backlog 511
timeout 70
tcp-keepalive 300
daemonize no
pidfile /root/redis/redis.pid
loglevel notice
logfile "/root/redis/redis.log"
databases 16
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir /root/redis
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
maxmemory 1024mb
maxmemory-policy noeviction
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
lua-time-limit 5000
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 15000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events "Ex"
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes
3、redis-trib.rb文件
文件内容过多,这里就不贴了,列一下需要修改的内容
搜索Redis.new,修改Redis.new方法的内容,在其中增加自己的redis密码,Redis.new(:host => @info[:host], :port => @info[:port], :timeout => 60, :password => "xxxxxxxx")
4、docker-compose.yml,这里只列出redis1的配置,其余五个redis节点配置类似。
version: '3.7'
services:
redis1:
image: redis-server
networks:
myredis:
ipv4_address: 172.19.0.2
ports:
- "9521:9521"
- "19521:19521"
volumes:
- /myredis/redis1:/root/redis/
- /myredis/conf/redis1/redis.conf:/etc/redis/redis.conf
privileged: true
entrypoint: ["/usr/bin/redis-server", "/etc/redis/redis.conf", "--logfile", "/root/redis/redis.log", "--cluster-enabled", "yes", "--save", "900 1", "--save", "300 10", "--save", "60 10000", "--bind", "0.0.0.0", "--port", "9521", "--dir", "/root/redis/", "--dbfilename", "dump.rdb", "--timeout", "0", "--maxmemory", "512mb"]
networks:
myredis:
driver: bridge
ipam:
config:
- subnet: 172.19.0.0/16
5、创建conf文件夹,在其中创建redis1至redis6六个文件夹,里面放入第2步的redis.conf模板文件。分别修改其中内容,这里用redis1文件夹中的为例,其他五个依次类推。用参数名搜索,存在的话修改,不存在就直接粘贴进去。
#0.0.0.0允许所有地址连接,供其他redis服务连接,也可以对地址进行限制
bind 0.0.0.0
#当前redis集群节点的端口号
port 9521
#设置redis密码,跟第三步搭配使用
masterauth xxxxxxxx
requirepass xxxxxxxx
#调整redis服务最大占用内存
maxmemory 512mb
#开启集群
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 15000
#宿主机ip地址
cluster-announce-ip 192.168.3.126
#当前redis集群节点的端口号
cluster-announce-port 9521
#当前redis节点的集群总线端口,必须比当前端口号大10000
cluster-announce-bus-port 19521
准备工作完毕后,下面进入具体操作:
1、在服务器中新建一个目录,例如:mkdir myredis
2、复制之前准备的 docker-compose.yml、Dockerfile、redis.conf、redis-trib.rb四个文件和conf文件夹所有内容到myredis目录下
3、在目录下创建子目录,以保存redis集群容器内产生的数据 mkdir redis1 redis2 redis3 redis4 redis5 redis6
至此myredis目录结构如下图所示:
4、确保当前处于myredis目录内,按照Dockerfile创建docker镜像 docker build -t redis-server .
5、启动redis集群 docker-compose up -d
6、进入其中一个redis容器 docker exec -it myredis_redis1_1 bash
8、在redis容器中执行下面的命令
看到如图所示,就说明配置成功了。
9、使用第7步的命令可以查看集群运行情况
验证:
1、由第8步的运行提示可以看出redis1对应的从redis为redis5,如图所示
2、我们这里使用Redis Desktop Manager来连接redis服务器验证
3、在redis1中新增一个名为test1的key,内容为成功,连接redis5的redis节点,可以看到同步过来的redis数据

