centos stream 9 redis 主从

centos stream 9 redis 主从配置


前言

一.服务器准备

个人准备了三台服务器(虚拟机)

虚拟机名称IP地址Redis版本
虚拟机1192.168.243.134redis7.2(主)
虚拟机2192.168.243.133redis7.2(从)
虚拟机3192.168.243.135redis7.2(从)

二.redis 配置(redis.conf)

bind 127.0.0.1  #允许本地访问
protected-mode yes  #保护模式
replicaof no one  # 确保主服务器不再复制其他服务器
requirepass 123456 #密码
daemonize yes #后台运行
min-replicas-to-write 3   
min-replicas-max-lag 10  (与min-replicas-to-write 配套使用,如果 master 发现超过 3 个 slave 节点连接 master 延迟大于 10 秒,那么 master 就停止接收客户端写请求。这么做的目的是为了尽可能保证主从数据一致性)

三.redis 从配置

replicaof 192.168.243.134 6379  #主机ip 加端口
masteruser username  #主节点redis用户名
masterauth 123456  #主节点redis 密码,没有密码不用配置此项
replica-serve-stale-data  yes  #(默认yes,从节点可以响应客户端请求,设为no,从节点阻止客户端所以请求)
replica-read-only  yes #(设置为yes,从节点只读,设置为no,主从同步时从节点数据会清除)
主从同步状态:(主)
127.0.0.1:6379> info replication
# Replication
role:master  #角色
connected_slaves:1 #链接从节点的数量
slave0:ip=192.168.243.133,port=6379,state=online,offset=488,lag=1 (offset 主节点保存从节点的偏移量  lag从库最后一次向主节点发送REPLCONF命令距离现在多少秒)
master_failover_state:no-failover
master_replid:f61d9a1ca2abdb2d9d4a234d723902e48e73319c
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:502 #主节点偏移量
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:502

主从同步状态:(从)
127.0.0.1:6379> info replication
# Replication
role:slave
master_host:192.168.243.134
master_port:6379
master_link_status:up
master_last_io_seconds_ago:7
master_sync_in_progress:0
slave_read_repl_offset:1664
slave_repl_offset:1664
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:f61d9a1ca2abdb2d9d4a234d723902e48e73319c
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:1664
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:1664

四.redis 主从复制问题

1.主从复制延迟(配置 slave-serve-stale-data或者使用monitor 监听主从节点的偏移量之差以及使用代码来实现监听)
2.主从配置要一致
3.规避全量复制(主节点重启后run_id 与从节点保存的主节点id 不一致,主节点可以用debug reload 重启避免生成新的run_id,可以通过info server 查看run_id)
4.规避复制风暴(大量从节点对同一主节点或者对同一台机器的多个主节点短时间内发起全量复制的过程),可以把主节点分配到不同服务器

代码监控偏移量(可以自己优化)
<?php
$redis = new Redis();
$redis->connect('192.168.243.134', '6379');
$connection = $redis->auth('123456');
if ($connection) {
    $data = $redis->info('replication'); //redis  info replication
    $masterOffset = $data['master_repl_offset']; //主节点的偏移量
    $salveOffset = $data['slave_repl_offset']; //从节点的偏移量
    if ($masterOffset - $salveOffset > 100) {   //延迟
       $redis->rawCommand('slaveof', 'no', 'one');
    }
} else {
    throw new \Exception("连接失败");
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值