百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

redis构建集群(redis集群搭建(非常详细,适合新手))

mhr18 2024-11-15 22:10 21 浏览 0 评论

1、集群的概念

  • 集群是一组相互独立的、通过高速网络互联的计算机,它们构成了一个组,并以单一系统的模式加以管理。一个客户与集群相互作用时,集群像是一个独立的服务器。集群配置是用于提高可用性和可缩放性。当请求到来首先由负载均衡服务器处理,把请求转发到另外的一台服务器上,redis集群主要是缓解单台服务器同一时间大量请求带来的的压力,就算集群中有服务器宕机,也不影响整体对外提供服务。
  • Redis cluster在设计的时候,就考虑到了去中?化,去中间件,也就是说,集群中 的每个节点都是平等的关系,都是对等的,每个节点都保存各?的数据和整个集 群的状态。每个节点都和其他所有节点连接,?且这些连接保持活跃,这样就保 证了我们只需要连接集群中的任意?个节点,就可以获取到其他节点的数据
  • Redis集群没有并使?传统的?致性哈希来分配数据,?是采?另外?种叫做哈希槽 (hash slot)的?式来分配的。redis cluster 默认分配了 16384 个slot,当我们 set?个key 时,会?CRC16算法来取模得到所属的slot,然后将这个key 分到哈希槽区间的节点上,具体算法就是:CRC16(key) % 16384。
  • Redis 集群会把数据存在?个 master 节点,然后在这个 master 和其对应的salve 之间进?数据同步。当读取数据时,也根据?致性哈希算法到对应的 master 节 点获取数据。只有当?个master 挂掉之后,才会启动?个对应的 salve 节点,充当 master。

2、组织架构

3、环境准备(每个节点都执行)

#创建目录
mkdir -p  /opt/{6380,6381}/{log,pid,etc}

#添加配置文件
cat >/opt/6380/etc/redis.conf<<-EOF
bind 0.0.0.04.2、手动添加主从复制关系
port 6380
daemonize yes
pidfile "/opt/6380/pid/redis.pid"
logfile "/opt/6380/log/redis.log"
dir /opt/6380/
dbfilename dump.rdb
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 15000
EOF

cp /opt/6380/etc/redis.conf /opt/6381/etc/
sed -i "s/6380/6381/g" /opt/6381/etc/redis.conf

#启动
redis-server /opt/6380/etc/redis.conf
redis-server /opt/6381/etc/redis.conf

#添加防火墙规则
#redi会在当前端口+10000的端口上进行集群节点间的数据交流。
firewall-cmd --permanent --add-port=6380/tcp
firewall-cmd --permanent --add-port=6381/tcp
firewall-cmd --permanent --add-port=16380/tcp
firewall-cmd --permanent --add-port=16381/tcp
firewall-cmd --reload

4、手动搭建redis集群

4.1、手动节点发现

redis-cli -h 192.168.20.161  -p 6380 CLUSTER MEET 192.168.20.162 6380
redis-cli -h 192.168.20.161  -p 6380 CLUSTER MEET 192.168.20.163 6380
redis-cli -h 192.168.20.161  -p 6380 CLUSTER MEET 192.168.20.161 6381
redis-cli -h 192.168.20.161  -p 6380 CLUSTER MEET 192.168.20.162 6381
redis-cli -h 192.168.20.161  -p 6380 CLUSTER MEET 192.168.20.163 6381
redis-cli -h 192.168.20.161  -p 6380 CLUSTER NODES

4.2、手动添加主从复制关系

redis-cli -h 192.168.20.161  -p 6381 CLUSTER REPLICATE 9bd06eadbaf32eff955a211a927fa6ab7dc4d56b
redis-cli -h 192.168.20.162  -p 6381 CLUSTER REPLICATE b1b2dfdea90fe6d833f5a83d77a7a8320bd7497b
redis-cli -h 192.168.20.163  -p 6381 CLUSTER REPLICATE d70d68d2b8557d753e2dcfd03b8aa707727adb11
redis-cli -h 192.168.20.161  -p 6380 CLUSTER NODES

