redis cluster高可用集群部署详解,rediscluster
集群概述
集群管理流程
Redis3.0版本之后支持Cluster.
redis cluster的现状
目前redis支持的cluster特性:
1):节点自动发现
2):slave->master选举,集群容错
3):Hotresharding:在线分片
4):进群管理:cluster xxx
5):基于配置(nodes-port.conf)的集群管理
6):ASK 转向/MOVED 转向机制.
redis cluster 架构
redis-cluster架构图
架构细节:
(1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.
(2)节点的fail是通过集群中超过半数的节点检测失效时才生效.
(3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可
(4)redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<->value
redis-cluster选举:容错
(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状态.
1.下载并解压
cd /home/pass
wgethttp://download.redis.io/releases/redis-4.0.2.tar.gz
tar -zxvfredis-4.0.2.tar.gz
2. 编译安装
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
3. 测试一下安装是否成功
/home/pass/redis-cluster/redis-4.0.2/bin/redis-server
4.创建配置文件
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日志开启,每次写操作都记录一条日志
5.复制文件夹
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/
6.修改配置文件,标红的修改成想要的值。
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日志开启,每次写操作都记录一条日志
5.复制src目录中的redis-trib.rb 到/usr/local/redis/bin目录
cp /home/pass/redis-4.0.2/src/redis-trib.rb /home/pass/redis-cluster
6.安装ruby环境
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
7.安装ruby的包
在线
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
8.创建集群
./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
9.集群功能测试
./7001/bin/redis-cli -c -p 7001
10.集群状态查看
1. [pass@app12 7001]$ ./redis-trib.rb check 127.0.0.1:7002
11.集群新增主节点
新建集群主节点
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
12.集群新增从节点
./redis-trib.rb add-node --slave
--master-id b9f1ddbacaa224e9bf1654474f6ac40c0813dfcf
127.0.0.1:7006 //新增地址
127.0.0.1:7001 //集群地址
13.节点移除
主节点移除
移除槽点
./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命令行
集群(cluster)
CLUSTER INFO 打印集群的信息
CLUSTER NODES 列出集群当前已知的所有节点(node),以及这些节点的相关信息。
节点(node)
CLUSTER MEET <ip> <port> 将 ip 和 port 所指定的节点添加到集群当中,让它成为集群的一份子。
CLUSTER FORGET <node_id> 从集群中移除node_id 指定的节点。
CLUSTER REPLICATE <node_id> 将当前节点设置为node_id 指定的节点的从节点。
CLUSTER SAVECONFIG 将节点的配置文件保存到硬盘里面。
槽(slot)
CLUSTER ADDSLOTS <slot> [slot ...] 将一个或多个槽(slot)指派(assign)给当前节点。
CLUSTER DELSLOTS <slot> [slot ...] 移除一个或多个槽对当前节点的指派。
CLUSTER FLUSHSLOTS 移除指派给当前节点的所有槽,让当前节点变成一个没有指派任何槽的节点。
CLUSTER SETSLOT <slot> NODE<node_id> 将槽 slot 指派给 node_id 指定的节点,如果槽已经指派给另一个节点,那么先让另一个节点删除该槽>,然后再进行指派。
CLUSTER SETSLOT <slot> MIGRATING<node_id> 将本节点的槽 slot 迁移到 node_id 指定的节点中。
CLUSTER SETSLOT <slot> IMPORTING<node_id> 从 node_id 指定的节点中导入槽 slot 到本节点。
CLUSTER SETSLOT <slot> STABLE 取消对槽 slot 的导入(import)或者迁移(migrate)。
键 (key)
CLUSTER KEYSLOT <key> 计算键 key 应该被放置在哪个槽上。
CLUSTER COUNTKEYSINSLOT <slot> 返回槽 slot 目前包含的键值对数量。
CLUSTER GETKEYSINSLOT <slot><count> 返回 count 个 slot 槽中的键。
这些命令是集群所独有的。执行上述命令要先登录参考资料
参考资料
安装ruby环境
安装运行redis-trib.rb所需的环境
Redis集群管理