RedisCluster集群快速入门备忘
RedisCluster 集群快速入门备忘
PS : 该教程基于Redis5.0+
Redis cluster集群" title="cluster集群">cluster集群需要注意:
- 可以线性扩张到1000个节点
- 节点使用P2P而非Proxy方式交互,牺牲了数据一致性.
- 客户端容忍一定程度的数据丢失
- 数据按照Slot存储分布在多个Redis实例上
- 集群节点挂掉会自动故障转移
需要知道:
所有的主节点对应到[0-16383]整数区间--槽道slot;各自的主节点维护一批槽道号(0-5000,5001-10000,10001-16383);
所以如果一条数据保存在0-5000的槽中,而此槽保存在节点1中,那么如果用户一直请求这条数据或者说在打这一条数据,此时的性能还不如单机Redis性能.
Redis集群的整体性能和单机这一块需要分清楚才能更好的在项目利用.
集群常用命令与配置
常用命令
# 下载Redis$ wget http://download.redis.io/releases/redis-5.0.5.tar.gz
# 查看进程
$ ps -ef | grep redis
# 连接到指定的节点(一定要加入-c,否则进入的就不是集群环境)
$ redis-cli -h 127.0.0.1 -p 7000 -c
# 创建集群(需要Redis位于启动状态)
# create : 创建集群
# --cluster-replicas 1 一台为副本机(备份机)如果数据冗余是1的话,至少要3个Master和3个Slave,共6台
$ redis-cli --cluster create 127.0.0.1:7000 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 --cluster-replicas 1
# 追加节点
$ redis-cli --cluster add-node 127.0.0.1:7000 127.0.0.1:7001
# 查看集群状态(输入任意节点,即可会带出所有的节点状态)
$ redis-cli --cluster check 127.0.0.1:7000
# 查看节点
$ redis-cli cluster nodes -h 127.0.0.1 -p 7000 -c
# 删除节点
$ redis-cli --cluster del-node 127.0.0.1:7000
# 关闭节点(关闭redis集群不能直接kill掉进程,否则无法保存数据,必须这样正常关闭)
$ redis-cli -h 127.0.0.1 -p 7000 shutdown
# 如果你不想混了可以这样关闭进程
ps -ef | grep redis | awk "{print $2}" | xargs kill
集群命令
Redis集群的命令以下命令不需要redis-cli --cluster 而是redis-cli cluster即可
集群
cluster info :打印集群的信息
cluster nodes :列出集群当前已知的所有节点( node),以及这些节点的相关信息。
节点
cluster meet <ip> <port> :将 ip 和 port 所指定的节点添加到集群当中,让它成为集群的一份子。
cluster forget <node_id> :从集群中移除 node_id 指定的节点(保证空槽道)。
cluster replicate <node_id> :将当前节点设置为 node_id 指定的节点的从节点。
cluster saveconfig :将节点的配置文件保存到硬盘里面。
槽(slot)
cluster addslots <slot> [slot ...] :将一个或多个槽( slot)指派( assign)给当前节点。
cluster delslots <slot> [slot ...] :移除一个或多个槽对当前节点的指派。
cluster flushslots :移除指派给当前节点的所有槽,让当前节点变成一个没有指派任何槽的节点。
cluster setslot <slot> node <node_id> :将槽 slot 指派给 node_id 指定的节点,如果槽已经指派给
另一个节点,那么先让另一个节点删除该槽>,然后再进行指派。
cluster setslot <slot> migrating <node_id> :将本节点的槽 slot 迁移到 node_id 指定的节点中。
cluster setslot <slot> importing <node_id> :从 node_id 指定的节点中导入槽 slot 到本节点。
cluster setslot <slot> stable :取消对槽 slot 的导入( import)或者迁移( migrate)。
键
cluster keyslot <key> :计算键 key 应该被放置在哪个槽上。
cluster countkeysinslot <slot> :返回槽 slot 目前包含的键值对数量。
cluster getkeysinslot <slot> <count> :返回 count 个 slot 槽中的键
集群配置
# 绑定登录的IP地址,别忘了注销咯,或者改成当前服务器的IP地址# 注销后外部无法访问,本地测试就所谓了
bind 127.0.0.1
# 开启安全模式,一旦为yes上面就必须bind ip地址, 如果注释了上面的bind, 这里也要注释掉
# 否则平时无法用redis-cli -h 来远程访问该节点
protected-mode yes
# 监听的端口号
port 7000
# 以守护进程运行Redis
daemonize yes
# redis日志保存位置
logfile "./redis-7000.log"
# 设置库的数量,集群下只支持一个库
databases 16
# 开启AOF日志
appendonly yes
# 开启cluster集群
cluster-enabled yes
# 集群节点日志文件名
cluster-config-file nodes-7000.conf
# 集群节点同步超时时间 5s
cluster-node-timeout 5000
# 集群所有节点状态为ok才提供服务。建议设置为no,可以在slot没有全部分配的时候提供服务。
# 默认是yes,只要有结点宕机导致16384个槽没全被覆盖,整个集群就全部停止服务,所以一定要改为no
# 为no时,表示当负责一个插槽的主库下线且没有相应的从库进行故障恢复时,集群仍然可用,下面论证该情况。
# 为yes时,表示当负责一个插槽的主库下线且没有相应的从库进行故障恢复时,集群不可用,下面论证该情况。
cluster-require-full-coverage no
# 在进行故障转移的时候全部slave都会请求申请为master,但是有些slave可能与master断开连接一段时间了导致数据过于陈旧,不应该被提升为master。该参数就是用来判断slave节点与master断线的时间是否过长。判断方法是:比较slave断开连接的时间和(node-timeout * slave-validity-factor)+ repl-ping-slave-period如果节点超时时间为三十秒, 并且slave-validity-factor为10,假设默认的repl-ping-slave-period是10秒,即如果超过310秒slave将不会尝试进行故障转移
cluster-slave-validity-factor 10
# master的slave数量大于该值,slave才能迁移到其他孤立master上,如这个参数被设为2,那么只有当一个主节点拥有2个可工作的从节点时,它的一个从节点才会尝试迁移。
cluster-migration-barrier 1
以上是 RedisCluster集群快速入门备忘 的全部内容, 来源链接: utcz.com/z/532280.html