Redis(Mac)集群配置 Redis Cluster

Redis 的集群主从模型是一种高可用的集群架构。本章主要内容有:
高可用集群的搭建,
redis-cli连接集群,
新增集群节点,
删除集群节点,
其他配置补充说明。

高可用集群搭建

集群(cluster)技术是一种较新的技术,通过集群技术,可以在付出较低成本的情况下获得在性能、可靠性、灵活性方面的相对较高的收益,其任务调度则是集群系统中的核心技术。

集群简介

Redis 集群是一个可以在多个 Redis 节点之间进行数据共享的设施(installation)。
Redis 集群不支持那些需要同时处理多个键的 Redis 命令, 因为执行这些命令需要在多个 Redis 节点之间移动数据, 并且在高负载的情况下, 这些命令将降低 Redis 集群的性能, 并导致不可预测的行为。

Redis 集群通过分区(partition)来提供一定程度的可用性(availability):
即使集群中有一部分节点失效或者无法进行通讯, 集群也可以继续处理命令请求。

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

Redis 集群数据共享

Redis 3.0 之后便支持集群
Redis 集群使用数据分片(sharding)而非一致性哈希(consistency hashing)来实现:
一个 Redis 集群包含 16384 个哈希槽(hash slot),
数据库中的每个键都属于这 16384 个哈希槽的其中一个,
集群使用公式 CRC16(key) % 16384 来计算键 key 属于哪个槽,
其中 CRC16(key) 语句用于计算键 key 的 CRC16 校验和 。
Redis 会根据节点数量大致均等的将哈希槽映射到不同的节点=

所有节点之间彼此互联(PING-PONG机制),当超过半数的主机认为某台主机挂了,则该主机就是真的挂掉了,整个集群就不可用了。
若给集群中的每台主机分配多台从机。主机挂了,从机上位,依然能正常工作。但是若集群中超过半数的主机挂了,无论是否有从机,该集群也是不可用的。

集群中的每个节点负责处理一部分哈希槽。 举个例子, 一个集群可以有三个哈希槽, 其中:

节点 A 负责处理 0 号至 5500 号哈希槽。
节点 B 负责处理 5501 号至 11000 号哈希槽。
节点 C 负责处理 11001 号至 16384 号哈希槽。
这种将哈希槽分布到不同节点的做法使得用户可以很容易地向集群中添加或者删除节点。
比如说:
如果用户将新节点 D 添加到集群中, 那么集群只需要将节点 A 、B 、 C 中的某些槽移动到节点 D 就可以了。
与此类似, 如果用户要从集群中移除节点 A , 那么集群只需要将节点 A 中的所有哈希槽移动到节点 B 和节点 C , 然后再移除空白(不包含任何哈希槽)的节点 A 就可以了。

因为将一个哈希槽从一个节点移动到另一个节点不会造成节点阻塞, 所以无论是添加新节点还是移除已存在节点, 又或者改变某个节点包含的哈希槽数量, 都不会造成集群下线。

Redis 集群中的主从复制

为了使得集群在一部分节点下线或者无法与集群的大多数(majority)节点进行通讯的情况下, 仍然可以正常运作, Redis 集群对节点使用了主从复制功能:
集群中的每个节点都有 1 个至 N 个复制品(replica),
其中一个复制品为主节点(master), 而其余的 N-1 个复制品为从节点(slave)。

在之前列举的节点 A 、B 、C 的例子中, 如果节点 B 下线了, 那么集群将无法正常运行, 因为集群找不到节点来处理 5501 号至 11000 号的哈希槽。

另一方面, 假如在创建集群的时候(或者至少在节点 B 下线之前), 我们为主节点 B 添加了从节点 B1 , 那么当主节点 B 下线的时候, 集群就会将 B1 设置为新的主节点, 并让它代替下线的主节点 B , 继续处理 5501 号至 11000 号的哈希槽, 这样集群就不会因为主节点 B 的下线而无法正常运作了。

不过如果节点 B 和 B1 都下线的话, Redis 集群还是会停止运作。

