Redis 主从安装-Centos

由于机器有限,所以接下来的教程都是在一台虚拟机中进行部署安装.

Redis主从工作原理

如果你为master配置了一个slave,不管这个slave是否是第一次连接上Master,它都会发送一个PSYNC命令给master请求复制数据。master收到PSYNC命令后,会在后台进行数据持久化通过bgsave生成最新的rdb快照文件,持久化期间,master会继续接收客户端的请求,它会把这些可能修改数据集的请求缓存在内存中。当持久化进行完毕以后,master会把这份rdb文件数据集发送给slave,slave会把接收到的数据进行持久化生成rdb,然后再加载到内存中。然后,master再将之前缓存在内存中的命令发送给slave。

当master与slave之间的连接由于某些原因而断开时,slave能够自动重连Master,如果master收到了多个slave并发连接请求,它只会进行一次持久化,而不是一个连接一次,然后再把这一份持久化的数据发送给多个并发连接的slave。

主从复制(全量复制)流程图:

数据部分复制

当master和slave断开重连后,一般都会对整份数据进行复制。但从redis2.8版本开始,redis改用可以支持部分数据复制的命令PSYNC去master同步数据,slave与master能够在网络连接断开重连后只进行部分数据复制(断点续传)。master会在其内存中创建一个复制数据用的缓存队列,缓存最近一段时间的数据,master和它所有的slave都维护了复制的数据下标offset和master的进程id,因此,当网络连接断开后,slave会请求master继续进行未完成的复制,从所记录的数据下标开始。如果master进程id变化了,或者从节点数据下标offset太旧,已经不在master的缓存队列里了,那么将会进行一次全量数据的复制。

主从复制(部分复制,断点续传)流程图:

如果有很多从节点,为了缓解主从复制风暴(多个从节点同时复制主节点导致主节点压力过大),可以做如下架构,让部分从节点与从节点(与主节点同步)同步数据

下载安装Redis

$ wget http://download.redis.io/releases/redis-5.0.4.tar.gz
$ tar -xzvf redis-5.0.4.tar.gz -C /usr/local
$ cd redis-5.0.4
# 官网示例是使用 `make`,它会将其安装到当前目录的src目录下。
# 将`make`替换成`make install PREFIX=/usr/local/redis`,将其安装到指定目录,记得将配置文件进行拷贝过去
$ make install PREFIX=/usr/local/redis

上面我们将redis安装到了/usr/local/redis,所以,可以使用/usr/local/redis/bin/redis-server.sh 启动服务。

配置主从

创建master 端口号6379

  1. 创建目录和配置文件
$ mkdir -p /usr/local/master-slave/6379
$ vim /usr/local/master-slave/6379/redis.conf
  1. 编辑redis.conf内容如下
port 6379
requirepass soft01
masterauth soft01
daemonize yes
databases 16
protected-mode no
pidfile /usr/local/master-slave/6379/redis.pid
timeout 300# rdb aof
save 900 1
save 300 10
save 60 10000
dir /usr/local/master-slave/6379
dbfilename dump.rdb
appendonly yes
appendfilename appendonly.aof
appendfsync everysec
auto-AOF-rewrite-percentage 100
auto-AOF-rewrite-min-size 64mb
aof-use-rdb-preamble yes

创建slave 端口号6380

  1. 创建目录和配置文件
$ mkdir -p /usr/local/master-slave/6380
$ vim /usr/local/master-slave/6380/redis.conf
  1. 编辑redis.conf内容如下
port 6380
requirepass soft01
masterauth soft01
daemonize yes
databases 16
protected-mode no
pidfile /usr/local/master-slave/6380/redis.pid
timeout 300# rdb aof
save 900 1
save 300 10
save 60 10000
dir /usr/local/master-slave/6380
dbfilename dump.rdb
appendonly yes
appendfilename appendonly.aof
appendfsync everysec
auto-AOF-rewrite-percentage 100
auto-AOF-rewrite-min-size 64mb
aof-use-rdb-preamble yes# 主从配置
replicaof 192.168.0.138 6379

创建slave 端口号6381

  1. 创建目录和配置文件
$ mkdir -p /usr/local/master-slave/6381
$ vim /usr/local/master-slave/6381/redis.conf
  1. 编辑redis.conf内容如下
port 6381
requirepass soft01
masterauth soft01
daemonize yes
databases 16
protected-mode no
pidfile /usr/local/master-slave/6381/redis.pid
timeout 300# rdb aof
save 900 1
save 300 10
save 60 10000
dir /usr/local/master-slave/6381
dbfilename dump.rdb
appendonly yes
appendfilename appendonly.aof
appendfsync everysec
auto-AOF-rewrite-percentage 100
auto-AOF-rewrite-min-size 64mb
aof-use-rdb-preamble yes# 主从配置
replicaof 192.168.0.138 6379

启动服务

# 启动主服务
$ /usr/local/redis/bin/redis-server /usr/local/master-slave/6379/redis.conf# 启动从服务
$ /usr/local/redis/bin/redis-server /usr/local/master-slave/6380/redis.conf
$ /usr/local/redis/bin/redis-server /usr/local/master-slave/6381/redis.conf$ ps -ef | grep redis
root      66910      1  0 00:07 ?        00:00:00 /usr/local/redis/bin/redis-server *:6381
root      30195      1  0 23:56 ?        00:00:00 /usr/local/redis/bin/redis-server *:6380
root     112072      1  0 23:23 ?        00:00:03 /usr/local/redis/bin/redis-server *:6379

测试

打开三个终端,分别连接主服务和从服务
连接主服务:

$ /usr/local/redis/bin/redis-cli -p 6379 -a soft01

连接从服务:

$ /usr/local/redis/bin/redis-cli -p 6380 -a soft01
$ /usr/local/redis/bin/redis-cli -p 6381 -a soft01

