文章目录
环境搭建
我们搭建的结构:
- 一个主节点
- 两个从节点
- 三个哨兵节点
按理说,这六个节点是要要六个不同的服务器主机上。此时我们只有一个服务器,我们就在一个服务器上,来完成这里的环境搭建
- 在实际工作中,把上述节点放在一个服务器上,是没有意义的(一个服务器挂了,就全军覆没了)
由于这些节点,还挺多的,相互之间容易大家,依赖的端口号/配置文件/数据文件... 如果我们直接部署,就需要小心翼翼的去避免这些冲突
- 类似于前面配置主从结构的方式
- 这样比较繁琐,也会和在不同主机上部署,存在较大差异(很多冲突都不用考虑)
docker
是什么
虚拟机:通过软件,在电脑上模拟出另外的一些硬件(构造了另一个虚拟的电脑)
- 虚拟机这样的软件,就可以使用一个计算机,来模拟出多个电脑的情况
- 但是虚拟机有一个很大的问题,比较吃配置,这个事情对于低配的云服务器来说,压力山大
相比之下,使用 docker
就可以有效的解决上述问题。
docker
可以认为是一个"轻量级"的虚拟机,起到了虚拟机这样的隔离环境的效果,但是又没有吃很多的硬件资源。即使是配置比较拉胯的服务器,也能构造出好几个这样的虚拟的环境
- 这也是后端开发这块非常流行的组件
准备工作
https://www.runoob.com/docker/macos-docker-install.html
-
先安装
docker
和docker-compose
检查是否安装docker --version
docker-compose --version
-
停止之前的
redis
服务器
避免之后出现一些冲突
- 使用
docker
获取到redis
的镜像
docker
中的"镜像"和"容器"类似于"可执行程序"和"进程"的关系
- 容器可以看做一个轻量级的虚拟机。
- 镜像,可以自己构建,也可以直接拿别人已经构建好的
docker hub(github)
包含了很多其他大佬们构建好的镜像,也提供了redis
官方提供的镜像,可以直接拖下来使用
获取 redis
镜像的命令:
docker pull redis:5.0.9
git pull
使用git
从中央仓库拉取代码docker pull
使用docker
从中央仓库(默认就是从docker hub
)来拉取镜像redis:5.0.9
是镜像的版本
拉取到的镜像,里面包含一个精简的 Linux
操作系统,并且上面会安装 redis
。只要直接基于这个镜像创建一个容器跑起来,此时,redis
服务器就搭建好了
- 此时就搭建好了
docker
的镜像,大小为92.9MB
随后我们就基于这个 docker
镜像,搭建 redis
哨兵环境
网络问题
如果遇到网络问题,就要换一下国内的镜像仓库,加速
{
"registry-mirrors": [
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com",
"https://docker.mirrors.ustc.edu.cn",
"https://dockerhub.azk8s.cn",
"https://mirror.ccs.tencentyun.com",
"https://registry.cn-hangzhou.aliyuncs.com",
"https://docker.mirrors.ustc.edu.cn",
"https://docker.1panel.live",
"https://atomhub.openatom.cn/",
"https://hub.uuuadc.top",
"https://docker.anyhub.us.kg",
"https://dockerhub.jobcher.com",
"https://dockerhub.icu",
"https://docker.ckyl.me",
"https://docker.awsl9527.cn"
]
}
容器编排
此处我们直接用 docker-compose
来进行容器编排
- 此处我们涉及到的多个
redis server
,也有多个redis
哨兵节点,每一个redis server
或者每一个redis
哨兵节点都是作为一个单独的容器了 - 此处就有 6 个容器了,如果一个一个用
docker
手动创建容器,就比较麻烦,相比来说是用"容器编排"的方式就比较合理
容器编排就是,通过一个配置文件,把具体要创建哪些容器,每个容器运行的各种参数描述清楚。后续通过一个简单的命令,就能够批量的启动/停止这些容器了
- 使用
yml
这样的格式来作为配置文件
文件格式
经典的配置文件格式:xml
xml
<student>
<id>1</id>
<name>张三</name>
<age>18</age>
</student>
<>
成对出现的,就叫做标签html
中的标签,都是标准规定的xml
里面的标签都是自定义的- 写起来特别啰嗦,并且也比较占用空间
后来又有了 JSON
json
{
id: 1,
name: '张三',
age: 18
}
yml
格式和 json
有一些相似之处,yml
虽然没有 json
这么火,但是还是挺广泛的
yml
student:
id: 1
name: "张三"
age: 18
- 它和
json
都是这种比较直观的键值对结构,json
是使用{}
来表示层级结构,yml
则是使用缩进来表示
yml
相对于 json
的优势:对于格式要求更严格,可读性会更好,更有助于人来理解