日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

使用 Docker 搭建 PostgreSQL 12 主从环境

發布時間:2023/12/4 数据库 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用 Docker 搭建 PostgreSQL 12 主从环境 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

環境準備:一臺安裝了Docker的Linux服務器。

為了簡化演示環境,這里只用一臺服務器來演示,通過不同端口來區分。

01


創建一個docker bridge 網路用于測試

docker network create --subnet=172.18.0.0/24 dockernetwork docker network ls

設置了網段為 172.18.0.0,規劃主從庫IP端口如下:

主庫 172.18.0.101:5432

從庫 172.18.0.102:5433

02


拉取 postgres:12 鏡像

docker pull postgres:12

03


創建數據庫數據目錄

mkdir -p /data/psql/master mkdir -p /data/psql/slave mkdir -p /data/psql/repl chown 999:999 /data/psql/master chown 999:999 /data/psql/slave chown 999:999 /data/psql/repl

master:主庫數據

slave:從庫數據

repl:臨時使用復制數據

04


運行master容器

docker run -d \ --network dockernetwork --ip 172.18.0.101 -p 5432:5432 \ --name pg12master -h pg12master \ -e LANG="C.UTF-8" \ -e 'TZ=Asia/Shanghai' \ -e "POSTGRES_DB=postgres" \ -e "POSTGRES_USER=postgres" \ -e "POSTGRES_PASSWORD=postgres" \ -v /data/psql/master:/var/lib/postgresql/data \ postgres:12

05


查看容器運行情況

docker ps -a -f network=dockernetwork --format "table {{.Names}}\t{{.Image}}\t{{.RunningFor}}\t{{.Status}}\t{{.Networks}}\t{{.Ports}}"

06


創建主從流復制專用賬號

用客戶端工具連接數據庫后執行以下語句,這里我使用了pgAdmin4。

CREATE ROLE repuser WITHLOGINREPLICATIONCONNECTION LIMIT 5PASSWORD 'Q1w2E#';

pgAdmin 也可以用 docker 來啟動。

docker pull dpage/pgadmin4 mkdir -p /data/pgadmin4 chown 5050:5050 /data/pgadmin4docker run -d --restart=unless-stopped \ --network dockernetwork --ip 172.18.0.105 \ --name pgadmin4 -h pgadmin4 \ -e TZ=Asia/Shanghai \ -e 'PGADMIN_DEFAULT_EMAIL=admin@pgadmin4.com' \ -e 'PGADMIN_DEFAULT_PASSWORD=pgadmin4' \ -p 5430:80 \ -v /data/pgadmin4:/var/lib/pgadmin \ dpage/pgadmin4

通過 http://ip:5430/即可訪問pgadmin4,賬號密碼如腳本所示。具體使用也很簡單,自己摸索下就懂了。

07


修改配置文件 /data/psql/master/pg_hba.conf

cd /data/psql/master nano pg_hba.conf

在文末添加如下一行,其中 repuser 即我們新建的主從專用賬號,172.18.0.102/32 為從庫 ip。

host replication repuser 172.18.0.102/32 md5

08


修改配置文件 /data/psql/master/postgresql.conf

nano postgresql.conf

查找文件中以下幾個參數,并調整如下:

archive_mode = on archive_command = '/bin/date' max_wal_senders = 10 wal_keep_segments = 16 synchronous_standby_names = '*'

09


重啟主庫使設置生效

#使用 pg_ctl stop 安全停止數據庫 docker exec -it -u postgres pg12master pg_ctl stop docker start pg12master

10


創建從庫容器

docker run -d \ --network dockernetwork --ip 172.18.0.102 -p 5433:5432 \ --name pg12slave -h pg12slave \ -e LANG="C.UTF-8" \ -e 'TZ=Asia/Shanghai' \ -e "POSTGRES_DB=postgres" \ -e "POSTGRES_USER=postgres" \ -e "POSTGRES_PASSWORD=postgres" \ -v /data/psql/slave:/var/lib/postgresql/data \ -v /data/psql/repl:/var/lib/postgresql/repl \ postgres:12

這里我們把/data/psql/repl掛載到容器中,再看下容器列表:

docker ps -a -f network=dockernetwork --format "table {{.Names}}\t{{.Image}}\t{{.RunningFor}}\t{{.Status}}\t{{.Networks}}\t{{.Ports}}"

主從庫容器都已經跑起來了,當然了,這個從庫還沒配置。

11


進入從庫容器,同步初始主庫數據到 repl 目錄

docker exec -it -u postgres pg12slave /bin/bash pg_basebackup -R -D /var/lib/postgresql/repl -Fp -Xs -v -P -h 172.18.0.101 -p 5432 -U repuser

根據提示輸入repuser的密碼Q1w2E#后,會在宿主機的 /data/psql/repl 目錄生成備份。

備份成功,退出容器。

exit

12


重建 slave 容器

通過上一步的初始備份,現在可以使用 /data/psql/repl 里的數據重建 slave容器了。首先刪除slave目錄,然后將repl目錄改為slave,這個目錄就是從庫的數據目錄了。

docker stop pg12slave && docker rm pg12slave cd /data/psql/ rm -rf slave mv repl slave cd /data/psql/slave# postgresql.auto.conf 將含有復制所需信息 cat postgresql.auto.conf

檢查 postgresql.auto.conf 文件里是否包含如下內容:

primary_conninfo = 'user=repuser password=''Q1w2E#'' host=172.18.0.101 port=5432 sslmode=prefer sslcompression=0 gssencmode=prefer krbsrvname=postgres target_session_attrs=any'

正確無誤后,重建容器。

# 恢復重建從庫容器 docker run -d \ --network dockernetwork --ip 172.18.0.102 -p 5433:5432 \ --name pg12slave -h pg12slave \ -e LANG="C.UTF-8" \ -e 'TZ=Asia/Shanghai' \ -e "POSTGRES_DB=postgres" \ -e "POSTGRES_USER=postgres" \ -e "POSTGRES_PASSWORD=postgres" \ -v /data/psql/slave:/var/lib/postgresql/data \ postgres:12

這里不再掛載repl了,slave容器運行起來后,主從創建完成。

13


查看主從復制信息

# 驗證主從 ps -aux | grep postgres # 主庫有 walsender 進程如下 postgres: walsender repuser # 從庫有 walreceiver 進程如下 postgres: walreceiver

連接主庫,通過sql可以查詢復制信息:

select * from pg_stat_replication;

14


總結

以上是在單機環境下的演示,在實際生產環境中,只要調整相應的賬號密碼ip端口即可實現類似效果,其他配置信息具體根據自己需要再行調整。

dotnet core 下連接PostgreSQL的庫主要是Npgsql,Entity Framework Core 下可以使用包Npgsql.EntityFrameworkCore.PostgreSQL。相較于MySQL,PostgreSQL對SQL標準的支持更完整,功能更強大。網上對這兩個數據庫的比較很多,這里就不多贅述了。

歡迎關注公眾號 "dotnet 新征程"

總結

以上是生活随笔為你收集整理的使用 Docker 搭建 PostgreSQL 12 主从环境的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。