当前位置: 首页 > news >正文

redis 主从复制方案

redis

  • 一、安装
  • 二、创建服务
  • 三、开启 redis 持久化
  • 四、开启主从配置
    • 修改 master 的主配置文件
    • 修改 slave1 和 slave2 的主配置文件
  • 五、测试

环境准备

  • 准备三台系统为CentOS7的主机
    • master:192.168.152.71
    • slave1:192.168.152.72
    • slave2:192.168.152.73

一、安装

Redis软件包仓库

  1. 安装开发工具包

    yum groupinstall "Development Tools" -y
    
  2. 获取 redis 源码包

    wget http://download.redis.io/releases/redis-4.0.9.tar.gz
    
  3. 解压

    tar xf ./redis-4.0.9.tar.gz -C /opt/
    
  4. 进入源码包进行 cd /opt/redis-4.0.9 编译安装,执行下面命令

    make && make install
    

二、创建服务

创建redis服务以便用system命令管理

  1. 复制 redis_init_script 文件,到 /etc/init.d/下面,并改名为redis

    cp /opt/redis-4.0.9/utils/redis_init_script /etc/init.d/redis
    
  2. 编辑 /etc/init.d/redis 文件

    再文件第 5 行添加下面内容,以便 system 命令识别

    ##NEW###
    # chkconfig: 2345 10 90
    # description: Start and Stop redis
    ##NEW###
    

    查看下面几行信息

    EXEC=/usr/local/bin/redis-server       # 按照第 7 行指定的目录,查看文件是否存在,一般是存在的
    CLIEXEC=/usr/local/bin/redis-cli       # 按照第 8 行指定的目录,查看文件是否存在,一般是存在的
    CONF="/etc/redis/${REDISPORT}.conf"    # 按照第 11行指定的目录,查看文件是否存在,一般是没有的,${REDISPORT} 的值为 6379,再文件第 6 行 或者 9、10行显示,这也是服务的端口号
    $EXEC $CONF $						   # 更改第 20 行,再行尾加上 & 符号
    

    如果 7、8 行指定的路径不存在,更改路径

    EXEC=/opt/redis-4.0.9/src/redis-server
    CLIEXEC=/opt/redis-4.0.9/src/redis-cli
    

    第 11 行指定的路径一般不存在,执行下面两个命令,该文件为主配置文件

    mkdir /etc/redis
    cp /opt/redis-4.0.9/redis.conf /etc/redis/6379.conf
    
  3. 重新加载 systemd 配置

    systemctl daemon-reload
    
  4. 启动redis

    systemctl start redis
    
  5. 进入 redis 客户端进行测试

    redis-cli 
    

三、开启 redis 持久化

  • 开启持久化功能后,重启redis后,数据会自动通过持久化文件恢复!!
    • 两种方式
    • RDB(Redis DataBase)
    • AOF(Append Only File)

因RDB数据不实时,但同时使用两者时服务器只会找AOF文件,所以RDB留作万一的手段。

RDB 开启状态,RDB 默认已经开启

vim /etc/redis/6379.conf#dbfilename:持久化数据存储在本地的文件
dbfilename dump.rdb#dir:持久化数据存储在本地的路径,如果是在/redis/redis-3.0.6/src下启动的redis-cli,则数据会存储在当前src目录下
dir ./##snapshot触发的时机,save <seconds> <changes>  
##如下为900秒后,至少有一个变更操作,才会snapshot  
##对于此值的设置,需要谨慎,评估系统的变更操作密集程度  
##可以通过“save “””来关闭snapshot功能  
#save时间,以下分别表示更改了1个key时间隔900s进行持久化存储;更改了10个key300s进行存储;更改10000个key60s进行存储。
save 900 1
save 300 10
save 60 10000##当snapshot时出现错误无法继续时,是否阻塞客户端“变更操作”,“错误”可能因为磁盘已满/磁盘故障/OS级别异常等  
stop-writes-on-bgsave-error yes  ##是否启用rdb文件压缩,默认为“yes”,压缩往	往意味着“额外的cpu消耗”,同时也意味这较小的文件尺寸以及较短的网络传输时间  
rdbcompression yes  

开启AOF,配置文件

vim /etc/redis/6379.conf#此选项为aof功能的开关,默认为“no”,可以通过“yes”来开启aof功能  
##只有在“yes”下,aof重写/文件同步等特性才会生效  
appendonly yes  #指定aof文件名称  
appendfilename appendonly.aof  #指定aof操作中文件同步策略,有三个合法值:always everysec no,默认为everysec  
appendfsync everysec  #在aof-rewrite期间,appendfsync是否暂缓文件同步,"no"表示“不暂缓”,“yes”表示“暂缓”,默认为“no”  
no-appendfsync-on-rewrite no  #触发aof rewrite的最小文件尺寸
auto-aof-rewrite-min-size 64mb#当Aof log增长超过指定比例时,重写log file, 设置为0表示不自动重写Aof 日志,重写是为了使aof体积保持最小,而确保保存最完整的数据。
auto-aof-rewrite-percentage 100

将appendonly no改为appendonly yes 即可

  • 重启
