一、主从复制的概念
- master可以拥有多个slave
- 多个slave可以连接一个master外,还可以连接到其它的slave
- 主从复制不会阻塞master,在同步数据时,master可以继续处理cliect请求
- 提供系统的伸绪性
其主要目的是为了实现一个读写分离的机制
二、主从复制的过程
1、slave与master建立连接,发送sync同步命令
2、master会开启一个后台进程,将数据库快照保存到文件中,同时master主进程会开始收集新的写命令并缓存
3、后台完成保存后,就将文件发送给slave4、slave将此数据文件保存到硬盘上
其官网文档地址如下:
http://redis.cn/topics/replication.html
三、主从复制的配置
第一步:在192.168.1.108这台服务器上下载redis 7.0版本的镜像
docker pull redis:7.0
第二步:根据下述地址找到其对应版本的配置文件redis.conf
http://download.redis.io/releases/
在这个文件的下述区域部分讲解了主从复制的一些注意事项,如下图所示:
第三步: 在/home目录下创建3个目录路径conf1、conf2、conf3
在/home/conf1路径下创建文件redis.conf,其内容的配置内容如下:
port 6381
在/home/conf2路径下创建文件redis.conf,其内容的配置内容如下(关键在于replicaof):
port 6382
replicaof 192.168.1.108 6381
在/home/conf3路径下创建文件redis.conf,其内容的配置内容如下:
port 6383
replicaof 192.168.1.108 6381
一般情况下,我们是不需要更改redis的任何配置就可以直接启动其服务,仅仅是在当前这种需求下才需要修改配置文件,配置文件中的内容仅仅是对默认配置的替换,其它的还是保持默认配置。
第四步: 使用下述命令启动redis的主节点
docker run -id -p 6381:6381 \
-v /home/redis/conf1:/usr/local/etc/redis \
--name redis_master redis:7.0 \
redis-server /usr/local/etc/redis/redis.conf
使用下述命令连接到redis客户端中,如果服务的默认端口号没有改变的话则不需要后面的-p参数:
redis-cli -p 6381
使用下述命令启动两个从节点:
docker run -id -p 6382:6382 \
-v /home/redis/conf2:/usr/local/etc/redis \
--name redis_slave1 redis:7.0 \
redis-server /usr/local/etc/redis/redis.conf
docker run -id -p 6383:6383 \
-v /home/redis/conf3:/usr/local/etc/redis \
--name redis_slave2 redis:7.0 \
redis-server /usr/local/etc/redis/redis.conf
第五步: 在主节点写入数据后,从节点也可以查询到相应的数据。
主节点可以进行读写操作,从节点只能进行读操作,如果进行写操作会报下述错误信息:
(error) READONLY You can't write against a read only replica
使用info命令可以查看redis服务的角色是主服务还是从服务: