Redis 主从复制 、集群与哨兵模式

Redis主从复制
主从复制,是指将一台redis服务器的数据,复制到其他的redis服务器。前者称为主节点 master,后者为从节点slave;数据的复制是单向的,只能有主节点到从节点

作用
数据冗余
主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式
故障恢复
当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余
负载均衡
在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务,分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高redis服务器的并发量
高可用基石
除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是redis高可用的基础

搭建

 

 

修改master 中redis配置文件 

[root@master utils]# vim /etc/redis/6379.conf
70 bind 0.0.0.0     /修改bind项,使之监听所有网段
137 daemonize yes   /开启守护进程
 172 logfile /var/log/redis_6379.log  /指定日志文件目录
 264 dir /var/lib/redis/6379   /指定工作目录
700 appendonly yes   /开启AOF持久化功能
 [root@master utils]# /etc/init.d/redis_6379 restart  /重启redis
Stopping ...
Waiting for Redis to shutdown ...
Redis stopped
Starting Redis server...

修改slave中 redis配置

[root@slave1 utils]# vim /etc/redis/6379.conf
 70 bind 0.0.0.0     /修改bind项,使之监听所有网段
137 daemonize yes   /开启守护进程
 172 logfile /var/log/redis_6379.log  /指定日志文件目录
 264 dir /var/lib/redis/6379   /指定工作目录
 288 replicaof 192.168.159.247 6379     /指定同步的master节点和端口
700 appendonly yes   /开启AOF持久化功能
[root@slave1 utils]# /etc/init.d/redis_6379 restart  /修改完成配置文件重启服务
Stopping ...
Waiting for Redis to shutdown ...
Redis stopped
Starting Redis server...

master 验证从节点

哨兵模式
作用
监控
哨兵会不断地检查主节点和从节点是否运转正常
自动故障转移
当主节点不能正常工作时,哨兵会自动开始故障转移操作
通知
将故障转移的结果发给客户端

原理
他是一个分布式系统,用于对主从结构中的每台服务器进行监控,它会将失效节点的其中一个从节点升级为新的主节点,并让其他从节点改为复制新的主节点

搭建
环境
master 192.168.30.7
slave1 192.168.30.8
slave2 192.168.30.9

修改配置文件
[root@master utils]# vim /opt/redis-5.0.9/sentinel.conf 
 17 protected-mode no   //关闭保护模式
 21 port 26379          //默认端口
 26 daemonize yes        //开启守护进程
 36 logfile "/var/log/sentinel.log"   //指定日志位置
 65 dir /var/lib/redis/6379           //指定工作目录
 84 sentinel monitor mymaster 192.168.30.7 6379 2 //至少两个哨兵同意才能进行故障转移
113 sentinel down-after-milliseconds mymaster 30000  //判断节点down掉的时间周期,默认30s
146 sentinel failover-timeout mymaster 180000  //最大超时时间,默认180s
启动

[root@master redis-5.0.9]# redis-sentinel sentinel.conf   //启动哨兵模式,先主后从
[root@master redis-5.0.9]# netstat -antp | grep 26379
tcp        0      0 0.0.0.0:26379           0.0.0.0:*               LISTEN      26978/redis-sentine 
tcp        0      0 192.168.30.7:26379      192.168.30.9:41478      ESTABLISHED 26978/redis-sentine 
tcp        0      0 192.168.30.7:26379      192.168.30.8:59552      ESTABLISHED 26978/redis-sentine 
tcp        0      0 192.168.30.7:43886      192.168.30.8:26379      ESTABLISHED 26978/redis-sentine 
tcp        0      0 192.168.30.7:41942      192.168.30.9:26379      ESTABLISHED 26978/redis-sentine 
tcp6       0      0 :::26379                :::*                    LISTEN      26978/redis-sentine 
[root@master redis-5.0.9]# 
模拟故障

杀死进程号 

查看日志 

集群

创建6节点目录

[root@localhost redis]# cd redis-cluster/
[root@localhost redis-cluster]# ls
redis6001  redis6002  redis6003  redis6004  redis6005  redis6006
[root@localhost redis-cluster]# 
拷贝配置文件

 修改配置文件

 

[root@localhost redis6001]# vim redis.conf 

  69  bind 127.0.0.1  //监听IP
  92  port 6001       //监听PORT
 699  appendonly yes  //开启AOF
 832  cluster-enabled yes   
 840  cluster-config-file nodes-6001.conf  //集群名称文件
 846  cluster-node-timeout 15000   //集群超时时间
启动节点

root@localhost redis6001]# redis-server redis.conf  
29027:C 07 Aug 2021 14:58:31.123 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
29027:C 07 Aug 2021 14:58:31.123 # Redis version=5.0.9, bits=64, commit=00000000, modified=0, pid=29027, just started
29027:C 07 Aug 2021 14:58:31.123 # Configuration loaded

启动集群

 测试集群

[root@localhost redis6001]# redis-cli -p 6001 -c
127.0.0.1:6001> cluster slots  
1) 1) (integer) 0
   2) (integer) 5460  
   3) 1) "127.0.0.1"
      2) (integer) 6001    
      3) "370c0e26c898d9fa13b4c471b0e6259dfadec731"
   4) 1) "127.0.0.1"
      2) (integer) 6006   //从节点IP和端口号
      3) "822219d31b1248348f223406da72ef69537f4cc4"
2) 1) (integer) 5461
   2) (integer) 10922
   3) 1) "127.0.0.1"
      2) (integer) 6002
      3) "dbd8e38b6c8d48f25cc8331624627e7411a43d15"
   4) 1) "127.0.0.1"
      2) (integer) 6004
      3) "2b1a0dd61a2e2a275429b2ec818e95654c29acd8"
3) 1) (integer) 10923
   2) (integer) 16383
   3) 1) "127.0.0.1"
      2) (integer) 6003
      3) "331ee4d7369d949fdef5970be4f0233fa0313efe"
   4) 1) "127.0.0.1"
      2) (integer) 6005
      3) "dd86a642078a74f5ebb7f0bb452455e418c5b160"
127.0.0.1:6001> 

结果


 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值