systemctl restart redis

四、开启主从配置

修改 master 的主配置文件

vim /etc/redis/6379.conf 

改第 69 行 bind 127.0.0.1 为,监听所有地址。

bind 0.0.0.0

如果只监听特定的可以这样写 bind 127.0.0.1 192.168.1.100 将同时监听 127.0.0.1192.168.1.100 这两个 IP 地址。你也可以根据需要添加更多的 IP 地址。

改第 88 行 protected-mode yes 为,关闭保护模式。

protected-mode no

重启服务 systemctl restart redis

修改 slave1 和 slave2 的主配置文件

vim /etc/redis/6379.conf 

改第 69 行 bind 127.0.0.1 为,监听所有地址。

bind 0.0.0.0

如果只监听特定的可以这样写 bind 127.0.0.1 192.168.1.100 将同时监听 127.0.0.1192.168.1.100 这两个 IP 地址。你也可以根据需要添加更多的 IP 地址。

改第 88 行 protected-mode yes 为,关闭保护模式。

protected-mode no

改第 281 行 # slaveof <masterip> <masterport> 为,解除注释,并指定master主机IP地址和端口号

slaveof 192.168.152.71 6379    # 端口号再没有修改的情况下,默认 6379

重启服务 systemctl restart redis

五、测试

输入 redis-cli 进入redis 的客户端输入 info replication 查看主从状态

master 显示的状态

# Replication
role:master                # 当前节点是主节点
connected_slaves:2         # 连接的从节点数量
slave0:ip=192.168.152.73,port=6379,state=online,offset=42,lag=1  # 从节点 1 信息
slave1:ip=192.168.152.72,port=6379,state=online,offset=42,lag=1  # 从节点 2 信息
master_replid:cb46ab0a79974e3f32ceb1e25a79c3578f6a3ee4  # 主节点复制 ID
master_replid2:0000000000000000000000000000000000000000  # 第二个主节点复制 ID (全零表示未用)
master_repl_offset:42     # 主节点复制偏移量
second_repl_offset:-1     # 第二主节点复制偏移量 (未用)
repl_backlog_active:1     # 复制积压缓冲区启用状态
repl_backlog_size:1048576 # 复制积压缓冲区大小 (1 MB)
repl_backlog_first_byte_offset:1  # 缓冲区第一个字节偏移量
repl_backlog_histlen:42    # 缓冲区有效数据长度

slave 显示的状态

# Replication
role:slave                # 当前节点是从节点
master_host:192.168.152.71 # 主节点 IP 地址
master_port:6379          # 主节点端口
master_link_status:up     # 主节点连接状态 (up 表示连接正常)
master_last_io_seconds_ago:1 # 距离上次 IO 操作的秒数
master_sync_in_progress:0 # 主节点同步是否正在进行 (0 表示未进行)
slave_repl_offset:42      # 从节点复制偏移量
slave_priority:100        # 从节点优先级 (数字越小优先级越高)
slave_read_only:1         # 从节点是否只读 (1 表示只读)
connected_slaves:0        # 当前从节点连接的从节点数量
master_replid:cb46ab0a79974e3f32ceb1e25a79c3578f6a3ee4 # 主节点复制 ID
master_replid2:0000000000000000000000000000000000000000 # 第二个主节点复制 ID (全零表示未用)
master_repl_offset:42     # 主节点复制偏移量
second_repl_offset:-1     # 第二主节点复制偏移量 (未用)
repl_backlog_active:1     # 复制积压缓冲区启用状态
repl_backlog_size:1048576 # 复制积压缓冲区大小 (1 MB)
repl_backlog_first_byte_offset:1  # 缓冲区第一个字节偏移量
repl_backlog_histlen:42    # 缓冲区有效数据长度

可以使用 set 添加数据,get 获取数据来进行测试,如:

set name lty  # name 为索引,lty为值
gte name      # get 获取该索引的值

http://www.mrgr.cn/news/6206.html

相关文章:

  • Python酷库之旅-第三方库Pandas(094)
  • Ollama - Llama3 docker版本安装部署使用
  • 物联网(IoT)设备渗透文章二:智能家居中控系统的渗透与利用
  • clickhouse中使用ReplicatedMergeTree表引擎数据去重问题
  • POSIX线程库
  • 详解MBR分区结构以及GPT分区结构
  • 【Vue】生命周期函数
  • 推荐系统三十六式学习笔记:产品篇36 | 组建推荐团队及工程师的学习路径
  • flutter事件与消息通知
  • 零成本搭建个人 APP 和小程序后台
  • 文字滚动通知功能实现 vue 组件
  • 反射型XSS
  • 【微服务】Nacos配置中心和客户端数据同步模式
  • 【Hot100】LeetCode—94. 二叉树的中序遍历
  • 什么是Redis大key问题?如何解决?
  • mpv播放器在rk3399上配置硬解码
  • 【Windows】深度学习环境部署
  • 【Linux操作系统】进程间通信(1)
  • 深入理解TCP选择性确认(SACK):优化网络传输的机制
  • 6款大学生电脑里的必装软件,装进电脑慢慢用