Redis
Redis入门系列
Redis是什么?
Redis学习推荐资料合集
Centos7源码部署Redis3.2.9
Redis版本历史
Redis字典
Redis原理
Redis的一致性哈希算法
Redis持久化 aof和rdb的原理配置
为什么Redis集群有16384个槽
Redis安装部署
Redis服务维护
Redis安全检查
Redis配置管理
redis性能测试redis-benchmark
redis迁移工具redis-migrate-tool
Redis配置文件参数详解
Redis5.0.8 Cluster集群部署
Redis监控参数
Reids安全加固
Redis增加测试数据
Redis慢查询配置和优化
Redis图形管理 redis-browser
Redis操作命令合集
redis实例cpu占用率过高问题优化
Redis_SQL语句
Redis集群
Redis集群断电恢复
Redis集群到集群迁移
Redis单点到集群迁移
Redis哨兵日志说明
Redis哨兵日常维护
Redis哨兵 部署和配置
Redis哨兵参数
Redis主从 部署和配置
Redis cluster 集群部署和配置
Redis cluster 集群命令合集
Redis cluster 集群报错合集
Redis新闻
Redis使用案例
你的Redis怎么持久化的
谈谈redis的热key问题如何解决
那些年用过的Redis集群架构
本文档使用 MrDoc 发布
-
+
home page
Redis cluster 集群部署和配置
[TOC] ## 一.集群简介 ### cluster介绍 redis cluster是去中心化的,集群中的每个节点都是平等的关系,每个节点都保存各自的数据和整个集群的状态。每个节点都和其他所有节点连接,而且这些连接保持活跃。 这样就保证了我们只需要连接集群中的任意一个节点,就可以获取到其他节点的数据。  ### cluster原理 Redis集群采用[一致性哈希槽](http://www.52wiki.cn/docs/zhishi/zhishi-1alavtuhdpf7v "一致性哈希")的方式将集群中每个主节点都分配一定的哈希槽,对写入的数据进行哈希后分配到某个主节点进行存储。 集群中每个主节点将承担一部分槽点的维护,而槽点中存储着数据,每个主节点都有至少一个从节点用于高可用。 节点通信方式: 开启一个端口 设置的端口号+10000,用于集群之间节点通信交换信息。每个节点默认每秒10次选择随机5个节点发送ping消息,将自身信息和知道的集群信息传递,收到ping消息后返回pong消息做回复。最后通过这种随机的消息交换,最终每个节点将获得所有信息。 当某个主节点挂掉,所有节点将会发现主节点挂掉了,作为主节点的从节点,就会接替主节点的工作,然后告诉所有其它节点,他成为了主。这样其它存活节点,就将它们维护的信息表更新。 这样当新的数据从任何一个节点从节点将接任做主,如果都挂掉集群将报错。当从一个节点操作,根据计算后将存储在其中一个主节点中,从节点将同步主的数据。 ### cluster特点 - 无中心 - 在线自动扩容缩减 - 自动故障切换 - 单层框架响应时间短 - 对mget/mset支持不友好 - 对pipline支持不友好 会开启一个单独端口 端口号为设置端口+10000,用于节点间通信,会不断和知道的节点交换信息表,最后知道集群全部信息,这会导致集群中不同节点之间要等一会信息才能一致。 ### 应用场景 适用于单台Redis纵向扩展已经无法满足需求,集群将横向扩展。每个节点将承担一部分数据的维护,并且有从节点用于高可用。 ## 二.集群部署 ### 环境介绍 ```python [Redis-Server-1] 主机名 = host-1 系统 = centos-7.3 地址 = 1.1.1.1 软件 = redis-3.2.9 7000 7001 [Redis-Server-2] 主机名 = host-2 系统 = centos-7.3 地址 = 1.1.1.2 软件 = redis-3.2.9 7002 7003 [Redis-Server-3] 主机名 = host-3 系统 = centos-7.3 地址 = 1.1.1.3 软件 = redis-3.2.9 7004 7005 ``` ### 节点部署 1.参照[Centos7源码部署Redis3.2.9](http://www.linkops.cn/303.htm "Centos7源码部署Redis3.2.9")文档在每个节点上部署redis。 2.每台机器上创建2个节点,以第一台为例子 `cd /usr/local/redis/` `mkdir -p cluster/{7000,7001}` 3.创建配置文件,编辑如下内容。在7000目录创建7000.conf配置文件,其他服务器和这台一样,都更改如下项目,端口对应即可。 ```python [root@linkops ~]# vim 7000.conf bind 1.1.1.1 127.0.0.1 #更改为绑定地址,127一定要在后面 protected-mode yes port 7000 #监听端口 cluster-enabled yes cluster-config-file nodes_7000.conf #加载配置文件 cluster-node-timeout 5000 tcp-backlog 511 timeout 0 tcp-keepalive 300 daemonize yes supervised no pidfile /var/log/redis/redis_7000.pid #PID文件,需要修改对应的端口 loglevel notice logfile "/var/log/redis/redis-server.log" databases 16 save 900 1 save 300 10 save 60 10000 stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes dbfilename dump.rdb dir ./ slave-serve-stale-data yes slave-read-only yes repl-diskless-sync no repl-diskless-sync-delay 5 repl-disable-tcp-nodelay no slave-priority 100 appendonly yes appendfilename "appendonly.aof" appendfsync everysec no-appendfsync-on-rewrite no auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb aof-load-truncated yes lua-time-limit 5000 slowlog-log-slower-than 10000 slowlog-max-len 128 latency-monitor-threshold 0 notify-keyspace-events "" hash-max-ziplist-entries 512 hash-max-ziplist-value 64 list-max-ziplist-size -2 list-compress-depth 0 set-max-intset-entries 512 zset-max-ziplist-entries 128 zset-max-ziplist-value 64 hll-sparse-max-bytes 3000 activerehashing yes client-output-buffer-limit normal 0 0 0 client-output-buffer-limit slave 256mb 64mb 60 client-output-buffer-limit pubsub 32mb 8mb 60 hz 10 aof-rewrite-incremental-fsync yes ``` 4.创建启动脚本(3台操作),启动脚本创建,3台都一样,需要更改如下内容 `vim /etc/init.d/redis7000` ```python #!/bin/sh REDISPORT=7000 #更改全局变量端口 EXEC=/usr/local/redis/bin/redis-server CLIEXEC=/usr/local/redis/bin/redis-cli PIDFILE=/var/log/redis/redis_${REDISPORT}.pid CONF="/usr/local/redis/cluster/${REDISPORT}/${REDISPORT}.conf" case "$1" in start) if [ -f $PIDFILE ] then echo "$PIDFILE exists, process is already running or crashed" else echo "Starting Redis server..." $EXEC $CONF fi ;; stop) if [ ! -f $PIDFILE ] then echo "$PIDFILE does not exist, process is not running" else PID=$(cat $PIDFILE) echo "Stopping ..." $CLIEXEC -p $REDISPORT shutdown while [ -x /proc/${PID} ] do echo "Waiting for Redis to shutdown ..." sleep 1 done echo "Redis stopped" fi ;; *) echo "Please use start or stop as first argument" ;; esac ``` 5.启动这些服务,加入自启动项目(3台都同样操作) `bash /etc/init.d/redis7000` ### 启动集群 1.参照[文档](http://www.linkops.cn/401.htm "文档")安装ruby(随便找一台即可操作) 2.安装redis的gem `wget http://shell-auto-install.oss-cn-zhangjiakou.aliyuncs.com/package/redis-4.0.1.gem` `gem install package/redis-4.0.1.gem` 3.启动集群 这里使用create命令,ruby脚本将创建集群。 --replicas 1 表示1主1从,前3个为主节点 `/usr/local/redis/src/redis-trib.rb create --replicas 1 1.1.1.1:7000 1.1.1.1:7001 1.1.1.2:7002 1.1.1.2:7003 1.1.1.3:7004 1.1.1.3:7005` ## 三.集群测试 连接集群后,查看集群信息 `/usr/local/redis/bin/redis-cli -c -h 192.168.4.212 -p 7001` `CLUSTER INFO`
日行一善
Dec. 10, 2020, 3:41 p.m.
Share documents
Collection documents
Last
Next
Scan wechat
Copy link
Scan your mobile phone to share
Copy link
关于 MrDoc
觅思文档MrDoc
是
州的先生
开发并开源的在线文档系统,其适合作为个人和小型团队的云笔记、文档和知识库管理工具。
如果觅思文档给你或你的团队带来了帮助,欢迎对作者进行一些打赏捐助,这将有力支持作者持续投入精力更新和维护觅思文档,感谢你的捐助!
>>>捐助鸣谢列表
微信
支付宝
QQ
PayPal
QQ粉丝交流群:882382311
Markdown文件
share
link
type
password
Update password