redis 的持久化策略

rdb模式是默认模式,可以在指定的时间间隔内生成数据快照(snapshot),默认保存到dump.rdb文件中。当redis重启后会自动加载dump.rdb文件中内容到内存中。

用户可以使用SAVE(同步)或BGSAVE(异步)手动保存数据

可以设置服务器配置的save选项,让服务器每隔一段时间自动执行一次BGSAVE命令,可以通过save选项设置多个保存条件,但只要其中任意一个条件被满足,服务器就会执行BGSAVE命令。
      例如:
      save 900 1
      save 300 10
      save 60 10000
  那么只要满足以下三个条件中的任意一个,BGSAVE命令就会被执行
  服务器在900秒之内,对数据库进行了至少1次修改
  服务器在300秒之内,对数据库进行了至少10次修改
  服务器在60秒之内,对数据库进行了至少10000次修改

优点**
​    rdb文件是一个紧凑文件,直接使用rdb文件就可以还原数据。
​    数据保存会由一个子进程进行保存,不影响父进程。
​    恢复数据的效率要高于aof

缺点**
​    每次保存点之间导致redis不可意料的关闭,可能会丢失数据。
​    由于每次保存数据都需要fork()子进程,在数据量比较大时可能会比较耗费性能。

--------------------------------------------------------------------------------------------------------------------------------

AOF

AOF默认是关闭的,需要在配置文件中开启AOF。Redis支持AOF和RDB同时生效,如果同时存在,AOF优先级高于RDB(Redis重新启动时会使用AOF进行数据恢复)
监听执行的命令,如果发现执行了修改数据的操作,同时直接同步到数据库文件中。

优点**

相对RDB数据更加安全。

缺点**

相同数据集AOF要大于RDB。
​相对RDB可能会慢一些。

**开启办法**

修改redis.conf中

# 默认no
appendonly yes
# aof文件名
appendfilename "appendonly.aof"

 

-------------------------------------------------------------------------------------------------------------------------------------------

 **Redis主从复制**

Redis支持集群功能。为了保证单一节点可用性,redis支持主从复制功能。每个节点有N个复制品(replica),其中一个复制品是主(master),另外N-1个复制品是从(Slave),也就是说Redis支持一主多从。
​    一个主可有多个从,而一个从又可以看成主,它还可以有多个从。

**主从优点**

增加单一节点的健壮性,从而提升整个集群的稳定性。(Redis中当超过1/2节点不可用时,整个集群不可用)
​从节点可以对主节点数据备份,提升容灾能力。
 读写分离。在redis主从中,主节点一般用作写(具备读的能力),从节点只能读,利用这个特性实现读写分离,写用主,读用从。

**一主多从搭建**

在已经搭建的单机版redis基础上进行操作。
​并且关闭redis单机版

./redis-cli shutdown

**新建目录**

mkdir /usr/local/replica

**复制目录**

把之前安装的redis单机版中bin目录复制三份,分别叫做:master、slave1、slave2

# cp -r /usr/local/redis/bin /usr/local/replica/master
# cp -r /usr/local/redis/bin /usr/local/replica/slave1
# cp -r /usr/local/redis/bin /usr/local/replica/slave2

**修改从的配置文件**

修改2个从的redis.conf,指定主节点ip和端口。并修改自身端口号防止和其他redis冲突。

vim /usr/local/replica/slave1/redis.conf

指定主节点ip和端口

replicaof 192.168.1.11 6379

修改自己端口

port 6380

 

vim /usr/local/replica/slave2/redis.conf

指定主节点ip和端口

replicaof 192.168.93.10 6379

修改自己端口

port 6381

**启动三个redis实例**

注意:一定要关闭单机的redis,否则端口冲突

cd /usr/local/replica

vim startup.sh

在文件中添加下面内容

cd /usr/local/replica/master/
./redis-server redis.conf
  cd /usr/local/replica/slave1
./redis-server redis.conf
  cd /usr/local/replica/slave2
./redis-server redis.conf

赋予权限

chmod a+x startup.sh

开启

./startup.sh

**查看启动状态**

ps aux|grep redis

**添加批量关闭redis**

vim shutdown.sh

在文件中添加下面内容

cd /usr/local/replica/master/
./redis-cli -p 6379 shutdown
  cd /usr/local/replica/slave1
./redis-cli -p 6380 shutdown
  cd /usr/local/replica/slave2
./redis-cli 0p 6381shutdown

赋予权限

chmod a+x shutdown.sh

关闭

./shutdown.sh

**测试***

cd /usr/local/replica/master/

./redis-cli

在客户端命令行模式下,添加一条数据:

set k1 aaa

进去slave查看数据是否同步。

cd /usr/local/replica/slave1

./redis-cli -p 6380

get k1

 

-----------------------------------------------------

当主宕机 例7379下限,  6380和6381不知道谁是主,若没有哨兵的情况下,将其中一台如6380

replicaof no one   这个命令可以让从机变成一个独立的redis

然后在6381里让它 replicaof 192.168.1.11 6380

以上是手动切换集群

当6380追随6381时 会将老的数据清除,将新的数据同步到6380上

posted @ 2022-03-16 23:21  花心大萝卜li  阅读(184)  评论(0)    收藏  举报