从Redis2.6开始,从服务器支持只读模式,并且该模式为从服务器的默认模式。只读模式由 redis.conf 文件中的 slave-read-only 选项控制。只读从服务器会拒绝执行任何写命令, 所以不会出现因为操作失误而将数据不小心写入到了从服务器的情况。

Redis 集群的一致性保证(guarantee)

Redis 集群不保证数据的强一致性(strong consistency):
在特定条件下, Redis 集群可能会丢失已经被执行过的写命令。

使用异步复制(asynchronous replication)是 Redis 集群可能会丢失写命令的其中一个原因。 考虑以下这个写命令的例子:
客户端向主节点 B 发送一条写命令。
主节点 B 执行写命令,并向客户端返回命令回复。
主节点 B 将刚刚执行的写命令复制给它的从节点 B1 、 B2 和 B3 。
如你所见, 主节点对命令的复制工作发生在返回命令回复之后, 因为如果每次处理命令请求都需要等待复制操作完成的话, 那么主节点处理命令请求的速度将极大地降低 —— 我们必须在性能和一致性之间做出权衡

Redis 集群另外一种可能会丢失命令的情况是, 集群出现网络分裂(network partition), 并且一个客户端与至少包括一个主节点在内的少数(minority)实例被孤立。

举个例子, 假设集群包含 A 、 B 、 C 、 A1 、 B1 、 C1 六个节点, 其中 A 、B 、C 为主节点, 而 A1 、B1 、C1 分别为三个主节点的从节点, 另外还有一个客户端 Z1 。

假设集群中发生网络分裂, 那么集群可能会分裂为两方, 大多数(majority)的一方包含节点 A 、C 、A1 、B1 和 C1 , 而少数(minority)的一方则包含节点 B 和客户端 Z1 。

在网络分裂期间, 主节点 B 仍然会接受 Z1 发送的写命令:

如果网络分裂出现的时间很短, 那么集群会继续正常运行;
但是, 如果网络分裂出现的时间足够长, 使得大多数一方将从节点 B1 设置为新的主节点, 并使用 B1 来代替原来的主节点 B , 那么 Z1 发送给主节点 B 的写命令将丢失。
注意, 在网络分裂出现期间, 客户端 Z1 可以向主节点 B 发送写命令的最大时间是有限制的, 这一时间限制称为节点超时时间(node timeout), 是 Redis 集群的一个重要的配置选项:

对于大多数一方来说, 如果一个主节点未能在节点超时时间所设定的时限内重新联系上集群, 那么集群会将这个主节点视为下线, 并使用从节点来代替这个主节点继续工作。
对于少数一方, 如果一个主节点未能在节点超时时间所设定的时限内重新联系上集群, 那么它将停止处理写命令, 并向客户端报告错误

搭建前的准备工作

一。安装redis

brew install redis

二。安装redis

brew install ruby

三。安装ruby的redis接口

sudo gem install redis

三。安装php的redis扩展
【安装redis之前:
需要切换到电脑的恢复模式,通过命令行将csrutil的状态值设置成disable
安装



**//安装re2c**
curl https://sourceforge.net/projects/re2c/files/0.16/re2c-0.16.tar.gz
 sudo cp /Users/summer/Downloads/re2c-1.0.1.tar.gz /usr/local/re2c-1.0.1.tar.gz
cd /usr/local
 ls
sudo tar -zxvf re2c-1.0.1.tar.gz
sudo ./configure
ls
mv re2c-1.0.1 re2c
sudo mv re2c-1.0.1 re2c
cd re2c
ls
sudo ./configure
sudo make
sudo make 


**//设置软连接**
installapp/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk/usr/include /usr/include 


**//安装autoconf**
brew  install autoconf


