环境:
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文件
需要修改的内容如下
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.其他的没什么明显的印象,再研究研究
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.pid3.创建至少六个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.其他的没什么明显的印象,再研究研究