centos7多节点部署redis4.0.11集群
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集群的更多相关文章
- 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. 集群 ...
- 配置redis 4.0.11 集群
配置redis 4.0.11 集群 准备redis 软件和redis配置文件 启动Redis服务 /data/soft/redis/src/redis-check-aof --fix /log/red ...
- redis4.0.1集群安装部署
安装环境 序号 项目 值 1 OS版本 Red Hat Enterprise Linux Server release 7.1 (Maipo) 2 内核版本 3.10.0-229.el7.x86_64 ...
- linux下redis4.0.2集群部署(利用Ruby脚本命令)
一.原生命令方式和Ruby脚本方式区别 利用Ruby脚本部署和用原生命令部署,节点准备的步骤都是一样的,节点启动后的握手,以及主从.槽分配,利用Ruby脚本一步就能完成,利用原生命令需要一步一步地执行 ...
- centos7安装redis-4.0.1集群
试验机操作系统:CentOS Linux release 7.2.1511 (Core) 本文的目的是教会大家快速搭建redis集群,完了再深入学习. 试问如果不上手试验,看的资料再多有个毛用? 下载 ...
- 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 ...
- linux下redis4.0.2集群部署(利用原生命令)
一.部署架构如下 每台服务器准备2个节点,一主一从,主节点为另外两台其中一台的主,从节点为另外两台其中一台的从. 二.准备6个节点配置文件 在172.28.18.75上操作 cd /etc/redis ...
- redis4.0.6集群搭建
文件环境:CentOS7 + redis4.0.6 先去官网下载redis:https://redis.io/,然后上传到你的虚拟机,我上传到了/mysoft 先解压->然后进入主目录-> ...
- 部署Hadoop2.0高性能集群
废话不多说直接实战,部署Hadoop高性能集群: 拓扑图: 一.实验前期环境准备: 1.三台主机配置hosts文件:(复制到另外两台主机上) [root@tiandong63 ~]# more /et ...
随机推荐
- 2014.9.30 Double转字符
(57.0/60.0).ToString("f2")="0.95" 等于 string.Format("{0:F2}",57.0/60)=& ...
- Python——Dict
Python字典(Dictionary) 字典是一种可变容器模型,可存储任意类型对象. 字典的每个键值(key => value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花 ...
- javascript的加载、解析、执行对浏览器渲染的影响
javascript的加载方式,总得来说是在页面上使用script来声明,以及动态的加载这些方式,而动态的加载,在很多js库中都能够很好的去处 理,从而不至于阻塞其他资源的加载,并与其并行加载下来.这 ...
- 仿函数(二、stl中常用仿函数)
提到C++ STL,首先被人想到的是它的三大组件:Containers, Iterators, Algorithms,即容器,迭代器和算法.容器为用户提供了常用的数据结构,算法大多是独立于容器的常用的 ...
- 图论算法》关于tarjan算法两三事
关于tarjan,在下觉得这个算法从本质上是一种暴力求强连通分量的方法,但事实上这也是最有效的求强连通分量的方法之一,它对于处理各种强连通分量中奇怪问题,都可以直接转化,所以比较通用和常见. 什么是t ...
- ef增删改查
[C#]Entity Framework 增删改查和事务操作 1.增加对象 DbEntity db = new DbEntity(); //创建对象实体,注意,这里需要对所有属性进行赋值(除了自动增长 ...
- Entity Framework 6.0 Tutorials(9):Stored Procedure Mapping
Code First - Insert, Update, Delete Stored Procedure Mapping: Entity Framework 6 Code-First provides ...
- JavaScript——Dom编程(1)
DOM:Document Object Model(文本对象模型) D:文档 – html 文档 或 xml 文档O:对象 – document 对象的属性和方法M:模型 DOM 是针对xml(htm ...
- Responsive设计——meta标签
media-queries.js(http://code.google.com/p/css3-mediaqueries-js/) respond.js(https://github.com/scott ...
- 编写高质量代码改善C#程序的157个建议——建议44:理解委托中的协变
建议44:理解委托中的协变 委托中的泛型变量天然是部分支持协变的.为什么是“部分支持协变”?看下面示例: class Program { public delegate T GetEmployeeHa ...