//安装php的igbinary扩展
sudo cp /Users/summer/Downloads/igbinary-2.0.8.tgz  /usr/local/igbinary.tgz
 5776  ls
 5777  sudo tar  zxvf igbinary.tgz
 5778  ls
 5779  sudo rm -rf igbinary-3.0.1.tgz
 5780  ls
 5781  mv igbinary-2.0.8 igbinary
 5782  sudo mv igbinary-2.0.8 igbinary
 5783  cd igbinary
 5784  ls
 5785  sudo phpize
 5786  sudo ./configure --with-php-config=/usr/bin/php-config
 5787  sudo make
 5788  sudo make install


**//安装好之后,找到php的安装目录,添加php的该扩展,然后重启apache**
mdfind -name "php.ini"
cd /private/etc
 ls
sudo vim php.ini
killall php-fpm
sudo  php-fpm
sudo apachectl -k restart

**//安装php的redis扩展**

cd phpredis
./configure --with-php-config=/usr/local/bin/php-config\n
sudo ./configure --with-php-config=/usr/local/bin/php-config\n
 phpize
 sudo phpize
 5708  sudo ./configure --with-php-config=/usr/local/bin/php-config
sudo make
sudo make install
**//安装好之后,找到php的安装目录,添加php的该扩展,然后重启apache**
mdfind -name "php.ini"			//在php.ini中添加:extension = redis.so
cd /private/etc
 ls
sudo vim php.ini
killall php-fpm
sudo  php-fpm
sudo apachectl -k restart
//查看phpinfo()
php -m|grep redis 	//可以看到:redis

四。在目录/usr/local/下创建文件夹redis-cluster,并在文件夹下创建6个以端口号命名的文件7000~7005

cd redis-cluster
mkdir 7000 7001 7002 7003 7004 7005

将redis-server、redis.conf文件分别复制到以上六个文件夹中一份

五、分别修改每个文件夹下面的redis.conf文件中的配置,修改文件时直接切换到root用户

sudo su -
port 7000     //设置每个redis.conf文件中的端口号【跟文件保持一致即可】
cluster-enabled yes			//选项用于开实例的集群模式
cluster-config-file nodes.conf  //选项则设定了保存节点配置文件的路径, 默认值为 nodes.conf【在这儿也可以设置成 nodes-7000.conf】
cluster-node-timeout 5000 //Redis集群节点超时时限
appendonly yes //打开aof持久化

实例会一直使用同一个 ID , 从而在集群中保持一个独一无二(unique)的名字。
每个节点都使用 ID 而不是 IP 或者端口号来记录其他节点, 因为 IP 地址和端口号都可能会改变, 而这个独一无二的标识符(identifier)则会在节点的整个生命周期中一直保持不变。
我们将这个标识符称为节点 ID

六。接下来使用以下命令启动集群服务

d 7000
redis-server redis.conf
cd ..
cd 7001
redis-server redis.conf
cd ..
cd 7002
redis-server redis.conf
cd ..cd 7003
redis-server redis.conf
cd ..
cd 7004
redis-server redis.conf
cd ..
cd 7005
redis-server redis.conf
cd ..

七。查看节点的启动情况:

ps aux|grep redis 查看当前redis进程

Redis(Mac)集群配置 Redis Cluster_第1张图片

节点全部启动后创建集群

进入下载的redis的配置文件,找到含有redis-cli的目录

cd  /usr/local/Cellar/redis/5.0.5/bin

/*
说明:
redis-cli --cluster create 创建集群命令
replicas 1 给每个主机分配一个从机,
后面其他参数都是redis服务的ip:port
*/
To create your cluster for Redis 5 with redis-cli simply type:

redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 \
127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 \
--cluster-replicas 1

Using redis-trib.rb for Redis 4 or 3 type:

./redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 \
127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005

Redis(Mac)集群配置 Redis Cluster_第2张图片
输入yes
Redis(Mac)集群配置 Redis Cluster_第3张图片
文字版操作结果

