主从复制结构|持久化|数据类型
主从复制 没有高可用功能
Redis服务的主从复制(与mysql服务功能一样,都是实现数据自动同步的存储结构)
主服务器:接收客户端连接
从服务器:连接主服务器同步数据
主从复制结构模式:一主一从 一主多从 主从从 主坏了 从顶不上去 需要借助软件
全量同步 覆盖原始数据
说明:redis服务运行后,默认角色都是master 所以一台主机做master服务器的话,无需配置。主从结构中的从服务器都是只读的,客户端连接从服务器对数据仅有查询权限
redis-cli -h 192.168.4.51 -p 6379
> info replication
命令行配置
# 马上生效 但不是永久 适合配置线上服务器
> info replication # 查看服务器信息
> slaveof 主服务器ip地址 主服务器端口号 # 指定主服务器ip地址和服务器端口号
> slaveof no one # 临时恢复为主服务器
修改配置文件(永久有效,重启了redis服务依然有效)
]# vim /etc/redis/6379.conf
slaveof 主服务器ip地址 主服务器端口号
:wq
配置带验证的主从复制
主从结构中的master服务器Redis服务设置了连接密码,slave服务器要指定连接密码才能正常同步master主机数据
需求:给主从从结构中的master服务器的redis服务设置连接密码 slave服务器配置连接master服务服务器密码
# 第一步 给Redis服务器51设置连接密码123456
> config get requirepass
> config set requirepass 123456
> config rewrite
# 第二步 给redis服务器52设置master51密码 并设置本机连接密码
redis-cli -h ..52 -p 6379
> config get requirepass
> config set requirepass 123456
> config rewrite
> config get masterauth # 获取主服务器的连接项
> config set masterauth 123456 # 设置主服务器的连接密码
> config rewrite
# 第三步 在redis服务器53设置连接master服务器 52的连接密码
> config set masterauth 123456 # 设置主服务器的连接密码
> config rewrite
主从从配置
在host53主机做如下配置
第一步 把一主多从结构中的53主机恢复为独立的数据库服务器
> slaveof no one
第二步 把53配置为52主机的slave服务器
> slaveof 192.168.4.52 6379
哨兵服务(可实现高可用)
监视主从复制结构中的主服务器,发现主服务器无法连接后,会把对应的从升级为主服务器数据库,继续监视新的主数据库服务器 坏掉的主数据库服务器恢复后 会自动做当前主服务器的从服务器
哨兵服务+redis主从服务 能够实现redis服务高可用和数据自动备份,当远比Redis 集群的资本和运维成本要低
说明:
- 可以使用一主一从 或 一主多从 或 主从从 + 哨兵服务 做服务的高可用和数据自动备份
- 如果主从结构中的redis服务设置连接密码的话必须全每台服数据库都要设置密码且密码要一样
- 宕机的服务器 启动服务后,要指定主服务器的连接密码
要么都设置连接密码 必须一样
# 需求: 192.168.4.57主机做哨兵服务器 主从从结构 实现redis服务的高可用和数据自动备份
步骤一:给53主机的Redis服务设置连接密码 要与另外2台Redis服务器设置一样的连接密码
]# redis-cli -h 192.168.4.53
> config set requirepass 123456
> auth 123456
> config rewrite
步骤二:配置哨兵服务(4.57)
安装源码软件redis (无需做初始化配置 如果做了初始化吧redis服务停止即可)
[~]# yum -y install gcc
[~]# tar -zxf redis-4.0.8.tar.gz
[redis]# cd redis-4.0.8/
[redis-4.0.8]# make && make install
创建并编辑主配置文件(说明源码包里有哨兵服务配置文件的模版sentinel.conf)
vim /etc/sentinel.conf
bind 192.168.4.57 # 哨兵服务地址
port 26379 # 哨兵服务的端口号
sentinel monitor redis_server 192.168.4.51 6379 1 # 主的ip 主的端口 哨兵服务器台数
sentinel auth-pass redis_server 123456
# 如果主服务器没有连接密码此配置可以省略
:wq
# 置入后台运行
nohup redis-sentinel /etc/sentinel.conf &
jobs # 查看当前终端后台进程
测试配置
1.停止主服务器的redis服务
/etc/init.d/redis_6379 stop
2.在服务器52主机 查看复制信息 角色为master
[root@redisB ~]# redis-cli -h 192.168.4.52 -p 6352
192.168.4.52:6352> info replication
# Replication
role:master //角色是master
connected_slaves:0
持久化
什么是持久化:redis服务可以永久的保存数据 ,如何实现的? redis运行过程中 自动把内存里的数据自动复制到硬盘里
实现方式有两种:
1. RDB文件:指定就是数据库目录下的dump.rdb文件 redis运行后 会根据配置文件的设置的存储频率 把内存数据复制到dump.redis里 但是意外宕机时 丢失最后一次持久化数据。
2. AOF文件:redis服务AOF文件与mysql的binlog日志文件功能相同 是一个文件,记录连接redis服务后执行的写操作命令并以追加的方式记录写操作命令 默认没有开启 需要认为开启。
RDB文件的使用
使用RDB文件 实现数据的备份与恢复
第一步 拷贝dump.rdb 文件就是对数据的备份
第二步 把备份的dump文件 再次拷贝回数据库目录就是恢复
AOF文件的使用
启用AOF文件 通过修改配置文件启用(修改文件需要重启redis服务才能生效,所以适合线下服务器)每隔一秒存一次
注意 : 通过配置文件启用AOF文件 服务器原有的数据会被删除 所以命令行的方式更靠谱
命令行的方式:
修复aof文件:
数据类型