设为首页 收藏本站
查看: 543|回复: 0

[经验分享] redis演练(8) redis Cluster 集群环境安装

[复制链接]

尚未签到

发表于 2018-11-5 06:02:56 | 显示全部楼层 |阅读模式
  redis是个分布式缓存,与传统数据库最大的优势,在于它的“分布式”上。
  分布式的优势:

  •   容易实现容量的扩展
  •   数据的均等分布
  •   很好的高可用性
  redis 和memcached是分布式缓存的两款流行方案,他们之间的对比
redismemcached主从功能  Replication 支持
  主备自动切换
本身不支持,可以通过客户端自己实现键值一致性哈希槽一致性哈希集群服务端支持(但是beta版) unstable由客户端实现工具支持提供自带的工具(客户端redis-cli,check-rdb...)较弱数据存储支持不支持,重启数据丢失  本章主要内容
  安装一个三主的redis集群环境。
  准备
  由于本人没有接触过ruby语言,在安装之前做功课时,需要安装ruby环境等,心理上有了点小负担,担心遇到麻烦。后来,不出所料遇到了点麻烦。最后,还是安装成功了,回头想想,没有什么可担心的,无外乎失败了重装,真是年纪越大,胆子越小啊。我采用的方式,“兵来将挡,水来土掩”,有错就解决错,一步步安装。借助网络的力量,逐个把问题击破。
  安装ruby环境
  1.安装ruby
  遇到的问题
  未安装ruby
  版本过低
  未安装rubygem
  gem源出错
  请参考
  http://blog.csdn.net/c77_cn/article/details/38227797
  2. 编译redis cluster
  从https://github.com/antirez/redis/branches下载unstable版本。
编译  
make
此时,在/usr/local/src/redis-unstable/src 目录下生成了支持cluster的redis-server
  3.建立集群环境
1.建立目录  
cp /usr/local/redis
  
mkdir cluster-test
  
cd cluster-test/
  
mkdir 7000
  
mkdir 7001
  
mkdir 7002
  
2.复制redis-server
  
cp /usr/local/src/redis-unstable/src/redis-server  /usr/local/redis/cluster-test/7001
  
cp /usr/local/src/redis-unstable/src/redis-server  /usr/local/redis/cluster-test/7000
  
cp /usr/local/src/redis-unstable/src/redis-server  /usr/local/redis/cluster-test/7002
  
#集群管理工具(为了方便,将他复制到合适位置)
  
cp /usr/local/src/redis-unstable/src/redis-trib.rb /usr/local/redis/cluster-test
  3.建立3个cluster 节点对应的redis.conf文件
[root@hadoop2 cluster-test]# vi 7000/redis.conf  
port 7000
  
cluster-enabled yes
  
cluster-config-file nodes.conf
  
cluster-node-timeout 5000
  
appendonly yes
  
daemonize yes
  
