首页 > 数据库 >Redis Cluster集群搭建

Redis Cluster集群搭建

时间:2023-06-08 10:05:59浏览次数:46  
标签:node cluster -- Redis redis 192.168 Cluster 集群 节点

redis cluster架构 一个 Redis Cluster由多个 Redis 节点构成,不同节点组服务的数据没有交集,也就是每个一节点组对应数据 sharding 的一个分片. 节点组内部分为主备两类节点,对应 master 和 slave 节点.两者数据实时一致,通过异步化的主备复制机制来保证. 一个节点组有且只有一个 master 节点,同时可以有 0 到多个 slave 节点,在这个节点组中只有 master 节点对用户提供写服务,读服务可以由 master 或者 slave 提供.如下图,包含三个 master 节点以及三个 master 对应的 slave 节点,一般一组集群至少要 6 个节点才能保证完整的高可用. 其中三个 master 会分配不同的 slot(表示数据分片区间),当 master 出现故障时,slave 会自动选举成为 master 顶替主节点继续提供服务.

主机规划 192.168.80.236:6301 主 192.168.80.236:6302 从 192.168.80.86:6303 主 192.168.80.86:6304 从 192.168.80.7:6305 主 192.168.80.7:6306 从

各个节点安装

wget http://download.redis.io/releases/redis-5.0.5.tar.gz
解压
tar -zxvf redis-5.0.5.tar.gz

安装所需环境和工具并编译

yum -y install wget vim tcl gcc make

cd redis-5.0.5/
make install PREFIX=/home/redis-cluster/redis

分别创建6个节点的目录

mkdir  -p  /home/redis-cluster/630{1..6}/conf
mkdir -p   /home/redis-cluster/630{1..6}/log
mkdir -p   /home/redis-cluster/630{1..6}/run
mkdir -p   /home/redis-cluster/630{1..6}/working

复制redis.conf 到/home/redis-cluster/6301/conf/redis-6301.conf

修改配置

vim redis-6301.conf
bind 0.0.0.0
protected-mode no
port 6301
daemonize yes
pidfile "/home/redis-cluster/6301/run/redis_6301.pid"
logfile "/home/redis-cluster/6301/log/redis_6301.log"    
dir "/home/redis-cluster/6301/working"     #数据存储目录,目录要提前创建好
masterauth  填写密码       #redis从去连接redis主使用的密码
requirepass 填写密码       #redis节点密码  建议都设置成一样的
appendonly yes      
cluster-enabled yes   #开启集群
cluster-config-file nodes-6301.conf  #集群节点配置文件,这个文件是不能手动编辑的。确保每一个集群节点的配置文件不同
cluster-node-timeout 15000   #集群节点的超时时间,单位:ms,超时后集群会认为该节点失败

复制配置文件给其他五个, 修改文件名和对于端口号即可

sudo sed -i 's/6301/其他redis端口/g' redis-其他redis端口.conf

分别启动六个服务

/home/redis-cluster/redis/bin/redis-server /home/redis-cluster/630{1..6}/conf/redis-630{1..6}.conf

查看六个服务都启动完成之后,创建集群

./redis-cli --cluster  create    192.168.80.236:6301 192.168.80.236:6302 192.168.80.86:6303  192.168.80.86:6304  192.168.80.7:6305 192.168.80.7:6306  -a 密码  --cluster-replicas 

--cluster-replicas 1:表示采用最简单的方式配置集群,即每个master配1个slave,6个节点
就形成了3主3从

查看集群状态信息

cluster info
cluster nodes

集群操作

删除主节点 ​ 删除主节点稍微麻烦一点,因为主节点分配了 slots 槽,所以必须先把 slots 槽放到其他可用节点中去, 然后再进行移除节点操作才行,不然会出现数据丢失问题。

把数据移动到其它主节点中去,执行重新分片命令。

./redis-cli -a 密码 --cluster reshard 192.168.80.7:6305

