一、下载所需软件包

redis        

wget http://download.redis.io/releases/redis-4.0.6.tar.gz
ruby         
wget https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.5.tar.gz
redis的gem包    
wget https://rubygems.org/downloads/redis-4.0.0.gem
gcc          
yum -y install gcc gcc-c++

二、部署redis(略,见另外一篇博文)

三、安装ruby

  解压、编译、安装
  tar -xvf ruby-2.5.1.tar.gz
  ./configure --prefix=/opt/ruby
  make && make install
  添加环境变量  
  echo 'export PATH=$PATH:/opt/ruby-2.5.5/bin' >> /etc/profile

  source /etc/profile
 

四、安装配置相关组件

  创建redis集群目录
  mkdir -pv /opt/redis-4.0.6/redis-cluster
  拷贝文件到目录
  cp /opt/redis-4.0.6/src/redis-trib.rb  /opt/redis-4.0.6/redis-cluster
  cp /opt/redis-4.0.0.gem /opt/redis-4.0.6/redis-cluster
 
  安装gem包
  cd  /opt/redis-4.0.6/redis-cluster
  gem install redis-4.0.0.gem
  【如果有报错:需要安装zlib yum -y install zlib zlib-devel】
   进入ruby 源安装目录,修改文件
  ①zlib配置
  cd /opt/ruby-2.5.5/ext/zlib
  ruby extconf.rb       //成功会出现creating Makefile
  【如果没有出现creating Makefile,执行命令 ruby extconf.rb --with-zlib-dir=zlib的目录】
  
  vi Makefile
  将 zlib.o: $(top_srcdir)/include/ruby.h 修改为 zlib.o: ../../include/ruby.h
  make
  make install
  ②openssl配置
  cd /opt/ruby-2.5.5/ext/openssl
  ruby extconf.rb      //成功会出现creating Makefile
  【如果有报错 需要安装ssl:yum install -y openssl openssl-devel】
  vi Makefile
  将所有的$(top_srcdir)修改为 ../..($(top_srcdir)不止一个)
  make
  make install

