Hexo

点滴积累 豁达处之

0%

07 redis集群

redis包含三种集群策略

  • 主从复制
  • 哨兵
  • 集群

1 主从模式

​ Slave从节点服务启动并连接到Master之后,它将主动发送一个SYNC命令。Master服务主节点收到同步命令后将启动后台存盘进程,同时收集所有接收到的用于修改数据集的命令,在后台进程执行完毕后,Master将传送整个数据库文件到Slave,以完成一次完全同步。而Slave从节点服务在接收到数据库文件数据之后将其存盘并加载到内存中。此后,Master主节点继续将所有已经收集到的修改命令,和新的修改命令依次传送给Slaves,Slave将在本次执行这些数据修改命令,从而达到最终的数据同步。

​ 如果Master和Slave之间的链接出现断连现象,Slave可以自动重连Master,但是在连接成功之后,一次完全同步将被自动执行。

主从配置示例(采用一主一从)

准备:

  1. redis的bin目录:/usr/local/redis/bin

  2. redis的bin目录结构:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    [root@izbp12c0zpe8t4yri0xphiz bin]# ll
    total 21916
    -rw-r--r-- 1 root root 0 Jan 8 13:34 appendonly.aof
    -rw-r--r-- 1 root root 93 Dec 28 15:08 dump.rdb
    -rw-r--r-- 1 root root 114 Jan 8 13:34 nodes_7000.conf
    -rw-r--r-- 1 root root 114 Jan 8 13:35 nodes_7001.conf
    -rw-r--r-- 1 root root 114 Jan 8 13:36 nodes_7002.conf
    -rwxr-xr-x 1 root root 2451640 Dec 27 21:55 redis-benchmark
    -rwxr-xr-x 1 root root 5775928 Dec 27 21:55 redis-check-aof
    -rwxr-xr-x 1 root root 5775928 Dec 27 21:55 redis-check-rdb
    -rwxr-xr-x 1 root root 2617720 Dec 27 21:55 redis-cli
    drwxr-xr-x 5 root root 4096 Jan 8 11:48 redis_cluster
    -rw-r--r-- 1 root root 33 Dec 28 15:00 redis.conf
    lrwxrwxrwx 1 root root 12 Dec 27 21:55 redis-sentinel -> redis-server
    -rwxr-xr-x 1 root root 5775928 Dec 27 21:55 redis-server

1.1 主节点配置

redis提供给我们了一个默认的配置文件redis.conf  把它复制到/usr/local/redis/conf目录下,并改名为6379.conf

1
cp redis.conf  /usr/local/redis/bin/conf/6379.conf

修改如下配置:

1
2
3
4
5
6
7
8
daemonize no 
修改为:
daemonize yes (后台程序方式运行)

pidfile /var/run/redis_6379.pid
修改为:
pidfile /usr/local/redis/bin/redis_6379.pid
(把pidfile生成到有权限的目录下)

1.2 从节点配置

1
cp 6379.conf 6380.conf

修改6380.conf  修改对应的端口和pid配置  然后加入slaveof 127.0.0.1 6379

1
2
3
4
5
6
7
8
9
10
port 6379
修改为:
port 6380

pidfile /usr/local/redis/redis_6379.pid
修改为:
pidfile /usr/local/redis/redis_6380.pid

增加一行:
slaveof 127.0.0.1 6379

如果master设置了密码。需要配置:

1
masterauth

1.3 启动服务及查看

启动:

1
2
./redis-server /usr/local/redis/bin/conf/6379.conf 
./redis-server /usr/local/redis/bin/conf/6380.conf

查看服务:

1
2
3
4
[root@izbp12c0zpe8t4yri0xphiz bin]# ps -ef | grep redis
root 14366 1 0 13:57 ? 00:00:00 ./redis-server *:6379
root 14367 1 0 13:57 ? 00:00:00 ./redis-server *:6380
root 14377 14126 0 13:57 pts/1 00:00:00 grep --color=auto redis

1.4 启动客户端

连接6379那个实例

1
2
cd /usr/local/redis/bin/
./redis-cli -h 127.0.0.1 -p 6379

查看服务信息:

