Linux下搭建Redis主从复制

最近忙着准备面试,就把之前用到的Redis的主从配置和哨兵模式配置都重新复习一遍。这篇文章先复习配置Redis的主从,下一篇复习Redis的哨兵模式。
Redis的主从复制配置起来比较简单,主从配置有以下特点:

  1. 一个Master可以有多个slave主机,支持链式复制

  2. Master以非阻塞方式同步数据至slave主机

在一台节点上配置文件中定义自己是谁的从节点,并且启用主节点密码认证即可。下面使用3台主机配置一主两从的结构,redis使用一主多从的结构时还可以实现像mysql MHA那样的复制集群,当master节点宕机后,可以在两个slave节点中根据优先级选举新的master。

  • 安装Redis
    本次采用源码编译的方式安装Redis,执行相关的命令如下:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21

    #下载redis安装包
    cd /usr/local/src
    wget http://download.redis.io/releases/redis-5.0.3.tar.gz

    #解压安装包
    tar -zxvf redis-5.0.3.tar.gz

    #拷贝到/usr/local/redis目录
    mkdir -p /usr/local/redis

    #编译安装
    make & make install

    #redis安装完成后,redis-server、redis-cli等程序默认安装在/usr/local/redis/src目录中,我们需要将它安装到系统搜索路径,并安装为系统服务,方便在任何终端访问,并且开机自动启动。

    cd /usr/local/src/redis/utils
    ./install_server.sh

    #重复上述安装操作,安装redis到6380和6381端口
    ./install_server.sh
    环境准备好之后,具体情况如下:

三个Redis实例分别安装以下IP地址和端口,角色分别如下

192.168.1.103 6379 master
192.168.1.103 6380 slave
192.168.1.103 6381 slave

  • 配置Master节点
    1
    2
    3
    4
    bind 0.0.0.0     #绑定地址 (绑定在127.0.0.1,只有本机客户端可以访问,其他服务器无法访问,绑定在0.0.0.0上,如果没有端口限制,那么其他服务器则可以连接该服务器的该端口)
    requirepass 123456 #启用密码认证

    #默认master节点修改这两项就可以了,也可以进行其他设置
  • 配置Slave节点
1
2
3
4
5
6
7
bind 0.0.0.0    
#定义master信息
slaveof 192.168.1.103 6379
#认证
masterauth 123456

#从节点上配置这三项页就可以,其他参数可以根据情况选择调整即可。

修改后记得重启服务,可以登录到master节点查看信息。

  • 首先使用client list命令查看
1
2
3
4
5
6
7
8
9
10
[root@192 bin]# redis-cli -p 6379 -a 123456
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6379> client list
id=3 addr=127.0.0.1:44273 fd=7 name= age=2456 idle=1 flags=S db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=replconf
id=4 addr=127.0.0.1:45342 fd=8 name= age=2453 idle=1 flags=S db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=replconf
id=6 addr=127.0.0.1:49306 fd=9 name= age=6 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=26 qbuf-free=32742 obl=0 oll=0 omem=0 events=r cmd=client
127.0.0.1:6379>

cmd=client 表示是master
cmd=replconf 表示是slave
  • 首先使用info replication 命令查看
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    127.0.0.1:6379> info replication
    # Replication
    role:master #自己的角色
    connected_slaves:2 #从节点数量
    slave0:ip=127.0.0.1,port=6380,state=online,offset=3738,lag=0 #从节点信息
    slave1:ip=127.0.0.1,port=6381,state=online,offset=3738,lag=1 #从节点信息
    master_replid:061bcdd36e3b8d9a0c38d29dc762e908445baad6
    master_replid2:0000000000000000000000000000000000000000
    master_repl_offset:3738
    second_repl_offset:-1
    repl_backlog_active:1
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:1
    repl_backlog_histlen:3738
    127.0.0.1:6379>
    可以看到主从差不多已经配置好了,接下来可以进行简单的验证复制,在master节点设置一个key,看两个slave节点复制情况。

Master节点创建一个key:

1
2
3
4
5
[root@192 bin]# redis-cli -p 6379 -a 123456
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6379> set jobNo 123456
OK
127.0.0.1:6379>

从slave 6380 :

1
2
3
4
5
[root@192 bin]# redis-cli -p 6380 -a 123456
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6380> get jobNo
"123456"
127.0.0.1:6380>

从slave 6381:

1
2
3
4
5
[root@192 bin]# redis-cli -p 6381 -a 123456
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6381> get jobNo
"123456"
127.0.0.1:6381>

可以看出在master上设置的key已经同步到了两个slave上。

slave节点定义也可以通过指令设置,设置后立即生效,并且会被保存至配置文件中,指令配置方式如下:

#配置slave节点

1
2
redis-cli> SLAVEOF <MASTER_IP> <MASTER_PORT>
redis-cli> CONFIG SET masterauth <PASSWORD>

redis主从复制相关配置
下面是redis主从复制场景的一些可调参数,需要根据实际环境调整

  • slave-serve-stale-data yes : 是否可以把不新鲜的数据服务与客户端
  • slave-read-only yes : 从节点只读,启用slaveof定义后才生效
  • repl-diskless-sync no :是否同时向多个从节点同时发数据
  • repl-diskless-sync-delay 5 :发送的延迟时间
  • repl-ping-slave-period 10 探测从节点状态
  • repl-timeout 60 探测节点超时时间
  • repl-disable-tcp-nodelay no : 启用nodelay
  • repl-backlog-size 1mb
  • slave-priority 100 : 从节点优先级,复制集群中,主节点故障时,sentinel应用场景中的主节点选举时使用的优先级;数字越小优先级越高,但0表示不参与选举;
  • min-slaves-to-write 3:主节点仅允许其能够通信的从节点数量大于等于此处的值时接受写操作;
  • min-slaves-max-lag 10:从节点延迟时长超出此处指定的时长时,主节点会拒绝写入操作;

查看原文

  • 作者: Sam
  • 发布时间: 2019-02-27 23:30:02
  • 最后更新: 2019-12-09 23:03:26
  • 文章链接: https://ydstudios.gitee.io/post/c1608171.html
  • 版权声明: 本网所有文章除特别声明外, 禁止未经授权转载,违者依法追究相关法律责任!