集群
redis在3.0后开始支持cluster模式,目前redis的集群支持节点的自动发现,支持slave-master选举和容错,
支持在线分片{sharding shard}等特征。
集群的细节
-所有的redis节点彼此互联(ping-pong机制),内部使用二进制协议优化传输速度和带宽。
-节点的fail是通过集群中超过半数的节点检测失效时才生效。
-客户端与redis节点直连,不需要中间件proxy层,客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可
-redis-cluster把所有的物理节点(物理节点:对外提供服务的节点,如:master节点)映射到[0-16383]slot上,cluster 负责维护node(节点)<->slot<->value
集群搭建
判断一个是集群中的节点是否可用,是集群中的所用主节点选举过程,如果半数以上的节点认为当前节点挂掉,那么当前节点
就挂掉了,所以搭建redis集群时建议节点数最好为奇数个,搭建集群至少需要三个主节点,三个从节点,至少需要六个节点。
1.准备环境安装ruby以及redis集群依赖
- yum install -y ruby rubygems
- gem install redis-xxx.gem
2.在一台机器创建6个目录在加一个目录测试
mkdir 7000 7001 7002 7003 7004 7005 7006
3.每个目录复制一份配置文件
[root@localhost ~]# cp redis-6.0.9/redis.conf 7000/
[root@localhost ~]# cp redis-6.0.9/redis.conf 7001/
[root@localhost ~]# cp redis-6.0.9/redis.conf 7002/
[root@localhost ~]# cp redis-6.0.9/redis.conf 7003/
[root@localhost ~]# cp redis-6.0.9/redis.conf 7004/
[root@localhost ~]# cp redis-6.0.9/redis.conf 7005/
[root@localhost ~]# cp redis-6.0.9/redis.conf 7006/
4.修改不同目录配置文件
- port 6379 ...//修改端口 分别改成对应的端口
- bind 0.0.0.0 //开启远程连接
- cluster-enabled yes //开启集群模式
- cluster-config-file nodes-port.conf //集群节点配置文件 port为对应的端口号
- cluster-node-timeout 5000 //集群节点超时时间
- appendonly yes //开启aof持久化
//下面可不改
- daemonize yes //守护进程 不占用窗口,后台运行
- dbfilename dump.rdb 改为 dump-7000.rdb //如果是一台机器上运行的话 7000改为对应的端口号
- appendfilename "appendonly.aof" 改为 "appendonly-7000.aof" //如果是一台机器上运行的话 7000改为对应的端口号
- pidfile /var/run/redis.pid 改为 /var/run/redis_7000.pid //redis的进程文件
5.指定不同目录配置文件启动七个节点
- [root@localhost bin]# ./redis-server /root/7000/redis.conf
- [root@localhost bin]# ./redis-server /root/7001/redis.conf
- [root@localhost bin]# ./redis-server /root/7002/redis.conf
- [root@localhost bin]# ./redis-server /root/7003/redis.conf
- [root@localhost bin]# ./redis-server /root/7004/redis.conf
- [root@localhost bin]# ./redis-server /root/7005/redis.conf
- [root@localhost bin]# ./redis-server /root/7006/redis.conf
小插曲 :删除文件夹 rm -rf 7000
6.查看进程
- [root@localhost bin]# ps aux|grep redis
一定要有[cluster] 这个标志
创建集群
1.复制集群操作脚本到bin目录中
- [root@localhost bin]# cp /root/redis-6.0.9/src/redis-trib.rb /usr/redis/bin/
2.创建集群
- ./redis-trib.rb create --replicas 1 192.168.139.129:7000 192.168.139.129:7001 192.168.139.129:7002 192.168.139.129:7003 192.168.139.129:7004 192.168.139.129:7005
查看集群状态
1.查看集群状态 check [原始集群中任意节点] [无]
- ./redis-trib.rb check 192.168.202.205:7000
小插曲 :redis客户端登录 - [root@localhost bin]# ./redis-cli -p 7000 -c (-c代表集群)
2.集群节点状态说明
- 主节点
主节点存在hash slots ,且主节点的hash slots 没有交叉
主节点不能删除
一个主节点可以有多个从节点
主节点宕机时多个副本之间自动选举主节点
-从节点
从节点没有hash slots
从节点可以删除
从节点不负责数据的写,只负责数据的同步
3.添加主节点
1.添加主节点 add-node [新加入节点] [原始集群中任意节点]
- ./redis-trib.rb add-node 192.168.139.129:7006 192.168.139.129:7000
- 注意
1.该节点必须以集群模式启动
2.默认情况下该节点就是以master节点形式添加
4.添加从节点
1.添加从节点 add-node --slave [新加入节点] [集群中任意节点]
- ./redis-tribe.rb add-node --slave 192.168.139.129:7006 192.168.139.129:7000
-注意:
当添加副本节点时没有指定主节点,redis会随机给副本节点较少的主节点添加副本节点
2.为确定的master节点添加主节点 add-node --slave --master-id master节点id [新加入节点] [集群中任意节点]
- ./redis-tribe.rb add-node --slave --master-id 3csadjh6jdj6njn4vnn3nvfnf7n 192.168.139.129:7006 192.168.139.129:7000
5.删除副本节点
1.删除节点 del-node [集群中任意节点] [删除节点id]
- ./redis-trib.rb del-node 192.168.139.129:7006 3csadjh6jdj6njn4vddnn3nvfnf7n
- 注意:
1.被删除的节点必须是从节点或没有被分配的hash slots的节点
6.集群在线分片
1.在线分片 reshard [集群中任意节点] [无]
- ./redis-trib.rb reshard 192.168.139.129:7000