准备对项目进行架构改造,首当其冲的当然是数据存储进行改变。以前是单一数据库,如果该库崩溃了,导致整个系统崩溃,其重要性不言而喻。
看到PostgreSQL在地理数据处理上的优越性,考虑再三,打算搭建主从数据库,实现主从同步、读写分离。因为电脑配置原因,新建两个虚拟机有点耗资源,因此准备用docker部署两个装有PostgreSQL的容器,向外提供数据服务,并参考公瑾大神的这篇文章PostgreSQL流复制热备实现主备流复制热备。(PS:有条件数据库还是不要放在容器内,操作自由度不高,也或许我对docker理解不够深入。)
1.在CentOS安装docker并配置阿里云加速,参考CentOS7 安装docker 配置阿里云加速
在此纠正一下该篇文章中出现的错误,桥接模式可以直接和宿主机、外网互通,其不需要设置虚拟网卡地址。
2.下载PostgreSQL镜像
service docker start //启动docker
docker search postgres //搜索仓库中postgres
docker pull postgres:9.6 //拉取postgres,并指定标签号9.6
docker images //查看本地镜像
在参考多个文章后,配置无果,发现有这样一个镜像docker-postgres-replication,能够快速实现主备流复制。
docker pull nebirhos/postgres-replication:lastest
docker images
3.使用镜像,制作容器
首先,启动主数据库容器
docker run -p 5432:5432 --name postgres-master nebirhos/postgres-replication
其次,启动备数据库容器
docker run -p 5433:5432 --name=postgres-slave --link postgres-master \
-e POSTGRES_MASTER_SERVICE_HOST=postgres-master \
-e REPLICATION_ROLE=slave \
-t nebirhos/postgres-replication
4.测试
连接主库,创建数据库,新建表,插入一条数据记录
如果想关闭或重启数据库,只能通过关闭容器。参考How to restart postgres server inside docker container
5.常用的docker命令
docker start CONTAINERNAME //根据容器名启动容器
docker stop CONTAINERNAME //根据容器名停止容器
docker rmi CONTAINERNAME //根据容器名删除容器
docker volume rm $(docker volume ls -q -f dangling=true) //删除所有volume卷