redis cluster高可用集群部署详解

集群概述

集群管理流程

   Redis3.0版本之后支持Cluster.redis cluster高可用集群部署详解_第1张图片

redis cluster的现状

   目前redis支持的cluster特性:

  1):节点自动发现

  2):slave->master选举,集群容错

  3):Hotresharding:在线分片

  4):进群管理:cluster xxx

  5):基于配置(nodes-port.conf)的集群管理

  6):ASK 转向/MOVED 转向机制.

redis cluster 架构

 redis-cluster架构图

redis cluster高可用集群部署详解_第2张图片

  架构细节:

  (1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.

  (2)节点的fail是通过集群中超过半数的节点检测失效时才生效.

  (3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可

  (4)redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<->value

 

redis-cluster选举:容错

redis cluster高可用集群部署详解_第3张图片

  (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                                   

 redis cluster高可用集群部署详解_第4张图片

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                                                                   
 
  

redis cluster高可用集群部署详解_第5张图片

9.集群功能测试

./7001/bin/redis-cli -c -p 7001                                                           

redis cluster高可用集群部署详解_第6张图片

 
  

10.集群状态查看

1. [pass@app12 7001]$ ./redis-trib.rb check 127.0.0.1:7002  

 
  

 redis cluster高可用集群部署详解_第7张图片

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 cluster高可用集群部署详解_第8张图片

 

节点加入集群

./redis-trib.rb add-node 127.0.0.1:7007127.0.0.1:7001

./redis-trib.rb add-node 新增节点地址任意老节点地址

 redis cluster高可用集群部署详解_第9张图片


查看新节点状态

redis cluster高可用集群部署详解_第10张图片

重新分配槽点

1、指定重新分配槽点集群

2、设置移动槽点的数量

3、设置新增槽点的nodeid

4、输入all表示全部节点重新分配

方法1 ./redis-trib.rb reshard 127.0.0.1:7001                                          

redis cluster高可用集群部署详解_第11张图片

方法2./redis-trib.rbreshard --from df4f7126ad9bc9218d1fb455b09a8f6f4ff2775f --to1de4dc5ed3ca1e62e7799a99b223be910414add5 --slots 5 --yes --timeout 5000127.0.0.1:7001

redis cluster高可用集群部署详解_第12张图片

redis cluster高可用集群部署详解_第13张图片

12.集群新增从节点

./redis-trib.rb add-node --slave

--master-id b9f1ddbacaa224e9bf1654474f6ac40c0813dfcf

127.0.0.1:7006 //新增地址

127.0.0.1:7001 //集群地址

redis cluster高可用集群部署详解_第14张图片

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 cluster高可用集群部署详解_第15张图片

从节点移除

./redis-trib.rb del-node 127.0.0.1:7006  e6386f308bcd8b23a12acf2d41e37aba415724ea                                                     

redis cluster高可用集群部署详解_第16张图片

cluster命令行

集群(cluster) 

CLUSTER INFO 打印集群的信息 

CLUSTER NODES 列出集群当前已知的所有节点(node),以及这些节点的相关信息。  

节点(node) 

CLUSTER MEET 将 ip 和 port 所指定的节点添加到集群当中,让它成为集群的一份子。 

CLUSTER FORGET 从集群中移除node_id 指定的节点。 

CLUSTER REPLICATE 将当前节点设置为node_id 指定的节点的从节点。 

CLUSTER SAVECONFIG 将节点的配置文件保存到硬盘里面。  

槽(slot) 

CLUSTER ADDSLOTS [slot ...] 将一个或多个槽(slot)指派(assign)给当前节点。 

CLUSTER DELSLOTS [slot ...] 移除一个或多个槽对当前节点的指派。 

CLUSTER FLUSHSLOTS 移除指派给当前节点的所有槽,让当前节点变成一个没有指派任何槽的节点。 

CLUSTER SETSLOT NODE 将槽 slot 指派给 node_id 指定的节点,如果槽已经指派给另一个节点,那么先让另一个节点删除该槽>,然后再进行指派。 

CLUSTER SETSLOT MIGRATING 将本节点的槽 slot 迁移到 node_id 指定的节点中。 

CLUSTER SETSLOT IMPORTING 从 node_id 指定的节点中导入槽 slot 到本节点。 

CLUSTER SETSLOT STABLE 取消对槽 slot 的导入(import)或者迁移(migrate)。  

键 (key) 

CLUSTER KEYSLOT 计算键 key 应该被放置在哪个槽上。 

CLUSTER COUNTKEYSINSLOT 返回槽 slot 目前包含的键值对数量。 

CLUSTER GETKEYSINSLOT 返回 count 个 slot 槽中的键。 

这些命令是集群所独有的。执行上述命令要先登录参考资料

参考资料

安装ruby环境

安装运行redis-trib.rb所需的环境

Redis集群管理

 

你可能感兴趣的:(架构,环境搭建,redis,分布式)