Redis主从部署

Redis主从部署

原理介绍

Redis主从复制(Master-Slave Replication)是一种数据同步机制,允许从服务器(Slave)精确复制主服务器(Master)的数据。工作原理如下:

  1. 同步初始化

    • 当Slave启动或连接到Master时,会发送SYNC命令

    • Master执行BGSAVE生成RDB快照文件,同时缓存所有新写入命令

    • RDB文件生成完成后发送给Slave,Slave载入RDB

    • Master再将缓存的写命令发送给Slave执行

  2. 增量同步

    • Redis 2.8+支持PSYNC命令,支持部分重同步

    • Master和Slave维护一个复制偏移量(replication offset)

    • 如果Slave断开后重连,只需同步断开期间的数据

  3. 命令传播

    • 初始化同步完成后,Master每执行一个写命令就将其发送给Slave

优点

  1. 数据冗余:实现数据热备份,提高数据安全性

  2. 读写分离:Master写,Slave读,提高服务器负载能力

  3. 高可用基础:是哨兵和集群实现的基础

  4. 故障恢复:当Master出现问题时,可以快速切换到Slave

缺点

  1. 数据一致性问题:由于异步复制,主从数据可能存在延迟

  2. 写操作瓶颈:所有写操作仍在Master,无法解决写压力问题

  3. 故障切换复杂:原生主从模式不具备自动故障转移能力

  4. 全量同步开销大:首次同步或长时间断开后,全量同步消耗大量资源

  5. 存储能力受限:单机存储容量受限于Master内存

1、测试环境

硬件环境:N100 x86主机 Proxmox系统
软件环境:Ubuntu 22.04.3 LTS
软件版本:redis-7.4.0.tar.gz
主机环境:  
		192.168.0.150 redis-master
		192.168.0.151 redis-node1
		192.168.0.152 redis-node2

2、部署操作

2.1、主机IP及主机名调整

#配置静态IP
vi /etc/netplan/00-installer-config.yaml 
#添加以下内容,静态IP根据个人需求调整
network:
  version: 2
  renderer: networkd
  ethernets:
    ens18:
      addresses: [192.168.0.150/24]   # 静态 IP 和子网掩码
      dhcp4: false                    # 关闭 DHCP
      routes:
        - to: default                 # 默认路由
          via: 192.168.0.1           # 网关地址
      nameservers:
        addresses: [192.168.0.1, 114.114.114.114]  # DNS 服务器
#生效配置
netplan apply     
           
#mast节点:192.168.0.150 k8smaster
hostnamectl set-hostname redis-master
#node节点:192.168.0.151
hostnamectl set-hostname redis-node1
#node节点:192.168.0.152
hostnamectl set-hostname redis-node2

2.2、调整hosts及时间同步

#添加host配置
cat >> /etc/hosts << EOF
192.168.0.150 redis-master
192.168.0.151 redis-node1
192.168.0.152 redis-node2
EOF

#node节点主机如果是使用master主机克隆时,注意调整/etc/hosts中127.0.1.1配置,克隆主机默认为原始master节点配置

#调整系统时区配置
timedatectl set-timezone Asia/Shanghai

#安装时间同步工具chrony
apt install chrony -y

#添加时间同步源/etc/chrony/chrony.conf
echo "server time1.aliyun.com iburst" >> /etc/chrony/chrony.conf


#启动服务
systemctl start chrony
systemctl enable chrony

#检查运行状态
chronyc sources -v

2.3、下载软件包并解压编译

#更新软件包,安装编译依赖
apt update
apt install build-essential tcl -y

#下载软件包,并编译安装
cd /opt
#redis官网:https://redis.io/,如果使用的是非x86架构CPU,可能需要自行编译
wget https://download.redis.io/releases/redis-7.4.0.tar.gz
tar -zxf redis-7.4.0.tar.gz
cd redis-7.4.0

#编译,未指定安装目录默认安装到/usr/local/bin/目录下,如果需要指定目录,需要添加参数配置
make && make install
#指定目录安装,youpath替换为安装目录,you_install_path替换为父父目录
mkdir -p /you_install_path/redis/
make && make PREFIX=/you_install_path/redis/ install

#检查安装版本
redis-server -v
Redis server v=7.4.0 sha=00000000:1 malloc=jemalloc-5.3.0 bits=64 build=5f5ca04f39aa8d40

#创建配置文件目录
mkdir /etc/redis/
cp /opt/redis-7.4.0/redis.conf /etc/redis/

2.4、主节点配置

#192.168.0.150主机
vi /etc/redis/redis.conf

#修改以下配置,允许Redis监听所有网络接口,以便从节点能够连接。
bind 127.0.0.1 -::1
#修改为
bind 0.0.0.0

#修改以下配置,关闭保护模式
protected-mode yes
#修改为
protected-mode no

#密码配置,建议加上,去掉requirepass配置前的#
requirepass your_master_password

#持久化配置(可选)
appendonly yes
save 900 1

2.5、从节点配置

#192.168.0.151、192.168.0.152主机
vi /etc/redis/redis.conf

#配置主节点IP:port,添加以下配置
#从节点同步主节点配置
slaveof 192.168.0.150 6379

#密码配置
masterauth 123456

#修改以下配置,允许Redis监听所有网络接口,以便从节点能够连接。
bind 127.0.0.1 -::1
#修改为
bind 0.0.0.0

#修改以下配置,关闭保护模式
protected-mode yes
#修改为
protected-mode no

#密码配置,建议加上,去掉requirepass配置前的#
requirepass your_master_password

#持久化配置(可选)
appendonly yes
save 900 1

2.6、测试

服务启动

#主节点启动
/usr/local/bin/redis-server /etc/redis/redis.conf
#从节点启动
/usr/local/bin/redis-server /etc/redis/redis.conf

执行info replication,检查redis-master主节点

#主节点检查
root@orangepi5:~# redis-cli -h192.168.0.150 -p6379 
Unrecognized option or bad number of args for: '-h192.168.0.150'
root@orangepi5:~# redis-cli -h 192.168.0.150 -p 6379  
192.168.0.150:6379> auth 123456
OK
 
192.168.0.150:6379> INFO replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.0.151,port=6379,state=online,offset=210,lag=0
slave1:ip=192.168.0.152,port=6379,state=online,offset=210,lag=1
master_failover_state:no-failover
master_replid:7576868da40100fff107e4bc80fa83a4b83b689a
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:210
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:210

执行info replication检查从节点redis-node1,redis-node2检查同理

root@orangepi5:~# redis-cli -h 192.168.0.151 -p 6379  
?

192.168.0.151:6379> info replication
# Replication
role:slave
master_host:192.168.0.150
master_port:6379
master_link_status:up
master_last_io_seconds_ago:10
master_sync_in_progress:0
slave_read_repl_offset:336
slave_repl_offset:336
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:7576868da40100fff107e4bc80fa83a4b83b689a
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:336
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:336
192.168.0.151:6379> 

数据同步测试

#redis-master节点
root@orangepi5:~# redis-cli -h 192.168.0.150 -p 6379 
192.168.0.150:6379> auth 123456
OK
192.168.0.150:6379> set test 123
OK
192.168.0.150:6379> get test
"123"

#redis-node1节点
root@orangepi5:~# redis-cli -h 192.168.0.151 -p 6379  
192.168.0.151:6379> get test
"123"

#redis-node2节点
root@orangepi5:~# redis-cli -h 192.168.0.152 -p 6379   
192.168.0.152:6379> get test
"123"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值