在主服务器上设置key:

127.0.0.1:6379> set name cfl
ok

在从服务器上获取key:

127.0.0.1:6380> get name
"cfl"
127.0.0.1:6381> get name
"cfl"

在从服务器上进行设置key,会出现错误:(error) READONLY You can’t write against a read only replica.

查看

127.0.0.1:6379>info
...
# Replication
role:master
connected_slaves:2
slave0:ip=127.0.0.1,port=6380,state=online,offset=2305,lag=1
slave1:ip=127.0.0.1,port=6381,state=online,offset=2305,lag=0
master_replid:4c14592216e9a8492445fee9090c025be7b229f8
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:2305
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:2305
...

总结

Redis的主从架构,当主服务出现异常后,客户端的写请求将会失败,而读请求正常(从服务只提供了读数据权限)。并且主从架构中,从服务不会自动选举成主服务,需要人为操作才能恢复。

配置从服务器的配置文件时(redis.conf)主服务的地址需要配置真实的ip地址。在开始的时候,我配置的是127.0.0.1 在服务器上测试时没有发现问题,但是在其它机器测试时,就会连接127.0.0.1的redis服务就会出现错误(我理解的是客户端拿到服务端的返回的redis节点信息是127.0.0.1,客户端在建立连接时就使用127.0.0.1导致异常)!

不管是主节点还是从节点在配置配置文件时,都要配置masterauth属性!

在网上没有找到Spring Boot 连接Redis主从的性格资料。

Redis 主从安装-Centos相关推荐

  1. php redis 主从配置,Redis主从及其PHP扩展安装配置

    1.Redis简介Redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合)和zset(有序 ...

  2. redis安装+redis主从

    1.安装主redis 1.1.搭建安装环境 #yum install -y tcl 1.2.编译安装redis #tar -zvxf redis-2.6.7.tar.gz #cd redis-2.6. ...

  3. CentOS下Redis的安装

    CentOS下Redis的安装 前言 安装Redis需要知道自己需要哪个版本,有针对性的安装,比如如果需要redis GEO这个地理集合的特性,那么redis版本就不能低于3.2版本,由于这个特性是3 ...

  4. linux下部署redis主从,Linux下安装Redis及Redis主从同步配置

    一 ,Linux安装Redis 1.我们先配置redis的 yum 源 , 很多软件的找不到 yum 源 我们可以使用 EPEL 找到很多软件的yum源 2.使用命令 yum install epel ...

  5. Linux下redis的安装(适用centos)

    转自:https://www.cnblogs.com/_popc/p/3684835.html 第一部分:安装redis  希望将redis安装到此目录 1 /usr/local/redis 希望将安 ...

  6. Redis主从配置及通过Keepalived实现Redis自动切换高可用

    Redis主从配置及通过Keepalived实现Redis自动切换高可用 [日期:2014-07-23] 来源:Linux社区  作者:fuquanjun [字体:大 中 小] 一:环境介绍: Mas ...

  7. 【Redis学习】Redis的安装、管理、适用场合以及使用

    1.Redis概述 我们知道,内存是电脑主板上的存储部件,用于存储当前正在使用的数据和程序,CPU可以与内存直接沟通,所以访问速速非常高:而外存数据必须加载到内存以后程序才能使用.如果把CPU当做一个 ...

  8. centos中配置java视频教程_安装CentOs

    Redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted set ...

  9. [redis]知识回顾之redis主从+哨兵搭建简要记录

    1.先准备环境 家里的万年老爷机(120G的SSD,300G硬盘 ),手机热点下载,所以只能少利用空间资源,用virtualBox装centos7纯净版 其中要点: 1.virtualbox创建新机要 ...

最新文章

  1. 资料分享:送你一本《数据结构(C语言版)》电子书!
  2. Android EditText回车不换行
  3. xcode 自带的git工具创建项目流程
  4. javascript和“主流大型语言”(c# JAVA C++等)的差异
  5. 服务器客户端回射程序-自己设计包的结构
  6. matlab元件阻感负载,单相桥式全控整流电路阻感负载课程设计matlab
  7. Springboot第二篇:与前端fetch通信(附springboot解决跨域方法)
  8. C#退出窗体的总结方法
  9. 违法收集使用个人信息 抖音、快手、猎聘等105款App被点名
  10. (android 源码下开发应用程序) 如何在 Android 各 level ( 包含 user space 與 kernel space ) 使用dump call stack的方法...
  11. Hxro将采用Solana作为第一层区块链,并过渡为完全去中心化的链上衍生品网络
  12. 字节跳动1/3员工不支持取消大小周!库克称iPhone将采用可回收材料生产;清华博士接亲被要求现场写代码|极客头条...
  13. javascript动态字母
  14. 破解路由器密码并限制和***邻居电脑
  15. delphi2007不使用msbuild的方法
  16. 哨兵系列卫星_空客“哥白尼哨兵-1C”卫星雷达天线首次展开双翼
  17. 阅读圣经丨筛选上下文与行上下文
  18. 浅学transcad(与表格链接以及创建矩阵OD并显示期望线)
  19. XML学习之做过的实验——实验三
  20. javaW2D3-File

热门文章

  1. 多值依赖与部分函数依赖
  2. 临沂租房软件测试,廉租房可以装修吗?廉租房装修注意事项?
  3. 【JAVA零基础入门系列】Day1 开发环境搭建
  4. Redis集群数据同步与选举
  5. 技术视角 | 生成式 AI 对商业世界的革新与影响
  6. 【微语】第九周(01.11~01.17)
  7. Pycharm 设置
  8. HAProxy容器化实践
  9. 下载安装NodeJs v16
  10. 基于Python3的科学运算与常用算法-第4 符号运算