1
2
3
info replication
NOAUTH Authentication required.
auth "redis" # 密码验证
1
2
3
role:master                                                         # 本机是『主』
connected_slaves:1 # 有1个『奴隶』
slave0:ip=127.0.0.1,port=6380,state=online,offset=11957,lag=1 # "从"服务器iP地址和端口是

新增 读取

1
2
3
4
127.0.0.1:6379> set name zhangsan
OK
127.0.0.1:6379> get name
"zhangsan"

连接6380那个实例

1
./redis-cli -h 127.0.0.1 -p 6380

读取 新增

1
2
3
4
127.0.0.1:6380> get name
"zhangsan"
127.0.0.1:6380> set name lisi
(error) READONLY You can't write against a read only slave.

2 哨兵模式

2.1 添加sentinel.conf配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#sentinel端口
port 26379
#工作路径,注意路径不要和主重复
dir "/usr/local/redis-6379"
# 守护进程模式
daemonize yes
#关闭保护模式
protected-mode no
# 指明日志文件名
logfile "./sentinel.log"
#哨兵监控的master,主从配置一样,这里只用输入redis主节点的ip/port和法定人数。
sentinel monitor mymaster 192.168.125.128 6379 1
# master或slave多长时间(默认30秒)不能使用后标记为s_down状态。
sentinel down-after-milliseconds mymaster 5000
#若sentinel在该配置值内未能完成failover操作(即故障时master/slave自动切换),则认为本次failover失败。
sentinel failover-timeout mymaster 18000
#设置master和slaves验证密码
sentinel auth-pass mymaster 123456
sentinel parallel-syncs mymaster 1//指定了在执行故障转移时, 最多可以有多少个从服务器同时对新的主服务器进行同步

2.2 启动哨兵

1
2
方式一:redis-sentinel /path/to/sentinel.conf(推荐,这种方式启动和redis实例没有任何关系)
方式二:redis-server /path/to/sentinel.conf --sentinel

2.3 启动客户端查看集群信息

1
2
3
4
5
sentinel master mymaster//查看master的状态 
SENTINEL slaves mymaster //查看salves的状态
SENTINEL sentinels mymaster //查看哨兵的状态
SENTINEL get-master-addr-by-name mymaster//获取当前master的地址
info sentinel//查看哨兵信息

2.4 哨兵的作用

哨兵的作用是监控 redis系统的运行状况,他的功能如下:

  1. 监控主从数据库是否正常运行
  2. master出现故障时,自动将slave转化为master
  3. 多哨兵配置的时候,哨兵之间也会自动监控
  4. 多个哨兵可以监控同一个redis

2.5 哨兵工作机制

​ 哨兵进程启动时会读取配置文件的内容,通过sentinel monitor master-name ip port quorum查找到master的ip端口。一个哨兵可以监控多个master数据库,只需要提供多个该配置项即可。

同时配置文件还定义了与监控相关的参数,比如master多长时间无响应即即判定位为下线。

哨兵启动后,会与要监控的master建立俩条连接:

  1. 一条连接用来订阅master的sentinel:hello频道与获取其他监控该master的哨兵节点信息
  2. 另一条连接定期向master发送INFO等命令获取master本身的信息

与master建立连接后,哨兵会执行三个操作,这三个操作的发送频率都可以在配置文件中配置:

  1. 定期向master和slave发送INFO命令
  2. 定期向master个slave的sentinel:hello频道发送自己的信息
  3. 定期向master、slave和其他哨兵发送PING命令

这三个操作的意义非常重大,发送INFO命令可以获取当前数据库的相关信息从而实现新节点的自动发现。所以说哨兵只需要配置master数据库信息就可以自动发现其slave信息。获取到slave信息后,哨兵也会与slave建立俩条连接执行监控。通过INFO命令,哨兵可以获取主从数据库的最新信息,并进行相应的操作,比如角色变更等

​ 当实现了自动发现slave和其他哨兵节点后,哨兵就可以通过定期发送PING命令定时监控这些数据库和节点有没有停止服务。发送频率可以配置,但是最长间隔时间为1s,可以通过sentinel down-after-milliseconds mymaster 600设置。