--cluster-replicas 1
>>> Performing hash slots allocation on 6 nodes...    #在6个节点上执行哈希槽分配
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 127.0.0.1:7004 to 127.0.0.1:7000
Adding replica 127.0.0.1:7005 to 127.0.0.1:7001
Adding replica 127.0.0.1:7003 to 127.0.0.1:7002
>>> Trying to optimize slaves allocation for anti-affinity					 #优化主从配置
[WARNING] Some slaves are in the same host as their master      #警告:有些从节点和他们的主节点是同一个端口
M: 505fcb4fb88f7a15a6ef4c665c855bbf593d0a3d 127.0.0.1:7000
   slots:[0-5460] (5461 slots) master
M: b505381c473b2e89a1d367b6278be952d0165e9d 127.0.0.1:7001
   slots:[5461-10922] (5462 slots) master
M: 818ff3f3c225e6ba548d5f213f4fad5dfa2ff097 127.0.0.1:7002
   slots:[10923-16383] (5461 slots) master
S: 5c23a92417f87fd1bebe3ef566f3c4d2cd4efc05 127.0.0.1:7003
   replicates 505fcb4fb88f7a15a6ef4c665c855bbf593d0a3d
S: 0d15bf159b8f28342ff0243e28b77938bdbeb690 127.0.0.1:7004
   replicates b505381c473b2e89a1d367b6278be952d0165e9d
S: c282c045bafcf16f72f930e1ee587ee9c0c8b842 127.0.0.1:7005
   replicates 818ff3f3c225e6ba548d5f213f4fad5dfa2ff097
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:7000)			#执行集群检查(使用节点127.0.0.1:7000)
M: 505fcb4fb88f7a15a6ef4c665c855bbf593d0a3d 127.0.0.1:7000
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
S: 0d15bf159b8f28342ff0243e28b77938bdbeb690 127.0.0.1:7004
   slots: (0 slots) slave
   replicates b505381c473b2e89a1d367b6278be952d0165e9d
S: c282c045bafcf16f72f930e1ee587ee9c0c8b842 127.0.0.1:7005
   slots: (0 slots) slave
   replicates 818ff3f3c225e6ba548d5f213f4fad5dfa2ff097
M: 818ff3f3c225e6ba548d5f213f4fad5dfa2ff097 127.0.0.1:7002
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
S: 5c23a92417f87fd1bebe3ef566f3c4d2cd4efc05 127.0.0.1:7003
   slots: (0 slots) slave
   replicates 505fcb4fb88f7a15a6ef4c665c855bbf593d0a3d
M: b505381c473b2e89a1d367b6278be952d0165e9d 127.0.0.1:7001
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
[OK] All nodes agree about slots configuration.     						#所有节点都同意插槽配置
>>> Check for open slots...															#检查是否有空位
>>> Check slots coverage...													    #检查槽覆盖
[OK] All 16384 slots covered.  													#有16384个可用的插槽提供服务说明搭建成功

看到上图的效果说明集群已经配置好了!!!

上面的集群配置是不需要密码验证就可以通过的,
下面说一下如何配置密码验证
修改六个文件夹下面的redis.conf配置文件,集群密码配置必须在集群配置好之后配置,否则集群会验证通不过

masterauth 619868  
requirepass 619868 

Redis(Mac)集群配置 Redis Cluster_第4张图片

通过客户端连接集群

进入集群客户端 redis-cli -h 任意主机host -p 任意主机port -c,
-c表示以集群方式连接redis

redis-cli -c -p 7001

cluster info 查询集群状态信息

