手把手教你搭建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主从复制已经完成配置