两台虚拟机(CentOS7)六个节点测试
集群安装
1.准备
yum -y install wget //安装wget
cd /usr/local
mkdir software //创建文件夹
2.下载解压
cd software
wget http://download.redis.io/releases/redis-3.2.4.tar.gz
tar -zxvf redis-3.2.4.tar.gz
3.编译安装
cd software
wget http://download.redis.io/releases/redis-3.2.4.tar.gz
tar -zxvf redis-3.2.4.tar.gz
4.创建redis节点
cd /usr/local
mkdir redis_cluster 创建redis集群目录
mkdir 7000 7001 7002 在redis_cluster目录下创建三个节点 对应端口分别是7000 7001 7002
cp /usr/local/software/redis-3.2.1/redis.conf /7000 拷贝配置文件至7000目录下
cp /usr/local/software/redis-3.2.1/redis.conf /7001 拷贝配置文件至7001目录下
cp /usr/local/software/redis-3.2.1/redis.conf /7002 拷贝配置文件至7002目录下
分别对7000 7001 7002中的配置文件redis.conf做一下修改就可以了
daemonize yes //redis后台运行
pidfile /var/run/redis_7000.pid //pidfile文件对应7000,7002,7003
bind 192.168.67.128 //虚拟机本机ip
port 7000 //端口分别7000,7001,7002
cluster-enabled yes //开启集群
cluster-config-file nodes_7000.conf //集群配置 配置文件首次启动自动生成7000,7001,7002
cluster-node-timeout 5000 //请求超时 设置5秒够了
appendonly yes //记录集群修改日志
在另一台虚拟机上创建3个节点:对应的端口改为7003,7004,7005.配置对应的改一下就可以了。
5.查看服务
ps -ef | grep redis #查看是否启动成功netstat -tnlp | grep redis #可以看到redis监听端口
集群创建
1.环境准备
yum -y install ruby ruby-devel rubygems rpm-build再用 gem 这个命令来安装 redis接口 gem是ruby的一个工具包.
gem install redis
两台虚拟机都需要安装。
2.创建
/usr/local/software/redis-3.2.1/src/redis-trib.rb create --replicas 1 192.168.67.128:7000 192.168.67.128:7001 192.168.67.128:7002 192.168.67.129:7003 192.168.67.129:7004 192.168.67.129:7005
3.失败解决办法:
1.检查redis.conf的bind是否绑定本机ip(默认是127.0.0.1)
2.检查另一台虚拟机的端口是否开放
--在192.168.67.128上执行 /usr/local/bin/redis-cli -h 192.168.67.129
如果不能连接 则修改192.168.67.129的防火墙设置
firewall-cmd --zone=public --add-port=7003/tcp --permanent
firewall-cmd --zone=public --add-port=7004/tcp --permanent
firewall-cmd --zone=public --add-port=7005/tcp --permanent
重启 firewall-cmd --reload
再次重试即可成功。
3.如果失败提示创建的节点不为空
[ERR] Node 127.0.0.1:7000 is not empty. Either the node already knows other nodes (check with CLUSTER NODES)
or contains some key in database 0.
删除之前生成的nodes_*.conf appendonly.aof dump.rdb等文件重试。
如果还不行 登录要创建的节点 redis-cli -c -h 192.168.67.128 -p 7000 刷新数据库
92.168.67.128 :7000> flushdb
92.168.67.128 :7000> flushall //尼玛这里才是终极大boss
92.168.67.128 :7000>cluster reset soft
如果还不行,pkill -9 redis 删除redis所以进程 重新启动创建重试。
测试
节点管理
1.新增master节点
为空节点分配槽
software/redis-3.2.1/src/redis-trib.rb reshard 127.192.67.128:7000
// 提示要迁移的slots的数量,这里输入500
How many slots do you want to move (from 1 to 16384)? 500
// 提示指定为哪个node-id分配slot,这里输入新增的node
What is the receiving node ID? d166533eb1636f90d797bce6d4faf9706421b720
// 选择指定slot的来源
// all->代表从所有的master中重新分配
// done-> 数据要提取slot的master节点id,最后用done结束
Please enter all the source node IDs.
Type 'all' to use all the nodes assource nodes for the hash slots.
Type 'done' once you entered allthe source nodes IDs.
// 这里我们选择all即可
Source node #1:all
// 输入yes之后,开始进行slots的分配和数据的移动
Do you want to proceed with the proposed reshard plan (yes/no)? yes
如果失败提示:
/usr/local/share/gems/gems/redis-3.3.3/lib/redis/client.rb:121:in `call': ERR Unknown node f7f96c100134b2f1473baecaf65a763b34dd20c0 (Redis::CommandError)
这个错误的解决方法待定------
如果失败提示:
[WARNING] Node 192.168.67.128:8000 has slots in importing state (5461).
[WARNING] The following slots are open: 5461
尝试修复问题节点 redis-trib.rb fix 192.168.67.128:8000
2.新增slave节点
前面步骤与新增master节点一样,启动节点 添加到集群
然后登录到新增节点 [root@localhost local]# redis-cli -c -h 192.168.67.128 -p 8001
为新节点指定master节点192.168.67.128:8001> cluster replicate 1b25ed2cf94c2c4b8cd80be516c8980c51087235
查看集群所以节点就可192.168.67.128:8001> cluster nodes
3.删除节点
1.删除master节点
2.删除slave节点