RedisCluster集群快速入门备忘

database

RedisCluster 集群快速入门备忘

PS : 该教程基于Redis5.0+

Redis cluster集群" title="cluster集群">cluster集群需要注意:

  1. 可以线性扩张到1000个节点
  2. 节点使用P2P而非Proxy方式交互,牺牲了数据一致性.
  3. 客户端容忍一定程度的数据丢失
  4. 数据按照Slot存储分布在多个Redis实例上
  5. 集群节点挂掉会自动故障转移

需要知道:

所有的主节点对应到[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

回到顶部