当前位置:网站首页>Redis搭建集群【简单】
Redis搭建集群【简单】
2022-06-28 01:56:00 【Doc_ACwhite】
为什么要搭建redis集群?
Redis是一个内存数据库,也就是说存储数据的容量不能超过主机内存大小。普通主机服务器的内存一般几十G,但是我们需要存储大容量的数据(比如上百G的数据)怎么办?
在3.0版本之前,通常的做法是获取某个key的hashcode,然后mod,不过这种做法无法很好的支持动态伸缩性需求,一旦节点的增或者删操作,都会导致key无法在redis中命中。
redis3.0版本以上开始支持cluster【即集群】,采用的是hash slot(hash槽)。他可以把多个redis实例整合在一起,形成一个集群,也就是将数据分散到集群的多台机器上。但是该怎么分散呢,一个Key只能被分配到一台机器上,我们在查询数据时,数据可能存在集群中的任意一台机器上,又该怎么查询呢?
通过向节点发送CLUSTER ADDSLOTS命令,可以将一个或多个槽指派给节点负责:
例如

Redis Cluster是一个无中心的结构,每个节点都保存数据和整个集群的状态。每个节点都会保存其它节点的信息,知道其它节点所负责的槽。并且会与其它节点定时的发送心跳信息,能够及时感知集群中异常的节点。
当客户端向集群中任一节点发送与数据库键有关的命令时,接收命令的节点会计算出命令要处理的数据库键属于哪个槽(CRC16(key) & 16383),并检查这个槽是否指派给了自己:
·如果键所在的槽正好就指派给了当前节点,那么节点直接执行这个命令。
·如果键所在的槽并没有指派给当前节点,那么节点会向客户端返回一个MOVED错误,指引客户端转向(redirect)至正确的节点,并再次发送之前想要执行的命令。MOVED错误的格式为:
MOVED:

如何搭建redis集群?
搭建redis集群,首先你得先搭建redis集群的节点【至少6个节点】
少于六个节点的问题:
redis集群为什么最少需要6个节点
https://blog.csdn.net/zhangbaoxiang/article/details/107379622
这里博主就用1台服务器做操作了【ps:明白原理即可】
前期工作:
下载redis的压缩包
wget http://download.redis.io/releases/redis-6.0.6.tar.gz
进行解压
tar -zxvf redis-6.0.6.tar.gz
解压完之后别忘了make和make install
cd 进入解压后的redis目录执行 make

cd进入src目录中执行 make install命令
修改redis.conf的配置
vim redis.conf1.修改port端口号为 6378

2.将cluster-enabled的注释打开

3.将cluster-config的注释打开 ,并且修改使其对于端口号 6378

4.打开 cluster-node-timeout的注释

现在ls 一下,可以看到文件下存在了redis-6378

现在你只是配置了一个节点罢了,保持耐心
我们开始复制节点 6378-6373 并给予其权限: 如下
chmod 777 redis-6373
修改完之后cd进入 redis-6378-redis-6373 中的redis.conf中,按照上面修改配置的流程走一遍,顺便删掉文件下的dump.rdb文件
rm dump.rdb

节点配置完毕
宝们可以通过 ./src/redis-server redis.conf 进行测试,开启redis节点
./src/redis-server redis.conf例如:
| redis默认是前台启动,这样你启动了就无法做别的事情了,如下 |

博主这里比较懒,不想一个个启动节点,因此博主将redis改为后台启动,直接做了一个.sh程序一键启动节点了 |
1.修改redis为后台启动:
打开redis.conf 将 daemonize改为yes

2.在主目录下创建一个 start-all.sh
进入 start-all.sh 后进行编辑
cd redis-6373
./src/redis-server redis.conf
cd ..
cd redis-6374
./src/redis-server redis.conf
cd ..
cd redis-6375
./src/redis-server redis.conf
cd ..
cd redis-6376
./src/redis-server redis.conf
cd ..
cd redis-6377
./src/redis-server redis.conf
cd ..
cd redis-6378
./src/redis-server redis.conf
cd ..:wq 保存后退出
![]()
执行 .sh 文件,一键开启所有节点
./start-all.sh通过 ps aux | grep redis 查询redis节点的启动状态
ps aux | grep redis
看,6个节点开启完毕,接下来正式开始做集群功能
进入 redis-6378 文件的 src 目录下
执行命令:【ps:如果是多台服务器搭建集群,可能会需要密码 将127.0.0.1改为对应主机域名 如果其服务器redis存在密码 则 在下面集群语句后加上 -a redis密码, 例如: -a 123456】
./redis-cli --cluster create 127.0.0.1:6378 127.0.0.1:6377 127.0.0.1:6376 127.0.0.1:6375 127.0.0.1:6374 127.0.0.1:6373 --cluster-replicas 1
look,(/≧▽≦)/这样就搭建出普通的redis集群了
然后选择 6378 这个端口为主节点
redis-cli -c -p 6378走一条 set 语句 -> OK

