作者:石头,发布日期:2016-06-15
阅读:846;评论:0

最终实验目的:搭建33从的redis集群环境。如下图所示:这是一台机器上3个节点,一共两台机器6个节点。

redis.png


下载地址:http://redis.io/download

 

截止2016322日最新稳定版redis-3.0.7.tar.gz

http://download.redis.io/releases/redis-3.0.7.tar.gz

 

步骤一:

192.168.1.172上安装redis

wget http://download.redis.io/releases/redis-3.0.7.tar.gz

tar -zxvf redis-3.0.7.tar.gz

个人习惯安装到/usr/local/目录下,所以解压后将redis3-0.7目录移过去

mv ./redis3.0.7/  /usr/local/ redis3   重命名了一下,这个看个人习惯了。

cd /usr/local/redis3

make

make install

 

创建集群所需要的目录

cd /usr/local/redis3

mkdir cluster

cd cluster

mkdir node1 node2 node3

修改redis.conf配置文件,配置文件所在目录为/usr/local/redis3/下面

vi  redis.conf

##修改配置文件中的下面选项

port 7000  --(这里是端口,放在不同node目录下端口设置不同,自己定义)

daemonize yes    ---以守护进程的方式

cluster-enabled yes

cluster-config-file nodes.conf

cluster-node-timeout 5000

appendonly yes

修改之后分别往node1node2node3目录复制一份

cp /usr/local/redis3/redis.conf    /usr/local/redis3/cluster/node1/redis.conf

cp /usr/local/redis3/redis.conf    /usr/local/redis3/cluster/node2/redis.conf

cp /usr/local/redis3/redis.conf    /usr/local/redis3/cluster/node3/redis.conf

完事之后可以使用tree命令,查看文件目录结构,确保复制到位。

复制之后请再次修改端口,不一样即可,可参照最初的说明图片。

我这设置的分别是7000,7001,7002,因为要开3redis服务,端口不可以相同。

当然,实验环境最好关闭防火墙,以免不同物理机无法相互访问,而导致后面集群创建不成功,或者在防火墙设置里面开放相应的需要使用的端口。

 

确保上面步骤全部操作到位,现在,可以开启这3redis实例了。

cd /usr/local/cluster/node1

redis-server redis.conf

cd /usr/local/cluster/node2

redis-server redis.conf

cd /usr/local/cluster/node2

redis-server redis.conf

 

开启之后可以使用ps -ef|grep redis查询到4进程,一个是grep的进程

另外三个是真正的redis进程,可以看到相对应的端口号。

 

至此步骤一结束。

 

步骤二:和 步骤一 相同,在192.168.1.173上同样的操作。直到开启192.168.1.173上的3个节点才结束。如果是一台机器,实验的话,可以直接新建6个实例,新建6node目录,配置文件分别复制6份即可。

如果你是6个物理机或者更多,那么步骤一在每个物理机上都需要执行,只不过node不用那么多。看大家怎么操作了。

 

接下来的操作,在任何一台机器上操作都行。

经过上面操作,现在6个单点实例都开启了,只不过现在他们还没有任何关系。

 

执行redis的创建集群命令创建集群

cd  /usr/local/redis3/src

./redis-trib.rb  create --replicas 1      \

192.168.1.172:7000  192.168.1.172:7001  192.168.1.173:7002     \

192.168.1.173:7000  192.168.1.173:7001  192.168.1.172:7002

(这里的三行其实一行代码,为了看的更清楚,我这里换行写,红色1代表每个master有一个从节点,写在最前面的是主,后面是从,具体的对应关系没有去详细深究过。)

 

执行上面的命令的时候会报错,因为是执行的ruby的脚本,需要ruby的环境

错误内容:/usr/bin/env: ruby: No such file or directory

所以需要安装ruby的环境,这里推荐使用yum install ruby安装

yum install ruby

使用网络yum源或者本地光盘yum源都行,如果没有yum源环境,也可以去系统安装进项的pakeage里面找到rubyrpm包,然后通过rpm安装

rpm –ivh ruby完整包名.rpm

(使用此方法可能存在依赖关系,慢慢折腾一个个的全装上,这里就不多说了。此法不推荐)

 

然后再执行创建集群命令,还会报错,提示缺少rubygems组件,使用yum安装

错误内容:

