1. 单机

  1. docker run --name redis -p 6379:6379 -d --restart=always redis:4.0 redis-server --appendonly yes --requirepass "passw0rd"

2. 主从

  1. docker run --name redis-6383 -p 6383:6379 -d redis:4.0 --requirepass "passw0rd"
  2. docker run --name redis-6384 -p 6384:6379 -d redis:4.0 --slaveof 121.43.162.28 6383 \
  3. --requirepass "passw0rd" --masterauth "passw0rd"
  4. docker run --name redis-6385 -p 6385:6379 -d redis:4.0 --slaveof 121.43.162.28 6383 \
  5. --requirepass "passw0rd" --masterauth "passw0rd"
ps:由于没采用挂载文件的方式启动,一些配置不妨通过命令的方式带进去,如下
  1. -- appendonly yes

挂载配置文件的方式启动

配置文件 /usr/local/redis/redis.conf
  1. requirepass passw0rd
  2. ## 以下为rdb配置
  3. #dbfilename:持久化数据存储在本地的文件
  4. dbfilename dump.rdb
  5. #dir:持久化数据存储在本地的路径,如果是在/redis/redis-3.0.6/src下启动的redis-cli,则数据会存储在当前src目录下
  6. dir ./
  7. ##snapshot触发的时机,save <seconds> <changes>
  8. ##如下为900秒后,至少有一个变更操作,才会snapshot
  9. ##对于此值的设置,需要谨慎,评估系统的变更操作密集程度
  10. ##可以通过“save “””来关闭snapshot功能
  11. #save时间,以下分别表示更改了1个key时间隔900s进行持久化存储;更改了10个key300s进行存储;更改10000个key60s进行存储。
  12. save 900 1
  13. save 300 10
  14. save 60 10000
  15. ##当snapshot时出现错误无法继续时,是否阻塞客户端“变更操作”,“错误”可能因为磁盘已满/磁盘故障/OS级别异常等
  16. stop-writes-on-bgsave-error yes
  17. ##是否启用rdb文件压缩,默认为“yes”,压缩往往意味着“额外的cpu消耗”,同时也意味这较小的文件尺寸以及较短的网络传输时间
  18. rdbcompression yes
  19. ##以下为aof配置
  20. ##此选项为aof功能的开关,默认为“no”,可以通过“yes”来开启aof功能
  21. ##只有在“yes”下,aof重写/文件同步等特性才会生效
  22. appendonly yes
  23. ##指定aof文件名称
  24. appendfilename appendonly.aof
  25. ##指定aof操作中文件同步策略,有三个合法值:always everysec no,默认为everysec
  26. appendfsync everysec
  27. ##在aof-rewrite期间,appendfsync是否暂缓文件同步,"no"表示“不暂缓”,“yes”表示“暂缓”,默认为“no”
  28. no-appendfsync-on-rewrite no
  29. ##aof文件rewrite触发的最小文件尺寸(mb,gb),只有大于此aof文件大于此尺寸是才会触发rewrite,默认“64mb”,建议“512mb”
  30. auto-aof-rewrite-min-size 64mb
  31. ##相对于“上一次”rewrite,本次rewrite触发时aof文件应该增长的百分比。
  32. ##每一次rewrite之后,redis都会记录下此时“新aof”文件的大小(例如A),那么当aof文件增长到A*(1 + p)之后
  33. ##触发下一次rewrite,每一次aof记录的添加,都会检测当前aof文件的尺寸。
  34. auto-aof-rewrite-percentage 100
  35. #主节点密码
  36. masterauth passw0rd
启动方式
  1. docker run --name redis-6379 -p 6379:6379 \
  2. -v /usr/local/redis/redis.conf:/etc/redis/redis.conf \
  3. -d redis:4.0 redis-server /etc/redis/redis.conf

3. docker compose 安装redis

