docker配置Redis主从复制原理及操作

一、前言

        要配置Redis主从复制,我默认是了解过Redis的持久化功能的,也就是RDB和AOF,只需要简单了解过即可。持久化的一个作用就是可以定期将内存中的数据备份到硬盘,在系统发生故障的时候,也可以通过持久化文件回复数据,

二、关于主从复制

1、什么是主从复制

        主从复制是一种分布式系统数据同步技术,其中主服务器负责处理所有写操作并将变更同步到一个或多个从服务器。从服务器接收这些变更并复制主服务器的数据,通常用于读取操作,实现了读写分离,增加了服务器的并发量还能在主服务器故障还能故障转移。

2、为什么要主从复制

        数据恢复是需要时间的,那么这个期间是无法服务新请求,再比如这台服务器的硬盘出故障,数据就可能丢失,要解决这两个问题就需要将数据备份到其他服务器上,这样其中一台服务器出了问题,可以让另一台服务器顶替上,继续服务。

三、配置主从复制

接下来就是在linux上的docker用单机的三个端口来模拟三个服务器,配置一主二从,主服务器用端口(6379),从节点(6380、6381)。以及部分操作的讲解。

一、开启docker服务,拉取Redis6.0.8镜像

systemctl start docker
docker pull redis:6.0.8

二、创建准备挂载的目录以及添加配置文件

        这里用到一个容器数据卷的知识,其大致就是docker中运行的容器有可能会出故障或者被人不小心删除,如果容器删除了后,之前在容器中的数据都丢失,docker的容器数据卷就是为了防止这个情况:docker运行在linux系统上,容器数据卷就是将容器内的一些目录内的数据能够同步到linux中的实际目录中,这样当某一个容器被删除后,只要linux中的挂载目录还在,重新拉取容器启动后,其内部的数据就会自动同步过来。 运行容器的时候只要加上-v aa/a.txt:bb/b.txt   就会把容器外的a.txt和容器内的b.txt绑定了。

2.1、主节点设计(6379)

        用linux的命令,递归的创建挂载目录,data用来存储redis中的键值对数据,conf用来存储redis的配置文件。

mkdir -p /home/docker/redis6379/conf
mkdir -p /home/docker/redis6379/data 

        在配置目录中创建配置文件并在内部写配置

vi /home/docker/redis6379/conf/redis.conf

        vi打开一个文本,没有会自动创建,打开之后摁下 i 进入插入模式。此时可以编辑文本,把下面这部分内容复制进去

# 设置服务端口 默认6379
port 6379
# 关闭保护模式,允许远程连接
protected-mode no
# 该redis远程连接用到的密码
requirepass 123456

        复制好了以后摁下 ESC 进入命令模式,之后再摁下 ':' 、'w'、'q'、'!' 四个,他们意思是输入命令将文本内容强制保存后退出文本编辑模式。:wq!

2.2、从节点(6380)

同样的操作不多讲了

mkdir -p /home/docker/redis6380/conf
mkdir -p /home/docker/redis6380/data 

vi /home/docker/redis6380/conf/redis.conf

        注意下面的这个从节点的配置文件添加了其他内容,其中使用到的ip地址和端口要用你实际用的地址和端口进行替换。我当前用到的linux虚拟机的ip地址是192.168.80.154,主节点用到的端口是6379,所以才这样写,如果是多个服务器的话,ip地址要看情况改变的。看自己的ip地址可以通过命令 ifconfig

# 服务端口 默认6379
port 6380
# 关闭保护模式,允许远程连接
protected-mode no
# 该redis远程连接用到的密码
requirepass 123456
# 主节点密码
masterauth 123456

# 配置主从复制 从节点默认只读 
replicaof 192.168.80.154 6379
slave-read-only yes

#redis 5.0之前的版本配置主从复制用下面这个
# slaveof 192.168.80.154 6379

2.3、从节点(6381)

无需多言,与6380一样

mkdir -p /home/docker/redis6381/conf
mkdir -p /home/docker/redis6381/data 

vi /home/docker/redis6381/conf/redis.conf
# 服务端口 默认6379
port 6381
# 关闭保护模式,允许远程连接
protected-mode no
# 该redis远程连接用到的密码
requirepass 123456
# 主节点密码
masterauth 123456

# 配置主从复制 从节点默认只读 
replicaof 192.168.80.154 6379
slave-read-only yes

#redis 5.0之前的版本配置主从复制用下面这个
# slaveof 192.168.80.154 6379

三、启动三个redis容器

三个容器启动在各自的端口,同时将各自的容器数据卷成功挂载

3.1、主节点(6379)
docker run -d \
-p 6379:6379 \
--name redis6379 \
--restart always \
--privileged=true \
-v /home/docker/redis6379/conf/redis.conf:/etc/redis/redis.conf \
-v /home/docker/redis6379/data:/data \
redis:6.0.8 \
redis-server /etc/redis/redis.conf
3.2、从节点(6380)
docker run -d \
-p 6380:6380 \
--name redis6380 \
--restart always \
--privileged=true \
-v /home/docker/redis6380/conf/redis.conf:/etc/redis/redis.conf \
-v /home/docker/redis6380/data:/data \
redis:6.0.8 \
redis-server /etc/redis/redis.conf
3.2、从节点(6381)
docker run -d \
-p 6381:6381 \
--name redis6381 \
--restart always \
--privileged=true \
-v /home/docker/redis6381/conf/redis.conf:/etc/redis/redis.conf \
-v /home/docker/redis6381/data:/data \
redis:6.0.8 \
redis-server /etc/redis/redis.conf

docker run -d redis:6.0.8 redis-server /etc/redis/redis.conf:用docker在后台运行容器reids版本号是6.0.8,redis-server意思是告诉docker要用进行过i昂中的redis服务器程序,最后一个redis.conf是传递给redis-server命令的参数,也就是加载配置启动

-p 6379:6379:意思是指定宿主机端口和容器端口的映射关系

--name redis6379:意思是给容器起个名字

--restart=aways:容器会跟着docker重启而重启

--privleged=true:模拟了 Docker 容器在宿主机上的 root 用户权限。

-v 后面的就是前面说的容器数据卷功能,将宿主机的某个目录文件和容器内的目录文件绑定。

四、查看各节点的主从信息

5.1、主节点

docker exec: 用于一个已经运行的容器内执行命令

-it: 表示交互式运行,(容器在后台运行),并分配一个伪终端

redis6379: 表示执行命令的容器的名称

redis-cli:在redis的命令行中用于和redis服务器进行交互

-p 6379:表示连接容器后,进入端口号6379

-a 123456:跟的是连接redis服务器时用到的密码为123456

docker exec -it redis6379 redis-cli -p 6379 -a 123456

查看节点信息

127.0.0.1:6379> info replication

5.2、从节点

docker exec -it redis6380 redis-cli -p 6380 -a 123456

127.0.0.1:6380> info replication

从节点就会有角色为slave。

五、测试主从复制

在主节点插入数据后,从节点能够get到,说明成功,

127.0.0.1:6379> set name stave

从节点查看数据

127.0.0.1:6380> get name

在从节点写数据测试就会报错,因为我们设置的读写分离,让从节点只能够读数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值