手动构建redis集群
1、准备节点
-- 主节点 --- redis-7000.conf redis-7100.conf redis-7200.conf-- 从节点 --- redis-7001.conf redis-7101.conf redis-7201.conf
Redis集群一般有多个节点组成,节点数量至少为6个才能保证组成完整的高可用集群;
2、修改配置
$ vim redis-7000.conf daemonize yes ## 开启守护进程 port 7000 # 节点端口 logfile "/soft/redis/cluster/7000/redis.log" # 指定日志输入位置 cluster-enabled yes # 开启集群模式 cluster-node-timeout 15000 # 节点超时时间,单位毫秒 cluster-config-file "nodes-7000.conf" # 集群内部配置文件【第一次启动时如果没有该文件,则会自动创建】
其他节点配置和单机模式一致即可,配置文件命名规则:redis-{prot}.conf,准备好后启动所有节点;
-- 主节点 --- redis-server /soft/redis/cluster/redis-7000.conf & redis-server /soft/redis/cluster/redis-7100.conf & redis-server /soft/redis/cluster/redis-7200.conf & -- 从节点 --- redis-server /soft/redis/cluster/redis-7001.conf & redis-server /soft/redis/cluster/redis-7101.conf & redis-server /soft/redis/cluster/redis-7201.conf &
检查当前节点日志是否正确,内容如下:
$ cat /cluster/redis-7000.log 77893:M 16 Apr 00:38:38.924 * Increased maximum number of open files to 10032 (it was originally set to 1024). 77893:M 16 Apr 00:38:38.925 * No cluster configuration found, I'm 0c0bea9746cfe04dfcbb6ec1db35be5756dd7924' ... 77893:M 16 Apr 00:38:38.935 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128. 77893:M 16 Apr 00:38:38.935 # Server started, Redis version 3.2.0 ... 77893:M 16 Apr 00:38:38.935 * The server is now ready to accept connections on port 7000
节点首次启动后生成集群配置文件,内容为:
-- 通过查看日志方式 -- $ cat nodes-7000.conf 0c0bea9746cfe04dfcbb6ec1db35be5756dd7924 :0 myself,master - 0 0 0 connected vars currentEpoch 0 lastVoteEpoch 0
文件内存记录了集群初始状态,这里最重要的是节点ID【这是一个40位16进制字符串
该节点ID只创建一次【不同于运行ID】,节点重启时会加载该配置文件进行重用;
-- 通过命令交互形式回显 -- [root@test cluster]# redis-cli -p 7000 127.0.0.1:7000> cluster nodes 0c0bea9746cfe04dfcbb6ec1db35be5756dd7924 :7000 myself,master - 0 0 0 connected
3、节点握手
节点握手是指一批运行在集群模式下的节点通过Gossip协议彼此通信,以达到感知对方的过程; 节点握手是建立集群通信的第一步,由客户端发起命令:cluster meet {IP} {port}
步骤如下:
1. 节点7000 发送meet消息给 节点70012. 节点7001 接受到meet消息后,保存节点7000的信息并回复pong消息3. 之后,节点7000 和 7001 彼此定期通过ping/pong消息进行正常的节点通信;-- 发送节点握手指令 -- 127.0.0.1:7000> cluster meet 127.0.0.1 7001 127.0.0.1:7000> cluster meet 127.0.0.1 7101 127.0.0.1:7000> CLUSTER MEET 127.0.0.1 7100 127.0.0.1:7000> CLUSTER MEET 127.0.0.1 7200 127.0.0.1:7000> CLUSTER MEET 127.0.0.1 7300-- 查看握手是否正常 -- 127.0.0.1:7000> cluster nodes c0ffcbe12a16d2457786b542707dca0529bb1610 127.0.0.1:7300 master - 0 1492278433843 0 connected b40c70eb1c32b4af2450e94deed01dec14ca26a0 127.0.0.1:7200 master - 0 1492278432333 0 connected 34d2f50d036d7b95e5f3ae43571404c735b2e3ee 127.0.0.1:7100 master - 0 1492278430825 3 connected 367ec3a52e8faedc37f3d919865016f50f689893 127.0.0.1:7001 master - 0 1492278432835 2 connected 8c8b9679cd7c52d28fc58aa86d6b0e78efa249c0 127.0.0.1:7101 master - 0 1492278429818 4 connected 0c0bea9746cfe04dfcbb6ec1db35be5756dd7924 127.0.0.1:7000 myself,master - 0 0 1 connected
此时,节点握手建立完成;但还不能正常工作:
127.0.0.1:7000> CLUSTER info cluster_state:fail cluster_slots_assigned:0 ## slots【槽的意思】,此时为0 表示目前所有槽没有被分配到节点上 cluster_slots_ok:0 cluster_slots_pfail:0 cluster_slots_fail:0 cluster_known_nodes:6 cluster_size:0 cluster_current_epoch:5 cluster_my_epoch:1 cluster_stats_messages_sent:8725 cluster_stats_messages_received:8725
4.分配槽
Redis集群把所有的数据映射到16384个槽中,每个key会映射为一个固定的槽,只有当节点分配了槽时,才能响应和这些槽关联的键命令;
这里通过 cluster addslots 命令为节点分配槽:
--- 通过 bash 特性批量设置槽(lots) --- redis-cli -h 127.0.0.1 -p 7000 cluster addslots {0..5461} redis-cli -h 127.0.0.1 -p 7000 cluster addslots {5462..10922} redis-cli -h 127.0.0.1 -p 7000 cluster addslots {10923..16383}--- 通过交互命令分配槽(lots) --- 127.0.0.1:7000> cluster addslots {0..5461} 127.0.0.1:7000> cluster addslots {5462..10922} 127.0.0.1:7000> cluster addslots {10923..16383}--- 查看集群状态 --- 127.0.0.1:7000> 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:1 cluster_current_epoch:5 cluster_my_epoch:1 cluster_stats_messages_sent:8725 cluster_stats_messages_received:8725127.0.0.1:7000> CLUSTER NODES c0ffcbe12a16d2457786b542707dca0529bb1610 127.0.0.1:7201 master - 0 1492280674461 0 connected b40c70eb1c32b4af2450e94deed01dec14ca26a0 127.0.0.1:7201 master - 0 1492280674965 5 connected 34d2f50d036d7b95e5f3ae43571404c735b2e3ee 127.0.0.1:7100 master - 0 1492280673454 3 connected 367ec3a52e8faedc37f3d919865016f50f689893 127.0.0.1:7001 master - 0 1492280675467 2 connected 8c8b9679cd7c52d28fc58aa86d6b0e78efa249c0 127.0.0.1:7101 master - 0 1492280672448 4 connected 0c0bea9746cfe04dfcbb6ec1db35be5756dd7924 127.0.0.1:7000 myself,master - 0 0 1 connected 0-16383
目前还有3个节点没有使用,作为一个完整的集群;
每个负责处理槽的节点都应该具有从节点,保证当它出现故障时可自动进行故障转移;
集群模式下,redis节点角色分配为主节点和从节点;
首次启动的节点和被分配槽的节点都是主节点,从节点负责负责主节点槽信息和相关数据;
--- 使用命令方式 --- $ redis-cli -h 127.0.0.1 -p 7000 cluster nodes c0ffcbe12a16d2457786b542707dca0529bb1610 127.0.0.1:7201 master - 0 1492288202486 0 connected b40c70eb1c32b4af2450e94deed01dec14ca26a0 127.0.0.1:7200 master - 0 1492288205502 5 connected 34d2f50d036d7b95e5f3ae43571404c735b2e3ee 127.0.0.1:7100 master - 0 1492288204498 3 connected 367ec3a52e8faedc37f3d919865016f50f689893 127.0.0.1:7001 master - 0 1492288201480 2 connected 8c8b9679cd7c52d28fc58aa86d6b0e78efa249c0 127.0.0.1:7101 master - 0 1492288203490 4 connected 0c0bea9746cfe04dfcbb6ec1db35be5756dd7924 127.0.0.1:7000 myself,master - 0 0 1 connected 0-16383--- 建立主从节点 --- 127.0.0.1:7001> CLUSTER REPLICATE 0c0bea9746cfe04dfcbb6ec1db35be5756dd7924 127.0.0.1:7101> CLUSTER REPLICATE 367ec3a52e8faedc37f3d919865016f50f689893 127.0.0.1:7201> CLUSTER REPLICATE 8c8b9679cd7c52d28fc58aa86d6b0e78efa249c0--- 查看复制状态信息 --- 127.0.0.1:7101> CLUSTER NODES c0ffcbe12a16d2457786b542707dca0529bb1610 127.0.0.1:7101 myself,slave 8c8b9679cd7c52d28fc58aa86d6b0e78efa249c0 0 0 0 connected 34d2f50d036d7b95e5f3ae43571404c735b2e3ee 127.0.0.1:7001 slave 0c0bea9746cfe04dfcbb6ec1db35be5756dd7924 0 1492288883018 3 connected b40c70eb1c32b4af2450e94deed01dec14ca26a0 127.0.0.1:7201 slave 367ec3a52e8faedc37f3d919865016f50f689893 0 1492288884023 5 connected 8c8b9679cd7c52d28fc58aa86d6b0e78efa249c0 127.0.0.1:7100 master - 0 1492288885033 4 connected 367ec3a52e8faedc37f3d919865016f50f689893 127.0.0.1:7200 master - 0 1492288881005 2 connected 0c0bea9746cfe04dfcbb6ec1db35be5756dd7924 127.0.0.1:7000 master - 0 1492288882012 1 connected 0-16383
查看当前节点关系
127.0.0.1:7000> CLUSTER SLOTS 1) 1) (integer) 02) (integer) 163833) 1) "127.0.0.1"2) (integer) 7000 # 主节点3) "0c0bea9746cfe04dfcbb6ec1db35be5756dd7924"4) 1) "127.0.0.1"2) (integer) 7001 # 从节点3) "34d2f50d036d7b95e5f3ae43571404c735b2e3ee"
删除分配槽
127.0.0.1:7000> CLUSTER DELSLOTS 1 2 3 或者: redis-cli -h 127.0.0.1 -p 7000 cluster delslots {10923..16383}
总结:
1、手动创建集群,重启redis服务后;集群断开,节点握手也断开 2、创建集群分为3步骤: 1、节点握手 2、分配槽 3、主从节点建立复制关系
相关链接:
用redis-trib.rb搭建redis集群
redis集群【报错总结】
转载于:https://blog.51cto.com/liubao0312/1939298
手动构建redis集群相关推荐
- Docker构建redis集群
Docker构建redis集群 创建虚拟网卡 docker network create net-redis --subnet 172.38.0.0/16 查看: 配置6个redis配置文件 使用脚本 ...
- k8s 手动恢复redis 集群_高工面试之:redis的几种集群方式你都熟悉吗?
Redis三种集群方式:主从复制.哨兵模式和Cluster模式 一.主从复制模式 Redis配置成主从模式,主库(Master)只负责客户端的写数据,从库(Slave)只负责客户端的读数据. 主从数据 ...
- linux redis-trib.rb,linux 关于redis-trib.rb构建redis集群
之前搭建集群漏下的坑, 今次再搭一次. 环境 ruby环境 yum install ruby rubygems -y redis的gem环境 gem install redis-3.2.2.gem 部 ...
- k8s 手动恢复redis 集群_二进制手动部署k8s-1.14高可用集群(二、集群部署)
1. CA证书(任意节点) 1.1 安装cfssl cfssl是非常好用的CA工具,我们用它来生成证书和秘钥文件 安装过程比较简单,如下: # 下载 $ mkdir -p ~/bin $ wget h ...
- Docker 构建 redis 集群
安装docker 1.yum install docker 方法一: 1. docker pull redis 2.docker run -d --name redis-1 -p 7001:6379 ...
- 手动搭建redis集群
- 两台服务器安装redis集群_redis 集群搭建,小白也能搭三主三从的集群环境
redis集群简介: Redis集群是一个程序集,它提供在多个 Redis节点之间共享数据. 一个 Redis集群不支持同时处理多个键的 Redis命令,因为这要求将数据移动到多个节点之间,这会降低 ...
- 惊呆了,竟然可以用这种方式秒建 Redis 集群?
作者 | 老王 来源 | Java 中文社区 前面我们讲了<Redis 性能优化的 13 条军规!>,其中最重要的一条就是使用 Redis 的集群功能,那么本文我们就来看看,如何用 1s ...
- Redis集群之多主多从
在上篇中--Redis集群之哨兵中我们使用了哨兵模式来解决主从模式下的弊端,但从架构上来看,哨兵模式其实也是主从模式,因此在业务量暴增的情形下,单一主节点处理能力也是有限的,无法支撑大数据量,这个时候 ...
最新文章
- 如果你是Python初学者,就从这个开始
- app前后台交互php_PHP丨前端网页是怎么跟后台进行数据交互的(实战)
- OpenStack遇到的坑
- c++bisection method二等分法的实现算法(附完整源码)
- Django加载静态文件
- JS学习笔记5-JavaScript 变量
- 【南邮操作系统实验】页面置换算法(FIFO、LRU、OPT)图形化界面(JavaFx)
- 自己动手写个小框架之三
- Linux 火焰图(on-cpu , off-cpu , memory)
- 电脑虎牙,虎牙助手主播版电脑版
- 海马玩android模拟器哪个好用,主流安卓模拟器评测:叶子猪海马玩表现突出
- 世界上最神奇的网站收录--不是最无聊就是最有意思
- 苹果开发者账号申请 之 公司开发者账号申请2021年
- 关于MAC安装windows【支持老版本】 支持安装全系列windows
- NMAD-2.14b1安装
- WORD分栏后左右都能编辑
- Windows下使用pip安装模块发生“failed with error code 1”的解决方法
- 服务器sata接口整体性能,SATA接口数量被大幅削减
- 摊牌了,微软始料未及,Excel和WPS用户:我们已经在使用了
- 实验室电磁铁的主要用途
热门文章
- VBA 声明 Option Explicit,让代码更规范
- SQLite-database disk image is malformed问题的解决
- Docker-compose编排微服务顺序启动解决方案
- 在Linux中使用cURL进行HTTP POST和GET [复制]
- 如何使用print()打印类的实例?
- win11如何快速加密硬盘 Windows11快速加密硬盘的设置方法
- c++new时赋初值_C++ Lesson 7:new,delete amp; 类的重用
- MTK:BMT充电模块
- 全向轮运动特性分析(图片版)
- 宝塔ssl验证域名失败_自建搜索引擎如何绑定域名?