docker redis 主从复制
graph TB
D[redis-master6000]--> |主从|E[redis-slave6001]
D[redis-master6000]--> |主从|F[redis-slave6002]
- 1、参见 一、docker redis安装,完成一个redis的安装
- 2、复制安装3个docker redis应用
- 3、配置成主从模式
1、相关概念
-
集群的概念
所谓的集群,就是通过添加服务器的数量,提供相同的服务,从而让服务器达到一个稳定、高效的状态。 -
使用redis集群的必要性
问题:我们已经部署好了redis,并且能启动一个redis,实现数据的读写,为什么还要学习redis集群?
答:(1)单个redis存在不稳定性。当redis服务宕机了,就没有可用的服务了。
(2)单个redis的读写能力是有限的。
总结:redis集群是为了强化redis的读写能力。
-
如何学习redis集群
说明:(1)redis集群中,每一个redis称之为一个节点。 (2)redis集群中,有两种类型的节点:主节点(master)、从节点(slave)。 (3)redis集群,是基于redis主从复制实现。
所以,学习redis集群,就是从学习redis主从复制模型开始的。
-
redis主从复制
- 概念
主从复制模型中,有多个redis节点。其中,有且仅有一个为主节点Master。从节点Slave可以有多个。只要网络连接正常,Master会一直将自己的数据更新同步给Slaves,保持主从同步。
- 特点
(1)==主节点Master可读、可写.==
(2)====从节点Slave只读==。(read-only)==
因此,主从模型可以提高读的能力,在一定程度上缓解了写的能力。因为能写仍然只有Master节点一个,可以将读的操作全部移交到从节点上,变相提高了写能力。
2、主从复制配置
Master/Slave | Docker IP | Docker 端口 | 外网 IP | 外网端口 | 密码 |
---|---|---|---|---|---|
master | 172.17.0.2 | 6379 | 10.211.55.4 | 6000 | 123456 |
salve1 | 172.17.0.3 | 6379 | 10.211.55.4 | 6001 | 123456 |
salve2 | 172.17.0.4 | 6379 | 10.211.55.4 | 6002 | 123456 |
- 在salve1 和 slave2 中的
redis.conf
文件中分别增加如下配置:
#配置master(注意此处是docker内部的ip,如果不是在一个服务器中,需要配置成映射的外网IP)
#同时需要注意防火墙
#注意bind参数
# replicaof masert的ip master的端口
replicaof 172.17.0.2 6379
#配置连接master的密码
masterauth 123456
- 目录结构如下
# cd redis
# tree
.
├── 6000
│ ├── data
│ │ ├── appendonly.aof
│ │ ├── dump.rdb
│ │ └── redis-6000-dump.rdb
│ ├── log
│ └── redis.conf
├── 6001
│ ├── data
│ │ ├── appendonly.aof
│ │ ├── dump.rdb
│ │ └── redis-6000-dump.rdb
│ ├── log
│ └── redis.conf
├── 6002
│ ├── data
│ │ ├── appendonly.aof
│ │ ├── dump.rdb
│ │ └── redis-6000-dump.rdb
│ ├── log
│ └── redis.conf
└── run.sh
-
run.sh
文件内容
#!/bin/sh
name=redis6000
port=6000
datapath=6000
echo '开始关闭'${name}
docker stop ${name}
docker rm ${name} -f
echo '>>>>Master启动'${name}‘端口是:’${port}
docker run -d \
--restart always --privileged=true \
-p ${port}:6379 \
-v /opt/docker/redis/${datapath}/data:/data \
-v /opt/docker/redis/${datapath}/redis.conf:/etc/redis/redis.conf \
--name ${name} docker.io/redis:5.0.5 redis-server /etc/redis/redis.conf
echo '>>>>开始启动第一个salve redis'
name1=redis6001
port1=6001
datapath1=6001
echo '开始关闭'${name1}
docker stop ${name1}
docker rm ${name1} -f
echo '>>>>Slave1启动'${name1}‘端口是:’${port1}
docker run -d \
--restart always --privileged=true \
-p ${port1}:6379 \
-v /opt/docker/redis/${datapath1}/data:/data \
-v /opt/docker/redis/${datapath1}/redis.conf:/etc/redis/redis.conf \
--name ${name1} docker.io/redis:5.0.5 redis-server /etc/redis/redis.conf
echo '>>>>开始启动第二个salve redis'
name2=redis6002
port2=6002
datapath2=6002
echo '开始关闭'${name2}
docker stop ${name2}
docker rm ${name2} -f
echo '>>>>Slave2启动'${name2}‘端口是:’${port2}
docker run -d \
--restart always --privileged=true \
-p ${port2}:6379 \
-v /opt/docker/redis/${datapath2}/data:/data \
-v /opt/docker/redis/${datapath2}/redis.conf:/etc/redis/redis.conf \
--name ${name2} docker.io/redis:5.0.5 redis-server /etc/redis/redis.conf
- docker 容器启动如下
[root@localhost redis]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7c8ae02038df docker.io/redis:5.0.5 "docker-entrypoint..." 24 minutes ago Up 24 minutes 0.0.0.0:6002->6379/tcp redis6002
c06478a88160 docker.io/redis:5.0.5 "docker-entrypoint..." 24 minutes ago Up 24 minutes 0.0.0.0:6001->6379/tcp redis6001
cdc085b4149f docker.io/redis:5.0.5 "docker-entrypoint..." 24 minutes ago Up 24 minutes 0.0.0.0:6000->6379/tcp redis6000
网友评论