Redis集群搭建实战(主从复制、哨兵、集群)

目录

1、安装Redis3.0

2、主从复制(读写分离)

2.1 主从架构

2.1.1 启动实例

2.1.2 设置主从

2.1.3 测试

2.2 主从从架构

2.2.1 启动实例

2.2.2 测试

2.3 从库只读

​编辑

2.4 复制的过程原理

2.5 无磁盘复制

2.6 复制架构中出现宕机情况,怎么办?

3、哨兵(sentinel)

3.1 什么是哨兵

3.2 原理

3.3 环境

3.4 配置哨兵

3.5 从数据库宕机

3.6 主库宕机

3.7 配置多个哨兵

4、集群

4.1 架构

4.2 修改配置文件

4.3 创建集群

4.3.1 安装ruby环境

4.3.2 创建集群

4.3.3 测试

4.4 使用Jedis连接到集群

4.5 插槽的分配

4.6 插槽和key的关系

4.7 新增集群节点

4.8 删除集群节点

4.8.1 将这个节点上的所有插槽转移到其他节点上

4.8.2 使用redis-trib.rb删除节点

4.9 故障转移

4.9.1 故障机制

4.9.2 集群中的主从复制架构

4.9.3 创建主从集群

4.9.4 测试

4.9.5 测试集群中slave节点宕机

4.9.6 测试集群中master宕机

4.10 使用集群需要注意的事项


1、安装Redis3.0

yum -y install cpp binutils glibc glibc-kernheaders glibc-common glibc-devel gcc make gcc-c++ libstdc++-devel tcl

mkdir -p /usr/local/src/redis

cd /usr/local/src/redis

wget http://download.redis.io/releases/redis-3.0.2.tar.gz  或者 rz 上传

tar -xvf redis-3.0.2.tar.gz

cd redis-3.0.2

make

make test #这个就不要执行了,需要很长时间

make install

cp redis.conf /etc/

vi /etc/redis.conf

# 修改如下,默认为no

daemonize yes

#启动

redis-server /etc/redis.conf

#测试

redis-cli

2、主从复制(读写分离)

主从复制的好处有2点:

  1. 避免redis单点故障
  2. 构建读写分离架构,满足读多写少的应用场景

2.1 主从架构

2.1.1 启动实例

创建6379、6380、6381目录,分别将安装目录下的redis.conf拷贝到这三个目录下。

分别进入这三个目录,分别修改配置文件,将端口分别设置为:6379(Master)、6380(Slave)、6381(Slave)。同时要设置pidfile文件为不同的路径。

分别启动三个redis实例:

2.1.2 设置主从

在redis中设置主从有2种方式:

  1. 在redis.conf中设置slaveof
    1. slaveof <masterip> <masterport>
  2. 使用redis-cli客户端连接到redis服务,执行slaveof命令
    1. slaveof <masterip> <masterport>

      第二种方式在重启后将失去主从复制关系。

查看主从信息:INFO replication

主:

role:角色

connected_slaves:从库数量

slave0:从库信息

从:

2.1.3 测试

在主库写入数据:

在从库读取数据:

2.2 主从从架构

2.2.1 启动实例

设置主从:

设置从从:

2.2.2 测试

在主库设置数据:

在6380获取数据:

在6381获取数据:

2.3 从库只读

默认情况下redis数据库充当slave角色时是只读的不能进行写操作。

可以在配置文件中开启非只读:slave-read-only no

2.4 复制的过程原理

  1. 当从库和主库建立MS关系后,会向主数据库发送SYNC命令;
  2. 主库接收到SYNC命令后会开始在后台保存快照(RDB持久化过程),并将期间接收到的写命令缓存起来;
  3. 当快照完成后,主Redis会将快照文件和所有缓存的写命令发送给从Redis;
  4. 从Redis接收到后,会载入快照文件并且执行收到的缓存的命令;
  5. 之后,主Redis每当接收到写命令时就会将命令发送从Redis,从而保证数据的一致;

2.5 无磁盘复制

        通过前面的复制过程我们了解到,主库接收到SYNC的命令时会执行RDB过程,即使在配置文件中禁用RDB持久化也会生成,那么如果主库所在的服务器磁盘IO性能较差,那么这个复制过程就会出现瓶颈,庆幸的是,Redis在2.8.18版本开始实现了无磁盘复制功能(不过该功能还是处于试验阶段)。

        原理:

        Redis在与从数据库进行复制初始化时将不会将快照存储到磁盘,而是直接通过网络发送给从数据库,避免了IO性能差问题。

        开启无磁盘复制:repl-diskless-sync yes

2.6 复制架构中出现宕机情况,怎么办?

        如果在主从复制架构中出现宕机的情况,需要分情况看:

  1. 从Redis宕机
    1. 这个相对而言比较简单,在Redis中从库重新启动后会自动加入到主从架构中,自动完成同步数据;
    2. 问题? 如果从库在断开期间,主库的变化不大,从库再次启动后,主库依然会将所有的数据做RDB操作吗?还是增量更新?(从库有做持久化的前提下)
      1. 不会的,因为在Redis2.8版本后就实现了,主从断线后恢复的情况下实现增量复制。
  2. 主Redis宕机
    1. 这个相对而言就会复杂一些,需要以下2步才能完成
      1. 第一步,在从数据库中执行SLAVEOF NO ONE命令,断开主从关系并且提升为主库继续服务;
      2. 第二步,将主库重新启动后,执行SLAVEOF命令,将其设置为其他库的从库,这时数据就能更新回来;
    2. 这个手动完成恢复的过程其实是比较麻烦的并且容易出错,有没有好办法解决呢?当前有的,Redis提高的哨兵(sentinel)的功能。

3、哨兵(sentinel)

3.1 什么是哨兵

        顾名思义,哨兵的作用就是对Redis的系统的运行情况的监控,它是一个独立进程。它的功能有2个:

  1. 监控主数据库和从数据库是否运行正常;
  2. 主数据出现故障后自动将从数据库转化为主数据库;

3.2 原理

单个哨兵的架构:

多个哨兵的架构:

多个哨兵,不仅同时监控主从数据库,而且哨兵之间互为监控。

3.3 环境

当前处于一主多从的环境中:

3.4 配置

  • 56
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

棉花糖老丫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值