Redis笔记(三)

Redis几种运行模式

主从复制

概述

  • • 主从复制指的是将一台Redis服务器的数据,复制到其他Redis服务器。前者被称为主节点(master),后者被称为从节点(salve)

  • • 数据的复制是单向的,只能从主节点复制到从节点。

    Redis笔记(三)

主从复制的作用

  1. 1. 数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式

  2. 2. 故障恢复:当主节点出现问题是,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。

  3. 3. 负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供些服务,由从节点提供读服务。实现服务器负载均衡;通过多个从节点负担负载能提高Redis服务器的并发量。

  4. 4. 高可用。主从复制是哨兵模式和集群的基础。

主从复制的工作机制

  1. 1. slave从节点启动后,向master发送SYNC命令,master接收到SYNC命令后通过bgsave保存快照, 并使用缓冲区记录快照这段时间内执行的写指令。

  2. 2. master主节点将保存的快照文件发送个slave从节点,并继续记录执行写命令。

  3. 3. slave接收到快照文件后,加载快照文件,载入数据。

  4. 4. master快照发送玩成后开始向slave发送缓冲区写指令,slave接收并执行,开始数据初始化。

  5. 5. 此后master每次执行一个写命令都会同步发送个slave,保持master和slave的一致性。

主从复制操作

  • • 主从复制是由从节点发起的,主节点啥都不用干。

  • • 有三种方式进行主从复制:

  1. 1. 在配置文件中配置 slaveof masterip masterport

  2. 2. 在启动时配置 在启动命令后加入 --slaveof masterip masterport

  3. 3. 启动后在客户端通过指令配置 slaveof masterip masterport

使用主从复制时从节点的配置文件

  1. 1. 在本地已经启动了一个redis,使用默认的6379端口。

  2. 2. 我们通过下面的配置文件,再启动一个redis作为从节点,使用6380端口,slaveof写的是主节点的ip和端口。

protected-mode no
daemonize no
port 6380
slaveof 192.168.2.36 6379
  1. 1. 配置redis主节点 protected-mode 设置为no

    2. 指定配置文件运行redis,通过指令info replication查看主从关系 redis-server ./redis6380.conf

  2. Redis笔记(三)

    Redis笔记(三)


  3. 3. 登录master主节点,并设置key value

127.0.0.1:6379> set k1 v1
OK
  1. 4. 登录slave从节点,查看key

❯redis-cli -h 127.0.0.1 -p 6380                                                                            ─╯
127.0.0.1:6380> get k1
"v1"
127.0.0.1:6380> 
  1. 5. 在从节点尝试写入,是不允许的

127.0.0.1:6380> set k1 v1
(error) READONLY You can't write against a read only replica.

主从模式的特点

优点:

  1. 1. 当主节点宕机,从节点作为备份能继续提供服务

  2. 2. 读写分离,分担主节点压力。

缺点:

  1. 1. 主节点宕机时重新选主节点需要人工干预

  2. 2. 主节点的写能力受到单机限制。

注意事项

  • • 在主从复制模式时主机如果有要求密码requirepass要么注释掉,要么设置masterauth

  • • # masterauth <master-password>,否则节点无法工作。

  • • 在主从模式中,主节点宕机后重启仍然是主节点。


哨兵模式

  • • 哨兵模式是在一主多从的集群环境中,如果主节点宕机,那么将自动在从节点中选出一个新的主节点,并且剩余的从节点(slave)配置文件会自动修改(无需人为干预)。

  • • 多个哨兵可以监控同一个redis节点,哨兵之间也会自动监控。


    哨兵模式的工作机制

    Redis笔记(三)

  1. 1. 在哨兵的配置文件中,配置portsentinel monitor来鉴定master节点,一个哨兵可以监控多个master节点,哨兵启动后会与要监控的master建立两条连接:

    1. 1. 一个连接用来订阅master的_sentinel_:hello频道与获取其它监控该master的哨兵节点信息。

    2. 2. 另一条连接定向向master发送INFO等命令获取master自身信息。

  2. 2. 在与master建立连接后,哨兵会执行三个操作:

    1. 1. 定期向master和slave节点发送INFO命令

    2. 2. 定期向master和slave的_sentinel_hello 频道发送自己的信息

    3. 3. 定期(1s)向master、slave和其他哨兵发送PING命令

哨兵模式步骤

  • • Redis主节点在物理机上运行,其余2个从节点和3个哨兵使用docker运行(6380、6381为从节点;26379、26380、26381为哨兵)

  1. 1. 运行主节点

  2. 2. 使用docker运行从节点和哨兵节点

    1. 1. 修改配置文件

    cd /home 
    mkdir redis && cd redis
    mkdir config && cd config
    touch redis6380.conf redis6381.conf
    chmod 777 redis*
     
    cd /home/redis && mkdir data && cd data
    mkdir data6380 data6381

