準備對項目進行架構(gòu)改造窍侧,首當(dāng)其沖的當(dāng)然是數(shù)據(jù)存儲進行改變。以前是單一數(shù)據(jù)庫乙濒,如果該庫崩潰了毁嗦,導(dǎo)致整個系統(tǒng)崩潰,其重要性不言而喻娘纷。
看到PostgreSQL在地理數(shù)據(jù)處理上的優(yōu)越性嫁审,考慮再三,打算搭建主從數(shù)據(jù)庫赖晶,實現(xiàn)主從同步律适、讀寫分離。因為電腦配置原因遏插,新建兩個虛擬機有點耗資源捂贿,因此準備用docker部署兩個裝有PostgreSQL的容器,向外提供數(shù)據(jù)服務(wù)胳嘲,并參考公瑾大神的這篇文章PostgreSQL流復(fù)制熱備實現(xiàn)主備流復(fù)制熱備厂僧。(PS:有條件數(shù)據(jù)庫還是不要放在容器內(nèi),操作自由度不高了牛,也或許我對docker理解不夠深入颜屠。)
1.在CentOS安裝docker并配置阿里云加速辰妙,參考CentOS7 安裝docker 配置阿里云加速
在此糾正一下該篇文章中出現(xiàn)的錯誤,橋接模式可以直接和宿主機甫窟、外網(wǎng)互通密浑,其不需要設(shè)置虛擬網(wǎng)卡地址。
2.下載PostgreSQL鏡像
service docker start //啟動docker
docker search postgres //搜索倉庫中postgres
docker pull postgres:9.6 //拉取postgres粗井,并指定標(biāo)簽號9.6
docker images //查看本地鏡像
在參考多個文章后尔破,配置無果,發(fā)現(xiàn)有這樣一個鏡像docker-postgres-replication浇衬,能夠快速實現(xiàn)主備流復(fù)制懒构。
docker pull nebirhos/postgres-replication:lastest
docker images
3.使用鏡像,制作容器
首先径玖,啟動主數(shù)據(jù)庫容器
docker run -p 5432:5432 --name postgres-master nebirhos/postgres-replication
其次痴脾,啟動備數(shù)據(jù)庫容器
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.測試
連接主庫,創(chuàng)建數(shù)據(jù)庫梳星,新建表赞赖,插入一條數(shù)據(jù)記錄
如果想關(guān)閉或重啟數(shù)據(jù)庫,只能通過關(guān)閉容器冤灾。參考How to restart postgres server inside docker container
5.常用的docker命令
docker start CONTAINERNAME //根據(jù)容器名啟動容器
docker stop CONTAINERNAME //根據(jù)容器名停止容器
docker rmi CONTAINERNAME //根據(jù)容器名刪除容器
docker volume rm $(docker volume ls -q -f dangling=true) //刪除所有volume卷