您的位置:首页 > 数据库 > Redis

redis-cluster搭建&初步体验

2020-01-15 09:59 141 查看
环境:
    RedHat6---Linux 2.6.32-279.el6.x86_64
    redis-3.0.3

目的:
    看看除了codis以外的集群方案怎么样,官方版本应该会一直维护,redis-cluster的介绍参考官方文档http://redis.io/topics/cluster-spec

前期准备:
    创建cluster需要rubygems,这里一起放上RH6需要的rpm包名,如果能直接yum安装自然是最方便
    openssl-1.0.1e-30.el6.x86_64
    ruby-1.8.7.374-4.el6_6.x86_64
    ruby-libs-1.8.7.374-4.el6_6.x86_64
    ruby-rdoc-1.8.7.374-4.el6_6.x86_64
    ruby-irb-1.8.7.374-4.el6_6.x86_64
    rubygems-1.3.7-5.el6.noarch
    rpm包安装好以后,一定要记得执行命令:gem install redis

搭建过程:

1.安装redis-3.0.3
    redis的官网下载即可,使用tar zxvf命令解压,然后make && make install就ok了

2.修改redis.conf文件
    需要修改的内容如下   

    port 7000

    cluster-enabled yes

    cluster-config-file nodes.conf

    cluster-node-timeout 5000

    appendonly yes

    (个人建议顺便改了)pidfile /var/run/redis-7000.pid

3.创建至少六个redis实例
   方法一:把redis.conf拷贝成redis7000.conf ~ redis7005.conf,修改端口号(和pid文件路径)
   方法二:拷贝redis目录为redis-3.0.3-7000 ~ redis-3.0.3-7005,修改端口号(和pid文件路径)(测试用的这种方式)

4.分别启动六个redis实例
   特别需要注意,在redis-3.0.3这个版本,如果只是启动redis-server而不带上配置文件,则会按照内置配置启动,不会去读目录下的redis.conf的内容
   nohup ./src/redis-server ./redis.conf &

5.使用ruby脚本创建cluster
   命令:./src/redis-trib.rb create --replicas 1 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
   PS:./src/redis-trib.rb help 可以看到命令的介绍;create就是创建cluster,--replicas 1代表每个cluster的Master至少包含一个slave,后面跟上加入到cluster的redis实例
   如果没有问题,会有如下输出,中间输入一下yes


使用redis-cli登录到任意一个redis实例都可以看到cluster的信息,最前面是NodeID,然后是IP:PORT,M/S,0-5460是slot的范围,其他的暂时没有太仔细研究,

尝试一下shutdown端口为7005的slave实例,看看nodes的信息,7005已经被标记为fail


那么再试试启动这个实例


重新启动的实例再次进入了cluster,那么试试shutdown端口为7001的Master实例,发现新的7004被选举为Master,重启以后,7001以slave的身份加入cluster


那么问题来了,cluster启动是没问题,但是那个ruby脚本并没有提供关闭集群的方法,仔细观察help的话,可以发现脚本提供了add和del的方式来调整集群,在正常情况下应该是能满足使用了

如果要关闭cluster,最简单粗暴的办法就是关闭所有实例,不过这些实例启动之后,cluster的信息还在,启动以后又会自动加入cluster

假设有新需求需要重新配置cluster,但是又不想用add和del的方式,怎么办?

在redis-cli内使用cluster reset命令,就能清除某个redis实例保存的cluster信息了~之后就可以随意修改了~

---------------------------------------------------------------------------------------------华丽的分割线-------------------------------------------------------------------------------------------------------------

个人翻译和理解
简单的写一点redis-cluster官方文档里面的一些重点:
1.redis-cluster会丢失数据,指的是当某一个Master进行操作的时候,Master会主动扩散这个write操作,然而当Master本身完成了write,但是在扩散write操作之前就挂了,且在Node-TimeOut的时间之内没有恢复,那么这个write操作就丢了。
2.redis-cluster的failover会在1-2秒内完成Master选举和标记fail实例,但是这是在经过Node-TimeOut的时间,判断为fail之后,即redis-cluster的failover消耗的时间实际上为Node-TimeOut+(1-2秒
3.其他的没什么明显的印象,再研究研究

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29510932/viewspace-1788524/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29510932/viewspace-1788524/

  • 点赞
  • 收藏
  • 分享
  • 文章举报
crty2245 发布了0 篇原创文章 · 获赞 0 · 访问量 702 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: