手动构建redis集群
发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,1、准备节点-- 主节点 ---redis-7000.confredis-7100.confredis-7200.conf-- 从节点 ---redis-7001.confredis-7101.con
千家信息网最后更新 2025年02月02日手动构建redis集群
1、准备节点
-- 主节点 ---redis-7000.confredis-7100.confredis-7200.conf-- 从节点 ---redis-7001.confredis-7101.confredis-7201.conf
Redis集群一般有多个节点组成,节点数量至少为6个才能保证组成完整的高可用集群;
2、修改配置
$ vim redis-7000.confdaemonize 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.log77893: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 connectedvars currentEpoch 0 lastVoteEpoch 0
文件内存记录了集群初始状态,这里最重要的是节点ID【这是一个40位16进制字符串
该节点ID只创建一次【不同于运行ID】,节点重启时会加载该配置文件进行重用;
-- 通过命令交互形式回显 --[root@test cluster]# redis-cli -p 7000127.0.0.1:7000> cluster nodes0c0bea9746cfe04dfcbb6ec1db35be5756dd7924 :7000 myself,master - 0 0 0 connected
3、节点握手
节点握手是指一批运行在集群模式下的节点通过Gossip协议彼此通信,以达到感知对方的过程; 节点握手是建立集群通信的第一步,由客户端发起命令:cluster meet {IP} {port}
步骤如下:
1. 节点7000 发送meet消息给 节点7001 2. 节点7001 接受到meet消息后,保存节点7000的信息并回复pong消息 3. 之后,节点7000 和 7001 彼此定期通过ping/pong消息进行正常的节点通信;-- 发送节点握手指令 --127.0.0.1:7000> cluster meet 127.0.0.1 7001127.0.0.1:7000> cluster meet 127.0.0.1 7101127.0.0.1:7000> CLUSTER MEET 127.0.0.1 7100127.0.0.1:7000> CLUSTER MEET 127.0.0.1 7200127.0.0.1:7000> CLUSTER MEET 127.0.0.1 7300-- 查看握手是否正常 --127.0.0.1:7000> cluster nodesc0ffcbe12a16d2457786b542707dca0529bb1610 127.0.0.1:7300 master - 0 1492278433843 0 connectedb40c70eb1c32b4af2450e94deed01dec14ca26a0 127.0.0.1:7200 master - 0 1492278432333 0 connected34d2f50d036d7b95e5f3ae43571404c735b2e3ee 127.0.0.1:7100 master - 0 1492278430825 3 connected367ec3a52e8faedc37f3d919865016f50f689893 127.0.0.1:7001 master - 0 1492278432835 2 connected8c8b9679cd7c52d28fc58aa86d6b0e78efa249c0 127.0.0.1:7101 master - 0 1492278429818 4 connected0c0bea9746cfe04dfcbb6ec1db35be5756dd7924 127.0.0.1:7000 myself,master - 0 0 1 connected
此时,节点握手建立完成;但还不能正常工作:
127.0.0.1:7000> CLUSTER infocluster_state:failcluster_slots_assigned:0 ## slots【槽的意思】,此时为0 表示目前所有槽没有被分配到节点上cluster_slots_ok:0cluster_slots_pfail:0cluster_slots_fail:0cluster_known_nodes:6cluster_size:0cluster_current_epoch:5cluster_my_epoch:1cluster_stats_messages_sent:8725cluster_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 INFOcluster_state:okcluster_slots_assigned:16384cluster_slots_ok:16384cluster_slots_pfail:0cluster_slots_fail:0cluster_known_nodes:6cluster_size:1cluster_current_epoch:5cluster_my_epoch:1cluster_stats_messages_sent:8725cluster_stats_messages_received:8725127.0.0.1:7000> CLUSTER NODESc0ffcbe12a16d2457786b542707dca0529bb1610 127.0.0.1:7201 master - 0 1492280674461 0 connectedb40c70eb1c32b4af2450e94deed01dec14ca26a0 127.0.0.1:7201 master - 0 1492280674965 5 connected34d2f50d036d7b95e5f3ae43571404c735b2e3ee 127.0.0.1:7100 master - 0 1492280673454 3 connected367ec3a52e8faedc37f3d919865016f50f689893 127.0.0.1:7001 master - 0 1492280675467 2 connected8c8b9679cd7c52d28fc58aa86d6b0e78efa249c0 127.0.0.1:7101 master - 0 1492280672448 4 connected0c0bea9746cfe04dfcbb6ec1db35be5756dd7924 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 nodesc0ffcbe12a16d2457786b542707dca0529bb1610 127.0.0.1:7201 master - 0 1492288202486 0 connectedb40c70eb1c32b4af2450e94deed01dec14ca26a0 127.0.0.1:7200 master - 0 1492288205502 5 connected34d2f50d036d7b95e5f3ae43571404c735b2e3ee 127.0.0.1:7100 master - 0 1492288204498 3 connected367ec3a52e8faedc37f3d919865016f50f689893 127.0.0.1:7001 master - 0 1492288201480 2 connected8c8b9679cd7c52d28fc58aa86d6b0e78efa249c0 127.0.0.1:7101 master - 0 1492288203490 4 connected0c0bea9746cfe04dfcbb6ec1db35be5756dd7924 127.0.0.1:7000 myself,master - 0 0 1 connected 0-16383--- 建立主从节点 ---127.0.0.1:7001> CLUSTER REPLICATE 0c0bea9746cfe04dfcbb6ec1db35be5756dd7924127.0.0.1:7101> CLUSTER REPLICATE 367ec3a52e8faedc37f3d919865016f50f689893127.0.0.1:7201> CLUSTER REPLICATE 8c8b9679cd7c52d28fc58aa86d6b0e78efa249c0--- 查看复制状态信息 ---127.0.0.1:7101> CLUSTER NODESc0ffcbe12a16d2457786b542707dca0529bb1610 127.0.0.1:7101 myself,slave 8c8b9679cd7c52d28fc58aa86d6b0e78efa249c0 0 0 0 connected34d2f50d036d7b95e5f3ae43571404c735b2e3ee 127.0.0.1:7001 slave 0c0bea9746cfe04dfcbb6ec1db35be5756dd7924 0 1492288883018 3 connectedb40c70eb1c32b4af2450e94deed01dec14ca26a0 127.0.0.1:7201 slave 367ec3a52e8faedc37f3d919865016f50f689893 0 1492288884023 5 connected8c8b9679cd7c52d28fc58aa86d6b0e78efa249c0 127.0.0.1:7100 master - 0 1492288885033 4 connected367ec3a52e8faedc37f3d919865016f50f689893 127.0.0.1:7200 master - 0 1492288881005 2 connected0c0bea9746cfe04dfcbb6ec1db35be5756dd7924 127.0.0.1:7000 master - 0 1492288882012 1 connected 0-16383
查看当前节点关系
127.0.0.1:7000> CLUSTER SLOTS1) 1) (integer) 0 2) (integer) 16383 3) 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集群【报错总结】
节点
集群
分配
命令
文件
配置
模式
消息
信息
日志
状态
通信
主从
内容
故障
数据
方式
步骤
保证
准备
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
和平精英的服务器账号怎么找
电脑有些软件连接服务器连不上
联通接入点服务器怎样设置
怀旧服怎么看玩过的服务器
一个软件开发到上线需要多久
数据库安全保密规定
360杀毒软件开发者
蛋刀数据库
服务器led93指示灯亮起
品质软件开发价钱
银行数据库APP下载
国内网络安全培训结构排名
达梦数据库个字段
软件开发如何和HR谈薪资
数据库系统原理试卷
深圳化境网络技术
国家医保数据库平台
数据库 excel查询
企业产品产量数据库数据
网络安全构成体系是什么
域控崩溃了域服务器坏了
哪家学软件开发好
王银博软件开发
关于网络安全的演讲稿五百字
计算机服务器是干嘛用的
深圳软件开发师培训
店大侠登陆数据库是什么意思
手机连接ipv6的服务器
税局网络安全事件
提高网络安全的政治站位