html
雖然centos自帶版本9.2也能夠用,可是最近的幾回升級支持了更多更新的內容,好比,PostgreSQL有一個MySQL沒法比擬的優點,那就是PostGIS,PostGIS能夠完美支持空間數據存儲和空間分析;從PostgreSQL9.3起就內置了JSON數據類型,而9.4又開始支持JSONB,這標誌着PostgreSQL實際上已是一個關係型數據庫和NoSQL數據庫的結合體了。linux
雖然postgresql是一個關係型數據庫,可是近幾回更新PostgreSQL的NoSQL性能有益到甚至超過了MongoDB。咱們能夠從下圖數據庫Rank榜上觀察到PostgreSQL排在第四位,和MongoDB的位置不相上下。可見PostgreSQL在開發人員的喜好度上,可信賴度上和社區文檔的查詢上都是不錯的。git
雲服務器系統: CentOS 7.2 x86_64架構程序員
地址: https://www.postgresql.org/download/linux/redhat/github
這裏我選擇PostgreSQL10,CentOS 7平臺, x86_64架構,就會出現相應的yum源了。sql
在centos系統中執行如下命令:數據庫
yum install https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-7-x86_64/pgdg-centos10-10-2.noarch.rpm
先查看PostgreSQL源vim
咱們須要安裝的是這三個個。postgresql10-devel.x86_64, postgresql10-contrib.x86_64,postgresql10-server.x86_64centos
yum install postgresql10-client postgresql10-server postgresql10-contrib postgresql10-devel
PostgreSQL安裝目錄是/usr/pgsql-10,而PostgreSQL的數據目錄是/var/lib/pgsql/版本號(這裏爲10)服務器
在這裏,若是在裝系統開始分配var空間足夠大則能夠繼續,若是分配var空間不夠,咱們須要更改數據目錄,在這裏,咱們假設var空間足夠大。直接開始初始化。
/usr/pgsql-10/bin/postgresql-10-setup initdb
顯示這個表明初始化成功
sudo systemctl start postgresql-10
sudo systemctl enable postgresql-10.service
postgresql在安裝時默認添加用戶postgres
輸入
su - postgres
psql
進入數據庫
命令界面長這樣
咱們來設置密碼:
退出: \q
列出全部庫 \l
列出全部用戶 \du
列出庫下全部表 \d
默認狀況下postgresql是不用密碼不支持遠程登陸的。咱們須要修改配置文件
vi /var/lib/pgsql/10/data/pg_hba.conf
本來長成這樣
咱們須要改爲
保存退出
關於退出vim的問題,這裏還有一個小趣聞:
StackOverflow驕傲的宣佈: 已經幫助187萬不知如何從VIM退出的程序員
在這裏我引用上面的高贊回答,幫助你們脫離這個187萬羣體。
vi /var/lib/pgsql/10/data/postgresql.conf
往下拉咱們會看到
須要改爲
在vim中搜索想要查找的文字,能夠用 /***, n 表示下翻頁,N表示上翻頁
重啓postgresql
systemctl restart postgresql-10
postgresql在安裝時默認添加用戶postgres
輸入
su - postgres
psql
進入數據庫
此時已經能夠進行驗證密碼
遠程鏈接數據庫
咱們使用Navicat Premium 12來驗證鏈接
此時咱們能夠看到相關數據了
postgres在9.0以後引入了主從的流複製機制,所謂流複製,就是從服務器經過tcp流從主服務器中同步相應的數據。這樣當主服務器數據丟失時從服務器中仍有備份。
與基於文件日誌傳送相比,流複製容許保持從服務器更新。 從服務器鏈接主服務器,其產生的流WAL記錄到從服務器, 而不須要等待主服務器寫完WAL文件。
PostgreSQL流複製默認是異步的。在主服務器上提交事務和從服務器上變化可見之間有一個小的延遲,這個延遲遠小於基於文件日誌傳送,一般1秒能完成。若是主服務器忽然崩潰,可能會有少許數據丟失。
同步複製必須等主服務器和從服務器都寫完WAL後才能提交事務。這樣在必定程度上會增長事務的響應時間。
配置同步複製僅須要一個額外的配置步驟: synchronous_standby_names必須設置爲一個非空值。synchronous_commit也必須設置爲on。
這裏部署的是異步的流複製。
主從服務器所在節點的系統、環境等最好一致。PostgreSQL版本也最好一致,不然可能會有問題。
先假定在192.168.20.93和192.168.20.94均安裝PostgreSQL,具體狀況按照實際IP地址。
具體安裝部署步驟見:上述步驟
主服務器爲192.168.20.93
1.首先須要建立一個數據庫用戶進行主從同步。建立用戶replica,並賦予登陸和複製的權限。
postgres# CREATE ROLE replica login replication encrypted password 'replica';
2.修改pg_hba.conf,容許replica用戶來同步。
在pg_hba.conf裏增長兩行:
host all all 192.168.20.94/32 trust #容許94鏈接到主服務器 host replication replica 192.168.20.94/32 md5 #容許94使用replica用戶來複制
這樣,就設置了replica這個用戶能夠從192.168.20.93進行流複製請求。
注: 第二個字段必需要填replication
4.修改postgresql.conf
listen_addresses = '*' # 監聽全部IP archive_mode = on # 容許歸檔 archive_command = 'cp %p /opt/pgsql/pg_archive/%f' # 用該命令來歸檔logfile segment wal_level = hot_standby max_wal_senders = 32 # 這個設置了能夠最多有幾個流複製鏈接,差很少有幾個從,就設置幾個wal_keep_segments = 256 # 設置流複製保留的最多的xlog數目 wal_sender_timeout = 60s # 設置流複製主機發送數據的超時時間 max_connections = 100 # 這個設置要注意下,從庫的max_connections必需要大於主庫的
配置完兩個文件後重啓服務器。
systemctl restart postgresql-10
3.測試94可否鏈接93數據庫。在94上運行以下命令:
psql -h 192.168.20.93 -U postgres
看看是否能進入數據庫。若能夠,則正常。
1.從主節點拷貝數據到從節點
su - postgres rm -rf /var/lib/pgsql/10/data/* #先將data目錄下的數據都清空 pg_basebackup -h 192.168.20.93 -U replica -X stream -P # 從93拷貝數據到94(基礎備份)
2.配置recovery.conf
複製/usr/pgsql-9.4/share/recovery.conf.sample 到 /opt/pgsql/data/recovery.conf
cp /usr/pgsql-10/share/recovery.conf.sample /usr/pgsql-10/share/recovery.conf
修改recovery.conf
standby_mode = on # 說明該節點是從服務器 primary_conninfo = 'host=192.168.20.93 port=5432 user=replica password=replica' # 主服務器的信息以及鏈接的用戶 recovery_target_timeline = 'latest'
3.配置postgresql.conf
wal_level = hot_standby max_connections = 1000 # 通常查多於寫的應用從庫的最大鏈接數要比較大 hot_standby = on # 說明這臺機器不只僅是用於數據歸檔,也用於數據查詢 max_standby_streaming_delay = 30s # 數據流備份的最大延遲時間 wal_receiver_status_interval = 10s # 多久向主報告一次從的狀態,固然從每次數據複製都會向主報告狀態,這裏只是設置最長的間隔時間 hot_standby_feedback = on # 若是有錯誤的數據複製,是否向主進行反饋
配置完後重啓從服務器
systemctl restart postgresql-10
在主節點上執行:
select client_addr,sync_state from pg_stat_replication;
結果以下:
postgres=# select client_addr,sync_state from pg_stat_replication; client_addr | sync_state ---------------+------------ 192.168.20.94 | async (1 行記錄)
說明94是從服務器,在接收流,並且是異步流複製。
此外,還能夠分別在主、從節點上運行 ps aux | grep postgres 來查看進程:
主服務器(93)上:
postgres 262270 0.0 0.0 337844 2832 ? Ss 10:14 0:00 postgres: wal sender process replica 192.168.20.94(13059) streaming 0/A002A88
能夠看到有一個 wal sender 進程。
從服務器(94)上:
postgres 569868 0.0 0.0 384604 2960 ? Ss 10:14 0:02 postgres: wal receiver process streaming 0/A002B60
能夠看到有一個 wal receiver 進程。
至此,PostgreSQL主從流複製安裝部署完成。
在主服務器上插入數據或刪除數據,在從服務器上能看到相應的變化。從服務器上只能查詢,不能插入或刪除。
版權聲明: 做者:穆書偉
github出處:https://github.com/sanshengshui
我的博客出處: