redis 集群
通信:ping-pong(半数不通单节点master fail)
连接:redis节点彼此互联,连接其中一个节点连接上redis集群
存储:
16384个槽分摊到不同的master主机
每台主机的槽=16384除以主机个数
key经crc16算法得出结果,对16384求余得到槽
容错:集群是否fail?
1.如果one master fail slave not replace
2.半数的master fail,无论是否slave 则集群 fail
集群搭建:
环境准备:
1.安装ruby(集群管理工具(redis-trib.rb))
yum install ruby
yum install rubygems
2.安装redis和ruby的接口文件
redis-***.gem 上传到linux
安装:gem install redis-***.gem
3.拷贝redis-trib.rb(文件所在位置(redis-3.0.0--->src))文件到redis-cluster文件夹
删除原文件,创建文件夹:rm -rf redis-cluster;(del old) mkdir redis-cluster;
redis-3.0.0目录src ll *.rb(find)
cp redis-trib.rb /usr/local/redis/redis-cluster(copy)
集群搭建
集群中服务器只有0号库,不是16个库。
条件准备:
3台master,3台slave(more 6)
端口设计:7001-7006,同台机器端口号不同即可
1.cp bin ./redis-cluster/7001 -r
2.删除持久化文件 rm -rf appendonly.aof dump.rdb
3.修改redis.conf, /cluster n cluster-enabled yes
修改端口 port 7001
4.复制7002-7006机器
cp 7001/ 7002 -r …
5.修改redis.conf 中的port
6.vi start-all.sh
cd 7001
./redis-server ./redis.conf
cd ..
cd 7002
./redis-server ./redis.conf
cd ..
cd 7003
./redis-server ./redis.conf
cd ..
cd 7004
./redis-server ./redis.conf
cd ..
cd 7005
./redis-server ./redis.conf
cd ..
cd 7006
./redis-server ./redis.conf
cd ..
chmod u+x start-all.sh(修改权限)
7../start-all.sh(启动服务)
8.ps -aux|grep redis kill -9 端口
创建集群:
./redis-trib.rb create --replicas 1 ip:port ..... (6台机器,3台master,3台slave)
命令 创造副本
连接集群:
./redis-cli -h host -p port -c
-c 代表连接集群,进行数据操作,不关心数据存放
查看集群: cluster info
查看集群节点:cluster nodes
进行测试:one master kill ,查看slave是否replace kill -9 端口
添加主节点:
关闭所有节点:
vi shutdown-all.sh
cd 7001
./redis-cli -p 7001 shutdown
cd ..
cd 7002
./redis-cli -p 7002 shutdown
cd ..
cd 7003
./redis-cli -p 7003 shutdown
cd ..
cd 7004
./redis-cli -p 7004 shutdown
cd ..
cd 7005
./redis-cli -p 7005 shutdown
cd ..
cd 7006
./redis-cli -p 7006 shutdown
cd ..
chmod u+x shutdown-all.sh
删除所有节点缓存
重新启动所有服务 ./start-all.sh
cp 7001/ 7007 -r(copy) 修改端口,删除缓存文件,启动主机
建立集群master 和slave,各个机器之间的关联
./redis-trib.rb create --replicas 1 192.168.80.128:7001 192.168.80.128:7002 192.168.80.128:7003 192.168.80.128:7004 192.168.80.128:7005 192.168.80.128:7006 (ip和ip之间为空格)
连接集群:
./redis-cli -h 192.168.80.128 -p 7001 -c
其中-c 表示连接到集群
cluster nodes (查看集群节点信息)
添加节点:
复制7007 同时修改相对应的端口
./redis-service redis.conf
./redis-trib.rb add-node 127.0.0.1:7007(新增节点) 127.0.0.1 7001(存在节点)
添加报错:
[ERR] Node 192.168.80.128:7007 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.
解决方法:
首先关闭集群,编写shutdown.sh
将每个机器的三个缓存文件删掉
重启服务,连接集群,添加节点
新增节点分配节点:
./redis-trib.rb reshard 127.0.0.1:7001(连接一台机器其他都连接)
输入被输入节点的id
500
all (每个节点分配)