192.168.80.7:6305 分配了 5461 个槽,这里输入 5461 即可。 回车以后,出现 what is the receiving node ID? 意思是你想移动到那个节点上。 我想移动到 6303 的节点上,那么此处输入 6303 节点的 ID。 回车以后,需要填写数据源节点 ID,就是 6305节点的 ID,因为我们要把 6305节点的数据移动到其他 节点去。 回车以后,还可以继续选择其他源节点,但是我这里只想把 6305 节点分到其它地方就行,此处输入 done 即可,否则输入其它节点的 ID,最后输入 done。

接下来,删除主节点, 从节点直接使用以下命令即可删除。

redis-cli --cluster del-node host:port node_id

--host:port:表示的是要删除的那个节点的 IP 和端口
--node_id:表示的是删除的那个节点的节点 ID

例子

./redis-cli -a 密码 --cluster del-node 192.168.80.7:6305 2c79f6d5a0dc4d9908a5a5f7525566fe73a7f145

添加主节点 首先准备一个新的节点,添加配置问件,启动新节点。 使用以下命令添加主节点

redis-cli --cluster add-node new_host:new_port existing_host:existing_port --cluster-master-id node_id

--new_host:new_port:为要新添加的主节点 IP 和端口
--existing_host:existing_port:表示的是环境中已存在的最后一个主节点的 IP 和端口,这个可以通过 查看节点信息得知
--–cluster-master-id:表示的是最后一个主节点的节点 ID,表示的是新添加的主节点要在这个节点 后面

例子

./redis-cli -a 密码 --cluster add-node 192.168.80.7:6305 192.168.80.86:6303 --cluster-master-id e7becd5419236a33dc1d413076cbc95d2a412b81

再次查看集群信息 会发现 6305 端口对应的节点已经加到集群中,是主节点,但是没有从节点,也没有分配槽数。

重新分片 添加完新节点后,需要对新添加的主节点进行 hash 槽重新分配,这样该主节点才能存储数据,Redis 共有16384个槽。

redis-cli --cluster reshard host:port --cluster-from node_id --cluster-to node_id --cluster-slots <args> --cluster-yes

--host:port:集群中随便一个节点的 IP : PORT 连接集群用的
--cluster-from node_id:表示的是从哪个节点取出槽,节点 ID
--cluster-to node_id:表示的是取出的槽添加给哪个节点,也就是新添加的那个主节点 ID
-–cluster-slots 5460:表示的是给新主节点分配多少,此处 5461表示是分配5461槽数,然后需要输入 yes 重新进行槽分配。
-–cluster-yes:不回显槽分配信息直接移动。

例子:

./redis-cli -a M密码 --cluster reshard 192.168.80.7:6305 --cluster-from e7becd5419236a33dc1d413076cbc95d2a412b81 --cluster-to 4d6c30be1acc7ffb9b3a9a9b99be4c1d7b69f38a  --cluster-slots 5461

添加从节点

redis-cli --cluster add-node new_host:new_port existing_host:existing_port --cluster-slave --cluster-master-id node_id

--new_host:new_port:表示的是要添加的那个从节点的 IP 和端口
--existing_host:existing_port:表示的是要给哪个主节点添加从节点
-–cluster-slave:表示的是要添加从节点
-–cluster-master-id node_id:表示要给哪个主节点添加从节点,该主节点节点 ID

例子

./redis-cli -a 密码 --cluster add-node 192.168.80.12:6306  192.168.80.12:6305 --cluster-slave --cluster-master-id 2c79f6d5a0dc4d9908a5a5f7525566fe73a7f145

标签:node,cluster,--,Redis,redis,192.168,Cluster,集群,节点
From: https://blog.51cto.com/u_15204812/6437585

