redis 集群安装
redis集群安装
1.下载redis源码
2.解压并进入解压后的文件夹redis内
3.make,生成一系列的文件(mkreleasehdr.sh, redis-benchmark, redis-check-aof, redis-check-rdb, redis-cli, redis-sentinel, redis-server, redis-server, redis-trib.rb)
要部署集群,至少需要6个节点,这里使用了六台电脑centos系统,每台电脑上运行一个redis实例,端口为6379 。(如果没有6台,则可以在一台电脑上运行多个redis实例,设置不同的端口即可)
4.设置配置文件 src/redis.conf
port 6379 # 绑定端口,可以改为其他端口
daemon yes # 后台运行
cluster-enabled yes #集群
cluster-config-file nodes.conf # 组成集群时自动生成的配置文件,用户不需修改这个文件
cluster-node-timeout 5000 # 超时(认为宕机)
appendonly yes # 每次更新或插入新数据时写入日志文件
bind
bind <本机ip> # 绑定ip,目的是为了让其他节点知道,如果在一台电脑上运行6个redis实例,则这里可以设为127.0.0.1(没有实测)
5. 安装ruby,rubygems,可以从网上下载源码安装或者 yum install
6. 执行指令
gem install redis
这是因为集群启动是使用ruby脚本,如果出现安装错误比如说没有zlib或者openssl,则需要yum install zlib zlib-devel openssl openssl-devel,然后需要重新编译安装ruby(否则仍然提示错误)。
7. 将redis文件夹复制到其他5台电脑上,并在6台电脑上依次启动6个redis实例
8. 执行指令
./redis-trib.rb create --replicas 127.0.0.1: 127.0.0.1: \
127.0.0.1: 127.0.0.1: 127.0.0.1: 127.0.0.1:
将127.0.0.1:<port> 替换为实际的ip:port
如果出现redis waiting for the cluster to join.... 一直阻塞,则说明有的节点端口无法通信,可以开放所绑定的端口(以及 绑定端口+10000 得到的另一个端口,这个端口redis也使用)
如果出现 sorry, can't connect to node xxx.xxx.xx.xx,则很可能是防火墙没有开放端口
进行如下设置即可
9.如果需要关闭集群,则需要在每台电脑上分别关闭
ps -aux | grep redis
得到redis的pid,然后
kill - <pid>
此时如果再次执行上面 7,8 步骤重启集群,则会出现类似
Node 192.168.10.219:6379 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.
的错误,此时需要将redis启动目录中的appendonly.aof,nodes.conf,dump.rdb文件删除后再执行 7,8步骤方可
10. 最后登录集群
./redis-cli -h 192.168.10.10 -c -p
11. 如果给集群设置密码,则注意在集群搭建完成前不要设置密码,在搭建之后通过客户端设置密码,如下(注意分别登录每个节点并设置)
config set masterauth <p1>
config set requirepass <p2>
auth <p2>
config rewrite
下次登录可使用
./redis-cli -h <ip> -c -p -a <p2>
或者使用10步骤登录后,再使用 auth <p2>验证身份
redis集群管理工具
(以下内容来源:http://blog.sina.com.cn/s/blog_13ea37b210102wyc7.html)
redis-trib.rb是redis官方推出的管理redis集群的工具,集成在redis的源码src目录下,是基于redis提供的集群命令封装成简单、便捷、实用的操作工具。redis-trib.rb是redis作者用ruby完成的。
先从redis-trib.rb的help信息,看下redis-trib.rb提供了哪些功能。
redis-trib
选项:
create host1:port1 ... hostN:portN 创建集群,只有大于等于3个节点才能创建集群
--replicas 每个节点需要几个slave
check host:port 检查集群,只需要选择一个集群中的一个节点即可
info host:port 查看集群信息,只需要选择一个集群中的一个节点即可
fix host:port 修复集群,目前fix命令能修复两种异常,一种是集群有处
于迁移中的slot的节点,一种是slot未完全分配的异常
--timeout 超时时间
reshard host:port 在线迁移slot
--from 需要从哪些源节点上迁移slot,可从多个源节点完成迁移,
以逗号隔开,传递的是节点的node id,
还可以直接传递--from all,这样源节点就是集群的所有节点,
不传递该参数的话,则会在迁移过程中提示用户输入。
--to Slot需要迁移的目的节点的node id,目的节点只能填写一个,
不传递该参数的话,则会在迁移过程中提示用户输入。
--slots 需要迁移的slot数量,不传递该参数的话,则会在迁移过程中提示用户输入。
--yes 设置该参数,可以在打印执行reshard计划的时候,提示用户输入yes确认后再执行reshard
--timeout 设置migrate命令的超时时间。
--pipeline 定义cluster getkeysinslot命令一次取出的key数量,
不传的话使用默认值为10。
rebalance host:port 平衡集群节点slot数量,这个是必传参数,
用来从一个节点获取整个集群信息,相当于获取集群信息的入口
--weight 节点的权重,格式为node_id=weight,如果需要为多个节点分配权
重的话,需要添加多个--weight 参数,
即--weight b31e3a2e=5 --weight 60b8e3a1=5,node_id可为节点
名称的前缀,只要保证前缀位数能唯一区分该节点即可。
没有传递–weight的节点的权重默认为1。
--auto-weights 这个参数在rebalance流程中并未用到
--use-empty-masters rebalance是否考虑没有节点的master,
默认没有分配slot节点的master是不参与rebalance的,
设置--use-empty-masters可以让没有分配slot的节点参与rebalance
--timeout 设置migrate命令的超时时间
--simulate 设置该参数,可以模拟rebalance操作,提示用户会迁移哪些slots,
而不会真正执行迁移操作
--pipeline 与reshar的pipeline参数一样,定义cluster getkeysinslot命令一次
取出的key数量,不传的话使用默认值为10。
--threshold 只有节点需要迁移的slot阈值超过threshold,才会执行rebalance操作
add-node new_host:new_port existing_host:existing_port 将新节点加入集群,
命令可以将新节点加入集群,节点可以为master,也可
以为某个master节点的slave
--slave 设置该参数,则新节点以slave的角色加入集群
--master-id 这个参数需要设置了--slave才能生效,--master-id用来指定新节点的
master节点。如果不设置该参数,则会随机为节点选择master节点。
del-node host:port node_id 从集群中删除节点,
set-timeout host:port milliseconds 设置集群节点间心跳连接的超时时间,单位是毫秒
call host:port command arg arg .. arg 在集群全部节点上执行命令,
call命令也是需要通过集群的一个节点地址,连上整个集群,
然后在集群的每个节点执行该命令。
import host:port 将外部redis节点数据导入集群,
import命令更适合离线的把外部redis数据导入,
以slave的方式连接redis节点去同步节点数据应该是更好的方式。
--from 源节点
--copy 拷贝
--replace 替换
help 打印帮助信息
示例:
* 创建Redis集群
$ redis-trib.rb create --replicas 1 172.16.0.7:6379 172.16.0.7:6380 172.16.0.7:6381 172.16.0.7:6382 172.16.0.7:6383 172.16.0.7:6384
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
172.16.0.7:6379
172.16.0.7:6380
172.16.0.7:6381
Adding replica 172.16.0.7:6382 to 172.16.0.7:6379
Adding replica 172.16.0.7:6383 to 172.16.0.7:6380
Adding replica 172.16.0.7:6384 to 172.16.0.7:6381
M: 8b3809e6e5591dcfec067216906a25d7cd482598 172.16.0.7:6379
slots:0-5460 (5461 slots) master
M: a1ac1fc64549ca15eb889395c46d001162bf2aa6 172.16.0.7:6380
slots:5461-10922 (5462 slots) master
M: 01a0cccbb8b15e00469d1cafd2eedfb6bd8bd2b5 172.16.0.7:6381
slots:10923-16383 (5461 slots) master
S: 7d033c0df5b7db4f872afa94566fb061c4ebe16a 172.16.0.7:6382
replicates 8b3809e6e5591dcfec067216906a25d7cd482598
S: 72b5baa2dbdb315fef604ea8b6deb0143372ae1b 172.16.0.7:6383
replicates a1ac1fc64549ca15eb889395c46d001162bf2aa6
S: 8641d66fce1f5cc982ef7649d53a1eba2fa9b7c5 172.16.0.7:6384
replicates 01a0cccbb8b15e00469d1cafd2eedfb6bd8bd2b5
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 172.16.0.7:6379)
M: 8b3809e6e5591dcfec067216906a25d7cd482598 172.16.0.7:6379
slots:0-5460 (5461 slots) master
M: a1ac1fc64549ca15eb889395c46d001162bf2aa6 172.16.0.7:6380
slots:5461-10922 (5462 slots) master
M: 01a0cccbb8b15e00469d1cafd2eedfb6bd8bd2b5 172.16.0.7:6381
slots:10923-16383 (5461 slots) master
M: 7d033c0df5b7db4f872afa94566fb061c4ebe16a 172.16.0.7:6382
slots: (0 slots) master
replicates 8b3809e6e5591dcfec067216906a25d7cd482598
M: 72b5baa2dbdb315fef604ea8b6deb0143372ae1b 172.16.0.7:6383
slots: (0 slots) master
replicates a1ac1fc64549ca15eb889395c46d001162bf2aa6
M: 8641d66fce1f5cc982ef7649d53a1eba2fa9b7c5 172.16.0.7:6384
slots: (0 slots) master
replicates 01a0cccbb8b15e00469d1cafd2eedfb6bd8bd2b5
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
* 检查Redis集群
$ redis-trib.rb check 172.16.0.7:6379
>>> Performing Cluster Check (using node 172.16.0.7:6379)
M: 8b3809e6e5591dcfec067216906a25d7cd482598 172.16.0.7:6379
slots:0-5460 (5461 slots) master
1 additional replica(s)
S: 8641d66fce1f5cc982ef7649d53a1eba2fa9b7c5 172.16.0.7:6384
slots: (0 slots) slave
replicates 01a0cccbb8b15e00469d1cafd2eedfb6bd8bd2b5
S: 7d033c0df5b7db4f872afa94566fb061c4ebe16a 172.16.0.7:6382
slots: (0 slots) slave
replicates 8b3809e6e5591dcfec067216906a25d7cd482598
M: a1ac1fc64549ca15eb889395c46d001162bf2aa6 172.16.0.7:6380
slots:5461-10922 (5462 slots) master
1 additional replica(s)
S: 72b5baa2dbdb315fef604ea8b6deb0143372ae1b 172.16.0.7:6383
slots: (0 slots) slave
replicates a1ac1fc64549ca15eb889395c46d001162bf2aa6
M: 01a0cccbb8b15e00469d1cafd2eedfb6bd8bd2b5 172.16.0.7:6381
slots:10923-16383 (5461 slots) master
1 additional replica(s)
[OK] All nodes agree about slots configuration.
* 查看Redis集群信息
$ redis-trib.rb info 172.16.0.7:6379
172.16.0.7:6379 (8b3809e6...) -> 0 keys | 5461 slots | 1 slaves.
172.16.0.7:6380 (a1ac1fc6...) -> 0 keys | 5462 slots | 1 slaves.
172.16.0.7:6381 (01a0cccb...) -> 0 keys | 5461 slots | 1 slaves.
[OK] 0 keys in 3 masters.
0.00 keys per slot on average.
* 添加Redis节点
$ redis-trib.rb add-node 172.16.0.7:6385 172.16.0.7:6379
>>> Adding node 172.16.0.7:6385 to cluster 172.16.0.7:6379
>>> Performing Cluster Check (using node 172.16.0.7:6379)
M: 328fe71182234df381fb4845e3f4bb4c3288320d 172.16.0.7:6379
slots:0-5460 (5461 slots) master
1 additional replica(s)
S: da6149e83031f8e1d790784b8650732365134dee 172.16.0.7:6383
slots: (0 slots) slave
replicates 237d335822d545e97723224dc965bb986586c98e
M: 6d7ad892ceb964063db08fbb6c1d7b0f6226418c 172.16.0.7:6381
slots:10923-16383 (5461 slots) master
1 additional replica(s)
M: 237d335822d545e97723224dc965bb986586c98e 172.16.0.7:6380
slots:5461-10922 (5462 slots) master
1 additional replica(s)
S: 23c093add21934a6b3eeba18897f536947c89f42 172.16.0.7:6384
slots: (0 slots) slave
replicates 6d7ad892ceb964063db08fbb6c1d7b0f6226418c
S: 4341c643d2b785019bc940e1ffcf5e44b2343e09 172.16.0.7:6382
slots: (0 slots) slave
replicates 328fe71182234df381fb4845e3f4bb4c3288320d
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
>>> Send CLUSTER MEET to node 172.16.0.7:6385 to make it join the cluster.
[OK] New node added correctly.
* 添加Redis节点
$ redis-trib.rb add-node --slave --master-id 9d6229abfea1fa5a3faa639a7b54ac3a7810f9ff 172.16.0.7:6386 172.16.0.7:6379
>>> Adding node 172.16.0.7:6386 to cluster 172.16.0.7:6379
>>> Performing Cluster Check (using node 172.16.0.7:6379)
M: 328fe71182234df381fb4845e3f4bb4c3288320d 172.16.0.7:6379
slots:0-5460 (5461 slots) master
1 additional replica(s)
S: da6149e83031f8e1d790784b8650732365134dee 172.16.0.7:6383
slots: (0 slots) slave
replicates 237d335822d545e97723224dc965bb986586c98e
M: 6d7ad892ceb964063db08fbb6c1d7b0f6226418c 172.16.0.7:6381
slots:10923-16383 (5461 slots) master
1 additional replica(s)
M: 9d6229abfea1fa5a3faa639a7b54ac3a7810f9ff 172.16.0.7:6385
slots: (0 slots) master
0 additional replica(s)
M: 237d335822d545e97723224dc965bb986586c98e 172.16.0.7:6380
slots:5461-10922 (5462 slots) master
1 additional replica(s)
S: 23c093add21934a6b3eeba18897f536947c89f42 172.16.0.7:6384
slots: (0 slots) slave
replicates 6d7ad892ceb964063db08fbb6c1d7b0f6226418c
S: 4341c643d2b785019bc940e1ffcf5e44b2343e09 172.16.0.7:6382
slots: (0 slots) slave
replicates 328fe71182234df381fb4845e3f4bb4c3288320d
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
>>> Send CLUSTER MEET to node 172.16.0.7:6386 to make it join the cluster.
Waiting for the cluster to join.
>>> Configure node as replica of 172.16.0.7:6385.
[OK] New node added correctly.
2.6 平衡集群节点slot数量
$ redis-trib.rb rebalance --use-empty-masters 172.16.0.7:6379
>>> Performing Cluster Check (using node 172.16.0.7:6379)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
>>> Rebalancing across 4 nodes. Total weight = 4
Moving 1366 slots from 172.16.0.7:6380 to 172.16.0.7:6385
##########################################################################
Moving 1365 slots from 172.16.0.7:6381 to 172.16.0.7:6385
##########################################################################
Moving 1365 slots from 172.16.0.7:6379 to 172.16.0.7:6385
##########################################################################
* 在线迁移Slot
$ redis-trib.rb reshard --from 9d6229abfea1fa5a3faa639a7b54ac3a7810f9ff --to 328fe71182234df381fb4845e3f4bb4c3288320d --slots 4096 172.16.0.7:6379
* 从集群中删除节点
$ redis-trib.rb del-node 172.16.0.7:6379 9d6229abfea1fa5a3faa639a7b54ac3a7810f9ff
>>> Removing node 9d6229abfea1fa5a3faa639a7b54ac3a7810f9ff from cluster 172.16.0.7:6379
>>> Sending CLUSTER FORGET messages to the cluster...
>>> SHUTDOWN the node.
注意:必须确保数据迁移后,才能从集群中删除节点,否则报以下错误:
[ERR] Node 172.16.0.7:6385 is not empty! Reshard data away and try again.
redis 集群安装的更多相关文章
- CentOS下redis集群安装
环境: 一台CentOS虚拟机上部署六个节点,创建3个master,3个slave节点 1.下载并解压 cd /root wget http://download.redis.io/releases/ ...
- Springboot 2.0.x 集成基于Centos7的Redis集群安装及配置
Redis简介 Redis是一个基于C语言开发的开源(BSD许可),开源高性能的高级内存数据结构存储,用作数据库.缓存和消息代理.它支持数据结构,如 字符串.散列.列表.集合,带有范围查询的排序集,位 ...
- redis集群安装部署
(要让集群正常工作至少需要3个主节点,在这里我们要创建6个redis节点,其中三个为主节点,三个为从节点,对应的redis节点的ip和端口对应关系如下) 192.168.1.160:7000 192. ...
- 【Redis篇】Redis集群安装与初始
一.前述 本文将单台节点不同端口模拟集群方式. 二.具体搭建 前提是安装好redis具体可参考http://www.cnblogs.com/LHWorldBlog/p/8463269.html 1 ...
- windows下redis集群安装和部署
1.下载windows版本的Redis 官网只提供linux版本的下载 官网下载地址:http://redis.io/download github下载地址:https://github.com/MS ...
- Linux 下Redis集群安装部署及使用详解(在线和离线两种安装+相关错误解决方案)
一.应用场景介绍 本文主要是介绍Redis集群在Linux环境下的安装讲解,其中主要包括在联网的Linux环境和脱机的Linux环境下是如何安装的.因为大多数时候,公司的生产环境是在内网环境下,无外网 ...
- Windows下Redis集群安装与部署
1.下载 Redis-x64-3.2.100.zip 安装程序 官网下载地址:http://redis.io/download GitHub下载地址:https://github.com/micros ...
- redis集群安装2
概要:本文主要介绍如何在Centos7中单机搭建redis集群三主三从,按照本文绝对可以实现该需求,至于先搭建单机版主要为了方便理解redis集群,为下一步开发或生产上redis集群做铺垫.同时本 ...
- redis集群安装多端口多实例部署
目标(本文达成的结果,配对关系可能会变): 先在131上进行操作 1.下载redis http://download.redis.io/releases/redis-5.0.2.tar.gz 2.解压 ...
随机推荐
- W - Palindrome HDU - 1513
题目大意: 插入最少的字符,使原字符串成为回文串. 题解: LCS问题,将字符串反转,然后求这俩字符串的LCS,总长度减去LCS即可(多组输入). N最大是5E3,直接用二维数组会超内存.所以要用到滚 ...
- redis的安装(ubuntu版本)
1.使用apt-get命令进行安装 安装gcc依赖 root@yatces-virtual-machine:~# apt-get update root@yatces-virtual-machine: ...
- 简单的中国MOOC大学列表提取 - Python
有些时候我们想知道网页中包含哪些具体的信息,比如如下的这个网页, http://www.icourse163.org/university/view/all.htm 我们只想知道自己的学校是否在这个列 ...
- shiro:集成Springboot(六)
1:导入相关依赖 <!--thymeleaf 模板引擎依赖包--> <dependency> <groupId>org.springframework.boot&l ...
- Spring5:IOC注解
使用注解须知: 1:导入约束:导入context的命名空间 2:配置注解的支持:<context:annotation-config/> <?xml version="1. ...
- python 进阶篇 浅拷贝与深拷贝
阐述引用.浅拷贝和深拷贝前,首先需要要了解 Python 的世界里,一切皆对象,每个对象各包含一个 idendity.type 和 value. 引用(Reference) >>> ...
- 一、搭建SpringBoot2.0.0M4基础Web项目
本次开发环境为: 系统:Linux Mint 18 JDK:1.8 开发工具:IntelliJ IDEA 2017.2.4 1.启动IDEA工具,开始创建一个基础项目.点击Create New Pro ...
- 隐藏响应中的server和X-Powered-By
来源:https://www.yduba.com/biancheng-7831560074.html 有时候,我们用调试工具查看别人的网站时,经常看到 X-Powered-By:PHP/7.1.8 这 ...
- php 判断是否手机端还是pc端
来自:https://www.cnblogs.com/webenh/p/5621890.html 用手机访问PC端WWW域名的时候,自动判断跳转到移动端,用电脑访问M域名手机网站的时候,自动跳转到PC ...
- XEP-0198:流管理
------------恢复内容开始------------ 原文来自:https://xmpp.org/extensions/xep-0198.html,只翻译了技术方面的内容. 摘要:这个规范定义 ...