1.环境
三台Linux虚拟机服务器,对应的IP为:
192.168.0.11
192.168.0.12
192.168.0.13
每台服务器1主1从,共3主3从
相关安装包建议存储路径:/root/svr/
2.部署
下载安装忽略,7001 7002为更改后的端口号
先进行如下操作:
cd /usr/local/redis-5.0.5
创建集群配置文件夹:mkdir cluster-conf
cd cluster-conf
创建集群端口文件夹:mkdir 7001 mkdir 7002
cd 7001
复制配置文件:cp /root/svr/redis-5.0.5/redis.conf ./
Redis的log及持久化文件建议存储到磁盘空间较大的目录,本次存储路径:/root/svr/redis-cluster/
目录要求:
redis-5.0.5/cluster-conf/7001/redis.conf
redis-5.0.5/cluster-conf/7001/redis.log
redis-5.0.5/cluster-conf/7002/redis.conf
redis-5.0.5/cluster-conf/7002/redis.log
然后修改配置文件:vim redis.conf,将参数修改为以下的值:
port 7001
logfile “/root/svr/redis-5.0.5/cluster-conf/7001/redis.log”
dir /root/svr/redis-cluster/7001/ #事先创建好
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
bind 0.0.0.0
复制redis.conf至7002并修改端口及存储路径
启动:
/root/svr/redis-5.0.5/bin/redis-server /root/svr/redis-5.0.5/cluster-conf/7002/redis.conf &
/root/svr/redis-5.0.5/bin/redis-server /root/svr/redis-5.0.5/cluster-conf/7001/redis.conf &
注意:现在还没有完成集群的搭建
创建集群:
redis5以上版本用:
./redis-cli --cluster create --cluster-replicas 1 192.168.0.23:7001 192.168.0.29:7001 192.168.0.30:7001 192.168.0.23:7002 192.168.0.29:7002 192.168.0.30:7002
redis5以下版本用:
./redis-trib.rb create --replicas 1 192.168.0.23:7001 192.168.0.29:7001 192.168.0.30:7001 192.168.0.23:7002 192.168.0.29:7002 192.168.0.30:7002
以上命令的意思就是创建一个包含三个主节点和三个从节点的集群。
命令的意义如下:
1、 create 这表示我们希望创建一个新的集群。
2、选项 --replicas 1 表示我们希望为集群中的每个主节点创建一个从节点(百分比 选举master按先后顺序)。
3、之后跟着的其他参数则是实例的地址列表, 我们希望程序使用这些地址所指示的实例来创建新集群。
注:如果命令提示‘/usr/bin/env: ruby.exe: No such file or directory’不能执行,请 运行sudo apt install ruby
在客户端控制台中执行 cluster nodes命令
输出的内容含义如下:
节点ID
IP:端口
标志: master, slave, myself, fail
如果是个从节点, 这里是它的主节点的NODE ID
集群最近一次向节点发送 PING 命令之后, 过去了多长时间还没接到回复。.
节点最近一次返回 PONG 回复的时间。
本节点的网络连接情况
节点目前包含的槽:例如 127.0.0.1:7001 目前包含号码为 5960 至 10921 的哈希槽(slot)。
集群其他命令:
- 集群(cluster)
- CLUSTER INFO 打印集群的信息
- CLUSTER NODES 列出集群当前已知的所有节点(node),以及这些节点的相关信息。
- //节点(node)
- CLUSTER MEET 将 ip 和 port 所指定的节点添加到集群当中,让它成为集群的一份子。
- CLUSTER FORGET <node_id> 从集群中移除 node_id 指定的节点。
- CLUSTER REPLICATE <node_id> 将当前节点设置为 node_id 指定的节点的从节点。
- CLUSTER SAVECONFIG 将节点的配置文件保存到硬盘里面。
- //槽(slot)
- CLUSTER ADDSLOTS [slot …] 将一个或多个槽(slot)指派(assign)给当前节点。
- CLUSTER DELSLOTS [slot …] 移除一个或多个槽对当前节点的指派。
- CLUSTER FLUSHSLOTS 移除指派给当前节点的所有槽,让当前节点变成一个没有指派任何槽的节点。
- CLUSTER SETSLOT NODE <node_id> 将槽 slot 指派给 node_id 指定的节点,如果槽已经指派给另一个节点,那么先让另一个节点删除该槽>,然后再进行指派。
- CLUSTER SETSLOT MIGRATING <node_id> 将本节点的槽 slot 迁移到 node_id 指定的节点中。
- CLUSTER SETSLOT IMPORTING <node_id> 从 node_id 指定的节点中导入槽 slot 到本节点。
- CLUSTER SETSLOT STABLE 取消对槽 slot 的导入(import)或者迁移(migrate)。
- //键 (key)
- CLUSTER KEYSLOT 计算键 key 应该被放置在哪个槽上。
- CLUSTER COUNTKEYSINSLOT 返回槽 slot 目前包含的键值对数量。
- CLUSTER GETKEYSINSLOT 返回 count 个 slot 槽中的键。
3.问题
一、在执行./redis-trib.rb create报
/usr/bin/env: ruby: No such file or directory
解决:sudu apt install ruby
二、在执行./redis-trib.rb create报
./redis-trib.rb:24:in `require’: no such file to load – rubygems (LoadError)
from ./redis-trib.rb:24
解决:sudo apt install rubygems
三、在执行./redis-trib.rb create报
/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’
解决:sudo gem install redis
四、如果telnet 192.168.0.xx 7001
如果telnet不通,但是ps -ef|grep redis可以看到服务或者本地客户端可以连接,远程客户端连接不了。这个时候就要修改redis.conf参数了
vim 7001(2)/redis.conf
注释bind或者改为bind 0.0.0.0