Redis高可用之集群配置(六)
0、Redis目录结构
5)Redis高可用之哨兵模式Sentinel配置与启动(五)
一、介绍
上篇文章中介绍了redis的主从复制,但是如果出从复制无法满足单节点故障问题,则需要引入集群部署。
在之前有看到过redis集群部署的三种方案,不过性能最高的还是redis官方推荐的redis-cluster,性能最高,其他两种我就不介绍了,主要介绍一下redis-cluster这种。
1、redis-cluster
A、采用去中心化的思想,没有中心节点的说法,它使用hash slot方式将16348个hash slot覆盖到所有节点上,对于存储的每个key值,使用CRC16(KEY)&16348=slot得到他对应的hash slot,
并在访问key的时候就去找他的hash slot在哪一个节点上,然后由当前访问节点从实际被分配了这个hash slot的节点去取数据,节点之间使用轻量协议通信 减少带宽占用 性能很高,
自动实现负载均衡与高可用,自动实现failover并且支持动态扩展,官方已经玩到可以1000个节点 实现的复杂度低。
B、其内部中也需要配置主从,并且内部也是采用哨兵模式,如果有半数节点发现某个异常节点,共同决定更改异常节点的状态,如果改节点是主节点,则对应的从节点自动顶替为主节点,当原先的主节点上线后,则会变为从节点。
如果集群中的master没有slave节点,则master挂掉后整个集群就会进入fail状态,因为集群的slot映射不完整。如果集群超过半数以上的master挂掉,无论是否有slave,集群都会进入fail状态。
C、根据官方推荐 集群部署至少要3台以上的master节点。那么接下来就开始部署吧
二、集群部署
1、环境配置
第一:准备3台服务器,每台服务器运行两个redis
| 主机说明 | 主机IP | 端口 |
| Redis |
192.168.250.129 |
7000 7001 |
| Redis | 192.168.250.130 |
7002 7003 |
| Redis |
192.168.250.131 |
7004 7005 |
2、在每一台服务器上我们添加一下配置文件
分别为:redis-7000.conf redis-7001.conf redis-7002.conf redis-7003.conf redis-7004.conf redis-7005.conf
配置文件内容为如下:其他的配置文件修改一下端口以及log文件、日志文件即可。其中中间部分cluster代表集群设置
daemonize yes
port
logfile .log
dir ./
bind 192.168.250.129 127.0.0.1 cluster-enabled yes
cluster-config-file nodes_7000.conf
cluster-node-timeout appendonly yes
appendfilename aof-.aof
appendfsync everysec
no-appendfsync-on-rewrite yes
auto-aof-rewrite-percentage
auto-aof-rewrite-min-size 64mb
3、上面文件都配置好后,即可启动

4、启动后我们就可以创建集群啦
注意:
在redis5.0后 创建集群统一使用redis-cli,之前的版本使用redis-trib.rb,但是需要安装ruby软件相对复杂,相比之前的版本5.0不需要安装额外的软件,方便。具体的可以参照redis官方网站查看
https://redis.io/topics/cluster-tutorial
创建集群命令:其中 cluster-replicas 1 代表 一个master后有几个slave,1代表为1个slave节点
./src/redis-cli --cluster create 192.168.250.129: 192.168.250.129: 192.168.250.130: 192.168.250.130: 192.168.250.131: 192.168.250.131: --cluster-replicas
等待集群创建成功,发现 7000/7002/7004为master主节点,其他的为slave。


5、我们验证一下集群是否创建成功
登录redis客户端 ./src/redis-cli -c -p 7000, -c 参数代表连接到集群中
我们先看一下主从配对情况,根据node ID匹配可以得出配比。如下:红色圈出来的为标注,大家可以看看是否有对应的ID,这样我们就区分了主从节点的关系了。

验证数据匹配是否采用哈希槽的方式。大家可自行测试一下。发现我在7000客户端设置的数据,被分配到7002上了。

我们查看一下key 为 wangjing,发现定位到了7002

6、我们验证一下故障转移
我们从上面可以看出7002为master,7001为其从节点。我们按照如下流程进行操作
先停掉7002,发现7001转为了master节点,然后恢复7002上线,7002变为slave节点。

那么redis集群演示就到此为止吧。
后面还涉及到 集群新增节点(包括master和slave)以及删除节点,这些操作大家自行操作吧,俗话说 师父领进门修行在个人。大家加油。
大家如果有问题欢迎提问,谢谢。
asp.net core 交流群: 欢迎加群交流
如果您认为这篇文章还不错或者有所收获,您可以点击右下角的【推荐】按钮精神支持,因为这种支持是我继续写作,分享的最大动力!
微信公众号:欢迎关注 QQ技术交流群: 欢迎加群

