目前redis支持的cluster特性:
1):节点自动发现
2):slave->master选举,集群容错
3):Hotresharding:在线分片
4):进群管理:cluster xxx
5):基于配置(nodes-port.conf)的集群管理
6):ASK 转向/MOVED 转向机制.
架构细节:
(1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.
(2)节点的fail是通过集群中超过半数的节点检测失效时才生效.
(3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可
(4)redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<->value
(1)领着选举过程是集群中所有master参与,如果半数以上master节点与master节点通信超过(cluster-node-timeout),认为当前master节点挂掉.
(2):什么时候整个集群不可用(cluster_state:fail),当集群不可用时,所有对集群的操作做都不可用,收到((error) CLUSTERDOWN The cluster is down)错误
a:如果集群任意master挂掉,且当前master没有slave.集群进入fail状态,也可以理解成进群的slot映射[0-16383]不完成时进入fail状态.
b:如果进群超过半数以上master挂掉,无论是否有slave集群进入fail状态.
cd /home/pass
wgethttp://download.redis.io/releases/redis-4.0.2.tar.gz
tar -zxvfredis-4.0.2.tar.gz
cd redis-4.0.2
mkdir -p /home/pass/redis-cluster/redis-4.0.2/conf
make&& make PREFIX= /home/pass/redis-cluster/redis-4.0.2 install
/home/pass/redis-cluster/redis-4.0.2/bin/redis-server
vi/home/pass/redis-cluster/redis-4.0.2/conf/redis.conf
daemonize yes #redis后台运行
pidfile ./redis_7001.pid #pidfile文件对应7000,7002,7003
port 7001 #端口7000,7002,7003
cluster-enabled yes #开启集群 把注释#去掉
cluster-config-file nodes_7001.conf #集群的配置配置文件首次启动自动生成
cluster-node-timeout 5000 #请求超时 设置5秒够了
appendonly yes #aof日志开启,每次写操作都记录一条日志
cd /home/pass/redis-cluster/
mkdir ./7001 ./7002 ./7003 ./7004 ./7005 ./7006
cp -rf redis-4.0.2/* 7001/ & cp -rf redis-4.0.2/*7002/ & cp -rf redis-4.0.2/* 7003/ & cp -rf redis-4.0.2/* 7004/ &cp -rf redis-4.0.2/* 7005/ & cp -rf redis-4.0.2/* 7006/
daemonize yes #redis后台运行
pidfile ./redis_7002.pid #pidfile文件对应7000,7002,7003
port 7002 #端口7000,7002,7003
cluster-enabled yes #开启集群 把注释#去掉
cluster-config-file nodes_7002.conf #集群的配置配置文件首次启动自动生成
cluster-node-timeout 5000 #请求超时 设置5秒够了
appendonly yes #aof日志开启,每次写操作都记录一条日志
cp /home/pass/redis-4.0.2/src/redis-trib.rb /home/pass/redis-cluster
yum -y install make gcc openssl-devel zlib-devel gcc gcc-c++ make autoconfreadline-devel curl-devel expat-devel gettext-devel ncurses-devel sqlite3-develmysql-devel httpd-devel wget which
yum install -y ruby
yum install -y rubygems
gem install redis --version 4.0.2
wget https://rubygems.global.ssl.fastly.net/gems/redis-4.0.0.gem
gem install -l ./redis-4.0.0.gem
#如果出现依赖错误则通过以下方式编译安装
#by zlib
cd /home/pass/ruby-2.4.2
ruby extconf.rb --with-zlib-include=/usr/include --with-zlib-lib=/usr/lib
make
make install
cd ../..
make clean
./redis-trib.rb create --replicas 1 app12:7001 app12:7002 app12:7003 app12:7004 app12:7005 app12:7006
./redis-trib.rb create --replicas 1 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006
./7001/bin/redis-cli -c -p 7001
1. [pass@app12 7001]$ ./redis-trib.rb check 127.0.0.1:7002
2. [pass@app12 7001]$ cp -r redis01 redis07
3. [pass@app12 7001]$ cd redis07/
4. [pass@app12 7001]$ sed -i "s/7001/7007/g" ./redis.conf
5. [pass@app12 7001]$ ./redis-trib.rb add-node 127.0.0.1:7007 127.0.0.1:7002
./redis-trib.rb add-node 127.0.0.1:7007127.0.0.1:7001
./redis-trib.rb add-node 新增节点地址任意老节点地址
1、指定重新分配槽点集群
2、设置移动槽点的数量
3、设置新增槽点的nodeid
4、输入all表示全部节点重新分配
方法1) ./redis-trib.rb reshard 127.0.0.1:7001
方法2)./redis-trib.rbreshard --from df4f7126ad9bc9218d1fb455b09a8f6f4ff2775f --to1de4dc5ed3ca1e62e7799a99b223be910414add5 --slots 5 --yes --timeout 5000127.0.0.1:7001
./redis-trib.rb add-node --slave
--master-id b9f1ddbacaa224e9bf1654474f6ac40c0813dfcf
127.0.0.1:7006 //新增地址
127.0.0.1:7001 //集群地址
./redis-trib.rb reshard
--from c8fd4a5e321326f21b5b646d908d393954ef654b
--to b9f1ddbacaa224e9bf1654474f6ac40c0813dfcf
--slots 1244 --yes
127.0.0.1:7001
./redis-trib.rb del-node 127.0.0.1:7006 e6386f308bcd8b23a12acf2d41e37aba415724ea
./redis-trib.rb del-node 127.0.0.1:7006 e6386f308bcd8b23a12acf2d41e37aba415724ea
CLUSTER INFO 打印集群的信息
CLUSTER NODES 列出集群当前已知的所有节点(node),以及这些节点的相关信息。
CLUSTER MEET
CLUSTER FORGET
CLUSTER REPLICATE
CLUSTER SAVECONFIG 将节点的配置文件保存到硬盘里面。
CLUSTER ADDSLOTS
CLUSTER DELSLOTS
CLUSTER FLUSHSLOTS 移除指派给当前节点的所有槽,让当前节点变成一个没有指派任何槽的节点。
CLUSTER SETSLOT
CLUSTER SETSLOT
CLUSTER SETSLOT
CLUSTER SETSLOT
CLUSTER KEYSLOT
CLUSTER COUNTKEYSINSLOT
CLUSTER GETKEYSINSLOT
这些命令是集群所独有的。执行上述命令要先登录参考资料