​ 如果被ping的数据库或者节点超时未回复,哨兵任务其主观下线。如果下线的是master,哨兵会向其他哨兵点发送命令询问他们是否也认为该master主观下线,如果达到一定数目(即配置文件中的quorum)投票,哨兵会认为该master已经客观下线,并选举领头的哨兵节点对主从系统发起故障恢复

如上文所说,哨兵认为master客观下线后,故障恢复的操作需要由选举的领头哨兵执行,选举采用Raft算法:

  1. 发现master下线的哨兵节点(我们称他为A)向每个哨兵发送命令,要求对方选自己为领头哨兵

  2. 如果目标哨兵节点没有选过其他人,则会同意选举A为领头哨兵

  3. 如果有超过一半的哨兵同意选举A为领头,则A当选

  4. 如果有多个哨兵节点同时参选领头,此时有可能存在一轮投票无竞选者胜出,此时每个参选的节点等待一个随机时间后再次发起参选请求,进行下一轮投票精选,直至选举出领头哨兵
    选出领头哨兵后,领头者开始对进行故障恢复,从出现故障的master的从数据库中挑选一个来当选新的master,选择规则如下:

  5. 所有在线的slave中选择优先级最高的,优先级可以通过slave-priority配置

  6. 如果有多个最高优先级的slave,则选取复制偏移量最大(即复制越完整)的当选

  7. 如果以上条件都一样,选取id最小的slave

​ 挑选出需要继任的slaver后,领头哨兵向该数据库发送命令使其升格为master,然后再向其他slave发送命令接受新的master,最后更新数据。将已经停止的旧的master更新为新的master的从数据库,使其恢复服务后以slave的身份继续运行。

3 集群模式

​ Redis 是一个开源的 key-value 存储系统,由于出众的性能,大部分互联网企业都用来做服务器端缓存。Redis 在3.0版本前只支持单实例模式,虽然支持主从模式、哨兵模式部署来解决单点故障,但是现在互联网企业动辄大几百G的数据,可完全是没法满足业务的需求,所以,Redis 在 3.0 版本以后就推出了集群模式。

​ Redis 集群采用了P2P的模式,完全去中心化。Redis 把所有的 Key 分成了 16384 个 slot,每个 Redis 实例负责其中一部分 slot 。集群中的所有信息(节点、端口、slot等),都通过节点之间定期的数据交换而更新。
Redis 客户端可以在任意一个 Redis 实例发出请求,如果所需数据不在该实例中,通过重定向命令引导客户端访问所需的实例。

Redis集群提供了以下两个好处:

  • 将数据自动切分split到多个节点的能力。
  • 当集群中的一部分节点失效或者无法进行通讯时, 仍然可以继续处理命令请求的能力。

3.0 集群原理

Redis_cluster

  1. 所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽。
  2. 节点的fail是通过集群中超过半数的节点检测失效时才生效。
  3. 客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可。
  4. redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<->value

Redis集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value 时,redis 先对key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点

redis-cluster投票:容错

Redis_cluster

  1. 投票过程是集群中所有master参与,如果半数以上master节点与master节点通信超时(cluster-node-timeout),认为当前master节点挂掉.
  2. 什么时候整个集群不可用(cluster_state:fail)?
    1. 如果集群任意master挂掉,且当前master没有slave.集群进入fail状态,也可以理解成集群的slot映射[0-16383]不完整时进入fail状态.
    2. 如果集群超过半数以上master挂掉,无论是否有slave,集群进入fail状态.

搭建一个集群

3.1 创建文件夹

集群中 Redis 节点的端口号为 9001-9006 ,端口号即集群下各实例文件夹。数据存放在 端口号/data 文件夹中。

1
2
3
mkdir /usr/local/redis-cluster
cd redis-cluster/
mkdir -p 9001/data 9002/data 9003/data 9004/data 9005/data 9006/data

查看文件:

1
2
3
4
5
6
7
8
9
[root@izbp12c0zpe8t4yri0xphiz redis]# cd redis-cluster/
[root@izbp12c0zpe8t4yri0xphiz redis-cluster]# ll
total 27564
drwxr-xr-x 3 root root 4096 Jan 8 16:50 9001
drwxr-xr-x 3 root root 4096 Jan 8 16:50 9002
drwxr-xr-x 3 root root 4096 Jan 8 16:50 9003
drwxr-xr-x 3 root root 4096 Jan 8 16:50 9004
drwxr-xr-x 3 root root 4096 Jan 8 16:50 9005
drwxr-xr-x 3 root root 4096 Jan 8 16:50 9006

