共计 4132 个字符,预计需要花费 11 分钟才能阅读完成。
一、背景
最近在做零信赖平安网关,须要应用 Redis
作为认证缓存服务器,因为网关服务器散布在多个集群,每次都跨机房认证不太实现;所以须要应用 Redis
主从同步,将过程记录下来,心愿能够给须要的同学一点参考。
二、操作步骤
- 装置 Docker
- 主服务配置
- 从服务配置
- 验证同步成果
三、装置 Docker
本篇文章次要是问了记录主从配置的过程,因而我采纳最简略的 docker 形式来搭建 Redis 服务,装置 docker
的命令如下所示
curl -sSL https://get.daocloud.io/docker | sh
命令执行实现之后,能够看到如下图所示界面
在上图中能够看到 docker 的一些相干信息,咱们要确认 docker 装置是否胜利还能够应用 docker info
命令进行查看,执行命令如下所示
docker info
命令执行之后,返回信息如下图所示
在上图中能够看到 docker 的版本信息为20.10.3
, 这是目前的最新版本,曾经确认装置胜利无误。
四、主服务配置
接下来我须要应用 docker 装置 Redis 服务,我在实际过程中发现间接应用 Redis 镜像有些异样,于是应用 centos 镜像,再在容器里装置 Redis,运行容器的命令如下所示
docker run -d -it -p 16379:6379 --name redis_master centos:7
命令执行结束之后再进入该容器,进入容器的命令如下所示
docker exec -it redis_master bash
命令执行结束后,返回的信息如下图所示
在上图中能够看到曾经胜利的进入到了容器外面,接下来我须要在容器里装置 Redis, 装置 Redis 的命令如下所示
yum install -y epel-release && yum install -y redis
命令执行结束之后,返回的信息如下图所示
从上图中能够看到,Redis 曾经装置实现,接下来须要新建一个 Redis 的主库配置文件,执行命令如下所示
vi ~/master.conf
配置文件如下所示,将下列配置文件复制并粘贴到 vi 编辑窗口当中。
#bind 0.0.0.0
protected-mode yes
port 6379
tcp-backlog 511
unixsocket /tmp/redis_auth.sock
unixsocketperm 777
timeout 0
tcp-keepalive 300
daemonize yes
supervised auto
pidfile /var/run/redis_auth.pid
loglevel debug
logfile /tmp/redis_auth.log
databases 16
save ""
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir /var/lib/redis
requirepass 123123123
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
appendonly yes
appendfilename "funfe.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 512mb
aof-load-truncated yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
hz 10
aof-rewrite-incremental-fsync yes
在 vi 编辑窗口粘贴后,如下图所示
粘贴实现并查看无误之后,应用 :wq!
命令进行保留,接着就能够启动 Redis 程序,启动的命令如下所示
redis-server `/redis.conf
在上方的启动命令中须要指定配置文件门路,如下图所示
在上图中能够看到 Redis 服务曾经启动实现。
五、从服务配置
接下来我须要再次启动一个 Redis 从库服务器,运行容器的命令如下所示
docker run -d -it -p 26379:6379 --name redis_slave centos:7
在上方的命令中,因为在同一台主机,为了不和主库端口产生抵触,我将主机端口26379
, 启动实现之后就能够进入从库容器,运行的命令如下所示
docker exec -it redis_slave bash
命令执行结束后,同样须要新建一个 Redis 的配置文件,运行的命令如下所示
vi ~/redis.conf
在配置文件中,须要退出从库的配置代码,配置样例如下所示
bind 127.0.0.1
protected-mode yes
port 6379
tcp-backlog 511
unixsocket /tmp/redis_auth.sock
unixsocketperm 777
timeout 0
tcp-keepalive 300
daemonize yes
supervised auto
pidfile /var/run/redis_6379.pid
loglevel notice
logfile /tmp/redis.log
databases 16
save ""
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir /var/lib/redis
slaveof 172.23.193.148 16379
masterauth 123123123
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
appendonly yes
appendfilename "funfe.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 512mb
aof-load-truncated yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
hz 10
aof-rewrite-incremental-fsync yes
将配置样例复制进来之后,窗口如下所示
粘贴实现并查看无误之后,应用 :wq!
命令进行保留,接着就能够启动 Redis 程序,启动的命令如下所示
接着装置 Redis 服务,装置命令如下所示
yum install -y epel-release && yum install -y redis
命令执行结束之后,返回的信息如下图所示
在上图中能够看到从库的 Redis 也装置实现了,接下来应用 redis-server
命令启动从库服务器,命令如下图所示
redis-server redis.conf
命令执行结束之后,返回的信息如下图所示
在上图中能够看到 Redis 曾经启动实现,接下来就能够进行验证成果了
六、后果验证
验证办法次要是在主库中设置数据,察看从库是否也会同步更新;
6.1 初步验证
不过这种操作有点麻烦,咱们最好是先检查一下从库的启动日志,查看启动日志的命令如下所示
cat /tmp/redis.log
命令执行结束之后,会返回 Redis 的日志信息,如下图所示
在上图中的日志信息能够看到从库曾经胜利将主库信息复制到本地来了。
6.2 同步查看
尽管日志中提醒胜利了,不过是否胜利主从同步还是要以实际效果为准,这里我回到主服务器的终端窗口,而后进入 redis 的命令控制台,进入控制台的命令如下所示
redis-cli -a 123123123
命令执行之后,就能够进行 redis 命令操作了,这里我设置一个 test
为123123
的键值对,设置命令如下所示
set test 123123
命令执行结束之后,返回的信息如下图所示
在上图中能够看到 Redis 曾经提醒设置键值对胜利了,接下来我持续回到从库的终端窗口,而后进入 Redis 的控制台,执行命令如下所示
redis-cli -a 123123123
命令执行结束之后,就能够通过 keys
命令查看以后从库的键值对,命令如下所示
keys *
命令执行结束之后,返回的信息如下图所示
在上图中能够看到 test
这个数据曾经胜利复制过去了。
作者:汤青松
微信:songboy8888
日期:2021-04-11
应用 Docker 进行 Redis 主从复制实际