Redis搭建集群【简单】

为什么要搭建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

安装基本环境
解压过后,我们可以将解压得到的文件夹移动到/opt,这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。

然后进入该文件夹,我们可以看到redis的配置文件,日后我们可以在这里使用vim修改redis的配置文件。

在这里插入图片描述

因为redis是c写的,所以我们需要安装c语言环境

yum install gcc-c++ tcl


然后执行make命令,redis6以上make会出错,要升级gcc版本

Redis6以上需要gcc版本在7以上。
运行下面命令升级gcc
#第一步
 

sudo yum install centos-release-scl


#第二步

sudo yum install devtoolset-7-gcc*


#第三步
 

scl enable devtoolset-7 bash


 

其实不用安装gcc也行,直接make他会帮你安装gcc,然后执行make install命令

使用make和make install

 cd 进入解压后的redis目录执行  make

 cd进入src目录中执行 make install命令

修改redis.conf的配置,几个节点改几次~~~~

vim redis.conf

1.修改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进行异常修复处理,处理完之后,重新上线

  • 22
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值