Redis集群-主从复制

本文介绍了Redis在Ubuntu20.04系统的安装,包括下载、解压、安装gcc、编译、配置环境变量等步骤。还阐述了主从复制模式,包括其特点、原理,并详细说明了搭建过程,最后测试主节点宕机情况,指出若从节点能主动变为主节点可解决系统运行问题。

1.安装环境

  • Ubuntu20.04
  • Redis:7.0.5
  • Redis下载地址:https://github.com/redis/redis/archive/7.0.5.tar.gz

2.安装步骤

  1. 复制压缩包到Ubuntu服务器,并解压缩

    tar -xzvf redis-7.0.5.tar.gz
    
  2. 安装gcc

    因为第一次执行make命令编译redis时报错了,所以需要先安装gcc环境

    # 安装gcc
    
    sudo apt-get install gcc
    
  3. 执行编译命令

    cd redis-7.0.5
    make
    
  4. 执行安装命令

    安装过程可能会报pkg-config: not found

    # 解决pkg-config: not found错误
    sudo apt-get install pkg-config
    # 将redis安装到/usr/local/redis
    make install PREFIX=/usr/local/redis
    
  5. 添加环境变量

    编辑/etc/profile文件

    vi /etc/profile
    

    最后一行添加环境变量

    export PATH=$PATH:/usr/local/redis/bin
    

    使系统变量生效

    source /etc/profile
    
  6. 添加配置文件

    cd /usr/local/redis
    mkdir conf
    

    将解压redis压缩包后文件夹里的redis.conf拷贝到conf文件夹下

  7. 配置远程主机连接redis

    # 默认配置:bind 127.0.0.1,只允许host主机访问redis服务
    bind 192.168.110.97
    # 默认配置:protected-mode yes。保护模式开启后,不允许其他host的客户端连接。
    # By default protected mode is enabled. You should disable it only if
    # you are sure you want clients from other hosts to connect to Redis
    # even if no authentication is configured.
    protected-mode no
    # 配置redis启动时已后台方式运行
    daemonize yes
    

3.启动主节点

启动主节点

redis-server /usr/local/redis/conf/redis.conf

查看主从复制关系

# Replication
role:master
connected_slaves:0
master_failover_state:no-failover
master_replid:d4bf4a9f7a62576d53ca4ab37a661b0e0a8e15b6
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0

4.主从复制

4.1 什么是主从模式

​ 主从复制也就是主从模式,当用户向master节点写入数据时,redis同步机制将数据同步到slave节点。配置主从复制后,master节点提供读写服务,slave节点只提供读服务,如果在slave节点上执行写命令,会提示报错READONLY You can't write against a read only replica.

主从模式特点:

  • 同一个master可以有多个slave
  • master以非阻塞方式将数据同步到slave,不会影响master的读写请求
  • 主从复制可以做到读写分离
  • 主从复制可以避免redis单点故障,一台slave故障后,其余的节点还可以继续提供服务,如果master节点故障,会导致整个服务不可用。

4.2 主从复制原理

​ 当启动一个slave节点后,会向master节点发送一个sync命令,请求同步连接。不管slave与master是第一次连接还是重新连接,master节点都会启动一个后台进程,将数据快照保存到文件中,同时master节点会将记录所有修改数据的命令并将其缓存在数据文件中。

​ 后台进程完成缓存操作后,master将数据文件发送给slave,slave将数据文件保存到硬盘上,然后将其加载到内存中,接着master就会把所有修改数据的命令发送给slave。

4.3 主从复制搭建

  1. 创建从节点slave1和slave2的配置文件redis-6380.conf,redis-6381.conf

    redis-6380.conf

    port 6380
    bind 192.168.110.97
    protected-mode no
    daemonize yes
    # replicaof <masterip> <masterport>
    replicaof 192.168.110.97 6379
    

    redis-6381.conf

    port 6381
    bind 192.168.110.97
    protected-mode no
    daemonize yes
    # replicaof <masterip> <masterport>
    replicaof 192.168.110.97 6379
    
  2. 启动slave1和slave2

    redis-server /usr/local/redis/conf/redis-6380.conf
    redis-server /usr/local/redis/conf/redis-6381.conf
    

    查看主从复制关系

    # Replication
    role:master
    connected_slaves:2
    slave0:ip=192.168.110.97,port=6380,state=online,offset=14,lag=1
    slave1:ip=192.168.110.97,port=6381,state=wait_bgsave,offset=0,lag=0
    master_failover_state:no-failover
    master_replid:78358da5a228467f0de1278fea4685ad81b21216
    master_replid2:0000000000000000000000000000000000000000
    master_repl_offset:14
    second_repl_offset:-1
    repl_backlog_active:1
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:1
    repl_backlog_histlen:14
    
  3. 测试主节点宕机

    # Replication
    role:slave
    master_host:192.168.110.97
    master_port:6379
    # 主节点连接状态为down
    master_link_status:down
    master_last_io_seconds_ago:-1
    master_sync_in_progress:0
    slave_read_repl_offset:17094
    slave_repl_offset:17094
    master_link_down_since_seconds:62
    slave_priority:100
    slave_read_only:1
    replica_announced:1
    connected_slaves:0
    master_failover_state:no-failover
    master_replid:78358da5a228467f0de1278fea4685ad81b21216
    master_replid2:0000000000000000000000000000000000000000
    master_repl_offset:17094
    second_repl_offset:-1
    repl_backlog_active:1
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:14687
    repl_backlog_histlen:2408
    

    主节点宕机后,slave节点的角色没有发生任何变化,master_link_status的值变为down,意味着slave节点只能提供读服务,无法承担起master节点的写任务,因此整个redis系统将无法正常运行。

    如果master节点宕机后,slave节点能够主动变成master节点,那么上述问题就解决啦。

### 配置和实施Redis集群中的主从复制Redis集群环境中设置主从复制涉及多个方面,包括但不限于初始化配置、命令执行以及理解其工作机制。 对于希望重新连接至原始主服务器的情况,在从属服务器上登录到Redis之后应当输入`SLAVEOF your_redis_master_ip 6379`来指定要同步数据的目标主机地址与端口号[^1]。这一步骤使得当前实例成为另一台机器上的特定数据库服务的副本,从而实现了基本层面的一对一关系建立。 当涉及到更复杂的场景——比如需要调整已经存在的集群结构时,则可以利用专门设计用于管理此类任务的工具;例如通过运行带有相应参数选项的`redis-cli --cluster reshard 192.168.111.101:7000`指令来进行重分布操作[^2]。此过程允许管理员动态改变各个节点间所存储键值的数量及其分配情况,间接支持了跨多台设备间的负载均衡需求满足。 关于主从复制的概念定义,它指的是将一台Redis服务器的数据复制到其他Redis服务器的过程。其中前者被命名为Master(即主节点),而后者则被称为Slave(即从节点)。这种类型的复制是单向性的,意味着只有来自主节点的信息会被传递给它的跟随者们,并且通常情况下master主要负责处理写入请求,slave侧重于响应读取查询[^3]。 为了确保整个系统的稳定性和可靠性,建议定期监控各成员之间的状态变化并及时作出必要的干预措施。此外,还可以考虑采用哨兵模式或者Cluster架构进一步增强容错能力和服务可用性水平。 ```bash # 进入Redis CLI环境并与目标实例交互 $ redis-cli -h your_redis_master_ip -p 6379 # 设置为某个具体IP对应的master的服务作为自己的上级 > SLAVEOF your_redis_master_ip 6379 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值