福利:这是我的个人IT资源网站,所有资源都免费,注册登录后就可以看到密码,需要什么大家尽情选取!
今天来说一说redis集群,redis集群主要解决的就是单体存储的限制,通过集群的方式扩大redis的存储,比如我有三台物理机,那么我可以在每一台部署一个redis服务,将三台redis服务连接成一个集群,那么集群整体的存储就扩大了三倍,下边说一些关于redis集群的知识和一些注意的点
-
首先搭建redis集群,需要将redis的配置文件中的cluster-mode打开,以集群模式运行,每个节点要注意开放端口,这里要开放两个端口,一个是正常redis服务访问的端口,另一个就是集群总线的通讯端口,一般是在服务端口前面加个1,例如服务端口为6379则集群总线的通讯端口为16379,当我们将各个节点启动后,需要把它们串联起来才能形成集群,串联的任务在一个节点中就能完成,这个过程就是握手的过程,当握手成功后,各个节点的信息都会共享,比如节点A握手节点B,节点A握手节点C,那么节点B和节点C的信息自然就共享了,不需要再次握手,就好比公司成员,我招了两个人,那么他们互相也就成了同事,如下图      以集群模式登录客户端:redis-cli -c 节点握手命令:cluster meet 握手对方IP 握手对方端口,成功返回OK 查看集群几点信息命令:cluster nodes  -
握手成功后,其实此时集群还未工作,因为只是互相认识了,还没分配具体负责的内容,那么接下来需要各自接手工作,就是分配槽,槽就相当于储物格,总共有16384个槽,那么不管集群的总的存储有多大,槽的总数就是16384,只是随着集群节点的存储大小改变,以及节点槽的数量,分摊到每个槽的存储大小也随之改变,如下图,四个节点最后的数目就是各自分配的槽的数量  分配槽的命令:redis-cli cluster addslots {0…5000}(重点:中间是两个小数点,开头是起始槽下表,末尾是终止槽下标,总的就是0到16383) -
将16384个槽分配好后,输入命令:cluster info,会看到此时集群就准备好了,当我们在各个节点存储数据时,会通过算法将数据存在每个槽上  -
那么我们后期想要增加节点怎么办呢,增加完节点怎么将我们已分配好的16384个槽分一部分给的新的节点呢,这个在redis客户端无法完成了,必须使用redis的集群管理工具redis-trib去实现槽重新分片,可以将一个节点上的槽或者整个集群的槽迁移到新的节点上,这个redis-trip工具是在redis源码的src下文件夹,redis源码可以直接去git上下载,这个程序运行需要依赖ruby环境,具体安装可以上网查询  安装好环境后,找到redis-trib程序,先创建集群,就是将集群让redis-trib连接上,可以通讯,这里说到通讯需要说明一下,要想用redis-trip管理,节点不能设置密码,不然redis-trib连接不上,通讯失败一般有几个点,首先就是端口开放,集群模式下要开放两个端口,看上方的1,其次就是ip,如果protected-mode是yes,且不在同一台机器,那么bind的ip需要设置成0.0.0.0才能访问,最后就是看是否设置了密码,redis-trib创建集群的命令为./redis-trib.rb create 节点IP1:节点端口1 节点IP2:节点端口2 节点IP3:节点端口3 节点IPn:节点端口n  当我们记不住命令的时候,都可以通过help来查看,例如查看集群相关命令,在redis客户端命令行输入cluster help即可 创建好后,我们通过一个节点去查看的命令是./redis-trib.rb check 节点IP:节点端口,如下图  可以看到四个节点连接状态都OK,然后16384个槽都已分配,其中6376是我新增的节点,并将6377的槽转移了200个到6376,大家可以观察一下上图
那么重新下边我再执行一次,再将6377的200个槽迁移到6376 迁移槽的命令为:./redis-trib.rb reshard 节点IP:节点端口(这个节点是集群中任意一个即可,用来获取集群信息)
  但是第一次很容易失败,容易出现下图情况  当再此分片时就无法分片,必须处理一下10202,那么我们6376节点看一下10202到底成功迁移了吗  我们可以看到并没有,是一个指向的中间状态,那么我们可以先删除10202,然后再分配给6366 删除槽:redis-cli -p 6376 cluster delslots 10202  分配槽:redis-cli -p 6376 cluster addslots 10202  这样就解决了第一次分配槽的问题,再此进行迁移    然后执行完没有出错,我们再查看一下槽的信息,如下图红框内,将201个槽已经从6377迁移到了6376,不管是空槽还是槽中有数据,都会迁移过去 
好了,今天和大家主要说了一些关于redis集群以及通过集群管理工具迁移槽的知识,对于集群管理工具以及槽的命令的更多用法,大家可以通过help指令去查看并更详细地去了解实践,学习是一个枯燥乏味地过程,但也是一个充满收获和喜悦地过程,实践的过程中很容易失败,但是每次失败都是一次宝贵的经验,为成功奠定扎实的基础,失败是成功之母就是这个道理,欢迎大家观看我的文章,并将其中的不足之处指出讨论,互相学习进步?
|