中间件 七月 10, 2022

redis (零) 安装

文章字数 30k 阅读约需 28 mins. 阅读次数 0

安装

snap 安装方式

源码安装

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.

0%