Redis是现在最受欢迎的NoSQL数据库之一,使用ANSI C编写的开源、包含多种数据结构、支持网络、基于内存、可选持久性的键值对存储数据库(与map储存形式相同,一个键(key)对应一个值(value))。

redis集群采用P2P模式,是完全去中心化的,不存在中心节点或者代理节点。

redis集群是没有统一的入口的,客户端(client)连接集群的时候连接集群中的任意节点(node)即可,集群内部的节点是相互通信的(PING-PONG机制),每个节点都是一个redis实例;

为了实现集群的高可用,即判断节点是否健康(能否正常使用),redis-cluster有一个投票容错机制:如果集群中超过半数的节点投票认为某个节点挂了,那么这个节点就挂了(fail)。这是判断节点是否挂了的方法;那么如何判断集群是否挂了呢? -> 如果集群中任意一个节点挂了,而且该节点没有从节点(备份节点),那么这个集群就挂了。这是判断集群是否挂了的方法。

那么为什么任意一个节点挂了(没有从节点)这个集群就挂了呢?-> 因为集群内置了16384个slot(哈希槽),并且把所有的物理节点映射到了这16384[0-16383]个slot上,或者说把这些slot均等的分配给了各个节点。当需要在Redis集群存放一个数据(key-value)时,redis会先对这个key进行crc16算法,然后得到一个结果。再把这个结果对16384进行求余,这个余数会对应[0-16383]其中一个槽,进而决定key-value存储到哪个节点中。所以一旦某个节点挂了,该节点对应的slot就无法使用,那么就会导致集群无法正常工作。每个Redis集群理论上最多可以有16384个节点。

那我们为什么需要搭建redis集群呢?

Redis是一个很好的Cache工具,使用Redis只需要把热门数据或者常用数据保存在内存中而不是存储在数据库,这样可以缓解数据库压力,同时也能够加快网络请求的响应速度。在很多大型网站应用中,热点数据量往往巨大,由于内存大小的限制,使用一台 Redis 实例显然无法满足需求,这时就需要使用多台 Redis作为缓存数据库。但是如何保证数据存储的一致性呢?这时就可以使用redis集群,采用合理的机制,保证用户的正常的访问需求。采用redis集群。可以保证数据分散存储并且保证数据存储的一致性。

注意:redis3.0版本之前只支持单例模式,在3.0版本及以后才支持集群,我这里用的是redis5.0.5版本;

4b17b34de2f966353bc57dabb9380fbf.png

搭建集群(在这里只是测试,如果是部署生产环境,步骤一样,只是把ip地址与端口改为生产环境的ip与端口即可):

1、创建文件夹redis-cluster

命令:mkdir redis-cluster                                                                          8a54dc57a48fedbfc4f9a733022f4eae.png

查看刚才创建的文件夹

命令:ls或者ll

b36c96592566c3b273faf291a428fd7d.png

2、在redis-cluster目录中创建redis01、redis02、redis03、redis04、redis05、redis06,共六个文件夹

命令:mkdir redis01  redis02 redis03 redis04  redis05 redis06

9e535da2c18dc0d1b8d530b72511fcd3.png

查看刚才创建的几个文件夹:

命令:ll

bc9c1120a30d6ae9ba9b71cfd6d89f3b.png

3、将安装完成的redis目录下的所有文件分别拷贝到redis-cluster中的redis01、redis02......这几个文件夹中