cluster_state: ok状态表示集群可以正常接受查询请求。fail 状态表示,至少有一个哈希槽没有被绑定(说明有哈希槽没有被绑定到任意一个节点),或者在错误的状态(节点可以提供服务但是带有FAIL 标记),或者该节点无法联系到多数master节点。.
cluster_slots_assigned: 已分配到集群节点的哈希槽数量(不是没有被绑定的数量)。16384个哈希槽全部被分配到集群节点是集群正常运行的必要条件.
cluster_slots_ok: 哈希槽状态不是FAIL 和 PFAIL 的数量.
cluster_slots_pfail: 哈希槽状态是 PFAIL的数量。只要哈希槽状态没有被升级到FAIL状态,这些哈希槽仍然可以被正常处理。PFAIL状态表示我们当前不能和节点进行交互,但这种状态只是临时的错误状态。
cluster_slots_fail: 哈希槽状态是FAIL的数量。如果值不是0,那么集群节点将无法提供查询服务,除非cluster-require-full-coverage被设置为no .
cluster_known_nodes: 集群中节点数量,包括处于握手状态还没有成为集群正式成员的节点.
cluster_size: 至少包含一个哈希槽且能够提供服务的master节点数量.
cluster_current_epoch: 集群本地Current Epoch变量的值。这个值在节点故障转移过程时有用,它总是递增和唯一的。
cluster_my_epoch: 当前正在使用的节点的Config Epoch值. 这个是关联在本节点的版本值.
cluster_stats_messages_sent: 通过node-to-node二进制总线发送的消息数量.
cluster_stats_messages_received: 通过node-to-node二进制总线接收的消息数量.

cluster nodes 查询集群结点信息,这里有一个坑,后面会介绍

第一个参数:节点ID
第二个参数:IP:PORT@TCP 这里一个坑,jedis-2.9.0之前的版本解析@出错
第三个参数:标志(Master,Slave,Myself,Fail…)
第四个参数:如果是从机则是主机的节点ID
最后两个参数:连接的状态和槽的位置。

127.0.0.1:7001> 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:2
cluster_stats_messages_ping_sent:19504
cluster_stats_messages_pong_sent:19403
cluster_stats_messages_meet_sent:3
cluster_stats_messages_sent:38910
cluster_stats_messages_ping_received:19401
cluster_stats_messages_pong_received:19507
cluster_stats_messages_meet_received:2
cluster_stats_messages_received:38910
127.0.0.1:7001> cluster nodes
0d15bf159b8f28342ff0243e28b77938bdbeb690 127.0.0.1:7004@17004 slave b505381c473b2e89a1d367b6278be952d0165e9d 0 1564715878152 5 connected
c282c045bafcf16f72f930e1ee587ee9c0c8b842 127.0.0.1:7005@17005 slave 818ff3f3c225e6ba548d5f213f4fad5dfa2ff097 0 1564715879174 6 connected
5c23a92417f87fd1bebe3ef566f3c4d2cd4efc05 127.0.0.1:7003@17003 slave 505fcb4fb88f7a15a6ef4c665c855bbf593d0a3d 0 1564715879583 4 connected
505fcb4fb88f7a15a6ef4c665c855bbf593d0a3d 127.0.0.1:7000@17000 master - 0 1564715877534 1 connected 0-5460
818ff3f3c225e6ba548d5f213f4fad5dfa2ff097 127.0.0.1:7002@17002 master - 0 1564715879683 3 connected 10923-16383
b505381c473b2e89a1d367b6278be952d0165e9d 127.0.0.1:7001@17001 myself,master - 0 1564715878000 2 connected 5461-10922
127.0.0.1:7001>

可能存在的问题

Sorry, the cluster configuration file nodes.conf is already used by a different Redis Cluster node. Please make sure that different nodes use different cluster configuration files.

说的很明确,修改cluster-config-file nodes.conf 文件避免重名,或者删除该文件重新创建集群。

配置文件的位置
在这里插入图片描述

cd /usr/local/var/db/redis
ls

appendonly.aof #redis持久化之AOF报错的位置
dump.rdb #redis的dump.rdb备份数据
nodes-7000.conf #保存节点配置文件的路径
nodes-7001.conf
nodes-7002.conf
nodes-7003.conf
nodes-7004.conf
nodes-7005.conf

集群节点操作

对集群进行重新分片

redis-cli --cluster reshard 127.0.0.1:7000  
How many slots do you want to move (from 1 to 16384)? 1000//输入1000个进行移动
//输入目标id
505fcb4fb88f7a15a6ef4c665c855bbf593d0a3d

在重新分片结束时,令测试群集的运行状况:

redis-cli --cluster check 127.0.0.1:7000