./redis-trib.rb:24:in `require': no such file to load -- rubygems (LoadError)

from ./redis-trib.rb:24

yum install rubygems(也可下载源码包安装)

 

再次执行创建集群命令,还会报错,提示不能加载redis,是因为缺少redisruby的接口,使用gem 安装

错误内容:

/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 ./redis-trib.rb:25

 

gem install redis(这里需要连网,它需要去查找服务器,如果没网的话,界面就卡着不动了。)

当然也可以自己去找安装包或者源码过来手动安装。

 

到这里之后,再执行创建集群命令,现在应该就能成功了。如果失败,请检查上述步骤是否都正确完成操作。成功会有如下提示:

Connecting to node 192.168.1.172:7000:   OK

Connecting to node 192.168.1.172:7001:   OK

Connecting to node 192.168.1.173:7002:   OK

Connecting to node 192.168.1.173:7000:   OK

Connecting to node 192.168.1.173:7001:   OK

Connecting to node 192.168.1.173:7002:   OK

>>>performing hash slots allocation on 6 nodes…

Using   3  masters:

192.168.1.172:7000

192.168.1.172:7001

192.168.1.173:7002

Adding replica 192.168.1.173:7000 to 192.168.1.172:7000

Adding replica 192.168.1.173:7001 to 192.168.1.172:7001

Adding replica 192.168.1.172:7002 to 192.168.1.172:7002

这些信息是告诉你哪些是主,以及这个主对应的从在哪个ip:端口

最后需要输入yes确认配置,如果觉得主从配置不合理,请调整命令ip端口顺序。

到这里redis集群就搭建成功了。

 

redis-cli -c -p 7000

输入这命令之后可以查看集群状态,主从等等很多信息。

----------------------------------------------------------------------------

//集群(cluster) 

CLUSTER INFO 打印集群的信息 

CLUSTER NODES 列出集群当前已知的所有节点(node),以及这些节点的相关信息。  

//节点(node) 

CLUSTER MEET <ip> <port> ip port 所指定的节点添加到集群当中,让它成为集群的一份子。 

CLUSTER FORGET <node_id> 从集群中移除 node_id 指定的节点。 

CLUSTER REPLICATE <node_id> 将当前节点设置为 node_id 指定的节点的从节点。 

CLUSTER SAVECONFIG 将节点的配置文件保存到硬盘里面。  

//(slot) 

CLUSTER ADDSLOTS <slot> [slot ...] 将一个或多个槽(slot)指派(assign)给当前节点。 

CLUSTER DELSLOTS <slot> [slot ...] 移除一个或多个槽对当前节点的指派。 

CLUSTER FLUSHSLOTS 移除指派给当前节点的所有槽,让当前节点变成一个没有指派任何槽的节点。 

CLUSTER SETSLOT <slot> NODE <node_id> 将槽 slot 指派给 node_id 指定的节点,如果槽已经指派给另一个节点,那么先让另一个节点删除该槽>,然后再进行指派。 

CLUSTER SETSLOT <slot> MIGRATING <node_id> 将本节点的槽 slot 迁移到 node_id 指定的节点中。 

CLUSTER SETSLOT <slot> IMPORTING <node_id> node_id 指定的节点中导入槽 slot 到本节点。 

CLUSTER SETSLOT <slot> STABLE 取消对槽 slot 的导入(import)或者迁移(migrate)。  

// (key) 

CLUSTER KEYSLOT <key> 计算键 key 应该被放置在哪个槽上。 

CLUSTER COUNTKEYSINSLOT <slot> 返回槽 slot 目前包含的键值对数量。 

CLUSTER GETKEYSINSLOT <slot> <count> 返回 count slot 槽中的键。

 

/usr/local/redis3/bin下可执行的程序

redis-serverredis服务器

redis-cli:命令行客户端

redis-benchmarkredis的性能测试工具

redis-check-aofAOF文件修复工具

redis-check-dumpRDB文件检测工具


redis.confredis的配置文件

将配置文件中daemonize=yes以守护进程的方式来使用


更多信息请参考官网 http://redis.io/topics/cluster-tutorial

更多命令也可以参照各个命令的帮助文档。






欢迎加2000人技术QQ群一起学习探讨linux相关知识:100094104





评论区

发表评论

必填

选填

选填

必填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。