redis的发布订阅、持久化存储、redis的主从复制

redis的发布订阅

1. 创建redis配置文件

vim /opt/redis_conf/reids-6379.conf

mkdir /data/6379   

redis-server  redis-6379.conf     # 开启redis 6379 服务端

resdis-cli -p 6379   # 进入redis 6379 的客户端  (需要开启6379 下的3个redis客户端)

 发布者:

接收者:

 

持久化存储

1.RDB持久化配置

redis是一个内存型的数据库

断电数据会消失

重启服务数据会消失

重启服务器数据会消失

 

1. 创建redis配置文件

vim /opt/redis_conf/reids-6380.conf

写入以下配置

port 6379
daemonize yes
dir /data/6379
pidfile /data/6379/redis.pid
loglevel notice
logfile "/data/6379/redis.log"
protected-mode yes
dbfilename  dbmp.rdb
save 900 1
save 300 10
save 60 10000

参数说明:

mkdir /data/6380 

redis-server  redis-6380.conf     # 开启redis 6380 服务端

resdis-cli -p 6380   # 进入redis 6380 的客户端 

创建几条数据,并使用save命令开启rdb持久化

# 实现持久化和检查持久化生效的过程:
查看redis8380是否启动

netstat -tunlp |grep 6380

set name deng

save   # 持久化保存

netstat -tunlp |grep 6380

kill 9 88669  # 将该进程杀死,停用redis 6380 服务

查看 redis 数据是否已经保存

redis-server  redis-6380.conf   # 开启redis6380

redis-cli -p 6380    # 进入6380 客户端

keys *

2.redis AOF持久化

1 修改reids配置文件

vim /opt/redis_conf/redis-6380.con

加入以下两行配置

appendonly yes
appendfsync everysec

 保存退出

2 重启redis服务

pkill reids
redis-server /opt/redis_conf/redis-6380.conf

3 验证appendonly.aof文件里面的数据和redis里面的数据是否健在

客户端添加数据:

 

3 redis不重启,从RDB切换到AOF

1 配置RDB持久化,确保没有AOF的配置

daemonize yes
port 6380
logfile /data/6380/redis.log
dir /data/6380
dbfilename  dbmp.rdb
save 900 1                    #rdb机制 每900秒 有1个修改记录
save 300 10                    #每300秒        10个修改记录
save 60  10000                #每60秒内        10000修改记录

 

2. 删除上面演示已经持久化储存的文件

3.启动redis服务端

 

 4.检查RDB文件

 5 备份RDB文件

 

6 执行命令,开启AOF持久化

CONFIG set appendonly yes   # 开启AOF功能

CONFIG SET save ""          # 关闭RDB功能

7 验证旧的RDB数据库数据是否转入AOF, 以及AOF持久化文件是否正常写入

 

redis的主从复制

应用:负载均衡,故障切换,读写分离

1 准备三个redis配置文件

cd /opt/redis_conf

redis-6380.conf   # 主数据库master
redis-6381.conf   # 从库slave
redis-6382.conf   # 从库slave

2. 配置文件:

vim /opt/redis_conf/redis-6380.conf

写入以下配置:

port 6380
daemonize yes
pidfile /data/6380/redis.pid
loglevel notice
logfile "/data/6380/redis.log"
dbfilename dump.rdb
dir /data/6380
protected-mode no

3 目前这三个配置文件配置一样,只是端口的不同

#可以使用这一条命令通过redis-6380.conf生成6381和6382的配置文件
sed "s/6380/6381/g" redis-6380.conf > redis-6381.conf
sed "s/6380/6382/g" redis-6380.conf > redis-6382.conf
#
mkdir /data/{6381,8382}

 

4. 在redis-6381.conf和redis-6382.conf下添加以下配置,使之成为从数据库:

# 添加下面这句到redis-6381.conf和redis-6382.conf配置下
slaveof 127.0.0.1 6380

 

5.  确认三个配置文件无误

cat redis-6380.conf
cat redis-6381.conf
cat redis-6382.conf

6 开启这三个redis服务,确保三个服务启动正常

redis-server redis-6380.conf
redis-server redis-6381.conf
redis-server redis-6382.conf

7 查看redis主从数据库的状态

redis-cli -p 6380 info replication
redis-cli -p 6381 info replication
redis-cli -p 6382 info replication

 

8 验证redis主从复制情况

 (1)先验证三个数据库是否能正常连接

主库 6380 :

从库 6381:

从库6382:

 

 9 手动进行主从复制故障切换

(1) 杀掉6380的进程,模拟主库故障

  kill -9 进程ID

 

(2)在6381和6382上手动指定一个主库(我现在指定6382为主库)

  (3) 在6382的redis上执行这一行命令

slaveof no one

 

 

(4) 在6381上执行以下命令,将原来的指向6380改为指向6382

slaveof no one
slaveof 127.0.0.1 6382

 

(5) 验证新的主从架构状态

 

(6) 验证新的主从架构是否可以正常写入数据,同步数据

主库6382 中写入数据:

从库6381 中查看数据:

 

 

 
posted @ 2019-04-20 13:49  冰底熊  阅读(560)  评论(0编辑  收藏  举报