logfile "redis7000.log"
  

  
#这是最简单的集群参数
  其他7001/redis.conf,7002.conf文件, 仅仅port和logfile参数不同,其他一样。
  此时 7000, 7001,7002目录下,只有2个文件,分别是 redis-server,redis.conf
  4. 启动(分别启动3个主节点)
  cd 7000  
  ./redis-server ./redis.conf
  
  cd ../7001/
  
  ./redis-server ./redis.conf
  
  cd ../7002
  
  ./redis-server ./redis.conf
  对应某个节点日志
  26361:M 10 Sep 21:13:22.054 * No cluster configuration found, I'm 7f242cf2c7ce5d84103638c5017f2204e1509f4c
  _._
  _.-``__ ''-._
  _.-``    `.  `_.  ''-._           Redis 3.2.3 (00000000/0) 32 bit
  .-`` .-```.  ```\/    _.,_ ''-._
  (    '      ,       .-`  | `,    )     Running in cluster mode
  |`-._`-...-` __...-.``-._|'` _.-'|     Port: 7001
  |    `-._   `._    /     _.-'    |     PID: 26361
  `-._    `-._  `-./  _.-'    _.-'
  |`-._`-._    `-.__.-'    _.-'_.-'|
  |    `-._`-._        _.-'_.-'    |           http://redis.io
  `-._    `-._`-.__.-'_.-'    _.-'
  |`-._`-._    `-.__.-'    _.-'_.-'|
  |    `-._`-._        _.-'_.-'    |
  `-._    `-._`-.__.-'_.-'    _.-'
  `-._    `-.__.-'    _.-'
  `-._        _.-'
  `-.__.-'
  26361:M 10 Sep 21:13:22.075 # Server started, Redis version 3.2.3
  26361:M 10 Sep 21:13:22.075 * DB loaded from append only file: 0.000 seconds
  26361:M 10 Sep 21:13:22.076 # I have keys for unassigned slot 5659. Taking responsibility for it.
  26361:M 10 Sep 21:13:22.076 # I have keys for unassigned slot 9980. Taking responsibility for it.
  26361:M 10 Sep 21:13:22.080 * The server is now ready to accept connections on port 7001
  5. 建立集群
./redis-trib.rb create  127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002  [root@hadoop2 cluster-test]# ./redis-trib.rb create  127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002
  >>> Creating cluster
  >>> Performing hash slots allocation on 3 nodes...
  Using 3 masters:
  127.0.0.1:7000
  127.0.0.1:7001
  127.0.0.1:7002
  M: 5ad201ebdf0553690295dcd06f89f15750e73989 127.0.0.1:7000
  slots:0-5460 (5461 slots) master
  M: 7f242cf2c7ce5d84103638c5017f2204e1509f4c 127.0.0.1:7001
  slots:5461-10922 (5462 slots) master
  M: 8ea7b0976e4848653435e4e77af311a6ade330a8 127.0.0.1:7002
  slots:10923-16383 (5461 slots) master
  Can I set the above configuration? (type 'yes' to accept): yes
  >>> Nodes configuration updated
  >>> Assign a different config epoch to each node
  >>> Sending CLUSTER MEET messages to join the cluster
  Waiting for the cluster to join.
  >>> Performing Cluster Check (using node 127.0.0.1:7000)
  M: 5ad201ebdf0553690295dcd06f89f15750e73989 127.0.0.1:7000
  slots:0-5460 (5461 slots) master
  0 additional replica(s)
  M: 8ea7b0976e4848653435e4e77af311a6ade330a8 127.0.0.1:7002
  slots:10923-16383 (5461 slots) master
  0 additional replica(s)
  M: 7f242cf2c7ce5d84103638c5017f2204e1509f4c 127.0.0.1:7001
  slots:5461-10922 (5462 slots) master
  0 additional replica(s)
  [OK] All nodes agree about slots configuration.
  >>> Check for open slots...
  >>> Check slots coverage...
  [OK] All 16384 slots covered.
  这时候主节点日志
  26536:M 10 Sep 21:25:32.360 * DB loaded from append only file: 0.000 seconds
  26536:M 10 Sep 21:25:32.361 * The server is now ready to accept connections on port 7000
  26536:M 10 Sep 21:27:54.651 # configEpoch set to 1 via CLUSTER SET-CONFIG-EPOCH
  26536:M 10 Sep 21:27:54.660 # IP address for this node updated to 127.0.0.1
  26536:M 10 Sep 21:27:59.619 # Cluster state changed: ok
  6.测试
[root@hadoop2 cluster-test]#  /usr/local/redis/bin/redis-cli  -c -p 7000  
127.0.0.1:7000> keys *
  
(empty list or set)
  
127.0.0.1:7000> set title "cluster1"
  
OK
  
127.0.0.1:7000> set title1 "cluster1"
  
OK
  
127.0.0.1:7000> set title2 "cluster1"
  
-> Redirected to slot [14045] located at 127.0.0.1:7002
  
OK
  

  
127.0.0.1:7002> set title5 "cluster4"
  
-> Redirected to slot [1594] located at 127.0.0.1:7000
  
OK
  
127.0.0.1:7000> set title3 "cluster4"
  
-> Redirected to slot [9980] located at 127.0.0.1:7001
  
OK
  
127.0.0.1:7001> get title
  
-> Redirected to slot [2217] located at 127.0.0.1:7000
  
"cluster1"
  
127.0.0.1:7000> get title2
  
-> Redirected to slot [14045] located at 127.0.0.1:7002
  
"cluster8111"
  
127.0.0.1:7002> get title3
  
-> Redirected to slot [9980] located at 127.0.0.1:7001
  
"cluster4"
  

  
#节点间来回重定向
  到了这里,环境算是搭建好了。当然,这是最简单的集群了。以后随着演练的深入,也会对集群进行深入探讨。
  遇到问题
  可能遇到的错误(是第二次建立集群时报错)
  ERR Slot 2217 is already busy (Redis::CommandError)
  解决方法: (in all nodes did FLUSHALL and then CLUSTER RESET SOFT)
  Either the node already knows other nodes
  [root@hadoop2 cluster-test]# ./redis-trib.rb create  127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002
  >>> Creating cluster
  [ERR] Node 127.0.0.1:7000 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.
  解决方法:这是因为重复设置集群。
  重启集群,发现数据丢失
  集群创建完成后,当关机或者关闭集群再次启动的时候,一定要在node-conf所在的目录启动各个节点,
  集群才能正常连接。
  参考资源
  http://blog.csdn.net/c77_cn/article/details/38227797
  http://redis.io/topics/cluster-tutorial
  http://redisdoc.com/topic/cluster-tutorial.html



运维网声明 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-630768-1-1.html 上篇帖子: phpredis -- Redis编译安装,PHP 7 安装 Redis 扩展 下篇帖子: ELK(elasticsearch+logstash+kibana)+redis实现nginx 日志的分析
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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