3.1 redis主从安装

  1. mkdir -p /usr/local/master-slave
  2. cd /usr/local/master-slave && touch docker-compose.yml
  • docker-compose.yml
  1. version: "3.1"
  2. services:
  3. redis-6383:
  4. image: redis:4.0
  5. ports:
  6. - "6383:6379"
  7. restart: always
  8. command: [
  9. '--requirepass "passw0rd"',
  10. '--masterauth "passw0rd"',
  11. '--maxmemory 512mb',
  12. '--maxmemory-policy volatile-ttl',
  13. '--save ""',
  14. ]
  15. redis-6384:
  16. image: redis:4.0
  17. ports:
  18. - "6384:6379"
  19. restart: always
  20. depends_on:
  21. - redis-6383
  22. command: [
  23. '--requirepass "passw0rd"',
  24. '--masterauth "passw0rd"',
  25. '--maxmemory 512mb',
  26. '--maxmemory-policy volatile-ttl',
  27. '--slaveof 121.43.162.28 6383',
  28. '--save ""',
  29. ]
  30. redis-6385:
  31. image: redis:4.0
  32. ports:
  33. - "6385:6379"
  34. restart: always
  35. depends_on:
  36. - redis-6383
  37. command: [
  38. '--requirepass "passw0rd"',
  39. '--masterauth "passw0rd"',
  40. '--maxmemory 512mb',
  41. '--maxmemory-policy volatile-ttl',
  42. '--slaveof 121.43.162.28 6383',
  43. '--save ""',
  44. ]
  1. cd /usr/local/master-slave
  2. #启动
  3. docker-compose up -d
  4. #停止
  5. docker-compose stop
  6. #删除
  7. docker-compose rm

3.2 redis哨兵集群安装

第1台主机
  1. mkdir -p /usr/local/docker/redis-sentinel
  2. cd /usr/local/docker/redis-sentinel
  3. touch sentinel.conf && touch docker-compose.yml
  • sentinel.conf
  1. # 守护进程模式(千万别加这个)
  2. #daemonize yes
  3. # 当前Sentinel服务运行的端口
  4. port 26379
  5. # Sentinel服务运行时使用的临时文件夹
  6. dir /data
  7. # Sentinel去监视一个名为mymaster的主redis实例,这个主实例的IP地址为redis-master,端口号为6379,而将这个主实例判断为失效至少需要2个Sentinel进程的同意,只要同意Sentinel的数量不达标,自动failover就不会执行
  8. sentinel monitor mymaster 121.43.162.28 6379 2
  9. # 指定了Sentinel认为Redis实例已经失效所需的毫秒数。当实例超过该时间没有返回PING,或者直接返回错误,那么Sentinel将这个实例标记为主观下线。只有一个 Sentinel进程将实例标记为主观下线并不一定会引起实例的自动故障迁移:只有在足够数量的Sentinel都将一个实例标记为主观下线之后,实例才会被标记为客观下线,这时自动故障迁移才会执行
  10. sentinel down-after-milliseconds mymaster 30000
  11. # 指定了在执行故障转移时,最多可以有多少个从Redis实例在同步新的主实例,在从Redis实例较多的情况下这个数字越小,同步的时间越长,完成故障转移所需的时间就越长
  12. sentinel parallel-syncs mymaster 1
  13. # 如果在该时间(ms)内未能完成failover操作,则认为该failover失败
  14. sentinel failover-timeout mymaster 180000
  15. # 设置主服务密码
  16. sentinel auth-pass mymaster passw0rd

:::success

但这里面有个坑,也是困扰我一阵的,因为哨兵没指定IP和端口号,会自动检测通常的本地地址,本地哨兵之间通信都是用默认的IP地址和端口号(单机部署,都是默认的局域网IP),这本身也没问题,但一旦客户端连接的时候,就算你配置了你认为的三个哨兵,并且都是你暴露出去的外网地址和端口号,但第一次能连上,连接完毕后,哨兵开始通信,却用到的是局域网IP,而这时候,你是连接不上的,所以我们需要为每个哨兵声明指定的IP地址。