【展示出来的结果】

127.0.0.1:7000 (505fcb4f...) -> 2 keys | 6461 slots | 1 slaves.
127.0.0.1:7002 (818ff3f3...) -> 0 keys | 4962 slots | 1 slaves.
127.0.0.1:7001 (b505381c...) -> 0 keys | 4961 slots | 1 slaves.
[OK] 2 keys in 3 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 127.0.0.1:7000)
M: 505fcb4fb88f7a15a6ef4c665c855bbf593d0a3d 127.0.0.1:7000
   slots:[0-5961],[10923-11421] (6461 slots) master
   1 additional replica(s)
S: 0d15bf159b8f28342ff0243e28b77938bdbeb690 127.0.0.1:7004
   slots: (0 slots) slave
   replicates b505381c473b2e89a1d367b6278be952d0165e9d
S: c282c045bafcf16f72f930e1ee587ee9c0c8b842 127.0.0.1:7005
   slots: (0 slots) slave
   replicates 818ff3f3c225e6ba548d5f213f4fad5dfa2ff097
M: 818ff3f3c225e6ba548d5f213f4fad5dfa2ff097 127.0.0.1:7002
   slots:[11422-16383] (4962 slots) master
   1 additional replica(s)
S: 5c23a92417f87fd1bebe3ef566f3c4d2cd4efc05 127.0.0.1:7003
   slots: (0 slots) slave
   replicates 505fcb4fb88f7a15a6ef4c665c855bbf593d0a3d
M: b505381c473b2e89a1d367b6278be952d0165e9d 127.0.0.1:7001
   slots:[5962-10922] (4961 slots) master
   1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

测试故障转移

 redis-cli -p 7000 cluster nodes | grep master 
 //结果
 818ff3f3c225e6ba548d5f213f4fad5dfa2ff097 127.0.0.1:7002@17002 master - 0 1564729323000 3 connected 11422-16383
505fcb4fb88f7a15a6ef4c665c855bbf593d0a3d 127.0.0.1:7000@17000 myself,master - 0 1564729321000 7 connected 0-5961 10923-11421
b505381c473b2e89a1d367b6278be952d0165e9d 127.0.0.1:7001@17001 master - 0 1564729323596 2 connected 5962-10922

7000,7001和7002都是主节点。让我们用DEBUG SEGFAULT命令崩溃节点7002 :

redis-cli -p 7002 debug segfault
Error: Server closed the connection

查看现在的节点状态,7005变成了主节点:

 redis-cli -p 7000 cluster nodes
0d15bf159b8f28342ff0243e28b77938bdbeb690 127.0.0.1:7004@17004 slave b505381c473b2e89a1d367b6278be952d0165e9d 0 1564730060532 5 connected
c282c045bafcf16f72f930e1ee587ee9c0c8b842 127.0.0.1:7005@17005 master - 0 1564730060841 8 connected 11422-16383
818ff3f3c225e6ba548d5f213f4fad5dfa2ff097 127.0.0.1:7002@17002 master,fail - 1564730048663 1564730047000 3 disconnected
505fcb4fb88f7a15a6ef4c665c855bbf593d0a3d 127.0.0.1:7000@17000 myself,master - 0 1564730060000 7 connected 0-5961 10923-11421
5c23a92417f87fd1bebe3ef566f3c4d2cd4efc05 127.0.0.1:7003@17003 slave 505fcb4fb88f7a15a6ef4c665c855bbf593d0a3d 0 1564730059285 7 connected
b505381c473b2e89a1d367b6278be952d0165e9d 127.0.0.1:7001@17001 master - 0 1564730060323 2 connected 5962-10922

添加节点

cd /usr/local/redis-cluster
sudo mkdir 7006
sudo cp /7001/redis.conf /7006/redis.conf
sudo cp /7001/redis-server  /7006/redis-server
sudo vim /7006/redis.conf  		//修改port和cluster-config-file
cd 7006
redis-server redis.conf           //启动redis