Redis高可用之集群配置(六)的更多相关文章
- Redis高可用复制集群实现
redis简单介绍 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库.Redis 与其他 key - value 缓存产品有以下三个特点: 支持数据的持久化,可以将 ...
- redis高可用分布式集群
一,高可用 高可用(High Availability),是当一台服务器停止服务后,对于业务及用户毫无影响. 停止服务的原因可能由于网卡.路由器.机房.CPU负载过高.内存溢出.自然灾害等不可预期的原 ...
- Redis 高可用分布式集群
一,高可用 高可用(High Availability),是当一台服务器停止服务后,对于业务及用户毫无影响. 停止服务的原因可能由于网卡.路由器.机房.CPU负载过高.内存溢出.自然灾害等不可预期的原 ...
- Redis高可用及集群
目录 Redis主从复制 环境准备 主从复制命令 Redis Sentinel 功能 Redis Sentinel配置 Redis集群 Redis主从复制 使用异步复制 一个服务器可以有多个从服务器 ...
- Eureka单机高可用伪集群配置
Eureka Server高可用集群理论上来讲,因为服务消费者本地缓存了服务提供者的地址,即使Eureka Server宕机,也不会影响服务之间的调用,但是一旦新服务上线,已经缓存在本地的服务提供者不 ...
- Redis之高可用、集群、云平台搭建
原文:Redis之高可用.集群.云平台搭建 文章大纲 一.基础知识学习二.Redis常见的几种架构及优缺点总结三.Redis之Redis Sentinel(哨兵)实战四.Redis之Redis Clu ...
- 搭建高可用mongodb集群(一)——配置mongodb
在大数据的时代,传统的关系型数据库要能更高的服务必须要解决高并发读写.海量数据高效存储.高可扩展性和高可用性这些难题.不过就是因为这些问题Nosql诞生了. NOSQL有这些优势: 大数据量,可以通过 ...
- 搭建高可用mongodb集群(一)——配置mongodb
在大数据的时代,传统的关系型数据库要能更高的服务必须要解决高并发读写.海量数据高效存储.高可扩展性和高可用性这些难题.不过就是因为这些问题Nosql诞生了. NOSQL有这些优势: 大数据量,可以通过 ...
- 搭建高可用kubernetes集群(keepalived+haproxy)
序 由于单master节点的kubernetes集群,存在master节点异常之后无法继续使用的缺陷.本文参考网管流程搭建一套多master节点负载均衡的kubernetes集群.官网给出了两种拓扑结 ...
随机推荐
- linux socat命令
http://note.youdao.com/noteshare?id=35901183d9ccc09632339ec971fa58dd
- JavaScript--Dom间接选择器
一.Dom间接选择器 间接查找的属性 parentNode // 父节点 childNodes // 所有子节点 firstChild // 第一个子节点 lastChild // 最后一个子节点 n ...
- python教程1:Python基础之数据类型和变量、字符串和编码
视频链接:http://www.bilibili.com/video/av10730372/ 我是在Linux下玩python的,Linux下默认安装python,直接打个pyhon3就好了,pyth ...
- vue-router 编程式导航
借助vue-router的实例方法,通过编写代码来实现导航的切换: back:回退一步 forward:前进一步 go:指定前进回退步数 push:导航到不同url,向history栈添加一个新的记录 ...
- Codeforces 666 B. World Tour
http://codeforces.com/problemset/problem/666/B 题意: 给定一张边权均为1的有向图,求四个不同的点A,B,C,D,使得dis[A][B]+dis[B][C ...
- Codeforces Round #481 (Div. 3) D. Almost Arithmetic Progression
http://codeforces.com/contest/978/problem/D 题目大意: 给你一个长度为n的b(i)数组,你有如下操作: 对数组中的某个元素+1,+0,-1.并且这个元素只能 ...
- Java入门系列(六)方法
方法返回多个值 使用集合类 /** * 方法1:使用集合类 (Map以外的集合类也可以随意使用) * 目标:返回一个数组的最大值和最小值 */ public Map<String, Intege ...
- A - Jugs ZOJ - 1005 (模拟)
题目链接:https://cn.vjudge.net/contest/281037#problem/A 题目大意:给你a,b,n.a代表第一个杯子的容量,b代表第二个杯子的容量,然后一共有6种操作.让 ...
- JS异常简单处理
有时候JS某一处报错会导致整个页面JS的运行出问题,于是想的简单研究一下JS的错误处理机制.更详细的可以自己参考网站研究: https://developer.mozilla.org/zh-CN/ ...
- docker之容器访问和网络连接(三)
前言 当一台服务器上部署了多个应用容器,它们直接可能需要相互通信,比如web应用容器需要访问mysql数据库容器. 主机访问容器 通过映射端口的形式我们可以在外部访问容器内的服务 # 将主机的127. ...