:::

  • sentinel.conf追加
  1. #声明IP地址和端口号
  2. sentinel announce-ip 121.43.162.28
  3. sentinel announce-port 26379
  • docker-compose.yml
  1. version: "3.1"
  2. services:
  3. redis-6379:
  4. image: redis:4.0
  5. ports:
  6. - "6379:6379"
  7. restart: always
  8. command: [
  9. '--requirepass "passw0rd"',
  10. '--masterauth "passw0rd"',
  11. '--maxmemory 512mb',
  12. '--maxmemory-policy volatile-ttl',
  13. '--save ""',
  14. ]
  15. redis-sentinel:
  16. image: redis:4.0
  17. restart: always
  18. ports:
  19. - "26379:26379"
  20. volumes:
  21. - "/usr/local/docker/redis-sentinel/sentinel.conf:/usr/local/etc/redis/sentinel.conf"
  22. privileged: true
  23. command: redis-sentinel /usr/local/etc/redis/sentinel.conf
  24. depends_on:
  25. - redis-6379
  • 验证节点
  1. redis-cli -c -p 6379
  2. 127.0.0.1:6379> info replication
  3. # Replication
  4. role:master
  5. connected_slaves:2
  6. slave0:ip=47.96.100.166,port=6379,state=online,offset=17443,lag=1
  7. slave1:ip=118.24.136.237,port=6379,state=online,offset=17443,lag=1
  8. master_replid:954733f7a22868fc4a120ca6d12f55c98c59e7a8
  9. master_replid2:0000000000000000000000000000000000000000
  10. master_repl_offset:17584
  11. second_repl_offset:-1
  12. repl_backlog_active:1
  13. repl_backlog_size:1048576
  14. repl_backlog_first_byte_offset:1
  15. repl_backlog_histlen:17584
  • 验证哨兵
  1. redis-cli -c -p 26379
  2. info sentinel
第2台主机
  1. mkdir -p /usr/local/docker/redis-sentinel
  2. cd /usr/local/docker/redis-sentinel
  3. touch sentinel.conf && touch docker-compose.yml
  • sentinel.conf
  1. # 守护进程模式(千万别加这个)
  2. #daemonize yes
  3. # 当前Sentinel服务运行的端口
  4. port 26379
  5. # Sentinel服务运行时使用的临时文件夹
  6. dir /data
  7. # Sentinel去监视一个名为mymaster的主redis实例,这个主实例的IP地址为redis-master,端口号为6379,而将这个主实例判断为失效至少需要2个Sentinel进程的同意,只要同意Sentinel的数量不达标,自动failover就不会执行
  8. sentinel monitor mymaster 121.43.162.28 6379 2
  9. # 指定了Sentinel认为Redis实例已经失效所需的毫秒数。当实例超过该时间没有返回PING,或者直接返回错误,那么Sentinel将这个实例标记为主观下线。只有一个 Sentinel进程将实例标记为主观下线并不一定会引起实例的自动故障迁移:只有在足够数量的Sentinel都将一个实例标记为主观下线之后,实例才会被标记为客观下线,这时自动故障迁移才会执行
  10. sentinel down-after-milliseconds mymaster 30000
  11. # 指定了在执行故障转移时,最多可以有多少个从Redis实例在同步新的主实例,在从Redis实例较多的情况下这个数字越小,同步的时间越长,完成故障转移所需的时间就越长
  12. sentinel parallel-syncs mymaster 1
  13. # 如果在该时间(ms)内未能完成failover操作,则认为该failover失败
  14. sentinel failover-timeout mymaster 180000
  15. # 设置主服务密码
  16. sentinel auth-pass mymaster passw0rd

:::success

但这里面有个坑,也是困扰我一阵的,因为哨兵没指定IP和端口号,会自动检测通常的本地地址,本地哨兵之间通信都是用默认的IP地址和端口号(单机部署,都是默认的局域网IP),这本身也没问题,但一旦客户端连接的时候,就算你配置了你认为的三个哨兵,并且都是你暴露出去的外网地址和端口号,但第一次能连上,连接完毕后,哨兵开始通信,却用到的是局域网IP,而这时候,你是连接不上的,所以我们需要为每个哨兵声明指定的IP地址。

