安装
源码安装
github地址redis-hashes 选择5.0的最新版本.5.0.14
单节点
# 1.下载安装包
wget http://download.redis.io/releases/redis-5.0.14.tar.gz
# 2.解压
tar -zxf redis-5.0.14.tar.gz
# 3.进入文件夹,可以查看readme.md来查看安装步骤与参数设置.
# make本质时读取makefile文件里的命令集,所以可以通过阅读具体的makefile来了解具体的安装细节.
# make install 本质是一个拷贝的步骤.
make
# 异常点:
make[1]: [persist-settings] Error 2 (ignored)
CC adlist.o
/bin/sh: cc: command not found
# 3.1安装gcc
yum install gcc
# 先清除之前出问题的安装文件 再执行make
make distclean & make
# 结果
Hint: It's a good idea to run 'make test' ;)
make[1]: Leaving directory `/root/redis-5.0.14/src'
# 安装完成后目录下会出现一个src文件夹.里面存有可执行脚本与配置.
# eg: ./redis-server 即redis启动命令.
# 4. 安装到配置的目录下.在编译的时候设置为/user/local/bin. 或者自己配置来覆盖PERFIX=/opt/redis/bin/
make install
# 结果:
[root@unreal-laser-1 redis-5.0.14]# cd /usr/local/bin/
caddy redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-sentinel redis-server
# 4.1 redis也提供了交互式安装在utils文件夹下, utils/install_server.sh
./install_server.sh
# 此方法会在/etc/init.d/下生成一个redis_前缀+端口的可执行文件,供快捷使用.通过这种方式可以快速的创建出大量的redis实例来组建集群.
# 执行例子
[root@unreal-laser-1 utils]# ./install_server.sh
Welcome to the redis service installer
This script will help you easily set up a running redis server
Please select the redis port for this instance: [6379]
Selecting default: 6379
Please select the redis config file name [/etc/redis/6379.conf]
Selected default - /etc/redis/6379.conf
Please select the redis log file name [/var/log/redis_6379.log]
Selected default - /var/log/redis_6379.log
Please select the data directory for this instance [/var/lib/redis/6379]
Selected default - /var/lib/redis/6379
Please select the redis executable path [/usr/local/bin/redis-server]
Selected config:
Port : 6379
Config file : /etc/redis/6379.conf
Log file : /var/log/redis_6379.log
Data dir : /var/lib/redis/6379
Executable : /usr/local/bin/redis-server
Cli Executable : /usr/local/bin/redis-cli
Is this ok? Then press ENTER to go on or Ctrl-C to abort.
Copied /tmp/6379.conf => /etc/init.d/redis_6379
Installing service...
Successfully added to chkconfig!
Successfully added to runlevels 345!
Starting Redis server...
Installation successful!
# 5. 如果不是默认安装位置,则配置到系统环境变量.可直接在键入redis-server
vi /etc/profile
export REDIS_HOME=/opt/redis
export PATH=${REDIS_HOME}/bin:$PATH
source /etc/profile
# 6. 配置文件启动
# 在源目录中存在配置文件 redis.conf. 里面可以配置port端口,bind指定ip,protected-model模式,请求密码等配置.
# 可以将配置文件拷贝到指定文件夹下修改后, 启动服务带指定配置文件的方式启动.
servic-server -C /data/redis/redis.conf
# 7.验证
redis -p 6379
set k1 v2
单机分布式(工具创建)
1. 创建多个实例 使用install_service 工具快速创建.
[root@unreal-laser-1 redis-5.0.14]# utils/install_server.sh
Welcome to the redis service installer
This script will help you easily set up a running redis server
Please select the redis port for this instance: [6379] 6391
Please select the redis config file name [/etc/redis/6391.conf]
Selected default - /etc/redis/6391.conf
Please select the redis log file name [/var/log/redis_6391.log]
Selected default - /var/log/redis_6391.log
Please select the data directory for this instance [/var/lib/redis/6391]
Selected default - /var/lib/redis/6391
Please select the redis executable path [/usr/local/bin/redis-server]
Selected config:
Port : 6391
Config file : /etc/redis/6391.conf
Log file : /var/log/redis_6391.log
Data dir : /var/lib/redis/6391
Executable : /usr/local/bin/redis-server
Cli Executable : /usr/local/bin/redis-cli
Is this ok? Then press ENTER to go on or Ctrl-C to abort.^[[A
Copied /tmp/6391.conf => /etc/init.d/redis_6391
Installing service...
Successfully added to chkconfig!
Successfully added to runlevels 345!
Starting Redis server...
Installation successful!
2. 更改配置文件参数.设置允许集群化
################################ REDIS CLUSTER ###############################
# Normal Redis instances can't be part of a Redis Cluster; only nodes that are
# started as cluster nodes can. In order to start a Redis instance as a
# cluster node enable the cluster support uncommenting the following:
#
cluster-enabled yes
3. 使用 create_cluster 工具启动与创建集群.
# 3.1 修改配置
vi create-cluster
#!/bin/bash
# Settings
PORT=6390 # redis开始端口(不包含)
TIMEOUT=2000
NODES=6 # 集群内redis数量
REPLICAS=1 # 集群内每个master的副本数量
# 3.2 启动redis实例
[root@unreal-laser-1 create-cluster]# ./create-cluster start
Starting 6391
Starting 6392
Starting 6393
Starting 6394
Starting 6395
Starting 6396
[root@unreal-laser-1 create-cluster]# ps -ef |grep redis
root 4081 1 0 13:12 ? 00:00:00 ../../src/redis-server *:6391 [cluster]
root 4086 1 0 13:12 ? 00:00:00 ../../src/redis-server *:6392 [cluster]
root 4091 1 0 13:12 ? 00:00:00 ../../src/redis-server *:6393 [cluster]
root 4096 1 0 13:12 ? 00:00:00 ../../src/redis-server *:6394 [cluster]
root 4101 1 0 13:12 ? 00:00:00 ../../src/redis-server *:6395 [cluster]
root 4106 1 0 13:12 ? 00:00:00 ../../src/redis-server *:6396 [cluster]
# 3.3 创建集群 分槽位
[root@unreal-laser-1 create-cluster]# ./create-cluster create
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 127.0.0.1:6395 to 127.0.0.1:6391
Adding replica 127.0.0.1:6396 to 127.0.0.1:6392
Adding replica 127.0.0.1:6394 to 127.0.0.1:6393
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: b0cae9ff9a4113655baaa738262ec3cdbfaf3181 127.0.0.1:6391
slots:[0-5460] (5461 slots) master
M: bcc2f26686c119d6456c704b0c7157c5901638bf 127.0.0.1:6392
slots:[5461-10922] (5462 slots) master
M: cf7be26997a8e7ca41f920b26baf3af674fea347 127.0.0.1:6393
slots:[10923-16383] (5461 slots) master
S: 264e5466122e21aaed7dcdea76544f8bba574a23 127.0.0.1:6394
replicates b0cae9ff9a4113655baaa738262ec3cdbfaf3181
S: 56a2631d540bfddea0ec759e20123c7586c9f07a 127.0.0.1:6395
replicates bcc2f26686c119d6456c704b0c7157c5901638bf
S: 3e04dd7d7300d04a3317ce35412fbb9223dc8af0 127.0.0.1:6396
replicates cf7be26997a8e7ca41f920b26baf3af674fea347
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
>>> Performing Cluster Check (using node 127.0.0.1:6391)
M: b0cae9ff9a4113655baaa738262ec3cdbfaf3181 127.0.0.1:6391
slots:[0-5460] (5461 slots) master
1 additional replica(s)
M: cf7be26997a8e7ca41f920b26baf3af674fea347 127.0.0.1:6393
slots:[10923-16383] (5461 slots) master
1 additional replica(s)
M: bcc2f26686c119d6456c704b0c7157c5901638bf 127.0.0.1:6392
slots:[5461-10922] (5462 slots) master
1 additional replica(s)
S: 3e04dd7d7300d04a3317ce35412fbb9223dc8af0 127.0.0.1:6396
slots: (0 slots) slave
replicates cf7be26997a8e7ca41f920b26baf3af674fea347
S: 56a2631d540bfddea0ec759e20123c7586c9f07a 127.0.0.1:6395
slots: (0 slots) slave
replicates bcc2f26686c119d6456c704b0c7157c5901638bf
S: 264e5466122e21aaed7dcdea76544f8bba574a23 127.0.0.1:6394
slots: (0 slots) slave
replicates b0cae9ff9a4113655baaa738262ec3cdbfaf3181
[OK] All nodes agree about slots configuration.
4. 验证集群
[root@unreal-laser-1 create-cluster]# redis-cli -c -p 6391
127.0.0.1:6391> set k1 v1
-> Redirected to slot [12706] located at 127.0.0.1:6393
OK
127.0.0.1:6393>
5. 关闭并清除集群
[root@unreal-laser-1 create-cluster]# ./create-cluster stop
Stopping 6391
Stopping 6392
Stopping 6393
Stopping 6394
Stopping 6395
Stopping 6396
[root@unreal-laser-1 create-cluster]# ./create-cluster clean
分布式可多节点分布(命令启动)
1. 修改配置文件后启动每台redis实例.
[root@unreal-laser-1 create-cluster]# /usr/local/bin/redis-server /etc/redis/6391.conf
[root@unreal-laser-1 create-cluster]# /usr/local/bin/redis-server /etc/redis/6392.conf
[root@unreal-laser-1 create-cluster]# /usr/local/bin/redis-server /etc/redis/6393.conf
[root@unreal-laser-1 create-cluster]# /usr/local/bin/redis-server /etc/redis/6394.conf
[root@unreal-laser-1 create-cluster]# /usr/local/bin/redis-server /etc/redis/6395.conf
[root@unreal-laser-1 create-cluster]# /usr/local/bin/redis-server /etc/redis/6396.conf
[root@unreal-laser-1 create-cluster]# ps -ef |grep redis
root 4153 1 0 13:35 ? 00:00:00 /usr/local/bin/redis-server 127.0.0.1:6391 [cluster]
root 4158 1 0 13:35 ? 00:00:00 /usr/local/bin/redis-server 127.0.0.1:6392 [cluster]
root 4163 1 0 13:35 ? 00:00:00 /usr/local/bin/redis-server 127.0.0.1:6393 [cluster]
root 4168 1 0 13:36 ? 00:00:00 /usr/local/bin/redis-server 127.0.0.1:6394 [cluster]
root 4173 1 0 13:36 ? 00:00:00 /usr/local/bin/redis-server 127.0.0.1:6395 [cluster]
root 4178 1 0 13:36 ? 00:00:00 /usr/local/bin/redis-server 127.0.0.1:6396 [cluster]
root 4183 3585 0 13:36 pts/0 00:00:00 grep --color=auto redis
[root@unreal-laser-1 create-cluster]#
2. 使用redis-cli 启动集群
[root@unreal-laser-1 create-cluster]# redis-cli --cluster create 127.0.0.1:6391 127.0.0.1:6392 127.0.0.1:6393 127.0.0.1:6394 127.0.0.1:6395 127.0.0.1:6396 --cluster-replicas 1
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 127.0.0.1:6395 to 127.0.0.1:6391
Adding replica 127.0.0.1:6396 to 127.0.0.1:6392
Adding replica 127.0.0.1:6394 to 127.0.0.1:6393
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: 618df2f0ccdee025082f3bbc0a00ccf9576e39ab 127.0.0.1:6391
slots:[0-5460] (5461 slots) master
M: d1f712737921e6fa06640a7d480d832a747a6353 127.0.0.1:6392
slots:[5461-10922] (5462 slots) master
M: cee0a60b5b42c66a0e9a21a8f70cdd1b4752ff36 127.0.0.1:6393
slots:[10923-16383] (5461 slots) master
S: 5271066457de6352bb2cda790d91139eff3bc00c 127.0.0.1:6394
replicates 618df2f0ccdee025082f3bbc0a00ccf9576e39ab
S: 71a2a47182cfa9ceda66ec89964c8de8037743c8 127.0.0.1:6395
replicates d1f712737921e6fa06640a7d480d832a747a6353
S: 37755f730f3e1da3df84172b89cbcc5e6b8c33f9 127.0.0.1:6396
replicates cee0a60b5b42c66a0e9a21a8f70cdd1b4752ff36
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
.
>>> Performing Cluster Check (using node 127.0.0.1:6391)
M: 618df2f0ccdee025082f3bbc0a00ccf9576e39ab 127.0.0.1:6391
slots:[0-5460] (5461 slots) master
1 additional replica(s)
S: 71a2a47182cfa9ceda66ec89964c8de8037743c8 127.0.0.1:6395
slots: (0 slots) slave
replicates d1f712737921e6fa06640a7d480d832a747a6353
M: cee0a60b5b42c66a0e9a21a8f70cdd1b4752ff36 127.0.0.1:6393
slots:[10923-16383] (5461 slots) master
1 additional replica(s)
M: d1f712737921e6fa06640a7d480d832a747a6353 127.0.0.1:6392
slots:[5461-10922] (5462 slots) master
1 additional replica(s)
S: 5271066457de6352bb2cda790d91139eff3bc00c 127.0.0.1:6394
slots: (0 slots) slave
replicates 618df2f0ccdee025082f3bbc0a00ccf9576e39ab
S: 37755f730f3e1da3df84172b89cbcc5e6b8c33f9 127.0.0.1:6396
slots: (0 slots) slave
replicates cee0a60b5b42c66a0e9a21a8f70cdd1b4752ff36
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
3.查看集群配置
# 可以查看槽位的分布,集群主从的分布,keys总数等信息
[root@unreal-laser-1 create-cluster]# redis-cli --cluster check 127.0.0.1 6391
127.0.0.1:6391 (618df2f0...) -> 0 keys | 5461 slots | 1 slaves.
127.0.0.1:6393 (cee0a60b...) -> 0 keys | 5461 slots | 1 slaves.
127.0.0.1:6392 (d1f71273...) -> 0 keys | 5462 slots | 1 slaves.
[OK] 0 keys in 3 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 127.0.0.1:6391)
M: 618df2f0ccdee025082f3bbc0a00ccf9576e39ab 127.0.0.1:6391
slots:[0-5460] (5461 slots) master
1 additional replica(s)
S: 71a2a47182cfa9ceda66ec89964c8de8037743c8 127.0.0.1:6395
slots: (0 slots) slave
replicates d1f712737921e6fa06640a7d480d832a747a6353
M: cee0a60b5b42c66a0e9a21a8f70cdd1b4752ff36 127.0.0.1:6393
slots:[10923-16383] (5461 slots) master
1 additional replica(s)
M: d1f712737921e6fa06640a7d480d832a747a6353 127.0.0.1:6392
slots:[5461-10922] (5462 slots) master
1 additional replica(s)
S: 5271066457de6352bb2cda790d91139eff3bc00c 127.0.0.1:6394
slots: (0 slots) slave
replicates 618df2f0ccdee025082f3bbc0a00ccf9576e39ab
S: 37755f730f3e1da3df84172b89cbcc5e6b8c33f9 127.0.0.1:6396
slots: (0 slots) slave
replicates cee0a60b5b42c66a0e9a21a8f70cdd1b4752ff36
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
[root@unreal-laser-1 create-cluster]# redis-cli --cluster info 127.0.0.1 6391
127.0.0.1:6391 (618df2f0...) -> 0 keys | 5461 slots | 1 slaves.
127.0.0.1:6393 (cee0a60b...) -> 0 keys | 5461 slots | 1 slaves.
127.0.0.1:6392 (d1f71273...) -> 0 keys | 5462 slots | 1 slaves.
[OK] 0 keys in 3 masters.
0.00 keys per slot on average.
主从复制版
1. 创建并启动实例(一主两从版)
[root@unreal-laser-1 utils]# ps -ef |grep redis
root 4299 1 0 13:54 ? 00:00:00 /usr/local/bin/redis-server 127.0.0.1:6400
root 4366 1 0 13:54 ? 00:00:00 /usr/local/bin/redis-server 127.0.0.1:6401
root 4433 1 0 13:54 ? 00:00:00 /usr/local/bin/redis-server 127.0.0.1:6402
root 4438 3585 0 13:54 pts/0 00:00:00 grep --color=auto redis
2. 进入从节点,关联主节点
[root@unreal-laser-1 utils]# redis-cli -p 6401
127.0.0.1:6401> help slaveof
SLAVEOF host port
summary: Make the server a replica of another instance, or promote it as master. Deprecated starting with Redis 5. Use REPLICAOF instead.
since: 1.0.0
group: server
127.0.0.1:6401> slaveof 127.0.0.1 6400
OK
127.0.0.1:6401> exit
[root@unreal-laser-1 utils]# redis-cli -p 6402
127.0.0.1:6402> slaveof 127.0.0.1 6400
OK
127.0.0.1:6402>
2.2. 修改配置文件来永久配置
# 主节点的ip:端口
replicaof <masterip> <masterport>
# 主节点的密码
masterauth
# 复制主节点信息时,服务是否对外提供旧的数据.
replica-serve-stale-data yes
# 从节点只读
replica-read-only yes
# 同步文件时直接通过网络还是先保存在磁盘再通过网络.
repl-diskless-sync no
2.3 启动redis服务时就带上跟随节点
redis-cli /etc/redis/6401.conf --replicof 172.0.0.1 6400
3. 查看节点信息
127.0.0.1:6401> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6400
master_link_status:up
master_last_io_seconds_ago:9
master_sync_in_progress:0
slave_repl_offset:1108
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:0836b25f984c6dfeb7618db88ec426b31c103558
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:1108
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:1108
docker 安装
docker 单节点
1. 拉取镜像
docker pull redis
2. 设置挂载目录
为防止容器被重建,需要本地化配置文件与日志.
1)、挂载redis的配置文件, liunx 下redis.conf文件位置: /data/redis/single/redis.conf
2)、挂载redis 的持久化文件(为了数据的持久化), liunx 下redis的data文件位置 : /data/redis/single/data
3. 启动容器并挂载文件夹
docker run --restart=always --log-opt max-size=100m --log-opt max-file=2 -p 6379:6379 --name myredis -v /data/redis/single/redis.conf:/etc/redis/redis.conf -v /data/redis/single/data:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes --requirepass 1234qwer
- restart=always :开机自启
--log-opt :日志配置,大小100M,两个文件
--name myredis :容器名称
-v 数据挂载 : 将配置文件与数据挂载到实体机上.
-d redis :后台启动
--appendonly yes : 开启aof持久化日志.
--requirepass 1234qwer :配置redis密码
docker 集群安装
1. 创建实例
root@空痕影的matebook:~# docker create --name redis01 -p 6410:6379 redis --cluster-enabled yes
d53a5cf3a96dad49918b8b4058d1498bef600ed5f3db767c6a31f85affe72ca0
root@空痕影的matebook:~# docker create --name redis02 -p 6411:6379 redis --cluster-enabled yes
8bc4e7878fb4ea1824088c6852e962606f71c4834e5d866a06ce175b5edfe6ea
root@空痕影的matebook:~# docker create --name redis03 -p 6412:6379 redis --cluster-enabled yes
0adc8c6f6ab8fb4b5f18c03981f2412b82841021ea1f5c1315a7c601637500c9
root@空痕影的matebook:~# docker create --name redis04 -p 6413:6379 redis --cluster-enabled yes
0f540dd6daa9f0eccc59afea290d906e6564a12f27d15e0ca3b909ba34fd4a28
root@空痕影的matebook:~# docker create --name redis05 -p 6414:6379 redis --cluster-enabled yes
7f68463fd648a0a152377344b469973380d36370972c0851f577621b13475721
root@空痕影的matebook:~# docker create --name redis06 -p 6415:6379 redis --cluster-enabled yes
44d7d44c2e6577d48f558fe56fa305916504cee0af7af2ac8d2f9a405d3c7663
2. 启动实例
root@空痕影的matebook:~# docker start redis01 redis02 redis03 redis04 redis05 redis06
redis01
redis02
redis03
redis04
redis05
redis06
root@空痕影的matebook:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
44d7d44c2e65 redis "docker-entrypoint.s…" About a minute ago Up 2 seconds 0.0.0.0:6415->6379/tcp redis06
7f68463fd648 redis "docker-entrypoint.s…" About a minute ago Up 3 seconds 0.0.0.0:6414->6379/tcp redis05
0f540dd6daa9 redis "docker-entrypoint.s…" About a minute ago Up 4 seconds 0.0.0.0:6413->6379/tcp redis04
0adc8c6f6ab8 redis "docker-entrypoint.s…" About a minute ago Up 5 seconds 0.0.0.0:6412->6379/tcp redis03
8bc4e7878fb4 redis "docker-entrypoint.s…" 2 minutes ago Up 5 seconds 0.0.0.0:6411->6379/tcp redis02
d53a5cf3a96d redis "docker-entrypoint.s…" 2 minutes ago Up 6 seconds 0.0.0.0:6410->6379/tcp redis01
3. 添加网络
root@空痕影的matebook:~# docker network connect redis redis01
root@空痕影的matebook:~# docker network connect redis redis02
root@空痕影的matebook:~# docker network connect redis redis03
root@空痕影的matebook:~# docker network connect redis redis04
root@空痕影的matebook:~# docker network connect redis redis05
root@空痕影的matebook:~# docker network connect redis redis06
4.组建集群.
root@空痕影的matebook:~# docker exec -it redis01 redis-cli --cluster create redis01:6379 redis02:6379 redis03:6379 redis04:6379 redis05:6379 redis06:6379 --cluster-replicas 1
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica redis05:6379 to redis01:6379
Adding replica redis06:6379 to redis02:6379
Adding replica redis04:6379 to redis03:6379
M: 48d8ca861c9a9c851eadecd85bc6e0b079b0aefc redis01:6379
slots:[0-5460] (5461 slots) master
M: 3ec70dc57ed3e54a4591e9feb20c7f4be97074e9 redis02:6379
slots:[5461-10922] (5462 slots) master
M: 54a71415c0d526fdf3ce878e571c77f03182a3d4 redis03:6379
slots:[10923-16383] (5461 slots) master
S: d5d1eee4b7aadfcee66c15e3ce96560b28016398 redis04:6379
replicates 54a71415c0d526fdf3ce878e571c77f03182a3d4
S: 8d02be58d0d941742a02b1a0a564239087c95c31 redis05:6379
replicates 48d8ca861c9a9c851eadecd85bc6e0b079b0aefc
S: 9be0891269c835f4953693acac6e1833041e0453 redis06:6379
replicates 3ec70dc57ed3e54a4591e9feb20c7f4be97074e9
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
....
>>> Performing Cluster Check (using node redis01:6379)
M: 48d8ca861c9a9c851eadecd85bc6e0b079b0aefc redis01:6379
slots:[0-5460] (5461 slots) master
1 additional replica(s)
S: d5d1eee4b7aadfcee66c15e3ce96560b28016398 172.21.0.5:6379
slots: (0 slots) slave
replicates 54a71415c0d526fdf3ce878e571c77f03182a3d4
S: 9be0891269c835f4953693acac6e1833041e0453 172.21.0.7:6379
slots: (0 slots) slave
replicates 3ec70dc57ed3e54a4591e9feb20c7f4be97074e9
M: 54a71415c0d526fdf3ce878e571c77f03182a3d4 172.21.0.4:6379
slots:[10923-16383] (5461 slots) master
1 additional replica(s)
M: 3ec70dc57ed3e54a4591e9feb20c7f4be97074e9 172.21.0.3:6379
slots:[5461-10922] (5462 slots) master
1 additional replica(s)
S: 8d02be58d0d941742a02b1a0a564239087c95c31 172.21.0.6:6379
slots: (0 slots) slave
replicates 48d8ca861c9a9c851eadecd85bc6e0b079b0aefc
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
5. 查看集群情况
root@空痕影的matebook:~# /usr/local/redis/bin/redis-cli -p 6410
127.0.0.1:6410> cluster nodes
d5d1eee4b7aadfcee66c15e3ce96560b28016398 172.21.0.5:6379@16379 slave 54a71415c0d526fdf3ce878e571c77f03182a3d4 0 1656229105755 3 connected
9be0891269c835f4953693acac6e1833041e0453 172.21.0.7:6379@16379 slave 3ec70dc57ed3e54a4591e9feb20c7f4be97074e9 0 1656229103000 2 connected
48d8ca861c9a9c851eadecd85bc6e0b079b0aefc 172.21.0.2:6379@16379 myself,master - 0 1656229103000 1 connected 0-5460
54a71415c0d526fdf3ce878e571c77f03182a3d4 172.21.0.4:6379@16379 master - 0 1656229103749 3 connected 10923-16383
3ec70dc57ed3e54a4591e9feb20c7f4be97074e9 172.21.0.3:6379@16379 master - 0 1656229104752 2 connected 5461-10922
8d02be58d0d941742a02b1a0a564239087c95c31 172.21.0.6:6379@16379 slave 48d8ca861c9a9c851eadecd85bc6e0b079b0aefc 0 1656229104000 1 connected
127.0.0.1:6410> cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_ping_sent:634
cluster_stats_messages_pong_sent:650
cluster_stats_messages_sent:1284
cluster_stats_messages_ping_received:645
cluster_stats_messages_pong_received:634
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:1284
total_cluster_links_buffer_limit_exceeded:0
6.服务挂机实验
# 关闭redis01 内网id为127.21.0.2
root@空痕影的matebook:~# docker rm -f redis01
redis01
root@空痕影的matebook:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
44d7d44c2e65 redis "docker-entrypoint.s…" 23 minutes ago Up 22 minutes 0.0.0.0:6415->6379/tcp redis06
7f68463fd648 redis "docker-entrypoint.s…" 23 minutes ago Up 22 minutes 0.0.0.0:6414->6379/tcp redis05
0f540dd6daa9 redis "docker-entrypoint.s…" 23 minutes ago Up 22 minutes 0.0.0.0:6413->6379/tcp redis04
0adc8c6f6ab8 redis "docker-entrypoint.s…" 23 minutes ago Up 22 minutes 0.0.0.0:6412->6379/tcp redis03
8bc4e7878fb4 redis "docker-entrypoint.s…" 24 minutes ago Up 22 minutes 0.0.0.0:6411->6379/tcp redis02
# 通过其他redis客户端查看集群信息,发现ndoe01被打上了fail标签,且node01的从节点redis05:127.21.0.6.自动升级为master,并提供服务
root@空痕影的matebook:~# /usr/local/redis/bin/redis-cli -c -p 6411
127.0.0.1:6411> cluster nodes
d5d1eee4b7aadfcee66c15e3ce96560b28016398 172.21.0.5:6379@16379 slave 54a71415c0d526fdf3ce878e571c77f03182a3d4 0 1656229328000 3 connected
8d02be58d0d941742a02b1a0a564239087c95c31 172.21.0.6:6379@16379 master - 0 1656229329392 7 connected 0-5460
3ec70dc57ed3e54a4591e9feb20c7f4be97074e9 172.21.0.3:6379@16379 myself,master - 0 1656229330000 2 connected 5461-10922
9be0891269c835f4953693acac6e1833041e0453 172.21.0.7:6379@16379 slave 3ec70dc57ed3e54a4591e9feb20c7f4be97074e9 0 1656229330396 2 connected
54a71415c0d526fdf3ce878e571c77f03182a3d4 172.21.0.4:6379@16379 master - 0 1656229328389 3 connected 10923-16383
48d8ca861c9a9c851eadecd85bc6e0b079b0aefc 172.21.0.2:6379@16379 master,fail - 1656229298278 1656229293000 1 connected
127.0.0.1:6411> exit
# 关闭redis02 内网id为127.21.0.3
root@空痕影的matebook:~# docker rm -f redis02
redis02
# 通过其他redis客户端查看集群信息,发现ndoe02被打上了fail标签,且node01的从节点redis05:127.21.0.7.自动升级为master,并提供服务
root@空痕影的matebook:~# /usr/local/redis/bin/redis-cli -c -p 6412
127.0.0.1:6412> cluster nodes
9be0891269c835f4953693acac6e1833041e0453 172.21.0.7:6379@16379 master - 0 1656229415476 8 connected 5461-10922
54a71415c0d526fdf3ce878e571c77f03182a3d4 172.21.0.4:6379@16379 myself,master - 0 1656229414000 3 connected 10923-16383
8d02be58d0d941742a02b1a0a564239087c95c31 172.21.0.6:6379@16379 master - 0 1656229416480 7 connected 0-5460
3ec70dc57ed3e54a4591e9feb20c7f4be97074e9 172.21.0.3:6379@16379 master,fail - 1656229394394 1656229391000 2 connected
48d8ca861c9a9c851eadecd85bc6e0b079b0aefc 172.21.0.2:6379@16379 master,fail - 1656229300077 1656229296064 1 connected
d5d1eee4b7aadfcee66c15e3ce96560b28016398 172.21.0.5:6379@16379 slave 54a71415c0d526fdf3ce878e571c77f03182a3d4 0 1656229413470 3 connected
127.0.0.1:6412> exit
# 关闭redis02 内网id为127.21.0.4
root@空痕影的matebook:~# docker rm -f redis03
redis03
# 通过其他redis客户端查看集群信息,发现ndoe03被打上了fail标签,且node01的从节点redis05:127.21.0.7.自动升级为master,并提供服务
root@空痕影的matebook:~# /usr/local/redis/bin/redis-cli -c -p 6413
127.0.0.1:6413> cluster nodes
d5d1eee4b7aadfcee66c15e3ce96560b28016398 172.21.0.5:6379@16379 myself,slave 54a71415c0d526fdf3ce878e571c77f03182a3d4 0 1656229439000 3 connected
54a71415c0d526fdf3ce878e571c77f03182a3d4 172.21.0.4:6379@16379 master - 1656229432221 1656229430213 3 connected 10923-16383
3ec70dc57ed3e54a4591e9feb20c7f4be97074e9 172.21.0.3:6379@16379 master,fail - 1656229396096 1656229391077 2 connected
9be0891269c835f4953693acac6e1833041e0453 172.21.0.7:6379@16379 master - 0 1656229440245 8 connected 5461-10922
48d8ca861c9a9c851eadecd85bc6e0b079b0aefc 172.21.0.2:6379@16379 master,fail - 1656229298773 1656229296000 1 connected
8d02be58d0d941742a02b1a0a564239087c95c31 172.21.0.6:6379@16379 master - 0 1656229438240 7 connected 0-5460
127.0.0.1:6413> set k2 v2
(error) MOVED 449 172.21.0.6:6379
127.0.0.1:6413> exit
root@空痕影的matebook:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
44d7d44c2e65 redis "docker-entrypoint.s…" 27 minutes ago Up 26 minutes 0.0.0.0:6415->6379/tcp redis06
7f68463fd648 redis "docker-entrypoint.s…" 27 minutes ago Up 26 minutes 0.0.0.0:6414->6379/tcp redis05
0f540dd6daa9 redis "docker-entrypoint.s…" 27 minutes ago Up 26 minutes 0.0.0.0:6413->6379/tcp redis04
root@空痕影的matebook:~# /usr/local/redis/bin/redis-cli -c -p 6413
127.0.0.1:6413> set k1 v2
OK
注意: 本集群智能再redis的桥接网络下使用.因为外网连不上容器内的ip
如有需要,则将网络定义为local.