1、服务器集群
服务器 redis节点
node-i(192.168.0.168) 7001,7002
node-ii(192.168.0.169) 7003,7004
node-iii(192.168.0.170) 7005,7006
    三个节点都关闭防火墙:

systemctl stop iptables
    systemctl stop firewalld

查看防火墙状态:

systemctl status iptables
    systemctl status firewalld

2、安装gcc

redis进行源码安装,先要安装gcc,再make redis。执行以下命令安装redis:

yum -y install gcc gcc-c++ libstdc++-devel

3、安装ruby

执行以下命令安装ruby2.5,如果ruby版本过低,无法启动redis集群。

yum install -y centos-release-scl-rh
    yum install -y rh-ruby25
    scl enable rh-ruby25 bash

检验并查看ruby版本:

ruby -v

最后执行如下命令:

gem install redis

4、配置redis节点
(1)、node-i(192.168.0.168)

(a).安装redis

从redis官网https://redis.io/下载redis最新版本redis-4.0.11。或者 wget http://download.redis.io/releases/redis-4.0.11.tar.gz

解压redis:

tar -zxvf redis-4.0.11.tar.gz

创建redis目录:

mkdir -p /usr/local/redis-i
    mkdir -p /usr/local/redis-cluster/7001 /usr/local/redis-cluster/7002

解压redis:

tar -zxvf redis-4.0.11.tar.gz

进入redis-4.0.11目录,执行make命令,将redis安装在/usr/local/redis-i目录下:

make install PREFIX=/usr/local/redis-i

复制redis.conf到redis集群节点目录下:

cp redis.conf /usr/local/redis-cluster/7001
    cp redis.conf /usr/local/redis-cluster/7002

进入/usr/local/redis-i目录,将生成的 bin目录复制到redis集群节点目录下:

cp -r bin /usr/local/redis-cluster/7001
    cp -r bin /usr/local/redis-cluster/7002

分别修改节点7001、7002的配置文件redis.conf,修改如下:

7001:

bind 192.168.0.168
protected-mode no
port 7001
daemonize yes
cluster-enabled yes
cluster-node-timeout 15000
    7002:

bind 192.168.0.168
protected-mode no
port 7002
daemonize yes
cluster-enabled yes
cluster-node-timeout 15000
    (b).启动redis节点

分别启动7001和7002节点:

分别在/usr/local/redis-cluster/7001和/usr/local/redis-cluster/7002目录,执行如下命令:

./bin/redis-server ./redis.conf

通过ps命令查看启动的redis节点:

ps -ef|grep redis

(2)、node-ii(192.168.0.169)

(a).安装redis

创建redis目录:

mkdir -p /usr/local/redis-ii
    mkdir -p /usr/local/redis-cluster/7003 /usr/local/redis-cluster/7004

解压redis:

tar -zxvf redis-4.0.11.tar.gz

进入redis-4.0.11目录,执行make命令,将redis安装在/usr/local/redis-ii目录下:

make install PREFIX=/usr/local/redis-ii

复制redis.conf到redis集群节点目录下:

cp redis.conf /usr/local/redis-cluster/7003
    cp redis.conf /usr/local/redis-cluster/7004

进入/usr/local/redis-ii目录,将生成的 bin目录复制到redis集群节点目录下:

cp -r bin /usr/local/redis-cluster/7003
    cp -r bin /usr/local/redis-cluster/7004

分别修改节点7003、7004的配置文件redis.conf,修改如下:

7003:

bind 192.168.0.169
protected-mode no
port 7003
daemonize yes
cluster-enabled yes
cluster-node-timeout 15000
    7004:

bind 192.168.0.169
protected-mode no
port 7004
daemonize yes
cluster-enabled yes
cluster-node-timeout 15000
    (b).启动redis节点

分别启动7003和7004节点:

分别在/usr/local/redis-cluster/7003和/usr/local/redis-cluster/7004目录,执行如下命令:

./bin/redis-server ./redis.conf

通过ps命令查看启动的redis节点:

ps -ef|grep redis

(3)、node-iii(192.168.0.170)

(a).安装redis

创建redis目录:

mkdir -p /usr/local/redis-iii
    mkdir -p /usr/local/redis-cluster/7005 /usr/local/redis-cluster/7006

解压redis:

tar -zxvf redis-4.0.11.tar.gz

进入redis-4.0.11目录,执行make命令,将redis安装在/usr/local/redis-iii目录下:

make install PREFIX=/usr/local/redis-iii

复制redis.conf到redis集群节点目录下:

cp redis.conf /usr/local/redis-cluster/7005
    cp redis.conf /usr/local/redis-cluster/7006

进入/usr/local/redis-iii目录,将生成的 bin目录复制到redis集群节点目录下:

cp -r bin /usr/local/redis-cluster/7005
    cp -r bin /usr/local/redis-cluster/7006

分别修改节点7005、7006的配置文件redis.conf,修改如下:

7005:

bind 192.168.0.170
protected-mode no
port 7005
daemonize yes
cluster-enabled yes
cluster-node-timeout 15000
    7006:

bind 192.168.0.170
protected-mode no
port 7006
daemonize yes
cluster-enabled yes
cluster-node-timeout 15000
    (b).启动redis节点

分别启动7005和7006节点:

分别在/usr/local/redis-cluster/7005和/usr/local/redis-cluster/7006目录,执行如下命令:

./bin/redis-server ./redis.conf

通过ps命令查看启动的redis节点:

ps -ef|grep redis

5、启动redis集群
    以上步骤完成,6个redis节点都已经启动完成。现在启动redis集群,在任一服务器上都可以启动集群,进入最开始解压出来的redis-4.0.11目录的src子目录,执行如下命令启动redis集群:

./redis-trib.rb create --replicas 1 192.168.0.168:7001 192.168.0.168:7002 192.168.0.169:7003 192.168.0.169:7004 192.168.0.170:7005 192.168.0.170:7006

[root@localhost src]# ./redis-trib.rb create --replicas 1 192.168.0.168:7001 192.168.0.168:7002 192.168.0.169:7003 192.168.0.169:7004 192.168.0.170:7005 192.168.0.170:7006
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
192.168.0.168:7001
192.168.0.169:7003
192.168.0.170:7005
Adding replica 192.168.0.169:7004 to 192.168.0.168:7001
Adding replica 192.168.0.170:7006 to 192.168.0.169:7003
Adding replica 192.168.0.168:7002 to 192.168.0.170:7005
M: 30e71932ee92893bcf28f7e4d3b5a7a84ad205c3 192.168.0.168:7001
slots:0-5460 (5461 slots) master
S: 5c0f265eb2e46e1189181b7d5d709a4f7f595cfe 192.168.0.168:7002
replicates 8e34e11d03fa3dd22afde2a96ccbb66aeb805132
M: 226ab6b2176950dec24945cef4d4ccab1169a79c 192.168.0.169:7003
slots:5461-10922 (5462 slots) master
S: ccce10f5da67155479a8c515df65323aa6adb06a 192.168.0.169:7004
replicates 30e71932ee92893bcf28f7e4d3b5a7a84ad205c3
M: 8e34e11d03fa3dd22afde2a96ccbb66aeb805132 192.168.0.170:7005
slots:10923-16383 (5461 slots) master
S: b3b520a1957142cd6c7fa1e1e8aa4cf588ea1282 192.168.0.170:7006
replicates 226ab6b2176950dec24945cef4d4ccab1169a79c
Can I set the above configuration? (type 'yes' to accept): yes
>>> 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.0.168:7001)
M: 30e71932ee92893bcf28f7e4d3b5a7a84ad205c3 192.168.0.168:7001
slots:0-5460 (5461 slots) master
1 additional replica(s)
S: ccce10f5da67155479a8c515df65323aa6adb06a 192.168.0.169:7004
slots: (0 slots) slave
replicates 30e71932ee92893bcf28f7e4d3b5a7a84ad205c3
M: 8e34e11d03fa3dd22afde2a96ccbb66aeb805132 192.168.0.170:7005
slots:10923-16383 (5461 slots) master
1 additional replica(s)
S: 5c0f265eb2e46e1189181b7d5d709a4f7f595cfe 192.168.0.168:7002
slots: (0 slots) slave
replicates 8e34e11d03fa3dd22afde2a96ccbb66aeb805132
M: 226ab6b2176950dec24945cef4d4ccab1169a79c 192.168.0.169:7003
slots:5461-10922 (5462 slots) master
1 additional replica(s)
S: b3b520a1957142cd6c7fa1e1e8aa4cf588ea1282 192.168.0.170:7006
slots: (0 slots) slave
replicates 226ab6b2176950dec24945cef4d4ccab1169a79c
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

