Redis主从复制、持久化

Redis主从复制

一、Redis主从复制工作原理
类似于mysql,Redis提供存储数据的服务结构,分为主/从2种角色主服务器接收客户端访问从服务器与主服务器保持数据一致支持的服务结构有:一主一从,一主多从,主从从。
1、工作原理(背诵)
slave向master发送sync(同步)命令
master启动后台存盘进程,并收集所有修改数据命令
master完成后台存盘后,传送整个数据文件到slave
slave接收数据文件,加载到内存中完成首次完全同步
后续有新数据产生时,master继续收集数据修改命令依次传给slave完成同步

2、命令行配置命令(临时配置)

slaveof  主服务器lp  端口号
info replication			//查看服务器的角色
slaveof no one			//反客为主(临时恢复为主数据库服务器)
每台redis服务器默认都是主master角色。
永久配置(永久配置)
vim +282 /etc/redis/6379.conf
slaveof 主服务器lp端口号

二、配置主从结构

192.168.1.11-13 一组两从

redis安装

rpm -q gcc || yum -y install gcc
tar -zxf redis-4.0.8.tar.gz   	
cd redis-4.0.8/
make && make install
./utils/install_server.sh   
[root@rd1 ~]# /etc/init.d/redis_6379 stop
Stopping ...
Redis stopped
[root@rd1 ~]# vim +70 /etc/redis/6379.conf
70   bind  192.168.1.11
93   port  6379
[root@rd1 ~]# /etc/init.d/redis_6379  start 
[root@rd1 ~]# ss -ntulp | grep 6379
tcp    LISTEN     0      128    192.168.1.11:6379  *:*    users:(("redis-server",..
[root@lnmp redis-4.0.8]# vim +43 /etc/init.d/redis_6379
	$CLIEXEC -h 192.168.1.11 -p 6379  shutdown
[root@rd1 redis-4.0.8]# /etc/init.d/redis_6379    stop
Stopping ...
Redis stopped

rd2从

[root@rd2 redis-4.0.8]# redis-cli -h 192.168.1.12 -p 6379
192.168.1.12:6379> info replication     #默认就是master
# Replication
role:master
connected_slaves:0
192.168.1.12:6379> slaveof 192.168.1.11 6379		#指定主slaveof  ip 端口
OK
192.168.1.12:6379> info replication
# Replication
role:slave
master_host:192.168.1.11

rd3从

[root@rd3 ~]# redis-cli -h 192.168.1.13 -p 6379
192.168.1.13:6379> slaveof 192.168.1.11 6379
OK
192.168.1.13:6379> info replication
# Replication
role:slave
master_host:192.168.1.11

rd1查看

[root@rd1 ~]# redis-cli -h 192.168.1.11 -p 6379
192.168.1.11:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.1.12,port=6379,state=online,offset=756,lag=1
slave1:ip=192.168.1.13,port=6379,state=online,offset=756,lag=1

恢复成主反客为主

1)永久修改
 vim +282  /etc/redis/6379.conf
#slaveof  192.168.1.11  6379  				#注释掉配置重启服务即可
2)临时修改
192.168.1.12> slaveof no one			#命令行

配置带验证的主从

主服务器

临时
[root@rd1 ~]# redis-cli -h 192.168.1.11 -p 6379
192.168.1.11:6379> config set requirepass 123456		#临时设置,不需重启
192.168.4.51:6351> config rewrite   			#永久生效

永久
vim +501  /etc/redis/6379.conf
requirepass 123456

从服务器指定连接密码

[root@rd3 ~]# /etc/init.d/redis_6379    stop
[root@rd3 ~]# vim  /etc/redis/6379.conf
282  slaveof 192.168.1.11 6351 
289  masterauth 123456
[root@rd3 ~]# /etc/init.d/redis_6379  start
[root@rd3 ~]# redis-cli -h 192.168.1.13 -p 6379
192.168.1.13:6379> slaveof 192.168.1.11 6379		#重新指定一次
OK
192.168.1.13:6379> info replication
# Replication
role:slave
master_host:192.168.1.11
master_link_status:up      #未配置密码时master_link_status:down

四、哨兵服务:
哨兵服务的功能:服务运行后,监视配置文件中指定的主数据服务器,发现主服务器监视不到时,把对应的从升级为主数据库服务器。

rd1 配置了密码,也可以不配置