:::

  • sentinel.conf追加
  1. #声明IP地址和端口号
  2. sentinel announce-ip 47.96.100.166
  3. sentinel announce-port 26379
  • docker-compose.yml
  1. version: "3.1"
  2. services:
  3. redis-6379:
  4. image: redis:4.0
  5. ports:
  6. - "6379:6379"
  7. restart: always
  8. command: [
  9. '--requirepass "passw0rd"',
  10. '--masterauth "passw0rd"',
  11. '--maxmemory 512mb',
  12. '--maxmemory-policy volatile-ttl',
  13. '--slaveof 121.43.162.28 6379',
  14. '--save ""',
  15. ]
  16. redis-sentinel:
  17. image: redis:4.0
  18. restart: always
  19. ports:
  20. - "26379:26379"
  21. volumes:
  22. - "/usr/local/docker/redis-sentinel/sentinel.conf:/usr/local/etc/redis/sentinel.conf"
  23. privileged: true
  24. command: redis-sentinel /usr/local/etc/redis/sentinel.conf
  25. depends_on:
  26. - redis-6379
  • 验证节点
  1. edis-cli -c -p 6379
  2. 127.0.0.1:6379> info replication
  3. # Replication
  4. role:slave
  5. master_host:121.43.162.28
  6. master_port:6379
  7. master_link_status:up
  8. master_last_io_seconds_ago:1
  9. master_sync_in_progress:0
  10. slave_repl_offset:27688
  11. slave_priority:100
  12. slave_read_only:1
  13. connected_slaves:0
  14. master_replid:954733f7a22868fc4a120ca6d12f55c98c59e7a8
  15. master_replid2:0000000000000000000000000000000000000000
  16. master_repl_offset:27688
  17. second_repl_offset:-1
  18. repl_backlog_active:1
  19. repl_backlog_size:1048576
  20. repl_backlog_first_byte_offset:1
  21. repl_backlog_histlen:27688
第3台主机
  1. mkdir -p /usr/local/docker/redis-sentinel
  2. cd /usr/local/docker/redis-sentinel
  3. touch sentinel.conf && touch docker-compose.yml
  • sentinel.conf
  1. # 守护进程模式(千万别加这个)
  2. #daemonize yes
  3. # 当前Sentinel服务运行的端口
  4. port 26379
  5. # Sentinel服务运行时使用的临时文件夹
  6. dir /data
  7. # Sentinel去监视一个名为mymaster的主redis实例,这个主实例的IP地址为redis-master,端口号为6379,而将这个主实例判断为失效至少需要2个Sentinel进程的同意,只要同意Sentinel的数量不达标,自动failover就不会执行
  8. sentinel monitor mymaster 121.43.162.28 6379 2
  9. # 指定了Sentinel认为Redis实例已经失效所需的毫秒数。当实例超过该时间没有返回PING,或者直接返回错误,那么Sentinel将这个实例标记为主观下线。只有一个 Sentinel进程将实例标记为主观下线并不一定会引起实例的自动故障迁移:只有在足够数量的Sentinel都将一个实例标记为主观下线之后,实例才会被标记为客观下线,这时自动故障迁移才会执行
  10. sentinel down-after-milliseconds mymaster 30000
  11. # 指定了在执行故障转移时,最多可以有多少个从Redis实例在同步新的主实例,在从Redis实例较多的情况下这个数字越小,同步的时间越长,完成故障转移所需的时间就越长
  12. sentinel parallel-syncs mymaster 1
  13. # 如果在该时间(ms)内未能完成failover操作,则认为该failover失败
  14. sentinel failover-timeout mymaster 180000
  15. # 设置主服务密码
  16. sentinel auth-pass mymaster passw0rd

:::success