相关文章

  • redis主从、哨兵、cluster
    在redis集群中,从节点一般用于备份操作,主节点挂了,从节点顶上去,读写操作一般都是主读主写。主从架构用处:用于数据备份操作,主节点挂了之后可以有备份节点顶上去当主节点。缺点:主节点挂了需要手动切换从节点为主节点......
  • Redis五大数据类型以及常用命令
    Redis五大数据类型以及常用命令redis常用五大数据类型String(字符串)、List(列表)、Hash(哈希表)、Set(无序集合)、Zset(有序集合)redis数据库常见使用命令redis-server : redis服务器启动命令redis-cli : 客户端,操作入口select【dbid】 : 切换数据库dbsize : 查看当前数据库k......
  • 2023-06-07:Redis 持久化方式有哪些?以及有什么区别?
    2023-06-07:Redis持久化方式有哪些?以及有什么区别?答案2023-06-07:Redis提供了两种持久化机制:RDB和AOF。RDBRDB持久化是将Redis当前进程中的数据生成快照并保存到硬盘的过程。快照指的是Redis在某一时刻的内存状态的记录,类似于拍照一样把数据保存下来,因此也被称为Redis的数据库快照(Re......
  • 2023-06-07:Redis 持久化方式有哪些?以及有什么区别?
    2023-06-07:Redis持久化方式有哪些?以及有什么区别?答案2023-06-07:Redis提供了两种持久化机制:RDB和AOF。RDBRDB持久化是将Redis当前进程中的数据生成快照并保存到硬盘的过程。快照指的是Redis在某一时刻的内存状态的记录,类似于拍照一样把数据保存下来,因此也被称为Redis的数据库快照(Re......
  • Redis 消息的发布与订阅
    1.Redis发布订阅1.1.Redis发布订阅的简介Redis发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。Redis客户端可以订阅任意数量的频道。1.2.Redis发布订阅示意图订阅:消息订阅者(client2、client5和client1)订阅频道channel1发布......
  • 第3天学习Docker-Docker部署常见应用(MySQL、Tomcat、Nginx、Redis、Centos)
    前提须知:(1)搜索镜像命令格式:dockersearch镜像名(2)设置Docker镜像加速器详见文章:Docker设置ustc的镜像源(镜像加速器)1、部署MySQL拉取镜像(这里拉取mysql5.7版本)[root@localhost~]#dockerpullmysql:5.7创建容器(默认运行)[root@localhost~]#dockerrun-di--name=my_mysql-p330......
  • java面试(30)- redis
    1:Redis支持的数据类型a)字符串keyvalb)hashkeynamefiledc)listkeyv1v2v3v3d)setkeyv1v2v3d)zsetkeysv2:Redis支持的事务3:为什么redis快 4:redis的优缺点1、优点a)数据类型丰富b)支持数据......
  • redis-cli连接并管理redis集群
    某些场景下,redis集群以内网ip发现节点并提供服务,所以只能在服务器环境下以内网ip访问,此时redis-cli无疑是最可靠的工具。而各种gui工具都傻眼了(当然webui类工具除外)。redis-clinodejs版redis-clinodejs版可以脱离redis-server独立安装。安装yuminstallepel-releas......
  • 通过redis学网络(1)-用go基于epoll实现最简单网络通信框架
    本系列主要是为了对redis的网络模型进行学习,我会用golang实现一个reactor网络模型,并实现对redis协议的解析。系列源码已经上传githubhttps://github.com/HobbyBear/tinyredis/tree/chapter1redis的网络模型是基于epoll实现的,所以这一节让我们先基于epoll,实现一个最简单的服......
  • Redis实现限流的三种方式
    一、固定窗口所谓固定窗口限流即时间窗口的起始和结束时间是固定的,在固定时间段内允许要求的请求数量访问,超过则拒绝;当固定时间段结束后,再重新开始下一个时间段进行计数。我们可以根据当前的时间,以分钟为时间段,每分钟都生成一个key,用来inc,当达到请求数量就返回一些友好信息。......