Redis的主从复制

Stella981
• 阅读 685

一、redis的五种数据类型:

string是字符串类型,是redis最基本的数据类型。

哈希类型hash,hash特别适合存储对象

列表类型list,按照插入顺序排序

集合类型set,不允许有重复数据

有序集合类型zset,不允许有重复数据

二、redis主从复制

为了避免服务器停机导致数据库数据丢失,为了避免单点故障,我们需要将数据复制到多台服务器上,即使有一台出现问题,其他服务器继续可以服务。

这就要求一台服务器数据更新后,自动将数据更新到其他服务器上,实现方式就是:redis的主从复制

我们可以在多台服务器上部署redis,并在这几台服务器上指定主从关系,主服务器主要负责写,同时将写入的数据更新到从服务器上,这种模式叫做主从复制。

即master/slave ,并且redis默认master写数据,slave用于读,slave不能写,写会出错。

三、redis主从关系的实现

 由于只有一台主机,所以只能模拟一下redis的主从关系

首先,将已经安装好的redis的配置文件redis.conf备份到redis6380.conf,redis6382.conf,redis6384.conf,同时清空配置文件的内容命令如下:

cp redis.conf redis6380.conf
> redis6380.conf
cp redis.conf redis6382.conf
> redis6382.conf
cp redis.conf redis6384.conf
> redis6384.conf

然后:编辑redis6380.conf、redis6382.conf、redis6384.conf

redis6380.conf,将以下内容放入,6380为主。6382,6384为从

#include包含原配置文件的内容,具体配置文件路径根据实际情况修改
include /usr/local/redis-3.2.9/redis.conf
#daemonize yes 表示服务从后台启动,相当于./redis-server &中的&
daemonize yes
#port 6380 自定义的端口号
port 6380
#pidfile 自定义的文件,表示当前程序的pid,进程id
pidfile /var/run/redis_6380.pid
#logfile 日志文件名
logfile /usr/local/redis-3.2.9/6380.log
#dbfilename 持久化的rdb文件
dbfilename dump6380.rdb

redis6382.conf、

#slave配置文件
#include包含原配置文件的内容,具体配置文件路径根据实际情况修改
include /usr/local/redis-3.2.9/redis.conf
#daemonize yes 表示服务从后台启动,相当于./redis-server &中的&
daemonize yes
#port 6382 自定义的端口号
port 6382
#pidfile 自定义的文件,表示当前程序的pid,进程id
pidfile /var/run/redis_6382.pid
#logfile 日志文件名
logfile /usr/local/redis-3.2.9/6382.log
#dbfilename 持久化的rdb文件
dbfilename dump6382.rdb
#slaveof 表示当前redis是127.0.0.1端口6380这个Master的从,
slaveof 127.0.0.1 6380
#这里注意如配置文件配置了requirepass就需要加下面此项
masterauth "redis_2018@"

redis6384.conf

#slave配置文件
#include包含原配置文件的内容,具体配置文件路径根据实际情况修改
include /usr/local/redis-3.2.9/redis.conf
#daemonize yes 表示服务从后台启动,相当于./redis-server &中的&
daemonize yes
#port 6384 自定义的端口号
port 6384
#pidfile 自定义的文件,表示当前程序的pid,进程id
pidfile /var/run/redis_6384.pid
#logfile 日志文件名
logfile /usr/local/redis-3.2.9/6384.log
#dbfilename 持久化的rdb文件
dbfilename dump6384.rdb
#slaveof 表示当前redis是127.0.0.1端口6380这个Master的从,
slaveof 127.0.0.1 6380
masterauth "redis_2018@"

接着:启动redis服务

//查看是否有redis进程
ps -ef|grep redis
//在src路径下执行
//主redis
./redis-server ../redis6380.conf
//两个从redis
./redis-server ../redis6382.conf
./redis-server ../redis6384.conf

登录redis内置客户端查看redis主从信息,redis服务所处的角色命令如下:

./redis-cli -p 6380 -a redis_2018@
ping
info replication

Redis的主从复制

Redis的主从复制

Redis的主从复制

四、redis主从节点读写数据

 主节点写入数据

Redis的主从复制

从节点读取数据:

Redis的主从复制