但这里面有个坑,也是困扰我一阵的,因为哨兵没指定IP和端口号,会自动检测通常的本地地址,本地哨兵之间通信都是用默认的IP地址和端口号(单机部署,都是默认的局域网IP),这本身也没问题,但一旦客户端连接的时候,就算你配置了你认为的三个哨兵,并且都是你暴露出去的外网地址和端口号,但第一次能连上,连接完毕后,哨兵开始通信,却用到的是局域网IP,而这时候,你是连接不上的,所以我们需要为每个哨兵声明指定的IP地址。

:::

  • sentinel.conf追加
  1. #声明IP地址和端口号
  2. sentinel announce-ip 118.24.136.237
  3. sentinel announce-port 26379
  • docker-compose.yml
  1. version: "3.1"
  2. services:
  3. redis-6379:
  4. image: redis:4.0
  5. ports:
  6. - "6379:6379"
  7. restart: always
  8. command: [
  9. '--requirepass "passw0rd"',
  10. '--masterauth "passw0rd"',
  11. '--maxmemory 512mb',
  12. '--maxmemory-policy volatile-ttl',
  13. '--slaveof 121.43.162.28 6379',
  14. '--save ""',
  15. ]
  16. redis-sentinel:
  17. image: redis:4.0
  18. restart: always
  19. ports:
  20. - "26379:26379"
  21. volumes:
  22. - "/usr/local/docker/redis-sentinel/sentinel.conf:/usr/local/etc/redis/sentinel.conf"
  23. privileged: true
  24. command: redis-sentinel /usr/local/etc/redis/sentinel.conf
  25. depends_on:
  26. - redis-6379
  • 验证节点
  1. redis-cli -c -p 6379
  2. 127.0.0.1:6379> info replication
  3. # Replication
  4. role:slave
  5. master_host:121.43.162.28
  6. master_port:6379
  7. master_link_status:up
  8. master_last_io_seconds_ago:1
  9. master_sync_in_progress:0
  10. slave_repl_offset:27688
  11. slave_priority:100
  12. slave_read_only:1
  13. connected_slaves:0
  14. master_replid:954733f7a22868fc4a120ca6d12f55c98c59e7a8
  15. master_replid2:0000000000000000000000000000000000000000
  16. master_repl_offset:27688
  17. second_repl_offset:-1
  18. repl_backlog_active:1
  19. repl_backlog_size:1048576
  20. repl_backlog_first_byte_offset:1
  21. repl_backlog_histlen:27688

3.3 redis高可用集群安装

安装ruby(有需要)
  1. sudo apt-get install ruby
  2. sudo yum install ruby
  3. ##macOS用如下命令
  4. #https://www.ruby-lang.org/en/documentation/installation/#homebrew
  5. brew install ruby
创建模板文件
  1. mkdir -p /usr/local/docker/redis-cluster
  2. cd /usr/local/docker/redis-cluster && touch redis-cluster.tmpl
  • redis-cluster.tmpl
  1. #指定端口
  2. port ${port}
  3. #设置事件通知(过期)
  4. notify-keyspace-events Ex
  5. #设置集群可用
  6. cluster-enabled yes
  7. #指定集群生成的配置文件名。注意,这个配置文件不是人为编辑的,是集群在运行中自动生成的,记录着集群中其他节点、状态信息、变量等配置信息,以便在启动的时候能重读到
  8. cluster-config-file nodes.conf
  9. #设置节点最大不可达时间,单位为毫秒。当主节点不可达时间超过这个设置时间,其对应的从节点将替换成为主节点;当一个节点在这个设置时间内不能访问到大多数主节点,将停止接收请求
  10. cluster-node-timeout 5000
  11. #要宣布的IP地址
  12. cluster-announce-ip 0.0.0.0
  13. #要宣布的数据端口
  14. cluster-announce-port ${port}
  15. #要宣布的集群总线端口
  16. cluster-announce-bus-port 1${port}
  17. #设置为aop模式
  18. appendonly yes
  19. #设置槽是否需要全覆盖。默认yes情况下,只要16384个槽没有被全覆盖,整个集群就停止服务。设置no之后,只要还有部分key都继续提供查询处理
  20. cluster-require-full-coverage no