如果主从结构中的主服务器设置了连接密码,从rd2 rd3也要设置一样的连接密码

[root@rd2 ~]# redis-cli -h 192.168.1.12 -p 6379
192.168.1.12:6379> config set requirepass 123456
OK
192.168.1.12:6379> auth 123456
OK
192.168.1.12:6379> config get requirepass
1) "requirepass"
2) "123456"
192.168.1.12:6379> config rewrite
OK

配置哨兵服务,具体操作如下

rpm -q gcc || yum -y install gcc
tar -zxf redis-4.0.8.tar.gz   	
cd redis-4.0.8/
make && make install

创建并编辑主配置文件

[root@rd1 ~]# vim /etc/sentinel.conf
bind 192.168.1.14				#本机网卡IP
port 26379						#默认端口,可修改做多实例
sentinel monitor  mymaster 192.168.1.11 6379 1
#mymaster 自定义名字,  1   有一个sentine同意切换主,就能完成切换
sentinel auth-pass mymaster 123456
[root@rd1 ~]# redis-sentinel  /etc/sentinel.conf
4757:X 05 Mar 23:19:23.955 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
4757:X 05 Mar 23:19:23.955 # Redis version=4.0.8, bits=64, commit=00000000, modified=0, pid=4757, just started
4757:X 05 Mar 23:19:23.955 # Configuration loaded
4757:X 05 Mar 23:19:23.956 * Increased maximum number of open files to 10032 (it was originally set to 1024).
                _._
           _.-``__ ''-._
      _.-``    `.  `_.  ''-._           Redis 4.0.8 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._
 (    '      ,       .-`  | `,    )     Running in sentinel mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 26379
 |    `-._   `._    /     _.-'    |     PID: 4757
  `-._    `-._  `-./  _.-'    _.-'
 |`-._`-._    `-.__.-'    _.-'_.-'|
 |    `-._`-._        _.-'_.-'    |           http://redis.io
[root@rd1 ~]# vim +43 /etc/init.d/redis_6379
	$CLIEXEC -h 192.168.1.11 -p 6379 -a 123456  shutdown
[root@rd1 ~]# /etc/init.d/redis_6379 stop
Stopping ...
Redis stopped

等待一下查看切换

4757:X 05 Mar 23:25:51.462 # +failover-end master mymaster 192.168.1.11 6379
4757:X 05 Mar 23:25:51.462 # +switch-master mymaster 192.168.1.11 6379 192.168.1.12 6379
4757:X 05 Mar 23:25:51.463 * +slave slave 192.168.1.13:6379 192.168.1.13 6379 @ mymaster 192.168.1.12 6379
[root@rd1 ~]# cat /etc/sentinel.conf
sentinel monitor mymaster 192.168.1.12 6379 1			#这里的监控的IP发生变化

宕机的主机redis服务启动,会自动做新master的从服务器并自动同步宕机期间的数据(需要人为指定主服务器的连接密码)

[root@rd1 ~]# /etc/init.d/redis_6379 start
[root@rd1 ~]# redis-cli -h 192.168.1.11 -p 6379 -a 123456
192.168.1.11:6379> info replication
# Replication
role:slave
master_host:192.168.1.12
master_port:6379
master_link_status:down

192.168.1.11:6379> config set masterauth 123456
OK
192.168.1.11:6379> config rewrite
OK
192.168.1.11:6379> info replication
# Replication
role:slave
master_host:192.168.1.12
master_port:6379
master_link_status:up

若将配置里的1 改成2 实验,停掉rd2。则不会发生切换,因为只有一个哨兵

4867:X 05 Mar 23:40:27.280 # Sentinel ID is d5ee2d775c8a391c6d03b1b18d2d0db2964eed63
4867:X 05 Mar 23:40:27.280 # +monitor master mymaster 192.168.1.12 6379 quorum 2
4867:X 05 Mar 23:41:34.800 # +sdown master mymaster 192.168.1.12 6379
能检测到master发生down,但是不会发生切换

你也 可以做多个的哨兵,防止因为网络问题引起的误判,如一主两从三哨兵

redis服务持久化

持久化把数据永久保存,实现方式有2种RDB、AOF,公司同时打开

1、RDB介绍
Redis数据库文件,全称RedisDataBase
文件数据持久化方式之一
数据持久化默认方式
按照指定时间间隔,将内存中的数据集快照写入硬盘
指定的就是数据库目录下的dump.rdb /var/lib/redis/6379/dump.rdb

1)RDB优化设置 save 900  1
数据从内存保存到硬盘的频率
[root@rd2 ~]# grep -i save /etc/redis/6379.conf
219:  save 900 1			//15分钟且有1个key改变即存盘
220:  save 300 10			//5分钟且有10个key改变即存盘
221:	save 60 10000		//1分钟且有10000个key改变即存盘
手动存盘
bgsave			//不阻塞写存盘
save			//阻塞写存盘save已基本被废弃
2)RDB配置文件的测试,验证存盘频率
[root@rd2 ~]# redis-cli -h 192.168.1.12 -a 123456 -p 6379  shutdown
[root@rd2 ~]# rm -rf /var/lib/redis/6379/*
[root@rd2 ~]# ls /var/lib/redis/6379/
[root@rd2 ~]# vim /etc/redis/6379.conf
save 900 1
#save 300 10
save 60 10000
save 120 10					#测试配置文件120s内且超出10个变量
[root@rd2 ~]# /etc/init.d/redis_6379  start
Starting Redis server...
[root@rd2 ~]# redis-cli -h 192.168.1.12 -a 123456 -p 6379
192.168.1.12:6379> set name1 tom
OK		# 在2分钟内存储 》= 10个变量
192.168.1.12:6379> exit
[root@rd2 ~]# ls  /var/lib/redis/6379/
dump.rdb