从节点不能写入数据

Redis的主从复制

五、容灾处理

当Master服务故障时,需手动将slave中的一个提升为Master,剩下的slave重新挂载到新的Master上(冷处理:机器挂掉了再处理)

命令如下:

//将slave提升为Master
slaveof no one 
//将slave挂载到新的Master
slaveof 127.0.0.1 6382

模拟场景,将6380端口服务关掉,

Redis的主从复制

我们将6382设置为主节点Master

Redis的主从复制

6382成为了Master

Redis的主从复制

将6384挂载到6382

Redis的主从复制

将6380挂载到6382上

Redis的主从复制

Redis的主从复制

总结:

1.一个Master可以有多个slave

2.slave下线,读请求的处理性能下降

3.Master下线,写请求的处理性能下降

4.当Master故障后,需要将其中一个slave使用slave no one命令提升为Master,其他的slave使用slaveof ip port 命令重新挂载到新的Master上,从新的Master上同步数据

5.主从复制模式的障碍转移需要手动操作,要实现自动化处理,这就需要Sentinel哨兵,实现故障的自动转移

点赞
收藏
评论区
推荐文章
Stella981 Stella981
3年前
CentOS 7部署redis 5.0.5
Redis基于内存存储的非关系型数据库,存储速度快,支持主从复制,支持字符串(string)、列表(list)、集合(set)、散列(hash)、有序集合(zset)五种数据类型,一、数据库安装1、使用yum安装root@test~yuminstallredisroot@test~red
Stella981 Stella981
3年前
Spring Boot Redis RedisTemplate 相关API介绍
Redis五大类型:字符串(String)、哈希/散列/字典(Hash)、列表(List)、集合(Set)、有序集合(sorted set)五种。SpringBoot集成redis的RedisTemplate,也分别提供的对这些数据类型的操作。主要有5大类:redisTemplate.opsForValue();//操作字符串redis
Stella981 Stella981
3年前
Redis安装与配置问题
Redis是一个keyvalue存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sortedset有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基
Stella981 Stella981
3年前
Redis实例讲解
简介  Redis是一个keyvalue的nosql产品,和我们熟知的Memcached有些类似,但他存储value类型相对更加丰富,包括string(字符串),list(链表),set(集合),zset(sortedset有序集合)和hash。与memcached一样,为了保证高效率,数据都是缓存在内存中。区别的是redis类型众多,也被
Stella981 Stella981
3年前
Redis常用命令
Redis常用命令Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sortedset:有序集合)等https://gitee.com/nmwork/RedisUtil(https://gitee.com/nmwork/RedisUtil)1.  Redis数
Stella981 Stella981
3年前
Redis(一) String类型操作【存字符串、存数字】
什么是redis?  redis是一个keyvalue存储系统。它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sortedset有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更
Stella981 Stella981
3年前
Redis的安装配置和使用
  现在我来讲解一下Redis的安装和配置,那么什么是Redis呢?他的作用是什么呢?  redis是一个keyvalue存储系统,和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sortedset有序集合)和hash(哈希类型)。这些数据类型都支持push/
Stella981 Stella981
3年前
Redis为什么这么快
Redis简介Redis是一个开源的内存中的数据结构存储系统,它可以用作:数据库、缓存和消息中间件它支持多种类型的数据结构,如字符串(String),散列(Hash),列表(List),集合(Set),有序集合(SortedSet或者是ZSet)与范围查询,Bitmaps,Hyperloglogs和
Stella981 Stella981
3年前
Redis 入门概述
1\.什么是redisRedis是用C语言开发的一个开源的高性能键值对(keyvalue)数据库。它通过提供多种键值数据类型来适应不同场景下的存储需求,目前为止Redis支持的键值数据类型如下:字符串类型【String】散列类型【Hash】列表类型【List】集合类型【Set】有序集合类型【
3A网络 3A网络
2年前
Redis 存储对象信息是用 Hash 还是 String
Redis存储对象信息是用Hash还是StringRedis内部使用一个RedisObject对象来表示所有的key和value,RedisObject中的type,则是代表一个value对象具体是何种数据类型,它包含字符串(String)、链表(List)、哈希结构(Hash)、集合(Set)、有序集合(Sortedset)。