6、验证集群
    从任一主机进入任一redis节点,如从192.168.0.168主机中进入7001节点:

进入7001目录:

cd /usr/local/redis-cluster/7001

登录7001节点:

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

写入一个数据:

set redis cluster

之后进入其他节点,查看redis中的数据,如登录7005节点:

./bin/redis-cli -c -h 192.168.0.170 -p 7005

查看redis数据:

get redis

redis 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                   将节点的配置文件保存到硬盘里面
cluster slaves <node_id>       列出该slave节点的master节点
cluster set-config-epoch        强制设置configEpoch 
槽(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槽中的键
其它
cluster myid       返回节点的ID
cluster slots       返回节点负责的slot
cluster reset      重置集群,慎用

redis cluster配置
cluster-enabled yes
如果配置yes则开启集群功能,此redis实例作为集群的一个节点,否则,它是一个普通的单一的redis实例。

cluster-config-file nodes-6379.conf
虽然此配置的名字叫"集群配置文件",但是此配置文件不能人工编辑,它是集群节点自动维护的文件,主要用于记录集群中有哪些节点、他们的状态以及一些持久化参数等,方便在重启时恢复这些状态。通常是在收到请求之后这个文件就会被更新。
 
cluster-node-timeout 15000
这是集群中的节点能够失联的最大时间,超过这个时间,该节点就会被认为故障。如果主节点超过这个时间还是不可达,则用它的从节点将启动故障迁移,升级成主节点。注意,任何一个节点在这个时间之内如果还是没有连上大部分的主节点,则此节点将停止接收任何请求。一般设置为15秒即可。

cluster-slave-validity-factor 10
如果设置成0,则无论从节点与主节点失联多久,从节点都会尝试升级成主节点。如果设置成正数,则cluster-node-timeout乘以cluster-slave-validity-factor得到的时间,是从节点与主节点失联后,此从节点数据有效的最长时间,超过这个时间,从节点不会启动故障迁移。假设cluster-node-timeout=5,cluster-slave-validity-factor=10,则如果从节点跟主节点失联超过50秒,此从节点不能成为主节点。注意,如果此参数配置为非0,将可能出现由于某主节点失联却没有从节点能顶上的情况,从而导致集群不能正常工作,在这种情况下,只有等到原来的主节点重新回归到集群,集群才恢复运作。

cluster-migration-barrier 1
主节点需要的最小从节点数,只有达到这个数,主节点失败时,它从节点才会进行迁移。更详细介绍可以看本教程后面关于副本迁移到部分。

cluster-require-full-coverage yes
在部分key所在的节点不可用时,如果此参数设置为"yes"(默认值), 则整个集群停止接受操作;如果此参数设置为”no”,则集群依然为可达节点上的key提供读操作。

redis cluster状态
127.0.0.1:8001> cluster info
cluster_state:ok

如果当前redis发现有failed的slots,默认为把自己cluster_state从ok个性为fail, 写入命令会失败。如果设置cluster-require-full-coverage为no,则无此限制。
cluster_slots_assigned:16384   #已分配的槽
cluster_slots_ok:16384              #槽的状态是ok的数目
cluster_slots_pfail:0                    #可能失效的槽的数目
cluster_slots_fail:0                      #已经失效的槽的数目
cluster_known_nodes:6             #集群中节点个数
cluster_size:3                              #集群中设置的分片个数
cluster_current_epoch:15          #集群中的currentEpoch总是一致的,currentEpoch越高,代表节点的配置或者操作越新,集群中最大的那个node epoch
cluster_my_epoch:12                 #当前节点的config epoch,每个主节点都不同,一直递增, 其表示某节点最后一次变成主节点或获取新slot所有权的逻辑时间.
cluster_stats_messages_sent:270782059
cluster_stats_messages_received:270732696

127.0.0.1:8001> cluster nodes
25e8c9379c3db621da6ff8152684dc95dbe2e163 192.168.64.102:8002 master - 0 1490696025496 15 connected 5461-10922
d777a98ff16901dffca53e509b78b65dd1394ce2 192.168.64.156:8001 slave 0b1f3dd6e53ba76b8664294af2b7f492dbf914ec 0 1490696027498 12 connected
8e082ea9fe9d4c4fcca4fbe75ba3b77512b695ef 192.168.64.108:8000 master - 0 1490696025997 14 connected 0-5460
0b1f3dd6e53ba76b8664294af2b7f492dbf914ec 192.168.64.170:8001 myself,master - 0 0 12 connected 10923-16383
eb8adb8c0c5715525997bdb3c2d5345e688d943f 192.168.64.101:8002 slave 25e8c9379c3db621da6ff8152684dc95dbe2e163 0 1490696027498 15 connected
4000155a787ddab1e7f12584dabeab48a617fc46 192.168.67.54:8000 slave 8e082ea9fe9d4c4fcca4fbe75ba3b77512b695ef 0 1490696026497 14 connected
#说明
节点ID:例如25e8c9379c3db621da6ff8152684dc95dbe2e163
ip:port:节点的ip地址和端口号,例如192.168.64.102:8002
flags:节点的角色(master,slave,myself)以及状态(pfail,fail)
如果节点是一个从节点的话,那么跟在flags之后的将是主节点的节点ID,例如192.168.64.156:8001主节点的ID就是0b1f3dd6e53ba76b8664294af2b7f492dbf914ec
集群最近一次向节点发送ping命令之后,过了多长时间还没接到回复
节点最近一次返回pong回复的时间
节点的配置纪元(config epoch)
本节点的网络连接情况
节点目前包含的槽,例如192.168.64.102:8002目前包含的槽为5461-10922

centos7多节点部署redis4.0.11集群的更多相关文章

  1. Redis-4.0.11集群配置

    版本:redis-3.0.5 redis-3.2.0  redis-3.2.9  redis-4.0.11 参考:http://redis.io/topics/cluster-tutorial. 集群 ...

  2. 配置redis 4.0.11 集群

    配置redis 4.0.11 集群 准备redis 软件和redis配置文件 启动Redis服务 /data/soft/redis/src/redis-check-aof --fix /log/red ...

  3. redis4.0.1集群安装部署

    安装环境 序号 项目 值 1 OS版本 Red Hat Enterprise Linux Server release 7.1 (Maipo) 2 内核版本 3.10.0-229.el7.x86_64 ...

  4. linux下redis4.0.2集群部署(利用Ruby脚本命令)

    一.原生命令方式和Ruby脚本方式区别 利用Ruby脚本部署和用原生命令部署,节点准备的步骤都是一样的,节点启动后的握手,以及主从.槽分配,利用Ruby脚本一步就能完成,利用原生命令需要一步一步地执行 ...

  5. centos7安装redis-4.0.1集群

    试验机操作系统:CentOS Linux release 7.2.1511 (Core) 本文的目的是教会大家快速搭建redis集群,完了再深入学习. 试问如果不上手试验,看的资料再多有个毛用? 下载 ...

  6. CentOS7 部署 ElasticSearch7.0.1 集群

    环境 主机名 IP 操作系统 ES 版本 test1 192.168.1.2 CentOS7.5 7.0.1 test2 192.168.1.3 CentOS7.5 7.0.1 test3 192.1 ...

  7. linux下redis4.0.2集群部署(利用原生命令)

    一.部署架构如下 每台服务器准备2个节点,一主一从,主节点为另外两台其中一台的主,从节点为另外两台其中一台的从. 二.准备6个节点配置文件 在172.28.18.75上操作 cd /etc/redis ...

  8. redis4.0.6集群搭建

    文件环境:CentOS7 + redis4.0.6 先去官网下载redis:https://redis.io/,然后上传到你的虚拟机,我上传到了/mysoft 先解压->然后进入主目录-> ...

  9. 部署Hadoop2.0高性能集群

    废话不多说直接实战,部署Hadoop高性能集群: 拓扑图: 一.实验前期环境准备: 1.三台主机配置hosts文件:(复制到另外两台主机上) [root@tiandong63 ~]# more /et ...

随机推荐

  1. ubuntu双网卡准备配置

    近日有个需求,交换机有两台,做了堆叠,服务器双网卡,每个分别连到一台交换机上.这样就需要将服务器的网卡做成主备模式,以增加安全性,使得当其中一个交换机不通的时候网卡能够自动切换. 整体配置不难,网上也 ...

  2. SerialPort缓冲区

    SerialPort缓冲区中有:接收缓冲区,发送缓冲区,输入缓冲区,输出缓冲区,传输缓冲区. 例如: 串口属性:BytesToRead(获取接收缓冲区中数据的字节数)--这里提到的是“接收缓冲区” 串 ...

  3. delphi 原生 ADODB.recordset

    ADODB.recordset ..\source\rtl\win\Winapi.ADOInt.pas..\17.0\OCX\Servers\ADODB2010.pasCLASS_Recordset: ...

  4. Open XML 检索 EXCEL

    1.Excel 隐藏行判断 项目的 Hidden 属性不为 null,且 Hidden 属性的值为 True var itemList = ws.Descendants<Row>(). W ...

  5. ___pInvalidArgHandler already defined in LIBCMTD.lib(invarg.obj)

    vs2013编译项目时出错,网上很多的解决方案全都是垃圾,根本不能用 不过也有不是垃圾的,就是下面这个: 关于采用静态链接编译生成EXE库函数重复定义问题 看了好多关于类似LIBCMT.lib(inv ...

  6. springMVC第一天

    这些是springMVC3.2所用到的jar包 web.xml配置 <?xml version="1.0" encoding="UTF-8"?> & ...

  7. 一篇文章让你了解并掌握memcached

    第一章 memcached简介 1.1为什么引入memcached 随着数据量的增大,访问的集中,REBMS负担加重,数据库响应恶化. Memcached是高性能的分布式内存缓存服务器,目的是通过缓存 ...

  8. UML类图介绍及简单用法

    原文链接 一.类的属性的表示方式 在UML类图中,类使用包含类名.属性(field) 和方法(method) 且带有分割线的矩形来表示,比如下图表示一个Employee类,它包含name,age和em ...

  9. 分布式全文检索系统SolrCloud简介

    前言 本文简单描述SolrCloud的特性,基本结构和入门,基于Solr4.5版本. Lucene是一个Java语言编写的利用倒排原理实现的文本检索类库.Solr是以Lucene为基础实现的文本检索应 ...

  10. day63-webservice 03.解析cxf提供的例子

    Path配置: C:\Program Files (x86)\ScanSign;E:\app\zhongzh\product\11.2.0\dbhome_1\bin;D:\app\zhongzh\pr ...