首先要先在服务器上安装好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

7、查看当前node信息 redis-cli -p 9521 -a xxxxxxxx cluster nodes
也可以查看位于其它容器的node信息,如果设置密码,需要加-a参数 redis-cli -h 172.19.0.3 -p 9522 -a xxxxxxxx cluster nodes

8、在redis容器中执行下面的命令

./etc/redis/redis-trib.rb create --replicas 1 172.19.0.2:9521 172.19.0.3:9522 172.19.0.4:9523 172.19.0.5:9524 172.19.0.6:9525 172.19.0.7:9526

看到如图所示,就说明配置成功了。

9、使用第7步的命令可以查看集群运行情况

验证:

1、由第8步的运行提示可以看出redis1对应的从redis为redis5,如图所示

2、我们这里使用Redis Desktop Manager来连接redis服务器验证

3、在redis1中新增一个名为test1的key,内容为成功,连接redis5的redis节点,可以看到同步过来的redis数据

 

最后修改于 2020-08-31 19:25:48
如果觉得我的文章对你有用,请随意赞赏
扫一扫支付
上一篇