4.2、手动分配槽位

#一共16384个槽位,只有当槽位全部分布完成后,集群才会正常工作,配置时使用的是槽位的序号,从0开始。
redis-cli -h 192.168.20.161 -p 6380 CLUSTER ADDSLOTS {0..5460}
redis-cli -h 192.168.20.162 -p 6380 CLUSTER ADDSLOTS {5461..10921}
redis-cli -h 192.168.20.163 -p 6380 CLUSTER ADDSLOTS {10922..16383}
redis-cli -h 192.168.20.161  -p 6380 CLUSTER NODES
redis-cli -h 192.168.20.161  -p 6380 CLUSTER INFO

5、验证集群的可用性

5.1、测试数据写入

[root@node01 ~]# cat set.sh
#!/bin/bash
for i in `seq -w 10000`;
do
    redis-cli -h 192.168.20.161  -p 6380 -c  set  k_$i v_$i
done
bash set.sh

5.2、验证随机性

redis-cli -c -h 192.168.20.161 -p 6380 keys \* > keys_all.txt
cat keys_all.txt |awk -F "_" '{print $2}'|sort -n | head

5.3、检查集群是否健康

#key分布误差
redis-cli --cluster rebalance 192.168.20.161:6380
>>> Performing Cluster Check (using node 192.168.20.161:6380)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
*** No rebalancing needed! All nodes are within the 2.00% threshold.

#key分布情况
redis-cli --cluster info 192.168.20.161:6380
192.168.20.161:6380 (d70d68d2...) -> 3314 keys | 5461 slots | 1 slaves.
192.168.20.162:6380 (9bd06ead...) -> 3348 keys | 5461 slots | 1 slaves.
192.168.20.163:6380 (b1b2dfde...) -> 3338 keys | 5462 slots | 1 slaves.
[OK] 10000 keys in 3 masters.
0.61 keys per slot on average.

6、调整槽位分配错误

6.1、使用工具重新分配槽位

#重新分配槽位
redis-cli --cluster reshard 192.168.20.161:6380

#第一次交互:输入迁出的槽的数量
How many slots do you want to move (from 1 to 16384)? 5461

#第二次交互:输入接受的ID
What is the receiving node ID? cluster2的6380的ID

#第三次交互:输入发送者的ID
Please enter all the source node IDs.
  Type 'all' to use all the nodes as source nodes for the hash slots.
  Type 'done' once you entered all the source nodes IDs.
Source node #1: cluster1的6380的ID
Source node #2: done

#第四次交互:YES!

#重复上面的操作,将槽位正确分配给 192.168.20.162:6380,192.168.20.16:6380 节点

6.2、pipline

前提条件:
1.了解aof格式
2.了解新版本redis默认是开启混合模式的
3.需要修改为普通的aof格式并重启
4.恢复时使用-c参数无效,需要在每一个节点都执行

命令:
redis-cli -c -h 192.168.20.161 -p 6380 --pipe < redis.aof
redis-cli -c -h 192.168.20.162 -p 6380 --pipe < redis.aof
redis-cli -c -h 192.168.20.163 -p 6380 --pipe < redis.aof

相关推荐

Java培训机构,你选对了吗?(java培训机构官网)

如今IT行业发展迅速,不仅是大学生,甚至有些在职的员工都想学习java开发,需求量的扩大,薪资必定增长,这也是更多人选择java开发的主要原因。不过对于没有基础的学员来说,java技术不是一两天就能...

产品经理MacBook软件清单-20个实用软件

三年前开始使用MacBookPro,从此再也不想用Windows电脑了,作为生产工具,MacBook可以说是非常胜任。作为产品经理,值得拥有一台MacBook。MacBook是工作平台,要发挥更大作...

RAD Studio(Delphi) 本月隆重推出新的版本12.3

