首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Redis集群研究和实践(基于redis 3.0.5)-2

Redis集群研究和实践(基于redis 3.0.5)-2

Redis Cluster主从模式redis cluster 为了保证数据的高可用性,加入了主从模式,一个主节点对应一个或多个从节点,主节点提供数据存取,从节点则是从主节点拉取数据备份,当这个主节点挂掉后,就会有这个从节点选取一个来充当主节点,从而保证集群不会挂掉。
上面那个例子里, 集群有ABC三个主节点, 如果这3个节点都没有加入从节点,如果B挂掉了,我们就无法访问整个集群了。A和C的slot也无法访问。
所以我们在集群建立的时候,一定要为每个主节点都添加了从节点, 比如像这样, 集群包含主节点A、B、C, 以及从节点A1、B1、C1, 那么即使B挂掉系统也可以继续正确工作。
B1节点替代了B节点,所以Redis集群将会选择B1节点作为新的主节点,集群将会继续正确地提供服务。 当B重新开启后,它就会变成B1的从节点。
不过需要注意,如果节点B和B1同时挂了,Redis集群就无法继续正确地提供服务了。
流程下图所示:


redis cluster 动手实践网上有很多教程,我最先是按照这个教程( ) 一步步的按照这个教程来,可是在最后启动集群的时候第一台机器的6379端口死活启动不了,这样就没有3台主服务器,就完成不了集群。最后也没找到解决办法。[知道原因了:我把redis-trib.rb create --replicas 1的 这个1没有写!!!!]
现在,还是按照官方的教程,全程再演示一次,官方教程是在一台机器上启动6个节点,3个当主,3个当从( ):
先下载官方的redis 版本(3.0.5) :  

下载不了,请自行FQ。我这次是在centos6.5上演示,用的是root 账户。
如果之前已经下载了redis的 2.x版本,只需要将 /usr/local/bin/redis-* 这几个命令先删除即可。

1.解压[root@web3 ~]# tar zxvf redis-3.0.5.tar.gz
2.安装[root@web3 ~]# cd redis-3.0.5[root@web3 ~]# make && make install

3.将redis-trib.rb 复制到/usr/local/bin[root@web3 redis-3.0.5]# cd src/[root@web3 src]# cp redis-trib.rb /usr/local/bin
4.开始集群搭建[url=][/url]
[root@web3 redis-3.0.5]# vi redis.conf#修改以下地方port 7000cluster-enabled yescluster-config-file nodes.confcluster-node-timeout 5000appendonly yes[url=][/url]



新建6个节点:
[url=][/url]
[root@web3 redis-3.0.5]# mkdir -p /usr/local/cluster-test[root@web3 redis-3.0.5]# cd /usr/local/cluster-test/[root@web3 cluster-test]# mkdir 7000[root@web3 cluster-test]# mkdir 7001[root@web3 cluster-test]# mkdir 7002[root@web3 cluster-test]# mkdir 7003[root@web3 cluster-test]# mkdir 7004[root@web3 cluster-test]# mkdir 7005[url=][/url]


将redis.conf 分别拷贝到这6个文件夹中,并修改成对应的端口号
[url=][/url]
#拷贝配置文件[root@web3 cluster-test]# cp /root/redis-3.0.5/redis.conf /usr/local/cluster-test/7000[root@web3 cluster-test]# cp /root/redis-3.0.5/redis.conf /usr/local/cluster-test/7001[root@web3 cluster-test]# cp /root/redis-3.0.5/redis.conf /usr/local/cluster-test/7002[root@web3 cluster-test]# cp /root/redis-3.0.5/redis.conf /usr/local/cluster-test/7003[root@web3 cluster-test]# cp /root/redis-3.0.5/redis.conf /usr/local/cluster-test/7004[root@web3 cluster-test]# cp /root/redis-3.0.5/redis.conf /usr/local/cluster-test/7005#修改端口号root@web3 cluster-test]# sed -i "s/7000/7001/g" /usr/local/cluster-test/7001/redis.conf[root@web3 cluster-test]# sed -i "s/7000/7002/g" /usr/local/cluster-test/7002/redis.conf[root@web3 cluster-test]# sed -i "s/7000/7003/g" /usr/local/cluster-test/7003/redis.conf[root@web3 cluster-test]# sed -i "s/7000/7004/g" /usr/local/cluster-test/7004/redis.conf[root@web3 cluster-test]# sed -i "s/7000/7005/g" /usr/local/cluster-test/7005/redis.conf[url=][/url]


分别,启动这6个节点
[url=][/url]
[root@web3 cluster-test]# cd /usr/local/cluster-test/7000/[root@web3 7000]# redis-server redis.conf[root@web3 7000]# cd ../7001[root@web3 7001]# redis-server redis.conf[root@web3 7001]# cd ../7002[root@web3 7002]# redis-server redis.conf[root@web3 7002]# cd ../7003[root@web3 7003]# redis-server redis.conf[root@web3 7003]# cd ../7004[root@web3 7004]# redis-server redis.conf[root@web3 7004]# cd ../7005[root@web3 7005]# redis-server redis.conf[root@web3 7005]#[url=][/url]


查看6个节点的启动进程情况:
[url=][/url]
[root@web3 7005]# ps -ef|grep redisroot 11380 1 0 07:37 ? 00:00:00 redis-server *:7000 [cluster]root 11384 1 0 07:37 ? 00:00:00 redis-server *:7001 [cluster]root 11388 1 0 07:37 ? 00:00:00 redis-server *:7002 [cluster]root 11392 1 0 07:37 ? 00:00:00 redis-server *:7003 [cluster]root 11396 1 0 07:37 ? 00:00:00 redis-server *:7004 [cluster]root 11400 1 0 07:37 ? 00:00:00 redis-server *:7005 [cluster]root 11404 8259 0 07:38 pts/0 00:00:00 grep redis[url=][/url]


将6个节点连在一起构招成集群
需要用到的命令就是redis-trib.rb,这是官方的一个用ruby写的一个操作redis cluster的命令,所以,你的机器上需要安装ruby。我们先试一下这个命令:
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

因为我们要新建集群, 所以这里使用create命令. --replicas 1 参数表示为每个主节点创建一个从节点. 其他参数是实例的地址集合。
由于我机子上没安装ruby,所以,会报错:
/usr/bin/env: ruby: No such file or directory

那先安装ruby和rubygems:
[root@web3 7005]# yum install ruby ruby-devel rubygems rpm-build

然后,再执行一次,发现还是报错:
[url=][/url]
[root@web3 7005]# 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/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require': no such file to load -- redis (LoadError)from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'from /usr/local/bin/redis-trib.rb:25[root@web3 7005]#[url=][/url]

原来是ruby和redis的连接没安装好:

[root@web3 7005]# gem install redisSuccessfully installed redis-3.2.11 gem installedInstalling ri documentation for redis-3.2.1...Installing RDoc documentation for redis-3.2.1...
返回列表