Redis集群搭建部署()
1.Redis版本 (需3.0及以上版本)
2.机器准备:内蒙古农业大学四台应用机(做redis集群必须准备至少6个节点)
机器1: 172.24.5.21:7000 172.24.5.21:7001
机器2: 172.24.5.22:7000 172.24.5.22:7001
机器3: 172.24.5.23:7000 172.24.5.23:7001
机器4: 172.24.5.24:7000 172.24.5.24:7001
搭建步骤:
1.在机器1的/opt目录下创建文件夹,用于存放节点文件:
sudo mkdir cluster-test
2.在cluster-test文件夹下创建以端口号命名的子文件夹:
mkdir 7000 7001
3.在7000文件中创建redis.conf文件:
vim redis.conf
4.将以下内容拷贝到redis.conf文件中:
#注意每个文件对应的port的不同
port 7000
cluster-enabled yes
cluster-config-file nodes.conf
#建议添加(不添加后面可能会报错) 注意每个节点绑定的ip不同
bind 172.24.5.21
cluster-node-timeout 5000
appendonly yes
5.将7000目录下的redis.conf文件拷贝到7001目录下,并修改里面的端口号为7001:
cp redis.conf /opt/cluster-test/7001/
6.将机器1上的cluster-test文件通过scp拷贝到机器2,机器3和机器4上,注意需要修改里面的bind绑定的ip!
在机器1上执行命令:
scp -r cluster-test root@172.24.5.22:/opt/
scp -r cluster-test root@172.24.5.23:/opt/
scp -r cluster-test root@172.24.5.24:/opt/
7.分别在机器1、机器2、机器3和机器4上下载并安装Redis,然后,编译,安装,详情可参考乌班图安装redis
8.在机器1、机器2、机器3和机器4上分别从redis安装目录下的src文件中将编译好的redis-server拷贝到cluster-test目录下:
cp redis/src/redis-server /opt/cluster-test/
9.在机器1、机器2、机器3和机器4上分别进入7000和7001目录,启动节点后台运行:
redis-server redis.conf &
成功大概会如下图所示:
10.在机器1(也可以选择其他机器,或者在每个服务器上都装一个,也方便以后的配置)上安装ruby环境(详情可参考ruby环境安装,已经安装ruby的这一步可以跳过),请确保 ruby版本是 1.8.7+版本, 否则,执行 redis-trib.rb命令时可能会提示无法连接redis服务(因为redis-trib.rb工具是ruby编写的所以需要ruby环境的支持):
#此方法(apt-get)适用于linux乌班图系统
sudo apt-get update
sudo apt-get install ruby
11.更换gem镜像(使用淘宝),在机器1(根据上一步而定)安装ruby环境的redis第三方接口:
#更换镜像
gem sources -r https://rubygems.org/ -a https://ruby.taobao.org
#安装ruby环境的redis库
sudo gem install redis
12.在机器1上的redis安装目录的src下输入如下命令创建集群:
./redis-trib.rb create --replicas 1 172.24.5.21:7000 172.24.5.22:7000 172.24.5.23:7000 172.24.5.24:7000 172.24.5.21:7001 172.24.5.22:7001 172.24.5.23:7001 172.24.5.24:7001
命令解释:
#redis-trib.rb工具的create子命令构建
#--replicas 则指定了为Redis Cluster中的每个Master节点配备几个Slave节点
#节点角色由顺序决定,先master之后是slave(为方便辨认,slave的端口比master大1000)
中间会提示一次Can I set the above configuration? (type 'yes' to accept)
输入yes即可
中间可能会报错cann't connect node 172.24.5.21:7000 之类的,查了很多资料,大概都是说:
1.可能是ruby 和gem的版本太低,建议升级版本
2.可能是跟配置里面bind绑定的ip有关(后来我发现我的问题完全可以用该方法解决,我下面说的方法是完全没必要的,直接用这个就可以了,应该在每个节点文件注意是节点文件,不是装redis路径下的配置文件的配置文件redis.conf添加bind绑定自己主机的ip,当然也可以直接在添加配置文件的时候就写好,注意每个节点绑定的ip是不同的 至于下面说的修改模式也是一种方式,(是我认为修改了bind没用才使用的,现在都已经改回)可能不安全不建议使用也可以忽略仅供参考)
3.我试了上面两个都不行,然后用下面的方法解决了
好像是redis默认受保护的模式下是默认只能找127.0.0.1这类的环路地址.其他的地址是找不到的,
当去telnet这个地址时会提示给出了四种解决方法,如下图,
我是直接用的第一种方法,可能会不太安全,直接在每个节点的配置文件redis.conf中都添加了一行配置,关闭保护模式:
protected-mode no
然后再重新执行一下创建集群的命令即可,成功会显示如下界面
13.使用命令查看集群状态(#ip:port可以是集群的任意节点):
./redis-trib.rb check 172.24.5.21:7000
tips
Redis集群测试:
1.重新分片:
./redis-trib.rb reshard 172.24.5.21:7000
2.集群故障:
./redis-cli -p 7000 debug segfault
3.删除节点:
./redis-trib.rb del-node 172.24.5.22:7000
#注意:删除主节点时,主节点必须没有哈希槽slots。
4.添加新节点:
a.添加从节点:
创建9007节点,启动9007实例(步骤如上已介绍)
并且把9007节点设为9004的从节点
#把实例添加到集群中
redis-trib.rb add-node --slave 127.0.0.1:9007 127.0.0.1:9004
b.添加主节点:
创建9008节点,启动9008实例(步骤如上已介绍)
#把实例添加到集群中
redis-trib.rb add-node 127.0.0.1:9008 127.0.0.1:9001 #这个第二个IP port可以是集群里面任意主节点的IP和端口
重新分片,为新节点分配哈希槽(指从旧节点中迁移一部分slots到新节点中,让新节点真正成为集群中的一员):
redis-trib.rb reshard 127.0.0.1:9008
5.其他命令:
./redis-trib.rb check 172.24.5.21:7000 #检查集群状态
./redis-cli -p 7000 cluster nodes | grep master #打印集群主节点信息
./redis-cli -p 7000 cluster nodes | grep slave #打印集群从节点信息
好久以前的笔记,如今翻看到怕丢失故又重新梳理移到了简书
第一篇简书,对于不擅长表达的我来说还挺费时的(捂脸)
希望以后可以继续坚持,努力提高表达能力(太阳)
[一名在路上快乐且热爱生活的程序媛 ]