redis:集群配置
一、redis集群相关
1.概念:redis集群是通过数据分区提供可用性的,这样即使一部分节点失效也可以继续处理请求。
2.原理:集群使用数据分片实现,一个redis集群包括16384个哈希槽,数据库中的每一个键都属于这16384中的一个,使用公式为 CRC16(key) % 16384,这个公式决定key属于哪一个槽。
比如说一个集群3个节点,A处理0-5500号的哈希槽,B处5501-11000的哈希槽,C处理11001-16384号哈希槽。
操作:
增加节点D:把ABC中一些哈希槽给D就行了
删除节点C:把C的哈希槽移动给别人,删除了C就好了。
3.主从
每个节点都有1-N个复制品,其中有一个为主节点,其余的为从,上面的例子中一旦B挂了,那么集群就挂了,没人处理5500-11000,那么B这边搞个主从,B1,B2就可以了,这样挂了一个主的从也能顶上去。但是B1,B2都挂了的话B还是挂了,集群一样会挂掉。
二、redis集群配置
接下来搭建redis集群,至少有3个才能搭建集群。
我们构建 redis-cluster 集群可以通过 redis-trib.rb 工具来完成。redis-trib.rb 是redis官方提供的一个集群管理工具,集成在redis安装包的 src 目录下。redis-trib.rb 封装了redis提供的集群命令,使用简单、便捷。redis-trib.rb 是由ruby语言编写的,所以使用该工具需要ruby语言环境的支持。
服务器 | 服务器序号 | 端口 | 路径 |
1.*.*.37 | 1 | 7201 | /opt/redis-cluster/7201 |
1.*.*.37 | 1 | 7202 | /opt/redis-cluster/7202 |
1.*.*.123 | 2 | 7203 | /opt/redis-cluster/7203 |
1.*.*.123 | 2 | 7204 | /opt/redis-cluster/7204 |
1.*.*.87 | 3 | 7205 | /opt/redis-cluster/7205 |
1.*.*.87 | 3 | 7206 | /opt/redis-cluster/7206 |
首先关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
下载安装 redis
http://download.redis.io/releases/ 下查找合适的业务版本,并下载安装
wget http://download.redis.io/releases/redis-3.2.12.tar.gz
tar zxvf redis-3.2..tar.gz
cd redis-3.2.
make
然后将redis加入系统命令中
make install
该命令会在ls /usr/local/bin 下生成redis的命令文件,后续就可以在任意目录中使用这些命令了
如果make不成功,可能使装gcc
也可能使缺少执行参数:make MALLOC=libc
redis基本配置
服务器(1)
创建数据目录,然后拷贝对应的配置文件到对应的目录下
mkdir -p /opt/redis-cluster//data
mkdir -p /opt/redis-cluster//data
cp /opt/redis-cluster/redis-3.2.12/redis.conf /opt/redis-cluster/7201 -rf
cp /opt/redis-cluster/redis-3.2.12/redis.conf /opt/redis-cluster/7202 -rf
服务器(2)
mkdir -p /opt/redis-cluster//data
mkdir -p /opt/redis-cluster//data
cp /opt/redis-cluster/redis-3.2.12/redis.conf /opt/redis-cluster/7203 -rf
cp /opt/redis-cluster/redis-3.2.12/redis.conf /opt/redis-cluster/7204 -rf
服务器(3)
mkdir -p /opt/redis-cluster//data
mkdir -p /opt/redis-cluster//data
cp /opt/redis-cluster/redis-3.2.12/redis.conf /opt/redis-cluster/7205 -rf
cp /opt/redis-cluster/redis-3.2.12/redis.conf /opt/redis-cluster/7206 -rf
修改配置项,建议搞到Windows的notpad++复制端口和ip,就是修改bind后面机器的ip以及端口即可了
port (每个节点的端口号)
daemonize yes
bind .*.*.(绑定当前机器 IP)
dir /opt/redis-cluster//data/(数据文件存放位置)
pidfile /var/run/redis_7201.pid(pid 7201和port要对应)
cluster-enabled yes(启动集群模式)
cluster-config-file nodes7201.conf(7201和port要对应,这个文件是redis自己使用的,我们不需要编辑)
cluster-node-timeout
appendonly yes
启动节点
cd /opt/redis-cluster/*
redis-server redis.conf
测试
redis-cli -h .*.*. -p keys
如果连不上的话查看一下进程,先杀进程再修改配置,再重启,下面这个很明显就配错了
下载安装 ruby
yum install ruby
yum install rubygems
gem install redis --version 3.2.
https://www.jianshu.com/p/cf4b564deb1a gem离线包安装
创建redis-trib.rb集群
redis-trib.rb 支持的操作如下: . create:创建集群 . check:检查集群 check 其中一个ip:端口 即可查看整套集群信息 . info:查看集群信息 . fix:修复集群 . reshard:在线迁移slot . rebalance:平衡集群节点slot数量 . add-node:添加新节点 . del-node:删除节点 . set-timeout:设置节点的超时时间 . call:在集群所有节点上执行命令 . import:将外部redis数据导入集群
下面我们创建集群。注意:给redis-trib.rb的节点地址必须是不包含任何槽/数据的节点,否则会拒绝创建集群。
cd /opt/redis-cluster/redis-3.2./src
./redis-trib.rb create --replicas 1 ip.37:7201 ip.37:7202 ip.123:7203 ip.123:7204 ip.87:7205 ip.87:7206
提问你允不允许用上面的配置,允许即可。16384个槽全部被分配,集群创建成功。
如果检测集群状态的话,随便check一个节点都会出来全部的信息,还能看到各自占用了什么槽,比如下面的0-5460.
修复集群
目前fix命令能修复两种异常,
1. 节点中存在处于迁移中(importing或migrating状态)的slot。
2. 节点中存在未分配的slot。
其它异常不能通过fix命令修复
redis-trib.rb fix 127.0.0.1:
在线迁移slot
redis-trib.rb reshard 127.0.0.1:
/usr/local/ruby/lib/ruby/gems/2.5./gems/redis-3.3./lib/redis/client.rb:: warning: constant ::Fixnum is deprecated
>>> Performing Cluster Check (using node 127.0.0.1:)
M: bc775f9c4dea40820b82c9451778b1fcd42f92bc 127.0.0.1:
slots:- ( slots) master
additional replica(s)
S: 648eb314863b82aaa676380be7db2ec307f5547d 127.0.0.1:
slots: ( slots) slave
replicates bc775f9c4dea40820b82c9451778b1fcd42f92bc
M: 3b27d00d13706a032a92ff6b0a914af272dcaaf2 127.0.0.1:
slots:-,- ( slots) master
additional replica(s)
S: 57bda956485109552547aef6c77fba43d2124abf 127.0.0.1:
slots: ( slots) slave
replicates d874f003257f1fb036bbd856ca605172a1741232
S: 65a6efb441ac44c348f7da8c62e26b888cda7c48 127.0.0.1:
slots: ( slots) slave
replicates 3b27d00d13706a032a92ff6b0a914af272dcaaf2
M: d874f003257f1fb036bbd856ca605172a1741232 127.0.0.1:
slots:- ( slots) master
additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All slots covered.
How many slots do you want to move (from to )? 200 【提示迁移多少个槽】
What is the receiving node ID? 3b27d00d13706a032a92ff6b0a914af272dcaaf2 【迁移到哪个节点ID?ID在上面输出就有】
Please enter all the source node IDs.
Type 'all' to use all the nodes as source nodes for the hash slots.
Type 'done' once you entered all the source nodes IDs.
Source node #:
将外部redis数据导入集群
redis-trib.rb import --from 127.0.0.1: 127.0.0.1:
redis:集群配置的更多相关文章
- java操作redis集群配置[可配置密码]和工具类(比较好用)
转: java操作redis集群配置[可配置密码]和工具类 java操作redis集群配置[可配置密码]和工具类 <dependency> <groupId>red ...
- Redis集群配置(linux)
*弄了一天,有问题直接问我.qq:137416943 1.redis集群的配置和简单使用 Redis集群配置 0.首先要配置环境: 0.1 安装c++ yum install gcc-c++ ...
- java操作redis集群配置[可配置密码]和工具类
java操作redis集群配置[可配置密码]和工具类 <dependency> <groupId>redis.clients</groupId> & ...
- Linux系统下安装Redis和Redis集群配置
Linux系统下安装Redis和Redis集群配置 一. 下载.安装.配置环境: 1.1.>官网下载地址: https://redis.io/download (本人下载的是3.2.8版本:re ...
- centos6.5下redis集群配置(多机多节点)
可参考官网文档:redis集群配置 需要注意的是,集群中的每个节点都会涉及到两个端口,一个是用于处理客户端操作的(如下介绍到的6379/6380),另一个是10000+{监听端口},用于集群各个节点间 ...
- redis简介以及redis集群配置
简介: redis 是一个高性能的key-value数据库..它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted set --有序 ...
- redis 集群配置实战
文章转载自:http://hot66hot.iteye.com/blog/2050676 最近研究Redis-cluster,正好搭建了一个环境,遇到了很多坑,系统的总结下,等到redis3 rele ...
- spring 使用redis集群配置
上面两篇介绍了redis集群的配置合一些基本的概念,所以接下来当然是要在项目中使用咯,redis的java支持已经做的非常好了,所以我们来试着使用这些api来进行redis的操作,首先我们需要操作re ...
- redis集群配置
客户端分片 程序端实现 代理proxy,访问proxy,proxy指定redis保存位置. Twemproxy Redis cluster ,会造成一部分数据丢失,无中心化1.将数据自动切分(spli ...
- redis集群配置,spring整合jedis,缓存同步
前台的商品数据(图片等加载缓慢)查询,先从redis缓存查询数据. redis是一个nosql数据库,内存版数据库,读取速度11w/s.本身具有内存淘汰机制,是单线程服务器(分时操作系统),线程安全. ...
随机推荐
- Linux chpasswd (批量或单一修改用户密码)和passwd(直接修改用户密码)
Linux命令:chpasswd 批量或者单一修改用户密码 语法: 1:# echo 用户名:密码 | chpasswd 2:# chpasswd < doiido.txt 实例 1.直接修改d ...
- jenkins之从0到1利用Git和Ant插件打war包并自动部署到tomcat(第四话):把war包远程部署到tomcat
上一节介绍了如何用Ant插件来打war包,本节接着介绍如何把build好的war自动部署到tomcat中 1.先安装 Deploy to container Plugin插件 2. 在构建后操作中添加 ...
- linux服务器规格查看
性能测试前,需要确定服务器规格. 下面汇总下如何查看linux的CPU等规格 1. 查看服务器CPU个数 1)查看物理CPU个数: cat /proc/cpuinfo |grep "phys ...
- sql---->sql-summary&mysql-summary
数据库操作: 1.创建数据库,并修改默认字符编码 create database 数据库名 [charset=字符编码]; ee: create database dog charset=utf8; ...
- 20171022xlVBA练手提取入所记录
Sub GetWordText改进() Dim Wb As Workbook Dim Sht As Worksheet Dim Rng As Range Dim wdApp As Object Dim ...
- 11月29日 The Rails philosophy 完成rails on guide 的第一章getting started with rails
the rails philosophy includes two major guiding principles: Don't repeat yourself: DRY is a principl ...
- 使用absolute布局
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- apiClould微信三方登录,qq三方登录
三方登录需要在config.xml文件中配置一下,res文件下需要新建一个key.xml文件中也需要配置,请点击链接查看详情 微信:https://docs.apicloud.com/Client-A ...
- 安卓——Activity生命周期
在xml 设计页面添加标签 xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:a ...
- MongoDB 第一篇
概述 MongoDB是一个高性能,开源,无模式的文档型数据库,使用C++开发.是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的.他支持的数据结构非常松散,是 ...