redis-Cluster-环境搭建

15 篇文章 0 订阅
12 篇文章 0 订阅

官方cluster分区

Redis3.0之后,Redis官方提供了完整的集群解决方案。
方案采用去中心化的方式,包括:sharding(分区)、replication(复制)、failover(故障转移)。
称为RedisCluster。
Redis5.0前采用redis-trib进行集群的创建和管理,需要ruby支持
Redis5.0可以直接使用Redis-cli进行集群的创建和管理
在这里插入图片描述
去中心化
RedisCluster由多个Redis节点组构成,是一个P2P无中心节点的集群架构,依靠Gossip协议传播的集
群。

Gossip协议
Gossip协议是一个通信协议,一种传播消息的方式。
起源于:病毒传播
Gossip协议基本思想就是:
一个节点周期性(每秒)随机选择一些节点,并把信息传递给这些节点。
这些收到信息的节点接下来会做同样的事情,即把这些信息传递给其他一些随机选择的节点
信息会周期性的传递给N个目标节点。这个N被称为fanout(扇出)
gossip协议包含多种消息,包括meet、ping、pong、fail、publish等等
在这里插入图片描述
通过gossip协议,cluster可以提供集群间状态同步更新、选举自助failover等重要的集群功能。

slot

redis-cluster把所有的物理节点映射到[0-16383]个slot上,基本上采用平均分配和连续分配的方式。
比如上图中有5个主节点,这样在RedisCluster创建时,slot槽可分配:

RedisCluster的优势

高性能
Redis Cluster 的性能与单节点部署是同级别的。
多主节点、负载均衡、读写分离
高可用
Redis Cluster 支持标准的 主从复制配置来保障高可用和高可靠。
failover
Redis Cluster 也实现了一个类似 Raft 的共识方式,来保障整个集群的可用性。
易扩展
向 Redis Cluster 中添加新节点,或者移除节点,都是透明的,不需要停机。
水平、垂直方向都非常容易扩展。
数据分区,海量数据,数据存储
原生
部署 Redis Cluster 不需要其他的代理或者工具,而且 Redis Cluster 和单机 Redis 几乎完全兼
容。

集群搭建

开放端口

# (--permanent永久生效,没有此参数重启后失效)
firewall-cmd --zone=public --add-port=6379/tcp --permanent   
firewall-cmd --zone=public --add-port=26379/tcp --permanent   
# 重新载入
firewall-cmd --reload

或者关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service

规则

192.168.181.128-6379:Mater1
192.168.181.129-6379:Slaver1

192.168.181.130-6379:Mater2
192.168.181.131-6379:Slaver2

192.168.181.134-6379:Mater3
192.168.181.135-6379:Slaver3

下面安装同上,但创建集群时不加入,手动使用命令加入

192.168.181.136-6379:Mater4
192.168.181.137-6379:Slaver4

下载 解压

/usr/local/redis
wget https://download.redis.io/releases/redis-5.0.9.tar.gz
tar -zxvf redis-5.0.9.tar.gz
cd redis-5.0.9

创建目录

mkdir /var/redis-cluster
编译安装
make install PREFIX=/var/redis-cluster
cp redis.conf /var/redis-cluster/bin
cd /var/redis-cluster/bin/
vim redis.conf

在这里插入图片描述
在这里插入图片描述

  • 修改
# 默认绑定的是回环地址,默认不能被其他机器访问
# bind 127.0.0.1`daemonize``no`改为`yes` 后台运行
daemonize yes

# 是否开启保护模式,由yes该为no
protected-mode no
# 打开
cluster-enable yes

全部启动

 ./redis-server redis.conf
 ps -ef | grep redis

在这里插入图片描述

创建Redis集群(创建时Redis里不要有数据)

cluster-replicas : 1 表示1从机 前三个为主

192.168.181.128-6379:Mater1
192.168.181.129-6379:Slaver1

192.168.181.130-6379:Mater2
192.168.181.131-6379:Slaver2

192.168.181.134-6379:Mater3
192.168.181.135-6379:Slaver3
进入任意一个bin上当./redis-cli 来创建

./redis-cli --cluster create 192.168.181.128:6379 192.168.181.130:6379 192.168.181.134:6379 192.168.181.129:6379 192.168.181.131:6379 192.168.181.135:6379 --cluster-replicas 1

Can I set the above configuration? (type ‘yes’ to accept): 输入yes