3.2 复制执行脚本

在 对应的文件夹下新建相对应的redis.conf文件

1
cp redis.conf /usr/local/redis-cluster/9001/redis

注意,修改 redis.conf 配置和单点唯一区别是下图部分,其余还是常规的这几项:

1
2
3
4
5
6
7
8
9
port 9001                                                       #(每个节点的端口号)
daemonize yes
bind 192.168.119.131 #(绑定当前机器 IP)
dir /usr/local/redis-cluster/9001/data/ #(数据文件存放位置)
pidfile /var/run/redis_9001.pid #(pid 9001和port要对应)
cluster-enabled yes #(启动集群模式)
cluster-config-file nodes9001.conf #(9001和port要对应)
cluster-node-timeout 15000
appendonly yes

3.3 其余 redis.conf 文件

1
2
vim redis.conf
:%s/9001/9002g

其实我们也就是替换了下面这四行:

1
2
3
4
port 9002
dir /usr/local/redis-cluster/9002/data/
cluster-config-file nodes-9002.conf
pidfile /var/run/redis_9002.pid

3.4 启动 9001-9006 六个节点

1
2
3
4
5
[root@izbp12c0zpe8t4yri0xphiz bin]# ./redis-server ../redis-cluster/9002/redis.conf 
[root@izbp12c0zpe8t4yri0xphiz bin]# ./redis-server ../redis-cluster/9003/redis.conf
[root@izbp12c0zpe8t4yri0xphiz bin]# ./redis-server ../redis-cluster/9004/redis.conf
[root@izbp12c0zpe8t4yri0xphiz bin]# ./redis-server ../redis-cluster/9005/redis.conf
[root@izbp12c0zpe8t4yri0xphiz bin]# ./redis-server ../redis-cluster/9006/redis.conf

查看服务配置情况:

1
2
3
4
5
6
7
8
[root@izbp12c0zpe8t4yri0xphiz bin]# ps -ef | grep redis
root 14895 1 0 17:11 ? 00:00:00 ./redis-server 127.0.0.1:9001 [cluster]
root 14911 1 0 17:13 ? 00:00:00 ./redis-server 127.0.0.1:9002 [cluster]
root 14916 1 0 17:13 ? 00:00:00 ./redis-server 127.0.0.1:9003 [cluster]
root 14921 1 0 17:13 ? 00:00:00 ./redis-server 127.0.0.1:9004 [cluster]
root 14926 1 0 17:13 ? 00:00:00 ./redis-server 127.0.0.1:9005 [cluster]
root 14931 1 0 17:13 ? 00:00:00 ./redis-server 127.0.0.1:9006 [cluster]
root 14936 14760 0 17:13 pts/5 00:00:00 grep --color=auto redis

3.5 节点测试

1
2
3
[root@izbp12c0zpe8t4yri0xphiz bin]# ./redis-cli -h 127.0.0.1 -p 9001
127.0.0.1:9001> set name chen
(error) CLUSTERDOWN Hash slot not served

​ 虽然我们配置并启动了 Redis 集群服务,但是他们暂时还并不在一个集群中,互相直接发现不了,而且还没有可存储的位置,就是所谓的slot(槽)

3.6 安装集群所需软件

由于 Redis 集群需要使用 ruby 命令,所以我们需要安装 ruby 和相关接口。

1
2
3
yum install ruby
yum install rubygems
gem install redis

该命令可能出现的报错:

1
2
3
4
5
6
7
8
9
[root@izbp12c0zpe8t4yri0xphiz bin]# yum install rubygems
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Package rubygems-2.0.14.1-34.el7_6.noarch already installed and latest version
Nothing to do
[root@izbp12c0zpe8t4yri0xphiz bin]# gem install redis
Fetching: redis-4.1.0.gem (100%)
ERROR: Error installing redis:
redis requires Ruby version >= 2.2.2.

