手把手教你搭建Redis主从,从编译到安装,主机,docker搭建主从复制

本文搭建是基于Linux平台

下载Redis源码,make编译源码

Redis官网下载,本文是基于6.2.6版本

  • 如果下载的是源码包,自行上传到Linux对应目录下(自定义,没有强制要求必须放在哪里)
  • 命令下载编译
$ wget https://download.redis.io/releases/redis-6.2.6.tar.gz
$ tar xzf redis-6.2.6.tar.gz
$ cd redis-6.2.6
$ make

在make之前,如果没有make命令,需要先安装make命令,关于编译涉及到的报错自行百度解决

make完成后,在src目录下会生成redis编译后的相关文件,如 dump.rdb redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-sentinel redis-server

新建redis目录,进入redis目录,新建bin目录,将以上编译后得到可执行文件复制到bin目录下,新建conf目录,将redis.conf,sentinel.conf拷贝到conf目录下
目录结构如下:

[root@b3158edc85f5 redis]# tree
|-- bin
|   |-- dump.rdb
|   |-- nohup.out
|   |-- redis-benchmark
|   |-- redis-check-aof
|   |-- redis-check-rdb
|   |-- redis-cli
|   |-- redis-sentinel
|   |-- redis-server
|-- conf
    |-- redis.conf
    |-- sentinel.conf

主机上配置主从

  • 进入到conf目录下,拷贝redis.conf 一份并命名为redis6379.conf
  • 编辑redis6379.conf,修改端口号6379,密码:123456,主节点认证密码:123456,关键配置如下:
port 6379
requirepass 123456
masterauth 123456

** 这里要解析一下,如果requirepass 选项配置了密码,则必须要配置masterauth 选项指定密码,否则,主从复制会失败,这是因为主配置了密码,从如果想复制,必须要认证后,才能复制成功 **

  • 复制redis6379.conf 两份,分别命名为redis6380.conf,redis6381.conf,并分别改端口号为6380,6381
  • 启动redis服务
nohup ./redis-server ../conf/redis6381.conf & 

后台启动,这样就不会堵塞当前会话了,如果开启了多个会话,可以不用后台启动

  • 配置主从复制
    我们以6379作为主,6380,6381这两个作为从,分别登录进入6380,6381,执行命令
slaveof 127.0.0.1 6379 

这样,就完成了主从复制的配置了。

  • 如何查看主从复制是否成功?
    登录到从节点,执行:
127.0.0.1:6381> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6379
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_read_repl_offset:2766
slave_repl_offset:2766
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:45f5300352736f1f69e6d30301f1383e09cc49f0
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:2766
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:155
repl_backlog_histlen:2612

可以看到master_link_status的值是up,说明主从配置已经成功,切换到主节点,执行相同的命令

127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=127.0.0.1,port=6380,state=online,offset=224,lag=0
slave1:ip=127.0.0.1,port=6381,state=online,offset=224,lag=0
master_failover_state:no-failover
master_replid:45f5300352736f1f69e6d30301f1383e09cc49f0
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:224
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:224

可以看到6379有两个从节点
到此,我们的主从配置已经完成

注意,上述配置是运行时配置,没有被持久化,重启后需要重新配置才能生效,如果要持久化配置,redis服务启动时就能建立主从复制,必须要将主从复制的配置写在redis配置文件中,配置代码如下:

replicaof 127.0.0.1 6379

docker 配置主从

如何安装docker,docker的使用命令再这里就不说了,需要学习的自行百度

拉去redis镜像

docker pull redis

查看镜像:

# docker images
REPOSITORY            TAG       IMAGE ID       CREATED        SIZE
redis                 latest    0e403e3816e8   5 days ago     113MB

启动三台redis,分别是redis6379,redis6380,redis6381

# docker run --name redis6379 -p 6379:6379 redis:latest --requirepass "123456" --masterauth "123456"

# docker run --name redis6380 -p 6380:6379 redis:latest --requirepass "123456" --masterauth "123456"

# docker run --name redis6381 -p 6381:6379 redis:latest --requirepass "123456" --masterauth "123456"

注意,启动的时候,指定了redis的密码参数和主认证密码,这样启动完成后就可以直接配置主从了

查看主docker的IP地址

docker inspect redis6379 | grep IPAddress
"SecondaryIPAddresses": null,
    "IPAddress": "172.17.0.2",
         "IPAddress": "172.17.0.2",

配置主从复制

分别登录进入到redis6380,redis6381,执行

127.0.0.1:6379> SLAVEOF 172.17.0.2 6379
OK
127.0.0.1:6379>
127.0.0.1:6379>
# 查看是否配置成功,master_link_status:up 表示已经成功配置好
127.0.0.1:6379> info replication
# Replication
role:slave
master_host:172.17.0.2
master_port:6379
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_read_repl_offset:14
slave_repl_offset:14
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:b6be054579af7c56ed0fe6dfa451420934a8a474
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

在主机查看主从状态

# docker exec -it redis6379 redis-cli -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>
127.0.0.1:6379>
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=172.17.0.3,port=6379,state=online,offset=868,lag=0
slave1:ip=172.17.0.4,port=6379,state=online,offset=868,lag=0
master_failover_state:no-failover
master_replid:b6be054579af7c56ed0fe6dfa451420934a8a474
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:868
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:868

看到选项:connected_slaves:2,表示有两个从节点已经链上

验证主从复制

在从节点上写入数据,发现写入失败,这很正常,从节点一般不允许写入,否则会造成数据不同步。
在主节点上写入数据,在从节点上查看,发现都能马上同步过来

至此,redis主从复制已经完成配置

猜你喜欢

转载自blog.csdn.net/huangxuanheng/article/details/123378580