五、创建集群

  我们需要6个节点的Redis作为集群,所以我们需要创建6个文件夹,分别存放6个节点的配置信息,6个节点需要对应6个端口号,比如7001~7006
  批量创建六个文件夹
  cd /opt/redis-4.0.6/redis-cluster/
  mkdir 700{1,2,3,4,5,6}
   
  将原先redis安装目录下的配置文件redis.conf拷贝到新创建的六个文件夹下面
  cd /opt/redis-4.0.6
  cp redis.conf /opt/redis-4.0.6/redis-cluster/7001/
  cp redis.conf /opt/redis-4.0.6/redis-cluster/7002/
  cp redis.conf /opt/redis-4.0.6/redis-cluster/7003/
  cp redis.conf /opt/redis-4.0.6/redis-cluster/7004/
  cp redis.conf /opt/redis-4.0.6/redis-cluster/7005/
  cp redis.conf /opt/redis-4.0.6/redis-cluster/7006/
  将redis安装之后生成的服务端与客户端拷贝到新创建的六个文件夹下面
  cd /usr/local/bin/
  cp redis-server redis-cli /opt/redis-4.0.6/redis-cluster/7001/
  cp redis-server redis-cli /opt/redis-4.0.6/redis-cluster/7002/
  cp redis-server redis-cli /opt/redis-4.0.6/redis-cluster/7003/
  cp redis-server redis-cli /opt/redis-4.0.6/redis-cluster/7004/
  cp redis-server redis-cli /opt/redis-4.0.6/redis-cluster/7005/
  cp redis-server redis-cli /opt/redis-4.0.6/redis-cluster/7006/
  修改新创建的六个文件夹下面的配置文件redis.conf的部分参数
  修改/opt/redis-4.0.6/redis-cluster/{7001-7006}中的redis.conf
  ①连入主机的ip地址,不修改外部无法连入你的redis缓存服务器中
  bind 192.168.4.212   
  ②修改端口
  port 700X    x为文件夹名称,你在700几就填几
  ③开启守护进程模式。在该模式下,redis会在后台运行,并将进程pid号写入至redis.conf选项pidfile设置的文件中,此时redis将一直运行,除非手动kill该进程。
  daemonize yes    
  ④pid文件配置
  pidfile /app/redis/redis-cluster/700x/redis_700x.pid   
  ⑤开启集群模式
  cluster-enabled yes 
  
  vim /opt/redis-4.0.6/redis-cluster/start-all.sh
  #!/bin/bash
  for port in 7001 7002 7003 7004 7005 7006
  do
    cd /opt/redis-4.0.6/redis-cluster/$port
    ./redis-server redis.conf
  done

  启动集群实例,
  bash /opt/redis-4.0.6/redis-cluster/start-all.sh
  ps -ef|grep redis
  root     22911     1  0 17:20 ?        00:00:00 ./redis-server 192.168.4.212:7001 [cluster]
  root     22913     1  0 17:20 ?        00:00:00 ./redis-server 192.168.4.212:7002 [cluster]
  root     22915     1  0 17:20 ?        00:00:00 ./redis-server 192.168.4.212:7003 [cluster]
  root     22917     1  0 17:20 ?        00:00:00 ./redis-server 192.168.4.212:7004 [cluster]
  root     22919     1  0 17:20 ?        00:00:00 ./redis-server 192.168.4.212:7005 [cluster]
  root     22927     1  0 17:20 ?        00:00:00 ./redis-server 192.168.4.212:7006 [cluster]
  root     22943 24007  0 17:20 pts/9    00:00:00 grep redis

  配置集群
  cd /opt/redis-4.0.6/redis-cluster
  创建三个主节点,三个从节点。其中—replicas1 表示每个主节点下面有1个从节点,从节点可以是任意多个。
  ./redis-trib.rb create --replicas 1 192.168.4.212:7001 192.168.4.212:7002 192.168.4.212:7003 192.168.4.212:7004 192.168.4.212:7005 192.168.4.212:7006
 
  注意: Redis Cluster requires at least 3 master nodes
  【如果有报错cannot load such file,参照以下步骤】
  【能连外网:gem install redis】
  【不能连接外网:先移除源 gem sources –remove https://rubygems.org/ 再进行安装 gem install -l ./redis-4.0.0.gem】
 
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
192.168.4.212:7001    --主节点
192.168.4.212:7002    --主节点
192.168.4.212:7003    --主节点
Adding replica 192.168.4.212:7005 to 192.168.4.212:7001        --主节点对应的从节点
Adding replica 192.168.4.212:7006 to 192.168.4.212:7002        --主节点对应的从节点
Adding replica 192.168.4.212:7004 to 192.168.4.212:7003        --主节点对应的从节点
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: 878f46c817107cd7a59269b0335f9a8be7529080 192.168.4.212:7001
   slots:0-5460 (5461 slots) master                        --主节点分配的hash槽
M: cfda6a1cf00977311fa46f2920a4e1198e8b9f36 192.168.4.212:7002
   slots:5461-10922 (5462 slots) master                    --主节点分配的hash槽
M: efcf4009a56f0a488b72b6c50d0deefd7b416df3 192.168.4.212:7003
   slots:10923-16383 (5461 slots) master                    --主节点分配的hash槽
S: 1a0bbbb75c8fa0f377767fe0ba194c8d63814b23 192.168.4.212:7004
   replicates cfda6a1cf00977311fa46f2920a4e1198e8b9f36            --从节点没有hash槽
S: c8d88f8e36b5741c7e013a6b84f24a64976f2901 192.168.4.212:7005
   replicates efcf4009a56f0a488b72b6c50d0deefd7b416df3            --从节点没有hash槽
S: 10f48bfea3db737b55d8fee14ad795252d396e2f 192.168.4.212:7006
   replicates 878f46c817107cd7a59269b0335f9a8be7529080            --从节点没有hash槽