./redis-cli --cluster create 192.168.181.128:6379 192.168.181.130:6379 192.168.181.134:6379 192.168.181.129:6379 192.168.181.131:6379 192.168.181.135: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 192.168.181.131:6379 to 192.168.181.128:6379
Adding replica 192.168.181.135:6379 to 192.168.181.130:6379
Adding replica 192.168.181.129:6379 to 192.168.181.134:6379
M: 080782aa3032a569f6006e40ecbfb88ab8f39a08 192.168.181.128:6379
slots:[0-5460] (5461 slots) master
M: 0a0308f93912de51ae91a1000953dc1434cf0729 192.168.181.130:6379
slots:[5461-10922] (5462 slots) master
M: f42985b207fbb0764551a460dccca92608176265 192.168.181.134:6379
slots:[10923-16383] (5461 slots) master
S: 370bf317f89f37aead51ca52ad3c493e321b151e 192.168.181.129:6379
replicates f42985b207fbb0764551a460dccca92608176265
S: 7792153f7b8b3030d2bb81178a575fe585fdb175 192.168.181.131:6379
replicates 080782aa3032a569f6006e40ecbfb88ab8f39a08
S: ae74392a2636351b2332c4c457cb5eff83c578b7 192.168.181.135:6379
replicates 0a0308f93912de51ae91a1000953dc1434cf0729
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 192.168.181.128:6379)
M: 080782aa3032a569f6006e40ecbfb88ab8f39a08 192.168.181.128:6379
slots:[0-5460] (5461 slots) master
1 additional replica(s)
S: ae74392a2636351b2332c4c457cb5eff83c578b7 192.168.181.135:6379
slots: (0 slots) slave
replicates 0a0308f93912de51ae91a1000953dc1434cf0729
M: f42985b207fbb0764551a460dccca92608176265 192.168.181.134:6379
slots:[10923-16383] (5461 slots) master
1 additional replica(s)
M: 0a0308f93912de51ae91a1000953dc1434cf0729 192.168.181.130:6379
slots:[5461-10922] (5462 slots) master
1 additional replica(s)
S: 370bf317f89f37aead51ca52ad3c493e321b151e 192.168.181.129:6379
slots: (0 slots) slave
replicates f42985b207fbb0764551a460dccca92608176265
S: 7792153f7b8b3030d2bb81178a575fe585fdb175 192.168.181.131:6379
slots: (0 slots) slave
replicates 080782aa3032a569f6006e40ecbfb88ab8f39a08
[OK] All nodes agree about slots configuration.

Check for open slots…
Check slots coverage…
[OK] All 16384 slots covered.
[root@liunux128 bin]#
在这里插入图片描述
在这里插入图片描述

查看nodes文件

在这里插入图片描述
在这里插入图片描述

连接 命令客户端连接集群

./redis-cli -h 192.168.181.128 -p 6379 -c

注意:-c 表示是以redis集群方式进行连接

查看集群的命令

查看集群状态
cluster info

在这里插入图片描述

查看集群中的节点:

cluster nodes
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

扩容

启动136节点

在这里插入图片描述
只有他自己

添加新节点

## 添加主节点
./redis-cli --cluster add-node 192.168.181.136:6379 192.168.181.128:6379

第一次节点为新增的节点 第二个节点为集群中的主节点
在这里插入图片描述

在这里插入图片描述
新节点136现在已经连接上了集群, 成为集群的一份子, 并且可以对客户端的命令请求进行转向了, 但是和其他主节点相比, 新节点还有两点区别:

  • 新节点没有包含任何数据, 因为它没有包含任何哈希槽.
  • 尽管新节点没有包含任何哈希槽, 但它仍然是一个主节点, 所以在集群需要将某个从节点升级为新的主节点时, 这个新节点不会被选中。

将集群中的某些哈希桶移动到新节点里面, 新节点就会成为真正的主节点了

hash槽重新分配(数据迁移)

添加完主节点需要对主节点进行hash槽分配,这样该主节才可以存储数据。

./redis-cli --cluster reshard 192.168.181.136:6379

在这里插入图片描述
因为我们增加136为主节点后,一共存在四个主节点,为了平均分配我们需要给136分配16384除以4等于4096个节点,所以我们输入4096,按enter继续
4096个slot给那个node节点
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
输入yes
在这里插入图片描述

添加一个从节点137

启动查看只有137自己
在这里插入图片描述
将137将为136的从节点
从cluster中查看136的id
在这里插入图片描述
7579075aa56246de6c32d3918807c25165c2b01f

命令

./redis-cli --cluster add-node 新节点的ip和端口 旧节点ip和端口 --cluster-slave –
cluster-master-id 主节点id

./redis-cli --cluster add-node 192.168.181.137:6379 192.168.181.136:6379 --cluster-slave --cluster-master-id 7579075aa56246de6c32d3918807c25165c2b01f

在这里插入图片描述
在这里插入图片描述

注意:如果原来该结点在集群中的配置信息已经生成到cluster-config-file指定的配置文件中(如果
cluster-config-file没有指定则默认为nodes.conf),这时可能会报错:

[ERR] Node XXXXXX is not empty. Either the node already knows other nodes (check
with CLUSTER NODES) or contains some key in database 0

解决方法是删除生成的配置文件nodes.conf,删除后再执行./redis-cli --cluster add-node 指令

缩容
  • 命令格式
    /redis-cli --cluster del-node ip:prot nodeId
    第一个参数是任意一个节点的地址,第二个节点是你想要移除的节点地址。

删除已经占有hash槽的结点会失败,报错如下:

[ERR] Node xxx:6379 is not empty! Reshard data away and try again.
需要将该结点占用的hash槽分配出去

使用同样的方法移除主节点,不过在移除主节点前,需要确保这个主节点是空的. 如果不是空的,需要将这节点的数据重新分片到其他主节点上.

删除从节点137

./redis-cli --cluster del-node 192.168.181.137:6379 057d6ede56a81d063997446dd74c478be43c648f

删除成功
在这里插入图片描述
在这里插入图片描述
从137主机上查看redis已经关掉了,没有进程了
在这里插入图片描述

删除主节点 136

在这里插入图片描述

在这里插入图片描述

  • 先把136上的slots分配到其他主节点上
./redis-cli --cluster  reshard 192.168.181.136:6379
./redis-cli --cluster del-node 192.168.181.136:6379 7579075aa56246de6c32d3918807c25165c2b01f
  • reshard
    可能会多次
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • 下面删除
    在这里插入图片描述
./redis-cli --cluster del-node 192.168.181.136:6379  7579075aa56246de6c32d3918807c25165c2b01f

在这里插入图片描述
集群中已经没有136
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值