redis的主从复制

摘要:
哈希类型hash,hash特别适合存储对象列表类型list,按照插入顺序排序集合类型set,不允许有重复数据有序集合类型zset,不允许有重复数据二、redis主从复制为了避免服务器停机导致数据库数据丢失,为了避免单点故障,我们需要将数据复制到多台服务器上,即使有一台出现问题,其他服务器继续可以服务。

一、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 6380masterauth "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的主从复制第1张

redis的主从复制第2张

redis的主从复制第3张

四、redis主从节点读写数据

主节点写入数据

redis的主从复制第4张

从节点读取数据:

redis的主从复制第5张

从节点不能写入数据

redis的主从复制第6张

五、容灾处理

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

命令如下:

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

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

redis的主从复制第7张

我们将6382设置为主节点Master

redis的主从复制第8张

6382成为了Master

redis的主从复制第9张

将6384挂载到6382

redis的主从复制第10张

将6380挂载到6382上

redis的主从复制第11张

redis的主从复制第12张

总结:

1.一个Master可以有多个slave

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

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

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

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

免责声明:文章转载自《redis的主从复制》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇[rsync]rsync设定及错误处理【游戏】《方舟生存进化》怎么联机 搭建服务器联机教程下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

ELK之filebeat收集多类型日志

1.IP规划 10.0.0.33:filebeat+tomcat,filebeat收集系统日志、tomcat日志发送到logstash 10.0.0.32:logstash,将日志写入reids(input、output) 10.0.0.31:redis,大量缓存数据 10.0.0.30:logstash,从redis取出数据写入es(input、outp...

spring-session之一:简介、使用及实现原理

一、背景 http session(企业)一直都是我们做集群时需要解决的一个难题,我们知道HttpSession是通过Servlet容器创建和管理的,像Tomcat/Jetty都是保存在内存中的。而如果我们把web服务器搭建成分布式的集群,然后利用LVS或Nginx做负载均衡,那么来自同一用户的Http请求将有可能被分发到两个不同的web站点中去。那么问题...

linux centOS7 设置 redis 开机启动

1.为了让redis-server能在系统启动时自动运行,需要将redis服务作为守护进程(daemon)来运行,我们回/usr/local/cluster/7000/目录中找到一个redis.conf的文件,这个文件是redis服务运行时加载的配置,我们先观察一下其中的内容 [root@192 7000]# vi redis.conf 输入/da...

Redis设置过期时间

一般添加值之后,不设置过期时间的话,ttl某个键会显示-1,表示此时并没有设置过期时间 当设置了过期时间之后,则会显示剩余过期秒数 设置过期时间的做法 #region 设置过期时间 //设置多少秒 client.Set<string>("name",...

服务器的Redis连接不上解决方案

看了网上很多解决方案,都是端口问题,将127.0.0.1改为0.0.0.0,就ok了,但是本人的问题不是端口问题,端口本来就是0.0.0.0。其实redis无法连接数据库就只有这几种可能,防火墙,安全组,密码,绑定IP。这次的问题感觉还是比较让人费解的,当更换端口号的时候就可以,默认端口6379就是不行。 按照顺序依次检查了防火墙,安全组,密码,配置文件,...

MySQL的读写分离---主从复制、主主复制

1.复制是基于BinLog日志 存在三种日志格式:Statement:存储Sql语句,存储日志量是最小的。有可能复制不一致Row:存储event数据,存储日志量大,但是不能很直接进行读取;Mixed:介于Row和statment之间 2.复制的基础 一、主从复制 1.原理    mysql要做到主从复制,其实依靠的是二进制日志,即:假设主服务器叫A,...