Can I set the above configuration? (type 'yes' to accept): yes    --选择yes, 意思是服从这种主从分配方式,我们也可以通过配置文件自己指定slave
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join....
>>> Performing Cluster Check (using node 192.168.4.212:7001) --以下是详细的主从节点分布
M: 878f46c817107cd7a59269b0335f9a8be7529080 192.168.4.212:7001
   slots:0-5460 (5461 slots) master
   1 additional replica(s)
M: efcf4009a56f0a488b72b6c50d0deefd7b416df3 192.168.4.212:7003
   slots:10923-16383 (5461 slots) master
   1 additional replica(s)
M: cfda6a1cf00977311fa46f2920a4e1198e8b9f36 192.168.4.212:7002
   slots:5461-10922 (5462 slots) master
   1 additional replica(s)
S: 1a0bbbb75c8fa0f377767fe0ba194c8d63814b23 192.168.4.212:7004
   slots: (0 slots) slave
   replicates cfda6a1cf00977311fa46f2920a4e1198e8b9f36
S: 10f48bfea3db737b55d8fee14ad795252d396e2f 192.168.4.212:7006
   slots: (0 slots) slave
   replicates 878f46c817107cd7a59269b0335f9a8be7529080
S: c8d88f8e36b5741c7e013a6b84f24a64976f2901 192.168.4.212:7005
   slots: (0 slots) slave
   replicates efcf4009a56f0a488b72b6c50d0deefd7b416df3
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...

六、集群测试  

  cd /opt/redis-4.0.6/redis-cluster/7001
  ./redis-cli -c -h 192.168.4.212 -p 7001
  ./redis-cli -c -h 192.168.4.212 -p 7001 shutdown //关闭7001节点,如果没有-h参数,默认连接127.0.0.1,如果没有-p参数,默认连接6379端口(所有如果用默认的,就没有-h -p)
  说明:-h+host  -p+端口号  -c是要连接集群,注意坑,不加会报错的
  ./redis-cli -c -h 192.168.4.212 -p 7001
  192.168.4.212:7001> set name xiaowang
  -> Redirected to slot [5798] located at 192.168.4.212:7002
  OK
  192.168.4.212:7002> get name
  "xiaowang"
  192.168.4.212:7002> quit
 

七、相关指令

常用

打印集群的信息
CLUSTER INFO

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

检查集群状态
src/redis-trib.rb check 127.0.0.1:7000

查看本节点信息

info replication

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

返回一个master节点的slaves 列表
CLUSTER SLAVES node-id

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

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

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

操作

将一个或多个槽(slot)指派给当前节点。
cluster addslots {0...5461}

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

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

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

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

移除一个或多个槽对当前节点的指派。CLUSTER FLUSHSLOTS 移除指派给当前节点的所有槽,让当前节点变成一个没有指派任何槽的节点。
CLUSTER DELSLOTS <slot> [slot ...]

将槽 slot 指派给 node_id 指定的节点。
CLUSTER SETSLOT <slot> NODE <node_id>

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

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

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

redis-trib.rb

这个是ruby编写的redis集群管理工具

1代表每个主只有一个从,写在前面的是主,后面的是从
redis-trib.rb create --replicas 1 ip:port ip:port

检测集群是否有问题
redis-trib.rb check ip:port

添加一个节点到集群
redis-trib.rb add-node <新节点ip:端口> <老节点ip:端口>