3)使用备份的dump.rdb文件恢复数据 备份文件

[root@rd2 ~]# cp /var/lib/redis/6379/dump.rdb  .   
[root@rd2 ~]# redis-cli -h 192.168.1.12 -a 123456 -p 6379
192.168.1.12:6379> flushall
192.168.1.12:6379> keys *
(empty list or set)
> exit
[root@rd2 ~]# /etc/init.d/redis_6379 stop
[root@rd2 ~]# rm -rf /var/lib/redis/6379/dump.rdb
[root@rd2 ~]# cp dump.rdb  /var/lib/redis/6379/ #也可以拷贝给其他主机操作,恢复数据
[root@rd2 ~]# /etc/init.d/redis_6379 start
[root@rd2 ~]# redis-cli -h 192.168.1.12 -a 123456 -p 6379
192.168.1.12:6379> keys *
1)"name1"

AOF介绍Append Only File
追加方式记录写操作的文件记录,redis服务所有写操作,类似mysql的bin_log日志
不断的将新的写操作,追加到文件的未尾,默认没有启用,使用cat命令可以查看文件内容

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

1)启用AOF

[root@rd2 ~]# cat /etc/redis/6379.conf | grep -n append    #避免重启机器
673:  appendonly no
[root@rd2 ~]# redis-cli -h 192.168.1.12 -a 123456 -p 6379
192.168.1.12:6379> config set appendonly yes   //启用 ,线上服务器必须用命令行启用
OK
192.168.1.12:6379> config rewrite		//写进配置文件
OK
192.168.1.12:6379> config get appendonly
1) "appendonly"
2) "yes"
192.168.1.12:6379> exit
[root@rd2 ~]# ls /var/lib/redis/6379/
appendonly.aof  dump.rdb
#记录操作的文件,redis以aof文件为准,同时存在只看aof,不管dump是否有数据,直接覆盖,产生新的dump。
#且线上启用aof时,会记录内存里所有的变量。

2)AOF文件记录写操作的方式6379.conf

#appendfsync always			//时时记录,并完成磁盘同步
appendfsync everysec		//每秒记录一次,并完成磁盘同步,默认
#appendfsync no				//写入aof,不执行磁盘同步

3)触发日志重写(合并雷同命令)

auto-aof-rewrite-min-size 64mb 			//首次重写触发值,合并雷同命令
auto-aof-rewrite-percentage100			//再次重写,增长百分比
合并后假设50mb,增长100%,即100mb时触发再次合并。

在其他机器上使用AOF文件恢复数据,跟实验rbd相似。数据较多的时候需要等待一下

aof文件异常损坏,不是一定能修复好
[root@redis53 6379]# redis-check-aof --fix appendonly.aof 
0x 83:Expected \r\n,got:6166
AOF analyzed:size=160,ok up to=123,diff=37 This will shrink the AOF from 160 bytes,with 37 bytes,to 123 bytes 
Continue?[y/N]:y 
Successfully truncated AOF
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值