​ redis requires Ruby version >= 2.2.2的报错,查了资料发现是Centos默认支持ruby到2.0.0,可gem 安装redis需要最低是2.2.2

解决办法是 先安装rvm,再把ruby版本提升至2.3.3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
1.安装curl 
yum install curl

2.安装RVM
curl -L get.rvm.io | bash -s stable # 该命令可能出现报错的解决方案参考 (4.gpg无对应公钥问题)

3
source /usr/local/rvm/scripts/rvm

4 查看rvm库中已知的ruby版本
rvm list known

5.安装一个ruby版本
rvm install 2.3.3

6.使用一个ruby版本
rvm use 2.3.3

7.卸载一个已知版本
rvm remove 2.0.0

8.查看当前版本
ruby --version

9.再安装redis
gem install redis

3.7 创建集群

1
./redis-trib.rb create --replicas 1 127.0.0.1:9001 127.0.0.1:9002 127.0.0.1:9003 127.0.0.1:9004 127.0.0.1:9005 127.0.0.1:9006

该命令执行结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
[root@izbp12c0zpe8t4yri0xphiz src]# ./redis-trib.rb create --replicas 1 127.0.0.1:9001 127.0.0.1:9002 127.0.0.1:9003 127.0.0.1:9004 127.0.0.1:9005 127.0.0.1:9006
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
127.0.0.1:9001
127.0.0.1:9002
127.0.0.1:9003
Adding replica 127.0.0.1:9005 to 127.0.0.1:9001
Adding replica 127.0.0.1:9006 to 127.0.0.1:9002
Adding replica 127.0.0.1:9004 to 127.0.0.1:9003
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: ea16e1218bb5eb0ae35b1d5de17362ac7d223007 127.0.0.1:9001
slots:0-5460 (5461 slots) master
M: c0cf115bc513aa6ed07045c73866d18f4a72ef08 127.0.0.1:9002
slots:5461-10922 (5462 slots) master
M: a45b310b0957f33f1156ce20493ec1d02f15c7da 127.0.0.1:9003
slots:10923-16383 (5461 slots) master
S: 8f1a9ad5408edd85037651e82882c00587e0c409 127.0.0.1:9004
replicates ea16e1218bb5eb0ae35b1d5de17362ac7d223007
S: 19f23f64e28dbd9138689eb8a39609f0074cd2c7 127.0.0.1:9005
replicates c0cf115bc513aa6ed07045c73866d18f4a72ef08
S: 8950edb8b990b3dc4ee4c01e48d70df8b8820116 127.0.0.1:9006
replicates a45b310b0957f33f1156ce20493ec1d02f15c7da
Can I set the above configuration? (type 'yes' to accept):

简单解释一下这个命令:调用 ruby 命令来进行创建集群,--replicas 1 表示主从复制比例为 1:1,即一个主节点对应一个从节点;然后,默认给我们分配好了每个主节点和对应从节点服务,以及 solt 的大小,因为在 Redis 集群中有且仅有 16383 个 solt ,默认情况会给我们平均分配,当然你可以指定,后续的增减节点也可以重新分配。

M: 10222dee93f6a1700ede9f5424fccd6be0b2fb73 为主节点Id

S: 9ce697e49f47fec47b3dc290042f3cc141ce5aeb 192.168.119.131:9004 replicates 10222dee93f6a1700ede9f5424fccd6be0b2fb73 从节点下对应主节点Id

目前来看,9001-9003 为主节点,9004-9006 为从节点,并向你确认是否同意这么配置。

输入 yes 后,会开始集群创建。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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:9001)
M: ea16e1218bb5eb0ae35b1d5de17362ac7d223007 127.0.0.1:9001
slots:0-5460 (5461 slots) master
1 additional replica(s)
S: 8950edb8b990b3dc4ee4c01e48d70df8b8820116 127.0.0.1:9006
slots: (0 slots) slave
replicates a45b310b0957f33f1156ce20493ec1d02f15c7da
M: a45b310b0957f33f1156ce20493ec1d02f15c7da 127.0.0.1:9003
slots:10923-16383 (5461 slots) master
1 additional replica(s)
S: 19f23f64e28dbd9138689eb8a39609f0074cd2c7 127.0.0.1:9005
slots: (0 slots) slave
replicates c0cf115bc513aa6ed07045c73866d18f4a72ef08
M: c0cf115bc513aa6ed07045c73866d18f4a72ef08 127.0.0.1:9002
slots:5461-10922 (5462 slots) master
1 additional replica(s)
S: 8f1a9ad5408edd85037651e82882c00587e0c409 127.0.0.1:9004
slots: (0 slots) slave
replicates ea16e1218bb5eb0ae35b1d5de17362ac7d223007
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