三台服务器分别直接敲击命令如下
  1. for port in `seq 7001 7002`; do \
  2. mkdir -p ./${port}/conf \
  3. && PORT=${port} envsubst < ./redis-cluster.tmpl > ./${port}/conf/redis.conf \
  4. && mkdir -p ./${port}/data; \
  5. done
记得改cluster-announce-ip 0.0.0.0 为具体ip
  • docker-compose.yml
  1. version: "3.1"
  2. services:
  3. redis:
  4. image: redis:4.0
  5. ports:
  6. - "6379:6379"
  7. - "16379:16379"
  8. volumes:
  9. - "/usr/local/docker/redis-cluster/6379/conf/redis.conf:/usr/local/etc/redis/redis.conf"
  10. - "/usr/local/docker/redis-cluster/6379/data:/data"
  11. container_name: redis-cluster
  12. restart: always
  13. command: redis-server /usr/local/etc/redis/redis.conf
  1. cd /usr/local/docker/redis-cluster
  2. #启动
  3. docker-compose up -d
  4. #停止
  5. docker-compose stop
  6. #删除
  7. docker-compose rm
至此三主三从全部启动完毕,下面需要关联,原始安装命令太过费劲,用官方推荐的redis-trib(ruby实现的)
  1. redis-cli -c -h 192.168.95.31 -p 6379
关联三主三从,分配卡槽
因为最新的5.0 不再推荐使用ruby,所以拿redis-stable/src/redis-trib.rb操作不了,我又找不到老版本的在线rb文件,所以用下面给的吧
  1. docker run -it --rm ruby sh -c '\
  2. gem install redis --version=4.1.0\
  3. && wget https://github.com/antirez/redis/archive/4.0.11.tar.gz \
  4. && tar -zxvf 4.0.11.tar.gz\
  5. && cd redis-4.0.11/src\
  6. && ruby redis-trib.rb create --replicas 1 \
  7. 121.43.162.28:7001 \
  8. 121.43.162.28:7002 \
  9. 47.96.100.166:7001 \
  10. 47.96.100.166:7002 \
  11. 118.24.136.237:7001 \
  12. 118.24.136.237:7002'
  13. >>> Creating cluster
  14. >>> Performing hash slots allocation on 6 nodes...
  15. Using 3 masters:
  16. 121.43.162.28:7001
  17. 47.96.100.166:7001
  18. 118.24.136.237:7001
  19. Adding replica 47.96.100.166:7002 to 121.43.162.28:7001
  20. Adding replica 118.24.136.237:7002 to 47.96.100.166:7001
  21. Adding replica 121.43.162.28:7002 to 118.24.136.237:7001
  22. M: 6a8aaa3a2b5bbb5c768db9a2b5be6b653a060507 121.43.162.28:7001
  23. slots:0-5460 (5461 slots) master
  24. S: 8f5b062d6cfc741f93dc4268bfdb264c922a1d4b 121.43.162.28:7002
  25. replicates 452d3091dcb62e479e2f823c849df40a7d01f9ed
  26. M: c4885c0bc06e417bed929699147c41aa88a98aa9 47.96.100.166:7001
  27. slots:5461-10922 (5462 slots) master
  28. S: 95f70de1ed840fbee1ef6d07b255ea974299bf7e 47.96.100.166:7002
  29. replicates 6a8aaa3a2b5bbb5c768db9a2b5be6b653a060507
  30. M: 452d3091dcb62e479e2f823c849df40a7d01f9ed 118.24.136.237:7001
  31. slots:10923-16383 (5461 slots) master
  32. S: 6d771e7ac6592b0d4d7c6e7812977cf7713b1ac3 118.24.136.237:7002
  33. replicates c4885c0bc06e417bed929699147c41aa88a98aa9
  34. Can I set the above configuration? (type 'yes' to accept): yes
  35. >>> Nodes configuration updated
  36. >>> Assign a different config epoch to each node
  37. >>> Sending CLUSTER MEET messages to join the cluster
  38. Waiting for the cluster to join...
  39. >>> Performing Cluster Check (using node 121.43.162.28:7001)
  40. M: 6a8aaa3a2b5bbb5c768db9a2b5be6b653a060507 121.43.162.28:7001
  41. slots:0-5460 (5461 slots) master
  42. 1 additional replica(s)
  43. M: c4885c0bc06e417bed929699147c41aa88a98aa9 47.96.100.166:7001
  44. slots:5461-10922 (5462 slots) master
  45. 1 additional replica(s)
  46. S: 95f70de1ed840fbee1ef6d07b255ea974299bf7e 47.96.100.166:7002
  47. slots: (0 slots) slave
  48. replicates 6a8aaa3a2b5bbb5c768db9a2b5be6b653a060507
  49. S: 6d771e7ac6592b0d4d7c6e7812977cf7713b1ac3 118.24.136.237:7002
  50. slots: (0 slots) slave
  51. replicates c4885c0bc06e417bed929699147c41aa88a98aa9
  52. M: 452d3091dcb62e479e2f823c849df40a7d01f9ed 118.24.136.237:7001
  53. slots:10923-16383 (5461 slots) master
  54. 1 additional replica(s)
  55. S: 8f5b062d6cfc741f93dc4268bfdb264c922a1d4b 121.43.162.28:7002
  56. slots: (0 slots) slave
  57. replicates 452d3091dcb62e479e2f823c849df40a7d01f9ed
  58. [OK] All nodes agree about slots configuration.
  59. >>> Check for open slots...
  60. >>> Check slots coverage...
  61. [OK] All 16384 slots covered.
