设为首页 收藏本站
查看: 1437|回复: 1

[经验分享] Redis集群官方推荐方案 Redis-Cluster

[复制链接]

尚未签到

发表于 2017-12-20 20:32:54 | 显示全部楼层 |阅读模式
      Redis-Cluster

redis使用中遇到的瓶颈
  我们日常在对于redis的使用中,经常会遇到一些问题
  1、高可用问题,如何保证redis的持续高可用性。
  2、容量问题,单实例redis内存无法无限扩充,达到32G后就进入了64位世界,性能下降。
  3、并发性能问题,redis号称单实例10万并发,但也是有尽头的。

redis-cluster的优势  
  1、官方推荐,毋庸置疑。
  2、去中心化,集群最大可增加1000个节点,性能随节点增加而线性扩展。
  3、管理方便,后续可自行增加或摘除节点,移动分槽等等。
  4、简单,易上手。

redis-cluster名词介绍
  1、master  主节点、
  2、slave   从节点
  3、slot    槽,一共有16384数据分槽,分布在集群的所有主节点中。

redis-cluster简介
DSC0000.png

  图中描述的是六个redis实例构成的集群
  6379端口为客户端通讯端口
  16379端口为集群总线端口
  集群内部划分为16384个数据分槽,分布在三个主redis中。
  从redis中没有分槽,不会参与集群投票,也不会帮忙加快读取数据,仅仅作为主机的备份。
  三个主节点中平均分布着16384数据分槽的三分之一,每个节点中不会存有有重复数据,仅仅有自己的从机帮忙冗余。

集群部署
  测试部署方式,一台测试机多实例启动部署。
  安装redis
  

$ wget http://download.redis.io/releases/redis-3.2.8.tar.gz  
$ tar xzf redis-3.2.8.tar.gz
  
$ cd redis-3.2.8
  
$ make
  

  修改配置文件 redis.conf
  

#redis.conf默认配置  
daemonize yes
  
pidfile
/var/run/redis/redis.pid  #多实例情况下需修改,例如redis_6380.pid  
port
6379        #多实例情况下需要修改,例如6380  
tcp
-backlog 511  
bind
0.0.0.0        
timeout
0  
tcp
-keepalive 0  
loglevel notice
  
logfile
/var/log/redis/redis.log      #多实例情况下需要修改,例如6380.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  #多实例情况下需要修改,例如dump.6380.rdb
  
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"  #多实例情况下需要修改,例如 appendonly_6380.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-entries 512  
list
-max-ziplist-value 64  
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  

  
#################自定义配置
  
#系统配置
  
#vim
/etc/sysctl.conf  
#vm.overcommit_memory
= 1  

  
aof
-rewrite-incremental-fsync yes  
maxmemory 4096mb
  
maxmemory
-policy allkeys-lru  

dir /opt/redis/data      #多实例情况下需要修改,例如/data/6380  

  
#集群配置
  
cluster
-enabled yes  
cluster
-config-file /opt/redis/6380/nodes.conf   #多实例情况下需要修改,例如/6380/  
cluster
-node-timeout 5000  

  

  
#从ping主间隔默认10秒
  
#复制超时时间
  
#repl
-timeout 60  

  
#远距离主从
  
#config set client
-output-buffer-limit "slave 536870912 536870912 0"  
#config set repl
-backlog-size 209715200  

  启动六个实例:
  

/编译安装目录/src/redis-server redis.conf  

  注意,redis.conf应为6个不同的修改过的多实例配置文件。
  注意,配置文件复制六分后,有许多需要你修改的地方。

创建redis-cluster
  redis-trib.rb命令与redis-cli命令放置在同一个目录中,可全路径执行或者创建别名。

redis-trib.rb create --replicas 0 127.0.0.1:6310 127.0.0.1:6320 127.0.0.1:6330 127.0.0.1:6340 127.0.0.1:6350 127.0.0.1:6360
只要缺失了任意一部分的槽,redis-cluster便无法读取。
测试强行停机一台,既显示:
127.0.0.1:6310> get key
(error) CLUSTERDOWN The cluster is down
注:这里分片设置为了0
启动丢失的那一台后既恢复。数据不会丢失。

移动槽

redis-trib.rb reshard 127.0.0.1:6360
执行集群reshard操作,通过集群中127.0.0.1:6360这一台机器
[OK] All 16384 slots covered.
How many slots do you want to move (from 1 to 16384)? 2731
输入需要移动的槽数量
What is the receiving node>
输入接收的节点的ID
How many slots do you want to move (from 1 to 16384)? 2731
What is the receiving node>
Please enter all the source node>
  Type 'all' to use all the nodes as source nodes for the hash slots.
  Type 'done' once you entered all the source nodes>
Source node #1:0ddb4e430dda8778ac873dd169951c7d71b8235e
Source node #2:done
输入所有被移动的节点ID,确认后输入done
    Moving slot 5460 from 0ddb4e430dda8778ac873dd169951c7d71b8235e
    Moving slot 13653 from 0ddb4e430dda8778ac873dd169951c7d71b8235e
Do you want to proceed with the proposed reshard plan (yes/no)?
检查后输入yes进行移动分槽
至此,分槽移动完毕。
删除节点

redis-trib.rb del-node 127.0.0.1:6360 'f24c0c1ecf629b5413cbca632d389efcad7c8346'
最后跟着的是这个节点的ID,可在redis-cli终端中使用CLUSTER NODES查看
必要条件,此节点所有分槽均已移除。
添加master节点

redis-trib.rb add-node 127.0.0.1:6360 127.0.0.1:6350
新节点必须是空的,不能包含任何数据。请把之前aof和dump文件删掉,并且若有nodes.conf也需要删除。
add-node  将一个节点添加到集群里面, 第一个是新节点ip:port, 第二个是任意一个已存在节点ip:port
node:新节点没有包含任何数据, 因为它没有包含任何slot。新加入的加点是一个主节点, 当集群需要将某个从节点升级为新的主节点时, 这个新节点不会被选中,同时新的主节点因为没有包含任何slot,不参加选举和failover。
添加一个从节点

前三步操作同添加master一样
第四步:redis-cli连接上新节点shell,输入命令:cluster replicate 对应master的node-id  注:
  安装部署部分不是无脑复制即可,请结合你的主机情况进行操作,若有问题可以联系我  QQ:2169866431

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-426196-1-1.html 上篇帖子: Java 使用Jedis连接Redis数据库( 下篇帖子: redis防止重复提交
累计签到:1103 天
连续签到:2 天
发表于 2017-12-24 20:11:00 | 显示全部楼层
大神,有没有相关的操作文档或视频啊?

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表