3.8 验证

依然是通过客户端命令连接上,通过集群命令看一下状态和节点信息等

1
2
3
./redis-cli -c -h 127.0.0.1 -p 9001
cluster info
cluster nodes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[root@izbp12c0zpe8t4yri0xphiz src]# ./redis-cli -c -h 127.0.0.1 -p 9001
127.0.0.1:9001> 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:202
cluster_stats_messages_pong_sent:195
cluster_stats_messages_sent:397
cluster_stats_messages_ping_received:190
cluster_stats_messages_pong_received:202
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:397
127.0.0.1:9001> cluster nodes
8950edb8b990b3dc4ee4c01e48d70df8b8820116 127.0.0.1:9006@19006 slave a45b310b0957f33f1156ce20493ec1d02f15c7da 0 1546942881000 6 connected
a45b310b0957f33f1156ce20493ec1d02f15c7da 127.0.0.1:9003@19003 master - 0 1546942883000 3 connected 10923-16383
19f23f64e28dbd9138689eb8a39609f0074cd2c7 127.0.0.1:9005@19005 slave c0cf115bc513aa6ed07045c73866d18f4a72ef08 0 1546942882765 5 connected
ea16e1218bb5eb0ae35b1d5de17362ac7d223007 127.0.0.1:9001@19001 myself,master - 0 1546942882000 1 connected 0-5460
c0cf115bc513aa6ed07045c73866d18f4a72ef08 127.0.0.1:9002@19002 master - 0 1546942882000 2 connected 5461-10922
8f1a9ad5408edd85037651e82882c00587e0c409 127.0.0.1:9004@19004 slave ea16e1218bb5eb0ae35b1d5de17362ac7d223007 0 1546942883766 4 connected

通过命令,可以详细的看出集群信息和各个节点状态,主从信息以及连接数、槽信息等。这么看到,我们已经把 Redis 集群搭建部署成功!

**设置一个 key **

1
2
3
127.0.0.1:9001> set name mafly
-> Redirected to slot [5798] located at 127.0.0.1:9002
OK

当我们 set name mafly 时,出现了 Redirected to slot 信息并自动连接到了9002节点。这也是集群的一个数据分配特性。

###4 gpg无对应公钥问题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@izbp12c0zpe8t4yri0xphiz bin]# curl -L get.rvm.io | bash -s stable 
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 194 100 194 0 0 37 0 0:00:05 0:00:05 --:--:-- 53
100 24173 100 24173 0 0 2003 0 0:00:12 0:00:12 --:--:-- 7523
Downloading https://github.com/rvm/rvm/archive/1.29.7.tar.gz
Downloading https://github.com/rvm/rvm/releases/download/1.29.7/1.29.7.tar.gz.asc
gpg: Signature made Fri 04 Jan 2019 06:01:48 AM CST using RSA key ID 39499BDB
gpg: Can't check signature: No public key
GPG signature verification failed for '/usr/local/rvm/archives/rvm-1.29.7.tgz' - 'https://github.com/rvm/rvm/releases/download/1.29.7/1.29.7.tar.gz.asc'! Try to install GPG v2 and then fetch the public key:

gpg2 --keyserver hkp://pool.sks-keyservers.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB

or if it fails:

command curl -sSL https://rvm.io/mpapis.asc | gpg2 --import -
command curl -sSL https://rvm.io/pkuczynski.asc | gpg2 --import -

In case of further problems with validation please refer to https://rvm.io/rvm/security

错误信息提示 ,无法检查签名:无公钥

解决方法如下(下载公钥):

1
gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 2B2458BF

参考博客

参考博客