命令:cp -r /usr/local/redis/*  /usr/local/redis-cluster/redis01

7aa4f06adceeca3a158c55f73fb5b94a.png

查看刚才操作的目录:

53db5bb51ec971fe6d81f7d40433800f.png

剩余的五个文件夹依次复制操作即可:

命令:cp -r /usr/local/redis/*  /usr/local/redis-cluster/redis02

cp -r /usr/local/redis/*  /usr/local/redis-cluster/redis03

cp -r /usr/local/redis/*  /usr/local/redis-cluster/redis04

cp -r /usr/local/redis/*  /usr/local/redis-cluster/redis05

cp -r /usr/local/redis/*  /usr/local/redis-cluster/redis06

依次完成以上命令,拷贝工作完成。

下一步:

4、进入到redis01

命令:cd /usr/local/redis-cluster/redis01

40e9ed49248a495e8627504ef868b2bd.png

5、修改redis.conf里面的某些选项内容:

 打开redis.conf命令:vi  redis.conf

显示行数命令:

(注意:这里命令是有这个冒号):set nu

    只有本机可以连接,注释掉

(1)在69行注释bind 127.0.0.1

cdbf27ff6f6982fae980a45d7c44cc77.png

    关闭保护模式

(2)在88行修改  protected-mode  yes 修改为  no

b56a9f5af33aa3551a9e6978fe21a040.png

    修改端口

(3)在92行  修改  6379 修改为7001

e7424a7d64e4d75164eaea631fff7a56.png

    后台方式启动

(4)在136行修改  daemonize  no 修改为  yes

525ffb925ff5e5ae4e118ad8c43ad54d.png

    pidfile文件对应

(5)在158行修改文件名6379改为7001

4c8d4f8e456f6164e449e4748dd621ad.png

    开启集群:

(6)在832行打开注释:cluster-enabled yes

a12b4d886dbf73811232cfdcb1c6ad5c.png

    集群的配置,集群首次启动的时候生成

(7)在840行,修改文件名中的6369  改为7001

83c0ab31e627216e0d551523019c4d6f.png

现在配置文件修改完成,下面依次修改redis02——reids06中的redis.conf文件,修改的选择与上面都是一样的,端口选择7001——7006即可(这里这个端口因为是测试,可以随便修改,不一定一定要是7001——7006)。其中的第五与第七选项,只需要修改为对应配置文件中的端口号即可。

修改完成以后,通过Esc ,然后通过:(冒号)wq进行保存退出即可。

到此,所有的配置文件与准备工作都基本差不多好了。

最后,进入到对应的redis文件夹(redis01、redis02........)启动redis,启动的时候加上修改后的配置文件,

命令:src/redis-server  ./redis.conf

e43fda164a4b6cbf794ace693084e95d.png

如果运行后出现下面的情况,则证明redis启动成功:

28a801789ddbe5b5887815727778fc2f.png

启动完第一个以后,一次进入对应的文件夹,依次执行src/redis-server  ./redis.conf命令即可。

所有的redis启动成功,查看一下:

命令:ps -ef | grep redis

a09fcbed34bdf661275e8dbd8ac94b66.png

所有的redis已经启动完成。

最后我们通过redis-cli命令启动我们的集群:

命令:/usr/local/redis/src/redis-cli --cluster create 192.168.1.88:7001 192.168.1.88:7002 192.168.1.88:7003 192.168.1.88:7004 192.168.1.88:7005 192.168.1.88:7006 --cluster-replicas 1

80663d5aa7e5afaa047f0b694249f1f0.png

运行结果:

6721f53492a11fa1f5e2befb51dfdc54.png

恭喜,redis集群搭建成功

通过命令:/usr/local/redis/src/redis-cli -c -p 7001 cluster nodes查询集群状态:

88b995963e675054fbac486092dd2f2d.png

关闭集群命令:/usr/local/redis/src/redis-cli -c -h 192.168.1.88 -p 7001 shutdown

这里说明一下:此文章中经常出现/usr/local/redis这部分路径,在使用命令中,这部分命令并不是必须的,这部分命令是安装redis的路径,如果是安装在其他的路径下,则,这部分命令需根据自己情况而定。

集群已经部署完成,现在可以通过命令进行redis集群测试。

命令:/usr/local/redis/src/redis-cli -h 192.168.1.88 -p 7001 -c

-h:指定连接主机ip

-p:指定连接端口

-c:开启集群模式

在这里随便连接一个redis,连接以后通过info查看当前redis集群信息,找到Replication下的role,通过role的slave与master判断当前连接的redis是主机还是从机,如果是slave,则表示从机,如果是master,则表示主机,此时,如果是主机,只需要在主机里面存储一个数据,然后连接到从机里面查看刚才存储的数据是否存在;如果是从机,当我们存储数据的时候,看连接的信息会不会自动跳转到主机。如果主机存储的数据从机里面有,在从机里面存储数据,自动跳转到主机,则表示集群搭建成功。

在生产模式中搭建集群与此时搭建集群操作基本相同,只是这里的测试主机都是同一个,模拟的集群搭建。生产时,只需要把ip与端口换成生产的ip与端口即可。

到此,redis集群的搭建成功完成,在此记录学习编程的第N天——2020-10-20

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