至此,我们简单的完成了redis集群的3主3从的搭建
学到这里,博主不妨多给各位科普下哨兵模式:
主从模式特点
(1)主节点Master可读、可写.
(2)从节点Slave只读。(read-only)
因此,主从模型可以提高读的能力,在一定程度上缓解了写的能力。因为能写仍然只有Master节点一个,可以将读的操作全部移交到从节点上,变相提高了写能力。
主从模式的缺陷
当主节点宕机了,整个集群就没有可写的节点了。
由于从节点上备份了主节点的所有数据,那在主节点宕机的情况下,如果能够将从节点变成一个主节点,是不是就可以解决这个问题了呢?
答:是的,这个就是Sentinel哨兵的作用。
哨兵的任务
Redis 的 Sentinel 系统用于管理多个 Redis 服务器(instance), 该系统执行以下三个任务:
监控(Monitoring): Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。
提醒(Notification): 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。
自动故障迁移(Automatic failover): 当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作, 它会进行选举,将其中一个从服务器升级为新的主服务器, 并让失效主服务器的其他从服务器改为复制新的主服务器; 当客户端试图连接失效的主服务器时, 集群也会向客户端返回新主服务器的地址, 使得集群可以使用新主服务器代替失效服务器。
节点的主观下线【偏见,少数】
ps:改图取自
https://blog.csdn.net/qq_32182461/article/details/82556295
节点之间会定期的执行ping/pong消息来证明节点之间的连通性,若节点一向节点二发送ping消息之后收到pong消息,那么节点一将会更新最后一次与节点二的通信时间,若没有收到pong消息,那么节点一与节点二之间的链接将会断开,之后节点一再次执行ping消息,若与节点二之间的最后通信时间超过指定的时间,那么节点二将被节点一标记为主观下线。
节点的客观下线【大群意志,半数票决】
ps:下列图取自
https://blog.csdn.net/See_Csdn_/article/details/115902857
哨兵监听,半数票决,觉得该节点异常了,就让他下线

然后让从节点server2取代成为主节点,而server1进行异常修复处理,处理完之后,重新上线
边栏推荐
- "Everyday Mathematics" serial 53: February 21
- Is online stock investment exchange group safe? Is it reliable to open an account for free?
- 网上股票投资交流群安全吗?进群免费开户靠谱嘛?
- Apache——阿帕奇简介
- Single page application (SPA) hash route and historical API route
- 拾光者,云南白药!
- A16z: metauniverse unlocks new opportunities in game infrastructure
- You got 8K in the 3-year function test, but were overtaken by the new tester. In fact, you are pretending to work hard
- 为什么OpenCV计算的帧率是错误的?
- RichView TRVStyle ParaStyles
猜你喜欢

Domain Name System

Tips for visiting the website: you are not authorized to view the recovery method of this page

Le routage des microservices de la passerelle a échoué au chargement des ressources statiques des microservices

为什么大厂压力大,竞争大,还有这么多人热衷于大厂呢?

How to judge that the thread pool has completed all tasks?

被校园暴力,性格内向的马斯克凄惨而励志的童年
![[today in history] June 24: Netease was established; The first consumer electronics exhibition was held; The first webcast in the world](/img/f7/b3239802d19d00f760bb3174649a89.jpg)
[today in history] June 24: Netease was established; The first consumer electronics exhibition was held; The first webcast in the world

Raspberry pie - environment settings and cross compilation

Writing C program with GCC and makefile for the first time

Why are so many people keen on big factories because of the great pressure and competition?
随机推荐
Raspberry pie - environment settings and cross compilation
Simple elk configuration to realize production level log collection and query practice
无心剑英汉双语诗004.《静心》
网上股票投资交流群安全吗?进群免费开户靠谱嘛?
买股票通过券商经理的开户链接开户资金是否安全?想开户炒股
The first in the industry! MOS sub evaluation model for subjective video quality experience that can run on mobile devices!
Simple file transfer protocol TFTP
Is your IOT security strong enough?
Gateway microservice routing failed to load microservice static resources
RichView TRVStyle TextStyles
adb双击POWER键指令
Heartless sword Chinese English bilingual poem 004 Sword
2-5基础配置-Win2003增加攻击面
Domain Name System
树莓派-环境设置和交叉编译
Gateway微服務路由使微服務靜態資源加載失敗
ADB double click the power key command
基于STM32的编写
Online JSON to plaintext tool
Flask Foundation: template inheritance + static file configuration