将以下配置分别写入到redis6380.conf和redis6381.conf上,主要是修改portslaveof

  protected-mode no
  daemonize no
  port 6380 
  slaveof masterip masterport
  1. 3. 使用docker启动两台从机(slave),使用上面的slave配置文件

docker run 
-p 6380:6380 
--name salve1-redis 
-v /home/redis/data/data6380:/data 
-v /home/redis/config/redis6380.conf:/etc/redis/redis.conf 
-v /etc/localtime:/etc/localtime 
-d redis:6.2 redis-server /etc/redis/redis.conf

 docker run 
 -p 6381:6381 
 --name salve2-redis 
 -v /home/redis/data/redis6381:/data 
 -v /home/redis/config/redis6381.conf:/etc/redis/redis.conf 
 -v /etc/localtime:/etc/localtime 
 -d redis:6.2 redis-server /etc/redis/redis.conf
  1. 4. 使用docker运行哨兵模式

  2. 创建哨兵模式配置文件

 cd /home/redis/config
 touch sentinel-26379.conf sentinel-26380.conf sentinel-26381.conf 
  • • 主节点信息: sentinel <master-name> <ip> <redis-port> <quorum>;

  • • <master-name> 自定义主节点名称

  • • <ip> 主节点的ip <redis-port> 主节点的端口

  • • <qiorum> 检测到多少个主节点有问题进就行故障转移

将以下内容分别改写到相应的配置文件中:

 port 26379
 sentinel monitor mymaster <masterip> <masterport> 2
  1. 5. 使用Docker启动哨兵x3

 docker run 
 --name sentinel-26379 
 -p 26379:26379 
 -v /home/redis/config/sentinel-26379.conf:/etc/redis/sentinel.conf 
 -v /etc/localtime:/etc/localtime 
 -d redis:6.2 redis-sentinel /etc/redis/sentinel.conf

docker run 
 --name sentinel-26380 
 -p 26380:26380 
 -v /home/redis/config/sentinel-26380.conf:/etc/redis/sentinel.conf 
 -v /etc/localtime:/etc/localtime 
 -d redis:6.2 redis-sentinel /etc/redis/sentinel.conf

 docker run 
 --name sentinel-26381 
 -p 26381:26381 
 -v /home/redis/config/sentinel-26381.conf:/etc/redis/sentinel.conf 
 -v /etc/localtime:/etc/localtime 
 -d redis:6.2 redis-sentinel /etc/redis/sentinel.conf

指令执行完后会有5个容器

Redis笔记(三)

看看master节点和slave节点的状态

Redis笔记(三)

将master节点关掉,哨兵模式重新选举新的master节点

能看到6380从节点从slave变成了master

Redis笔记(三)

重启旧的master节点

发现6380仍然是master节点,而之前的主节点6379变成了新master的slave

Redis笔记(三)

Redis Cluster集群模式

  • • Redis Cluster是一种服务Sharding,从3.0版本开始正式提供。

    Redis的哨兵模式已经基本可以实现高可用、读写分离,但每台redis的服务器都存储相同数据,很浪费内存。所以redis的cluster集群模式, 实现了redis的分布式存储,也就是说每个redis节点上存储不同的内容

    • 每个redis集群节点都需要打开两个TCP连接,一个是给客户端提供服务的端口,如6379;另一个是基于6379+10000的端口,用于集群总线使用。因此要检查防火墙中两个端口都要打开


    Redis笔记(三)

使用Docker-compose搭建Redis集群

计划使用6371,6372,6373,6374,6375,6376几个端口号的服务搭建redis集群。

redis的配置文件如下

cluster-enabled yes
cluster-config-file nodes-6371.conf
cluster-node-timeout 5000
appendonly yes
protected-mode no
cluster-announce-ip 192.168.2.36
cluster-announce-port 6371
cluster-announce-bus-port 16371
port 6371

其中

  • • cluster-announce-ip是集群节点ip,填写master节点的ip

  • • cluster-announce-port是集群节点映射端口

  • • cluster-announce-bus-port 是集群节点总线端口

redis-cli --cluster create 192.168.2.36:6371 
192.168.2.36:6372 
192.168.2.36:6373 
192.168.2.36:6374 
192.168.2.36:6375 
192.168.2.36:6376 
--cluster-replicas 1

Redis笔记(三)

随便设个值

  • • 使用交互模式进入docker容器

  • • redis-cli -h 127.0.0.1 -p 6371 -c

  • • redis-cli -h 127.0.0.1 -p 6372 -c

127.0.0.1:6371> set k1 v1
-> Redirected to slot [12706] located at 192.168.2.36:6373
OK

127.0.0.1:6372> get k1
-> Redirected to slot [12706] located at 192.168.2.36:6373
"v1"

要注意的点

  • • 使用docker-compose做redis集群要将network设置为host


原文始发于微信公众号(ProgrammerHe):Redis笔记(三)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/207944.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!