1.简介
尽管可以使用哨兵主从集群实现可用性保证,但是这种实现方式每个节点的数据都是全量复制,数据存放量存在着局限性,受限于内存最小的节点,因此考虑采用数据分片的方式,来实现存储,这个就是redis-cluster。
1.首先我们搭建单机版本的集群
你们可以看我之前的文章使用和安装
- 在你的redis/etc/文件夹下建立一个文件夹redis_cluster,然后再在此文件夹下建立六个文件夹(三主三从)7001-7006用来存放redis的配置文件redis.conf
- mkdir redis_cluster
3.从你的安装目录下复制一份redis.conf文件放置到7001下
4.修改配置文件
#修改端口和你的文件夹名一致
prot 7001
#配置后台运行
daemonize yes
#pidfile文件对应端口
pidfile /var/run/redis_7001.pid
#开启集群
cluster-enabled yes
#这个配置很重要,cluster开启必须重命名指定cluster-config-file,不能与别的节点相同,否则会启动失败,最好按主机+端口命名
cluster-config-file nodes_7001.conf
#集群超时时间,节点超过这个时间没反应就断定是宕机
cluster-node-timeout 5000
#存储方式开启aof 这个根据实际情况配置
appendonly yes
5.复制此配置文件到7002中依次将所有的配置文件如此修改即可
6.启动六个节点的redis
检查有没有启动成功
7.安装ruby
sudo yum install ruby
如果这里失败你可以参考https://blog.csdn.net/yjt520557/article/details/86324035
安装成功之后如果直接执行gem install redis指令是会报错的
所以我们先要处理采用rvm来更新ruby
指令为:
gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0
curl -sSL https://get.rvm.io | bash -s stable
安装完成后,会列出一些安装信息,其中有一行要注意:
To start using RVM you need to run `source /etc/profile.d/rvm.sh`
然后执行
source /etc/profile.d/rvm.sh
检查是否安装正确
rvm -v
使用rvm来更新ruby
查看已知版本
rvm list known
选择一个版本安装(这里以2.4.2为例子)
rvm install 2.4.2
等待一会就安装好了
设置默认版本
然后再查看版本
然后再执行gem install redis即可
创建集群
最后是执行创建集群,这里使用的是5.0版本的redis,创建集群命令都从./redis-trib.rb 迁移到redis-cli,可以使用redis-cli --cluster help来查看命令帮助;
执行如下指令创建集群
./redis-cli --cluster create 127.0.0.1:7001 127.0.0.1:7002
127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006 --cluster-replicas 1
如果是4.0的则执行
./redis-trib.rb create --replicas 1 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006
如果报错
[ERR] Node 127.0.0.1:7001 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.
提示我们redis服务实例上的数据不为空,因此逐个实例连接,执行flushdb,清空数据即可(如果已经对这几个节点搭建了集群也有可会报错这个)
然后执行创建指令
M为master S为slave这个在主从复制就讲过了
slots:[5461-10922]代表分配到的哈希槽是
从运行结果看 主节点就是7001 7002 7003 从节点分别是7004 7005 7006
最后问我们是否接受上面的设置,输入yes 就表示接受,我们输入yes
显示配置哈希槽,以及集群创建成功,可以用了;
执行redis-cli --cluster info 127.0.0.1:7001检查集群状态
我们可以看到每一个主机都有一台从机证明这是一个正确的集群
使用
我们先连接任意一个节点,然后添加一个key:
redis-cli是redis默认的客户端工具,启动时加上`-c`参数,`-p`指定端口,就可以连接到集群。
然后再别的集群节点也能够拿到数据
2.测试集群宕机的情况
我们可以看到所有的都在运行我们停掉7002这台机器
Kill -9 1940
然后再来查看集群的情况
因为7005由从节点对应的主节点是7002所以升级为主节点了并且占用了原来7002的哈希槽你们可以查看对比
All 16384 slots covered. 所有哈希槽都可覆盖了; 集群可以正常使用;
如果我们将7005节点也干掉会发生什么呢
这里我们发现 出事了,因为主从节点都挂了 所以有一部分哈希槽没得分配,最后一句
[ERR] Not all 16384 slots are covered by nodes. 没有安全覆盖;
所以不能正常使用集群;
如果再将两台机器恢复那么7005任然是主节点
3.多机多节点集群
首先你要准备两台虚拟机(主要是电脑不太好)
分别是141和142
我们把142作为集群控制端
修改配置创建节点
首先我们在142虚拟机里创建三个节点,端口分别是7001,7002,7003
我们先在root目录下新建一个redis_cluster目录,然后该目录下再创建3个目录,
分别是7001,7002,7003,用来存redis配置文件;
和上面的配置几乎一样只要将bind的ip地址换成自己虚拟机的就可以了
然后在141的机器上如法炮制即可注意bind的ip
然后执行如下指令创建集群即可
./redis-cli --cluster create 192.168.122.142:7001 192.168.122.142:7002 192.168.122.142:7003 192.168.122.141:7004 192.168.122.141:7005 192.168.122.141:7006 --cluster-replicas 1
然后都是和单机的集群是一样的