利用redis-cli加入
add-node命令将新节点的地址指定为第一个参数,
并将集群中随机存在节点的地址指定为第二个参数。

redis-cli --cluster add-node 127.0.0.1:7006 127.0.0.1:7000

在加入节点的时候进行的操作

>>> Adding node 127.0.0.1:7006 to cluster 127.0.0.1:7000
>>> Performing Cluster Check (using node 127.0.0.1:7000)	#执行集群检查(使用节点127.0.0.1:7000)
M: 505fcb4fb88f7a15a6ef4c665c855bbf593d0a3d 127.0.0.1:7000
   slots:[0-5961],[10923-11421] (6461 slots) master
   1 additional replica(s)
S: 0d15bf159b8f28342ff0243e28b77938bdbeb690 127.0.0.1:7004
   slots: (0 slots) slave
   replicates b505381c473b2e89a1d367b6278be952d0165e9d
M: c282c045bafcf16f72f930e1ee587ee9c0c8b842 127.0.0.1:7005
   slots:[11422-16383] (4962 slots) master
   1 additional replica(s)
S: 818ff3f3c225e6ba548d5f213f4fad5dfa2ff097 127.0.0.1:7002
   slots: (0 slots) slave
   replicates c282c045bafcf16f72f930e1ee587ee9c0c8b842
S: 5c23a92417f87fd1bebe3ef566f3c4d2cd4efc05 127.0.0.1:7003
   slots: (0 slots) slave
   replicates 505fcb4fb88f7a15a6ef4c665c855bbf593d0a3d
M: b505381c473b2e89a1d367b6278be952d0165e9d 127.0.0.1:7001
   slots:[5962-10922] (4961 slots) master
   1 additional replica(s)
[OK] All nodes agree about slots configuration.		#所有节点都同意插槽配置。
>>> Check for open slots...										#检查空位
>>> Check slots coverage...									#检查槽覆盖
[OK] All 16384 slots covered.									#涵盖所有16384个插槽
>>> Send CLUSTER MEET to node 127.0.0.1:7006 to make it join the cluster.	#将CLUSTER MEET发送到节点127.0.0.1:7006,使其加入集群
[OK] New node added correctly.							#添加新节点完成

查看是否加入节点成功

redis-cli -p 7000 cluster nodes

0d15bf159b8f28342ff0243e28b77938bdbeb690 127.0.0.1:7004@17004 slave b505381c473b2e89a1d367b6278be952d0165e9d 0 1564731878892 5 connected
c282c045bafcf16f72f930e1ee587ee9c0c8b842 127.0.0.1:7005@17005 master - 0 1564731879414 8 connected 11422-16383
818ff3f3c225e6ba548d5f213f4fad5dfa2ff097 127.0.0.1:7002@17002 slave c282c045bafcf16f72f930e1ee587ee9c0c8b842 0 1564731879000 8 connected
12f3394993d66214980aed407518608f43db6a52 127.0.0.1:7006@17006 master - 0 1564731880448 0 connected
505fcb4fb88f7a15a6ef4c665c855bbf593d0a3d 127.0.0.1:7000@17000 myself,master - 0 1564731878000 7 connected 0-5961 10923-11421
5c23a92417f87fd1bebe3ef566f3c4d2cd4efc05 127.0.0.1:7003@17003 slave 505fcb4fb88f7a15a6ef4c665c855bbf593d0a3d 0 1564731878581 7 connected
b505381c473b2e89a1d367b6278be952d0165e9d 127.0.0.1:7001@17001 master - 0 1564731879930 2 connected 5962-10922

删除节点

redis-cli --cluster del-node 127.0.0.1:7006 12f3394993d66214980aed407518608f43db6a52

>>> Removing node 12f3394993d66214980aed407518608f43db6a52 from cluster 127.0.0.1:7006
>>> Sending CLUSTER FORGET messages to the cluster... 		#向集群发送删除消息。
>>> SHUTDOWN the node.															#关闭节点

你可能感兴趣的:(redis)