redis的集群:主从复制、哨兵

主从复制

什么是主从复制?

在Redis中,通过执行SLAVEOF命令或者通过配置文件设置slaveof选项,就可以让一台服务器去复制另一台服务器,其中被复制的服务器叫做主服务器(master),而对主服务器进行复制的服务器叫做从服务器(slave),从而实现当主服务器中的数据更新后,根据配置和策略自动同步到从服务器上。master以写为主,salve以读为主。

一个简单的主从复制

例子:

创建三个redis服务 A B C地址分别位 6379 6380 6381 .conf

#创建三个服务 (本机只有6379)
#查看  (只有6379)
cd /etc/redis/

cd
#找到redis安装目录下的utils目录
cd/soft/redis-6.0.8/utils
#创建服务
./install_server.sh 
#直接输入 6380  利用同样方法创建6381

#开三个服务  分别进入
redis-cli -p 6379
redis-cli -p 6380
redis-cli -p 6381
#进入6380 客户端服务器B 执行以下命令
SLAVEOF 127.0.0.1 6379
#进入6380 客户端服务器C同样执行以下命令
SLAVEOF 127.0.0.1 6379


此时可以看到B 和C数据和A同步

发现问题:

如果在B上面对name进行操作不能实现

只能在A上操作

因为我们前面说过 主从复制master以写为主 slave以读为主。

#可以通过info replication查看当前服务器的主从复制信息
info replication

作用:

  • 为一个数据提供多个副本 使得高可用。分布式成为可能
  • 扩展redis的读性能 ,可以实现读写分离

主从复制功能

  • 一个master可以有多个slave
  • 一个slave只能有一个master
  • 数据流是单向的 从master到salve
  • Redis采用异步复制,从服务器会以每秒一次的频率向主服务器报告复制流的处理进度
  • 在进行复制的时候,复制功能不会阻塞主服务器
  • 如果主节点B成为另一个主节点A的从节点,那么主节点B之前保存的数据将会被清除,同步主节点A的数据,数据库状态将与主节点A保持一致

主从复制配置

这是slaveof ip 端口命令来配置主从复制

slaveof 127.0.0.1 6379

如果从服务器不希望成为祝福我的一个从节点 ,而是希望成为一个主节点,则可以取消复制

slaveof on one

修改配置文件实现主从复制
#先找到conf文件  这里用6380 为例
cd /etc/redis/
ll
vi 6380.conf

#设置端口
port 6380
#设置后台进程运行Redis
daemonize yes
#设置进程ID文件
pidfile /var/run/redis_6380.pid
#设置日志文件名
logfile "6380.log"
#把持久化关掉
save 900 1
save 300 10
save 60 10000
#设置rdb文件名
dbfilename dump6380.rdb
复制功能的实现步骤
  1. 通过SLAVEOF命令设置主服务器的IP地址和端口号
  2. 主从服务器之间建立套接字连接
  3. 从服务器向主服务器发送PING命令
  4. 根据从服务器的配置决定是否进行身份验证
  5. 从服务器向主服务器发送端口信息
  6. 从服务器向主服务器发送PSYNC命令完成同步功能
  7. 主从服务器之间进行命令传播,进而维持数据库状态的一致性
redis的读写分离

读写分离将master上的数据同步给slave 让slave分摊去执行相关的业务。

问题:

  • 复制数据延误
  • 读到一些过期数据
  • 发生读写故障

哨兵

    redis-server ./26381.conf --sentinel
    
    port 26379
sentinel moniter mymaster 127.0.0.1 26379 2
posted @ 2020-10-16 10:30  北斋  阅读(128)  评论(0编辑  收藏  举报