Redis 集群部署的更多相关文章

  1. Redis集群部署及命令

    一.简介 redis集群是一个无中心的分布式Redis存储架构,可以在多个节点之间进行数据共享,解决了Redis高可用.可扩展等问题. redis集群提供了以下两个好处: 将数据自动切分(split) ...

  2. Redis集群部署-windows

    Redis集群部署-windows 前言 为了能体验一下部署Redis集群是一种怎么样的体验,所一边做一边写了这篇记录. 1.准备 从这里下载windows服务端 https://github.com ...

  3. Redis集群部署文档(Ubuntu15.10系统)

    Redis集群部署文档(Ubuntu15.10系统)(要让集群正常工作至少需要3个主节点,在这里我们要创建6个redis节点,其中三个为主节点,三个为从节点,对应的redis节点的ip和端口对应关系如 ...

  4. Redis集群部署3.0

    我用的Mac的终端 ------------------------- 1.Redis简介 centos(5.4)  Redis是一个key-value存储系统.和Memcached类似,但是解决了断 ...

  5. Redis集群部署与维护

    Redis集群部署与维护 目录: 一. 集群架构 二. 集群部署 1. 创建redis-cluster目录 2. 编译redis 3. 编辑redis配置文件 4. 配置redis集群 5. redi ...

  6. 二进制redis集群部署

    二进制redis集群部署 〇.前言 无聊想学罢了 准备环境: 三台centos7 1C1GB即可 三个路相连的地址 主机 IP 节点-角色-实例(端口) redis1 172.16.106.128 M ...

  7. redis集群部署之codis 维护脚本

    搞了几天redis cluster codis 的部署安装,测试,架构优化,配合研发应用整合,这里记一些心得! 背景需求: 之前多个业务都在应用到redis库,各业务独立占用主从两台服务器,硬件资源利 ...

  8. redis集群部署那点事

    [CentOS]make cc Command not found,make: *** [adlist.o] Error 127” 参考:https://blog.csdn.net/wzygis/ar ...

  9. redis集群部署步骤

    1.yum 安装依赖 yum install gcc unzip wget 2.编译安装redis,编译安装的目的是源码包内包含了接下来创建redis集群所需要的 redis-trib.rb脚本 ma ...

随机推荐

  1. PHP判断是否有Get参数的方法

    PHP如何判断是否有Get参数,方法很简单,一个函数就可以搞定,需要的朋友可以参考下 if(is_array($_GET)&&count($_GET)>0)//判断是否有Get参 ...

  2. git远程分支创建,本地分支关联远程分支,第一次发布、更新分支

    git远程分支创建,本地分支关联远程分支,第一次发布.更新分支 github托管服务器地址为https://github.com git提交更新代码示意图: 本地与远程进行免密码配置(本地与远程关联) ...

  3. python渗透测试工具集

    下载地址:https://github.com/githubmaidou/tools

  4. [Python自学] day-17 (jQuery)

    一.jQuery简介 参考文档链接:http://jquery.cuishifeng.cn/ jQuery是JS的一个类库,是对DOM.BOM等的封装,方便我们来查找和操作元素. jQuery分为1. ...

  5. spring-boot web项目常用配置

    一.对用户输入query参数过滤空字符串 使用 WebBindingInitializer 来对string类型参数进行过滤,但是这种方式只能处理query参数不能处理body参数 代码例子: /** ...

  6. Linux之动态库

    命令规则 lib + 名字 + .so 制作步骤 1)生成与位置无关的代码(生成与位置无关的代码) 2)将.o打包成共享库(动态库) 发布和使用共享库 动态库运行原理: 生成动态库: gcc -fPI ...

  7. Android学习_注意事项

    一. Fragment中加载ListView public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle ...

  8. Android input输入框 移动页面input手机键盘中的“搜索”按键

    动页面input手机键盘中的“搜索”按键 满足以下几点机即可: input type="search"    放到form标签中    使用action属性 <form ac ...

  9. CSS 实现对号效果

    实现对号效果,一种思路是利用现成的符号,直接在网上搜索到 √,插入页面.另一种思路是本文要介绍的用 CSS 实现,思路是: 给块级元素设置宽度和高度 设置元素相邻的两个 border 旋转元素 HTM ...

  10. 项目中遇到的关于Java的问题

    1.Collections对List集合中的数据进行排序 http://blog.csdn.net/veryisjava/article/details/51675036 2.Java随机数 http ...