#在头条记录我的2025#自2024年9月,推出Delphi12.2版本后,本月隆重推出新的版本12.3,RADStudio12.3,包含了Delphi12.3和C++builder12.3最...

图解Java垃圾回收机制,写得非常好

什么是自动垃圾回收?自动垃圾回收是一种在堆内存中找出哪些对象在被使用,还有哪些对象没被使用,并且将后者删掉的机制。所谓使用中的对象(已引用对象),指的是程序中有指针指向的对象;而未使用中的对象(未引用...

Centos7 初始化硬盘分区、挂载(针对2T以上)添加磁盘到卷

1、通过命令fdisk-l查看硬盘信息:#fdisk-l,发现硬盘为/dev/sdb大小4T。2、如果此硬盘以前有过分区,则先对磁盘格式化。命令:mkfs.文件系统格式-f/dev/sdb...

半虚拟化如何提高服务器性能(虚拟化 半虚拟化)

半虚拟化是一种重新编译客户机操作系统(OS)将其安装在虚拟机(VM)上的一种虚拟化类型,并在主机操作系统(OS)运行的管理程序上运行。与传统的完全虚拟化相比,半虚拟化可以减少开销,并提高系统性能。虚...

HashMap底层实现原理以及线程安全实现

HashMap底层实现原理数据结构:HashMap的底层实现原理主要依赖于数组+链表+红黑树的结构。1、数组:HashMap最底层是一个数组,称为table,它存放着键值对。2、链...

long和double类型操作的非原子性探究

前言“深入java虚拟机”中提到,int等不大于32位的基本类型的操作都是原子操作,但是某些jvm对long和double类型的操作并不是原子操作,这样就会造成错误数据的出现。其实这里的某些jvm是指...

数据库DELETE 语句,还保存原有的磁盘空间

MySQL和Oracle的DELETE语句与数据存储MySQL的DELETE操作当你在MySQL中执行DELETE语句时:逻辑删除:数据从表中标记为删除,不再可见于查询结果物理...

线程池—ThreadPoolExecutor详解(线程池实战)

一、ThreadPoolExecutor简介在juc-executors框架概述的章节中,我们已经简要介绍过ThreadPoolExecutor了,通过Executors工厂,用户可以创建自己需要的执...

navicat如何使用orcale(详细步骤)

前言:看过我昨天文章的同鞋都知道最近接手另一个国企项目,数据库用的是orcale。实话实说,也有快三年没用过orcale数据库了。这期间问题不断,因为orcale日渐消沉,网上资料也是真真假假,难辨虚...

你的程序是不是慢吞吞?GraalVM来帮你飞起来性能提升秘籍大公开

各位IT圈内外的朋友们,大家好!我是你们的老朋友,头条上的IT技术博主。不知道你们有没有这样的经历:打开一个软件,半天没反应;点开一个网站,图片刷不出来;或者玩个游戏,卡顿得想砸电脑?是不是特别上火?...

大数据正当时,理解这几个术语很重要

目前,大数据的流行程度远超于我们的想象,无论是在云计算、物联网还是在人工智能领域都离不开大数据的支撑。那么大数据领域里有哪些基本概念或技术术语呢?今天我们就来聊聊那些避不开的大数据技术术语,梳理并...

秒懂列式数据库和行式数据库(列式数据库的特点)

行式数据库(Row-Based)数据按行存储,常见的行式数据库有Mysql,DB2,Oracle,Sql-server等;列数据库(Column-Based)数据存储方式按列存储,常见的列数据库有Hb...

AMD发布ROCm 6.4更新:带来了多项底层改进,但仍不支持RDNA 4

AMD宣布,对ROCm软件栈进行了更新,推出了新的迭代版本ROCm6.4。这一新版本里,AMD带来了多项底层改进,包括更新改进了ROCm的用户空间库和AMDKFD内核驱动程序之间的兼容性,使其更容易...

取消回复欢迎 发表评论: