Redis的功能实现(主从复制、高可用)

一、Redis安装

  1. Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
  2. Redis 可以存储键和五种不同类型的值之间的映射。键的类型只能为字符串,值支持五种数据类型:字符串、列表、集合、散列表、有序集合。
  3. 与传统数据库不同的是 Redis 的数据是存在内存中的,所以读写速度非常快,因此 redis 被广泛应用于缓存方向,每秒可以处理超过 10万次读写操作,是已知性能最快的Key-Value DB。

安装、编译、配置
先从官网下载redis压缩包到本机,我下载的版本时redis-5.0.8。下载网址

前提:redis的编译需要安装gcc。yum install gcc -y
[root@servera ~]# tar zxf redis-5.0.8.tar.gz 
[root@servera ~]# cd redis-5.0.8/
[root@servera redis-5.0.8]# ls
00-RELEASENOTES  COPYING  Makefile   redis.conf       runtest-moduleapi  src
BUGS             deps     MANIFESTO  runtest          runtest-sentinel   tests
CONTRIBUTING     INSTALL  README.md  runtest-cluster  sentinel.conf      utils
[root@servera redis-5.0.8]# make
[root@servera redis-5.0.8]# make install
[root@servera redis-5.0.8]# cd utils/			//进入目录 完成安装配置
[root@servera utils]# ./install_server.sh		//设定默认配置
[root@servera utils]# vim /etc/redis/6379.conf 		//在配置文件中,打开所有接口的6379端口
# JUST COMMENT THE FOLLOWING LINE.
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bind 0.0.0.0			//设定为所有主机
[root@servera utils]# /etc/init.d/redis_6379 restart	//重启redis

在这里插入图片描述
在这里插入图片描述

二、Redis持久化

Redis的持久化就是把内存的数据写到磁盘中去,防止服务宕机了内存数据丢失。支持AOF和RDB(默认)两种持久化方式。

持久化机制
RDB:是Redis DataBase缩写快照
RDB是Redis默认的持久化方式。按照一定的时间将内存的数据以快照的形式保存到硬盘中,对应产生的数据文件为dump.rdb。通过配置文件中的save参数来定义快照的周期。
在这里插入图片描述
配置文件【/etc/redis/6379.conf】中的相关参数含义:

# Save the DB on disk:
#   save <seconds> <changes>
save 900 1			//当有1条Keys数据被改变时,900秒刷新到Disk一次
save 300 10			//当有10条Keys数据被改变时,300秒刷新到Disk一次
save 60 10000			//当有10000条Keys数据被改变时,60秒刷新到Disk一次

stop-writes-on-bgsave-error yes	
//当后台RDB进程导出快照到rdb文件这个过程出错时redis主进程是否还接受向数据库写数据,
该种方式会让用户知道在数据持久化到硬盘时出错了(相当于一种监控)。
SAVE:速度快,但会堵塞;BGSAVE:异步,通过子进程执行。
rdbcompression yes		//是否启用rdb文件压缩,默认为“yes”。如果希望RDB进程节省一点CPU时间,设置为no。
rdbchecksum yes			//在redis重启后,从rdb文件向内存写数据之前,是否先检测该rdb文件是否损坏
# The filename where to dump the DB
dbfilename dump.rdb  		//dbfilename:持久化数据存储在本地的文件
dir /var/lib/redis/6379 	//dir:持久化数据存储在本地的路径

AOF:是Append Only File持久化
AOF持久化,以追加的方式保存所有写操作,是将Redis执行的每次写命令记录到单独的日志文件中,当重启Redis会重新将持久化的日志中文件恢复数据。
当两种方式同时开启时,数据恢复Redis会优先选择AOF恢复。
在这里插入图片描述
AOF默认关闭,开启方法,修改配置文件:appendonly yes

appendonly no				//此选项为aof功能的开关,默认为“no”,可以通过“yes”来开启aof功能 
appendfilename "appendonly.aof"		//aof文件的存放路径与文件名称
appendfsync everysec  			//每秒强制写入磁盘一次
【 指定aof操作中文件同步策略,有三个合法值:always everysec no,默认为everysec
always:每一个命令,都立即同步到aof文件中去;
everysec:每秒将数据写一次到aof文件,redis推荐的方式;
no:将写入工作交给操作系统,由操作系统来判断缓冲区大小,统一写到aof文件。】

三、Redis主从复制

一主多从,主负责写,并且将数据复制到其它的 slave 节点,从节点负责读。所有的读请求全部走从节点。
设定主从复制,只需要在从节点的配置文件中,设定slaveof参数,添加主节点的IP和Redis端口。

实验环境:

主机名IP职能说明
server1192.168.43.127主节点redis正常开启
serverb192.168.43.137从节点redis正常开启

在从节点中设定主从复制

[root@serverb utils]# vim /etc/redis/6379.conf 		//从节点的配置文件
slaveof 192.168.43.127 6379  //使用参数,设定主节点
[root@serverb utils]# /etc/init.d/redis_6379 restart

测试,设定完成后,在主节点中写入数据,从节点可以读取到数据:
在这里插入图片描述
在这里插入图片描述
主从复制的核心原理:

  • 当启动一个 slave node 的时候,它会发送一个 PSYNC 命令 给 master node。
  • 如果这是 slave node 初次连接到 master node,那么会触发一次full resynchronization 全量复制。此时 master 会启动一个后台线程,开始生成一份 RDB 快照文件, 同时还会将从客户端 client 新收到的所有写命令缓存在内存中。
  • RDB 文件生成完毕后, master 会将这个 RDB 发送给 slave,slave 会先写入本地磁盘,然后再从本地磁盘加载到内存中, 接着 master 会将内存中缓存的写命令发送到 slave,slave 也会同步这些数据。
  • slave node 如果跟 master node 有网络故障,断开了连接,会自动重连,连接之后 master node 仅会复制给 slave 部分缺少的数据。

四、Redis高可用

Redis Sentinel为Redis提供高可用性。实际上,这意味着使用Sentinel可以创建一个Redis部署,在不需要人为干预的情况下抵抗某些类型的故障。
Redis Sentinel还提供其他辅助任务,如监视、通知,并充当客户端的配置提供者。
宏观层面上哨兵能力有以下四个方面:

  • 监控(Monitoring): Sentinel会不断检查主实例和副本实例是否按预期工作。
  • 通知(Notification): Sentinel可以通过API通知系统管理员或其他计算机程序,其中一个被监视的Redis实例有问题。
  • 自动故障转移(Automatic failover): 如果某个主服务器没有按预期工作,Sentinel可以启动一个故障转移过程,其中一个副本被提升为主副本,其他附加副本被重新配置为使用新的主副本,并且使用Redis服务器的应用程序会被通知在连接时要使用的新地址。
  • 配置提供程序(Configuration provider): Sentinel充当客户端服务发现的授权源。客户端连接到Sentinel,以请求负责给定服务的当前Redis主机的地址。如果发生故障转移,sentinel将报告新地址。

Redis Sentinel是一个分布式系统: Sentinel本身被设计为在有多个Sentinel进程协同工作的配置中运行。
多个哨兵进程协同工作有两个优点,一是,当多个哨兵一致认为某个主机不再可用时,将执行故障检测。这降低了误报的概率;二是,即使不是所有的Sentinel进程都在工作,Sentinel也能工作,从而使系统能够抵御故障。毕竟,拥有一个本身就是单点故障的故障转移系统是没有意思的。


实验环境:

主机名IP职能说明
server1192.168.42.127主节点redis正常开启
serverb192.168.43.137从节点redis正常开启
servera192.168.43.147从节点redis正常开启

(1)在三台服务器均正常开启地条件下,在servera和serverb上配置主从复制:

[root@serverb ~]# vim /etc/redis/6379.conf   //从节点的配置文件
slaveof 192.168.43.127 6379  //使用参数,设定主节点
[root@serverb ~]# /etc/init.d/redis_6379 restart
[root@servera ~]# vim /etc/redis/6379.conf   //从节点的配置文件
slaveof 192.168.43.127 6379  //使用参数,设定主节点
[root@serverb ~]# /etc/init.d/redis_6379 restart

(2)在三台服务器中编辑sentinel配置文件开启哨兵:
Redis源代码分发包含一个自我记录的配置文件示例,名为sentinel.conf,可用于配置Sentinel。可以将这个配置文件示例,复制到安装路径中,进行修改配置

[root@server1 ~]# cp /soft/redis-5.0.3/sentinel.conf /etc/redis/
[root@server1 ~]# vim /etc/redis/sentinel.conf
protected-mode no					#关闭保护模式
sentinel monitor mymaster 127.0.0.1 2		#用来告诉Redis监视一个名为mymaster,地址27.0.0.1和端口6379,法定人数为2的主机
#这个法定人数是需要同意主机不可访问这一事实的哨兵数量,以便真正将主机标记为失败,并在可能的情况下最终启动故障转移过程。
sentinel down-after-milliseconds mymaster 10000		#服务器挂点10000毫秒(10秒后自动切换master
[root@server1 ~]# redis-server /etc/redis/sentinel.conf --sentinel    启动一个运行在 Sentinel 模式下的 Redis 服务器

(3)完成以上步骤后,就可以查看哨兵状态

[root@server1 ~]# redis-cli
127.0.0.1:6379> info ##注意:默认连接6379
[root@server1 ~]# redis-cli -p 26379	#默认情况下,Sentinel使用TCP端口26379运行
127.0.0.1:26379> info
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值