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. 2014.9.30 Double转字符

    (57.0/60.0).ToString("f2")="0.95" 等于 string.Format("{0:F2}",57.0/60)=& ...

  2. Python——Dict

    Python字典(Dictionary) 字典是一种可变容器模型,可存储任意类型对象. 字典的每个键值(key => value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花 ...

  3. javascript的加载、解析、执行对浏览器渲染的影响

    javascript的加载方式,总得来说是在页面上使用script来声明,以及动态的加载这些方式,而动态的加载,在很多js库中都能够很好的去处 理,从而不至于阻塞其他资源的加载,并与其并行加载下来.这 ...

  4. 仿函数(二、stl中常用仿函数)

    提到C++ STL,首先被人想到的是它的三大组件:Containers, Iterators, Algorithms,即容器,迭代器和算法.容器为用户提供了常用的数据结构,算法大多是独立于容器的常用的 ...

  5. 图论算法》关于tarjan算法两三事

    关于tarjan,在下觉得这个算法从本质上是一种暴力求强连通分量的方法,但事实上这也是最有效的求强连通分量的方法之一,它对于处理各种强连通分量中奇怪问题,都可以直接转化,所以比较通用和常见. 什么是t ...

  6. ef增删改查

    [C#]Entity Framework 增删改查和事务操作 1.增加对象 DbEntity db = new DbEntity(); //创建对象实体,注意,这里需要对所有属性进行赋值(除了自动增长 ...

  7. Entity Framework 6.0 Tutorials(9):Stored Procedure Mapping

    Code First - Insert, Update, Delete Stored Procedure Mapping: Entity Framework 6 Code-First provides ...

  8. JavaScript——Dom编程(1)

    DOM:Document Object Model(文本对象模型) D:文档 – html 文档 或 xml 文档O:对象 – document 对象的属性和方法M:模型 DOM 是针对xml(htm ...

  9. Responsive设计——meta标签

    media-queries.js(http://code.google.com/p/css3-mediaqueries-js/) respond.js(https://github.com/scott ...

  10. 编写高质量代码改善C#程序的157个建议——建议44:理解委托中的协变

    建议44:理解委托中的协变 委托中的泛型变量天然是部分支持协变的.为什么是“部分支持协变”?看下面示例: class Program { public delegate T GetEmployeeHa ...