最终实验目的:搭建3主3从的redis集群环境。如下图所示:这是一台机器上3个节点,一共两台机器6个节点。
下载地址:http://redis.io/download
截止2016年3月22日最新稳定版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
修改之后分别往node1、node2、node3目录复制一份
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,因为要开3个redis服务,端口不可以相同。
当然,实验环境最好关闭防火墙,以免不同物理机无法相互访问,而导致后面集群创建不成功,或者在防火墙设置里面开放相应的需要使用的端口。
确保上面步骤全部操作到位,现在,可以开启这3个redis实例了。
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个实例,新建6个node目录,配置文件分别复制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里面找到ruby的rpm包,然后通过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,是因为缺少redis和ruby的接口,使用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-server:redis服务器
redis-cli:命令行客户端
redis-benchmark:redis的性能测试工具
redis-check-aof:AOF文件修复工具
redis-check-dump:RDB文件检测工具
redis.conf是redis的配置文件
将配置文件中daemonize=yes以守护进程的方式来使用
更多信息请参考官网 http://redis.io/topics/cluster-tutorial
更多命令也可以参照各个命令的帮助文档。
欢迎加2000人技术QQ群一起学习探讨linux相关知识:100094104
-
« 上一篇:
vim命令使用技巧随笔记录