redis主从复制,哨兵服务,持久化

  1. 主从复制
    1.1 主从复制结构模式
    一主一从 一主多从 主从从
    1.1.1 主从复制工作原理
    1)slave向master发送sync命令
    2)master启动后台存盘进程,并收集所有修改数据命令
    3)master完成后台存盘后,传送整个数据文件到slave
    4)slave接收数据文件,加载到内存中完成首次完全同步
    5)后续有新数据产生时,master继续将新的数据收集到的修改命令依次传给slave,完成同步

    1.2 命令行配置(一主一从)

    [root@mysql52 ~]# redis-cli -h 192.168.4.52 -p 6352
    

    命令格式:slaveof 主库Ip地址 端口号

    192.168.4.52:6352> slaveof 192.168.4.51 6351
    192.168.4.52:6352> info replication		#查看赋值信息		
     # Replication
     role:slave								#角色
     master_host:192.168.4.51				#主库Ip地址
     master_port:6351						#主库端端口
     master_link_status:up					#与主库连接状态
     ...
     slave_read_only:1						#从服务器只能查看
     ...
    

    1.2.1 反客为主
    - 将从库恢复为主库

     [root@mysql52 ~]# redis-cli -h 192.168.4.52 -p 6352
     192.168.4.52:6352> slaveof no one
    
     [root@mysql52 ~]# vim /etc/redis/6379.conf	
      283 #slaveof 192.168.4.51 6351
     :wq
     [root@mysql52 ~]# /etc/init.d/redis_6379 stop
     [root@mysql52 ~]# /etc/init.d/redis_6379 start
    

    1.3 永久配置

    [root@mysql52 ~]# vim /etc/redis/6379.conf	
     283 slaveof 192.168.4.51 6351
    :wq
    [root@mysql52 ~]# /etc/init.d/redis_6379 stop
    [root@mysql52 ~]# /etc/init.d/redis_6379 start
    

    1.3.1 一主多从(192.168.4.51主 192.168.4.52和192.168.4.53 从)

    [root@mysql53 ~]# redis-cli -h 192.168.4.53 -p 6353
     192.168.4.53:6353> slaveof 192.168.4.51 6351
     192.168.4.53:6353> info replication
    
    [root@mysql53 ~]# vim /etc/redis/6379.conf	
      283 slaveof 192.168.4.51 6351
    :wq
    [root@mysql53 ~]# /etc/init.d/redis_6379 stop
    [root@mysql53 ~]# /etc/init.d/redis_6379 start
    

    1.3.2 主从从(192.168.4.51和192.168.4.53主 192.168.4.54从)

    [root@mysql54 ~]# redis-cli -h 192.168.4.54 -p 6354
     192.168.4.54:6354> slaveof 192.168.4.53 6353
    [root@mysql53 ~]# redis-cli  -h 192.168.4.53 -p 6353
     192.168.4.53:6353> info replication
      ...
     slave0:ip=192.168.4.54,port=6354,state=online,offset=2092,lag=1
    
    [root@mysql54 ~]# vim /etc/redis/6379.conf	
      283 slaveof 192.168.4.53 6353
       :wq
    [root@mysql54 ~]# /etc/init.d/redis_6379 stop
    [root@mysql54 ~]# /etc/init.d/redis_6379 start
    

    1.4 配置带验证的主从复制(主从都配置master和slave密码)
    1.4.1 配置master

  • 设置连接密码.重启服务

    [root@mysql51 ~]# vim +501 /etc/redis/6379.conf
     501  requirepass 123456					#定义连接密码
    :wq
    [root@mysql51 ~]# /etc/init.d/redis_6379 stop
    [root@mysql51 ~]# /etc/init.d/redis_6379 start
    

    1.4.2 配置slave

  • 设置连接密码,重启服务

    [root@mysql52 ~]# vim +289 /etc/redis/6379.conf
      290 masterauth 123456				#主库密码
    :wq	
    [root@mysql52 ~]# /etc/init.d/redis_6379 stop
    [root@mysql52 ~]# /etc/init.d/redis_6379 start
    

    1.4.3 命令行设置密码(192.168.4.53 192.168.4.54)

    [root@mysql53 ~]# redis-cli  -h 192.168.4.53 -p 6353
    192.168.4.53:6353> CONFIG set masterauth 123456  	 #命令行设置密码
    192.168.4.53:6353> CONFIG REWRITE				 #永久生效
    
    [root@mysql53 ~]# redis-cli  -h 192.168.4.53 -p 6353
    192.168.4.53:6353> config set requirepass 123456	
    192.168.4.53:6353> keys *
    (error) NOAUTH Authentication required.
    192.168.4.53:6353> auth 123456
    192.168.4.53:6353> config get requirepass
    192.168.4.53:6353> CONFIG REWRITE
    192.168.4.54:6353> info replication
    
    [root@mysql54 ~]# redis-cli -h 192.168.4.54 -p 6354
    192.168.4.54:6354> config get masterauth"
    192.168.4.54:6354> config set masterauth 123456
    192.168.4.54:6354> CONFIG REWRITE
    192.168.4.54:6354> info replication
    

    1.5 哨兵服务
    1.5.1 哨兵服务介绍

    • 监控master服务

    • 发现master宕机后,将从服务器提升为主服务器

    • 主配置文件:sentinel.conf

      1.5.2 安装源码的redis软件(不需要初始化)
      1.5.3 配置哨兵服务

      [root@mysql57 ~]# vim redis-4.0.8/sentinel.conf 			#模板
      
      [root@mysql57 ~]# vim /etc/sentinel.conf
      bind 0.0.0.0
      sentinel monitor redis51 192.168.4.51 6351 1
      sentinel auth-pass redis51 123456
      :wq
      

      1.5.3 启动哨兵服务

      [root@mysql57 ~]# redis-sentinel  /etc/sentinel.conf
      

      1.5.4 测试配置

      [root@mysql51 ~]# redis-cli -h 192.168.4.51 -p 6351 -a 123456 shutdown
      [root@mysql51 ~]# netstat -ntlup | grep redis-server
      
      [root@mysql51 ~]# /etc/init.d/redis_6379 start 
      [root@mysql51 ~]# netstat -ntlup | grep redis-server
      
      [root@mysql51 ~]# redis-cli -h 192.168.4.51 -p 6351 -a 123456
      192.168.4.51:6351> info replication
      192.168.4.51:6351> config set masterauth 123456
      192.168.4.51:6351> config rewrite
      192.168.4.51:6351> info replication
      
  1. 持久化
    2.1 RDB(默认)
    2.1.1 RDB介绍
    • Redis数据库文件,全称 Redis DataBase
    • 数据持久化方式之一
    • 数据持久化默认方式
    • 按照指定时间间隔,将内存中的数据集快照写入硬盘
    • 快照术语叫snapshot
    • 恢复时,将快照文件直接读入内存
  • 定义RDB文件名
    dbfilename “dump.rdb” #文件名

    2.1.2 使用RDB文件恢复数据
    - 备份数据

    [root@mysql50 ~]# cp /var/lib/redis/6379/dump.rdb  /root/
    [root@mysql50 ~]# scp /root/dump.rdb root@192.168.4.56:/opt
    
  • 恢复数据

    [root@mysql56 ~]# /etc/init.d/redis_6379 stop
    [root@mysql56 ~]# rm -rf /var/lib/redis/6379/dump.rdb 
    [root@mysql56 ~]# cp /opt/dump.rdb /var/lib/redis/6379/
    [root@mysql56 ~]# /etc/init.d/redis_6379 start
    [root@mysql56 ~]# redis-cli -h 192.168.4.56 -p 6356
    192.168.4.56:6356> keys *
    

    2.2.3 优化设置
    - 数据从内存保存到硬盘的频率

      save 900 1 			#15分钟内且有1个key改变自动存盘	
      save 300 10 		#5分钟内且有10个key改变自动存盘
      save 60 10000 		#1分钟内且有10000个key改变自动存盘
    
    • 手动存盘
      save #阻塞写存盘
      bgsave #不阻塞写存盘

    2.2.4 RDB优点与缺点
    RDB优点
    – 高性能的持久化时实现-----创建一个子进程来执行持久化,先将数据写入临时文件,持久化过程结束后,再用这个临时文件替换上次持久化好的文件;过程中主进程不做任何 IO 操作。
    –比较适合大规模数据恢复,且对数据完整行要求不是非常高的场合。
    RDB 的缺点
    – 意外宕机,丢失最后一次持久化的所有数据。
    2.2 AOF
    2.2.1 AOF介绍
    Append Only File
    追加方式记录写操作的文件
    记录redis服务所有写操作
    不断的将新的写操作,追加到文件的末尾
    默认没有启用
    使用cat命令可以查看文件内容

    2.2.2 启用AOF

    [root@mysql56 ~]# redis-cli -h 192.168.4.56 -p 6356
     192.168.4.56:6356> keys *
     192.168.4.56:6356> config set appendonly yes		#启用
     192.168.4.56:6356> config get appendonly 
     192.168.4.56:6356> config rewrite				#写进配置文件
     192.168.4.56:6356> keys *
     [root@mysql56 ~]# ls /var/lib/redis/6379/
     appendonly.aof  dump.rdb
    [root@mysql56 ~]# cat /var/lib/redis/6379/appendonly.aof 
    

    2.2.3 使用AOF文件恢复数据

    • 备份数据

    [root@mysql56 ~]# cp /var/lib/redis/6379/appendonly.aof /root
    [root@mysql56 ~]# scp /root root@192.168.4.50:/opt

  • 恢复数据

    [root@mysql50 ~]# /etc/init.d/redis_6379 stop
    [root@mysql50 ~]# ls /var/lib/redis/6379/
    appendonly.aof  dump.rdb
    [root@mysql50 ~]# rm -rf /var/lib/redis/6379/*
    [root@mysql50 ~]# cp /opt/appendonly.aof /var/lib/redis/6379/
    [root@mysql50 ~]# ls /var/lib/redis/6379/
    appendonly.aof
    [root@mysql50 ~]# /etc/init.d/redis_6379 start
    
    [root@mysql50 ~]# redis-cli -h 192.168.4.50 -p 6350 -a 123456
    192.168.4.50:6350> keys *
    

    2.2.4 优化配置

    • 定义文件名
      appendonly yes #启用aof,默认no
      appendfilename “appendonly.aof” #指定文件名
    • AOF文件记录写操作的方式
      appendfsync always #时时记录,并完成磁盘同步
      appendfsync everysec #每秒记录一次,并完成磁盘同步
      appendfsync no #写入aof ,不执行磁盘同步
    • 日志文件会不断增大,何时触发日志重写
      auto-aof-rewrite-min-size 64mb #首次重写触发值
      auto-aof-rewrite-percentage 100 #再次重写,增长百分比
  • 修复AOF文件

    [root@mysql56 ~]# vim /var/lib/redis/6379/appendonly.aof 
    [root@mysql56 ~]# /etc/init.d/redis_6379 stop
    [root@mysql56 ~]# /etc/init.d/redis_6379 start
    [root@mysql56 ~]# redis-cli -h 192.168.4.56 -p 6356
    Could not connect to Redis at 192.168.4.56:6356: Connection refused
    Could not connect to Redis at 192.168.4.56:6356: Connection refused
    not connected> exit
    [root@mysql56 ~]# netstat -ntlup | grep redis-server
    
    [root@mysql56 ~]# redis-check-aof --fix /var/lib/redis/6379/appendonly.aof 
    0x             1ba: Expected prefix '*', got: 'j'
    AOF analyzed: size=475, ok_up_to=442, diff=33
    This will shrink the AOF from 475 bytes, with 33 bytes, to 442 bytes
    Continue? [y/N]: y
    Successfully truncated AOF
    
    [root@mysql56 ~]# /etc/init.d/redis_6379 start
      /var/run/redis_6379.pid exists, process is already running or crashed
    
    [root@mysql56 ~]# rm -rf /var/run/redis_6379.pid 
    [root@mysql56 ~]# /etc/init.d/redis_6379 start
    
    [root@mysql56 ~]# redis-cli -h 192.168.4.56 -p 6356
    192.168.4.56:6356> keys *
    

    2.2.5 AOF优点与缺点
    • AOF 优点
    – 可以灵活的设置持久化方式
    – 出现意外宕机时,仅可能丢失 1 秒的数据
    • AOF 的缺点
    – 持久化文件的体积通常会大于 RDB方式。
    – 执行 fsync 策略时的速度可能会比 RDB方式慢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值