集群检查
  1. docker run -it --rm ruby sh -c '\
  2. gem install redis --version=4.1.0\
  3. && wget https://github.com/antirez/redis/archive/4.0.11.tar.gz \
  4. && tar -zxvf 4.0.11.tar.gz\
  5. && cd redis-4.0.11/src\
  6. && ruby redis-trib.rb check 192.168.95.31:6379'
  7. >>> Performing Cluster Check (using node 121.43.162.28:7001)
  8. M: 6a8aaa3a2b5bbb5c768db9a2b5be6b653a060507 121.43.162.28:7001
  9. slots:0-5460 (5461 slots) master
  10. 1 additional replica(s)
  11. M: c4885c0bc06e417bed929699147c41aa88a98aa9 47.96.100.166:7001
  12. slots:5461-10922 (5462 slots) master
  13. 1 additional replica(s)
  14. S: 95f70de1ed840fbee1ef6d07b255ea974299bf7e 47.96.100.166:7002
  15. slots: (0 slots) slave
  16. replicates 6a8aaa3a2b5bbb5c768db9a2b5be6b653a060507
  17. S: 6d771e7ac6592b0d4d7c6e7812977cf7713b1ac3 118.24.136.237:7002
  18. slots: (0 slots) slave
  19. replicates c4885c0bc06e417bed929699147c41aa88a98aa9
  20. M: 452d3091dcb62e479e2f823c849df40a7d01f9ed 118.24.136.237:7001
  21. slots:10923-16383 (5461 slots) master
  22. 0 additional replica(s)
  23. [OK] All nodes agree about slots configuration.
  24. >>> Check for open slots...
  25. >>> Check slots coverage...
  26. [OK] All 16384 slots covered.
info查看集群信息
  1. ocker run -it --rm ruby sh -c '\
  2. gem install redis --version=4.1.0\
  3. && wget https://github.com/antirez/redis/archive/4.0.11.tar.gz \
  4. && tar -zxvf 4.0.11.tar.gz\
  5. && cd redis-4.0.11/src\
  6. && ruby redis-trib.rb info 121.43.162.28:7001'