zoukankan      html  css  js  c++  java
  • redis学习-主从复制

    前言

    redis主从复制可以实现读写分离,主角色支持读写,从角色只读。

    实现主从复制需要至少两个redis数据库,可以通过两种方案实现。

    1. 准备多个redis.config配置文件,配置不同的端口,通过使用不同的配置文件启动reids实现一机多库。
    2. 准备多台服务器,分别安装redis。

    本次采用第二种方式,工作中基本也都是第二种方式,第一种方式的集群没有意义。

    准备工作

    • 使用虚拟机创建3台服务器(这里使用配置为centos7.3-x64),使用物理主机或者云服务器均可。

    • 三台主机IP分别指定为

      • 192.168.204.121(主)
      • 192.168.204.122(从1)
      • 192.168.204.123(从2)
    • 分别为三台服务器安装redis(也可以通过scp命令将主服务器安装好的文件夹复制到从服务器,scp /.../redis-5.0.5 ip:/.../)

    从服务器配置

    配置主从复制只需要修改从服务器配置文件即可,主服务器无需配置。

    1. 修改从服务器配置文件redis.config
    [root@vm123 bin]# vim ../etc/redis.conf
    // 追加以下配置 slaveof masterIP masterPort 保存并退出
    slaveof 192.168.204.121 6379
    // 启动从服务
    [root@vm123 bin]# ./redis-server ../etc/redis.conf 
    45496:C 07 Aug 2020 00:03:15.162 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
    45496:C 07 Aug 2020 00:03:15.162 # Redis version=5.0.5, bits=64, commit=00000000, modified=0, pid=45496, just started
    45496:C 07 Aug 2020 00:03:15.162 # Configuration loaded
    // 启动客户端,使用info查看角色,出现如下信息
    [root@vm123 bin]# ./redis-cli -h 192.168.204.123
    # Replication
    role:slave	// 角色:从
    master_host:192.168.204.121	// 主IP
    master_port:6379	// 主端口
    
    1. 重复1中操作对192.168.204.122服务器做同样配置。
    2. 启动主服务查看角色信息
    # Replication
    role:master	// 角色:主
    connected_slaves:2	// 从连接数:2
    slave0:ip=192.168.204.122,port=6379,state=online,offset=1929,lag=1	// 从0信息
    slave1:ip=192.168.204.123,port=6379,state=online,offset=1929,lag=0	// 从1信息
    

    验证主从复制

    1. 初始化为空
    // 主为空
    192.168.204.121:6379> keys *
    (empty list or set)
    // 从1为空
    192.168.204.122:6379> keys *
    (empty list or set)
    // 从2为空
    192.168.204.123:6379> keys *
    (empty list or set)
    
    1. 主写,从读
    // 主
    192.168.204.121:6379> set name zmc
    OK
    192.168.204.121:6379> get name
    "zmc"
    
    // 从1
    192.168.204.122:6379> get name
    "zmc"
    
    // 从2
    192.168.204.123:6379> get name
    "zmc"
    
    1. 主删,从读
    // 主
    192.168.204.121:6379> del name
    (integer) 1
    192.168.204.121:6379> get name
    (nil)
    // 从1
    192.168.204.122:6379> get name
    (nil)
    // 从2
    192.168.204.123:6379> get name
    (nil)
    
    1. 从写失败
    // 从1
    192.168.204.122:6379> set age 18
    (error) READONLY You can't write against a read only replica.
    
    // 从2
    192.168.204.123:6379> set age 18
    (error) READONLY You can't write against a read only replica.
    

    Q&A

    redis主从复制的配置很简单,抛开redis本身的问题,服务器之间通讯可能会发生以下问题,提供解决思路。

    Q. 从服务器配置后,主服务器显示从服务器连接数为0.

    A. 1. 查看从服务器指定IP和端口是否正确。

    1. 判断服务器是否在同一个网络里,使用ping和telnet测试ip和端口是否连通。

    Q. 服务器间能ping通,且telnet其他端口(比如22)能通,而redis端口(默认6379)连接拒绝。

    A. 1. 查看防火墙是否放开6379端口。

    1. 修改redis.config配置文件,将bind 127.0.0.1修改为IP后重启redis服务,再次尝试。

    Q. 修改bind后客户端无法连接

    A. 客户端默认使用127.0.0.1:6379,修改bind后启动客户端时使用 -h IP参数指定修改后的IP。

  • 相关阅读:
    对于js中原型的理解
    换行问题
    居中方法
    浮动清除
    js基础内容 原型与实例
    uniapp 吸顶 小demo
    uniapp 锚点滚动报错(h.push is not a function)
    uni-app 页面滚动到指定位置
    过滤后端返回的html文本标签
    uniapp 上拉加载
  • 原文地址:https://www.cnblogs.com/bcomll/p/13449971.html
Copyright © 2011-2022 走看看