成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

postgreSQL主從復(fù)制

一、簡介

postgres在9.0之后引入了主從的流復(fù)制機(jī)制,所謂流復(fù)制,就是從服務(wù)器通過tcp流從主服務(wù)器中同步相應(yīng)的數(shù)據(jù)。這樣當(dāng)主服務(wù)器數(shù)據(jù)丟失時從服務(wù)器中仍有備份。
與基于文件日志傳送相比,流復(fù)制允許保持從服務(wù)器更新。 從服務(wù)器連接主服務(wù)器,其產(chǎn)生的流WAL記錄到從服務(wù)器, 而不需要等待主服務(wù)器寫完WAL文件。
PostgreSQL流復(fù)制默認(rèn)是異步的。在主服務(wù)器上提交事務(wù)和從服務(wù)器上變化可見之間有一個小的延遲,這個延遲遠(yuǎn)小于基于文件日志傳送,通常1秒能完成。如果主服務(wù)器突然崩潰,可能會有少量數(shù)據(jù)丟失。
同步復(fù)制必須等主服務(wù)器和從服務(wù)器都寫完WAL后才能提交事務(wù)。這樣在一定程度上會增加事務(wù)的響應(yīng)時間。
注意:本次實驗是基于docker完成的

我們提供的服務(wù)有:網(wǎng)站建設(shè)、成都做網(wǎng)站、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、三明ssl等。為上1000家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的三明網(wǎng)站制作公司

二、postgresql安裝

docker pull postgresql:9.4
docker images
REPOSITORY                                               TAG                 IMAGE ID            CREATED             SIZE
docker.io/postgres                                       9.4                 36726735dc3c        2 weeks ago         206 MB
docker run -it --name postgresql postgres:9.4 bash
su postgres
cd /usr/lib/postgresql/9.4/bin

存在/var/lib/postgresql/data目錄,初始化數(shù)據(jù)庫

./initdb -D /var/lib/postgresql/data
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.
The database cluster will be initialized with locale "en_US.utf8".
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".
Data page checksums are disabled.
fixing permissions on existing directory /var/lib/postgresql/data ... ok
creating subdirectories ... ok
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting default timezone ... Etc/UTC
selecting dynamic shared memory implementation ... posix
creating configuration files ... ok
creating template1 database in /var/lib/postgresql/data/base/1 ... ok
initializing pg_authid ... ok
initializing dependencies ... ok
creating system views ... ok
loading system objects' descriptions ... ok
creating collations ... ok
creating conversions ... ok
creating dictionaries ... ok
setting privileges on built-in objects ... ok
creating information schema ... ok
loading PL/pgSQL server-side language ... ok
vacuuming database template1 ... ok
copying template1 to template0 ... ok
copying template1 to postgres ... ok
syncing data to disk ... ok

WARNING: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the option -A, or
--auth-local and --auth-host, the next time you run initdb.

Success. You can now start the database server using:

        ./postgres -D /var/lib/postgresql/data
or
        ./pg_ctl -D /var/lib/postgresql/data -l logfile start

到這里pg數(shù)據(jù)庫就安裝完成了
開啟數(shù)據(jù)庫,如果不需要日志可以不用加logfile

./pg_ctl start -D /var/lib/postgresql/data

同樣啟動一個備數(shù)據(jù)庫

docker run -it --name postgresql2 postgres:9.4 bash

步驟與上面相同

三、主服務(wù)器的操作

主服務(wù)器為172.18.0.4
先創(chuàng)建一個新目錄,用來歸檔日志,我這里其實沒有歸檔日志,按需所求。

mkdir /opt/pgsql/pg_archive

1.首先需要創(chuàng)建一個數(shù)據(jù)庫用戶進(jìn)行主從同步。創(chuàng)建用戶replica,并賦予登錄和復(fù)制的權(quán)限。

postgres# CREATE ROLE replica login replication encrypted password 'replica'

2.修改pg_hba.conf,允許replica用戶來同步。
在pg_hba.conf里增加兩行:

host all all 172.18.0.5/32 trust #允許0.5連接到主服務(wù)器
host replication replica 172.18.0.5/32 md5 #允許0.5使用replica用戶來復(fù)制

這樣,就設(shè)置了replica這個用戶可以從172.18.0.4進(jìn)行流復(fù)制請求。
*注:第二個字段必須要填replication
4.修改postgresql.conf

listen_addresses = '*' # 監(jiān)聽所有IP
archive_mode = on # 允許歸檔
archive_command = 'cp %p /opt/pgsql/pg_archive/%f' # 用該命令來歸檔logfile segment,按需所求。
wal_level = hot_standby
max_wal_senders = 32 # 這個設(shè)置了可以最多有幾個流復(fù)制連接,差不多有幾個從,就設(shè)置幾個,設(shè)置稍大些較好。
wal_keep_segments = 256 # 設(shè)置流復(fù)制保留的最多的xlog數(shù)目,一個段為16MB,盡量設(shè)置大的值,防止主庫生成日志太快還沒來得及發(fā)送給hot_standy就被覆蓋。
wal_sender_timeout = 60s # 設(shè)置流復(fù)制主機(jī)發(fā)送數(shù)據(jù)的超時時間
max_connections = 100 # 這個設(shè)置要注意下,從庫的max_connections必須要大于主庫的

配置完兩個文件后重啟服務(wù)器。

pg_ctl stop -D /var/lib/postgresql/data
pg_ctl start -D /var/lib/postgresql/data

3.測試0.5能否連接0.4數(shù)據(jù)庫。在0.5上運行如下命令:

psql -h 172.18.0.4 -U postgres

看看是否能進(jìn)入數(shù)據(jù)庫。若可以,則正常。

四、從服務(wù)器的操作

1.從主節(jié)點拷貝數(shù)據(jù)到從節(jié)點

su - postgres
rm -rf /opt/pgsql/data/* #先將data目錄下的數(shù)據(jù)都清空
pg_basebackup -h 172.18.0.4 -U replica -D /var/lib/postgresql/data -X stream -P # 從0.4拷貝數(shù)據(jù)到0.5(基礎(chǔ)備份)
mkdir /opt/pgsql/pg_archive

2.配置recovery.conf
復(fù)制/usr/share/postgresql/9.4/recovery.conf.sample 到 /var/lib/postgresql/data/recovery.conf

cp /usr/share/postgresql/9.4/recovery.conf.sample /var/lib/postgresql/data/recovery.conf

修改recovery.conf

standby_mode = on # 說明該節(jié)點是從服務(wù)器
primary_conninfo = 'host=172.18.0.4 port=5432 user=replica password=replica' # 主服務(wù)器的信息以及連接的用戶
recovery_target_timeline = 'latest'

3.配置postgresql.conf

wal_level = hot_standby
max_connections = 1000 # 一般查多于寫的應(yīng)用從庫的最大連接數(shù)要比較大
hot_standby = on # 說明這臺機(jī)器不僅僅是用于數(shù)據(jù)歸檔,也用于數(shù)據(jù)查詢
max_standby_streaming_delay = 30s # 數(shù)據(jù)流備份的最大延遲時間
wal_receiver_status_interval = 10s # 多久向主報告一次從的狀態(tài),當(dāng)然從每次數(shù)據(jù)復(fù)制都會向主報告狀態(tài),這里只是設(shè)置最長的間隔時間
hot_standby_feedback = on # 如果有錯誤的數(shù)據(jù)復(fù)制,是否向主進(jìn)行反饋

配置完后重啟從服務(wù)器

pg_ctl stop -D /var/lib/postgresql/data
pg_ctl start -D /var/lib/postgresql/data

五、驗證是否部署成功

在主節(jié)點數(shù)據(jù)庫里執(zhí)行:

select client_addr,sync_state from pg_stat_replication;

結(jié)果如下:

postgres=# select client_addr,sync_state from pg_stat_replication;
 client_addr | sync_state 
-------------+------------
 172.18.0.5  | async
(1 row)

postgres=# 

說明0.5是從服務(wù)器,在接收流,而且是異步流復(fù)制。
此外,還可以分別在主、從節(jié)點上運行 ps aux | grep postgres 來查看進(jìn)程:
主服務(wù)器(0.4)上:

ps aux | grep postgres
root 210 0.0 0.0 48508 1548 ? S 06:34 0:00 su postgres
postgres 211 0.0 0.1 19864 2256 ? S 06:34 0:00 bash
postgres 250 0.0 0.9 273940 17632 ? S 06:41 0:00 /usr/lib/postgresql/9.4/bin/postgres -D /var/lib/postgresql/data
postgres 252 0.0 0.2 274044 3800 ? Ss 06:41 0:00 postgres: checkpointer process
postgres 253 0.0 0.1 274072 3216 ? Ss 06:41 0:00 postgres: writer process
postgres 254 0.0 0.3 273940 6108 ? Ss 06:41 0:00 postgres: wal writer process
postgres 255 0.0 0.1 274348 2656 ? Ss 06:41 0:00 postgres: autovacuum launcher process
postgres 256 0.0 0.0 129220 1836 ? Ss 06:41 0:00 postgres: stats collector process
postgres 276 0.0 0.1 274480 3164 ? Ss 06:57 0:00 postgres: wal sender process replica 172.18.0.5(42834) streaming 0/3019C90
postgres 391 0.0 0.0 38296 1752 ? R+ 07:36 0:00 ps aux
postgres 392 0.0 0.0 12772 692 ? S+ 07:36 0:00 grep postgres

可以看到有一個 wal sender 進(jìn)程。

從服務(wù)器(94)上:

ps aux | grep postgres
root 394 0.0 0.0 48508 1548 ? S 06:42 0:00 su postgres
postgres 395 0.0 0.1 19884 2320 ? S 06:42 0:00 bash
postgres 488 0.0 2.3 314268 45052 ? S 06:57 0:00 /usr/lib/postgresql/9.4/bin/postgres -D /var/lib/postgresql/data
postgres 489 0.0 0.2 314452 4904 ? Ss 06:57 0:00 postgres: startup process recovering 000000010000000000000003
postgres 490 0.0 0.1 314388 3524 ? Ss 06:57 0:00 postgres: checkpointer process
postgres 491 0.0 0.1 314268 2956 ? Ss 06:57 0:00 postgres: writer process
postgres 492 0.0 0.0 129220 1848 ? Ss 06:57 0:00 postgres: stats collector process
postgres 493 0.0 0.2 319036 4384 ? Ss 06:57 0:01 postgres: wal receiver process streaming 0/3019C90
postgres 508 0.0 0.0 38296 1756 ? R+ 07:37 0:00 ps aux
postgres 509 0.0 0.0 12772 700 ? S+ 07:37 0:00 grep postgres
可以看到有一個 wal receiver 進(jìn)程。
至此,PostgreSQL主從流復(fù)制安裝部署完成。
在主服務(wù)器上插入數(shù)據(jù)或刪除數(shù)據(jù),在從服務(wù)器上能看到相應(yīng)的變化。從服務(wù)器上只能查詢,不能插入或刪除。

主上:

postgres=# \c test;
You are now connected to database "test" as user "postgres".
test=# create table company(
test(# id int primary KEY NOT NULL,
test(# name TEXT NOT NULL,
test(# age INT NOT NULL,
test(# address CHAR(50),
test(# salary REAL,
test(# join_date DATE
test(# );
CREATE TABLE
test=# INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY,JOIN_DATE) VALUES (1, 'Paul', 32, 'California', 20000.00,'2001-07-13');
INSERT 0 1
test=#
test=#
test=# select * from company;
id | name | age | address | salary | join_date
----+------+-----+----------------------------------------------------+--------+------------
1 | Paul | 32 | California | 20000 | 2001-07-13
(1 row)

從上:

postgres=# \l
                                 List of databases
   Name    |  Owner   | Encoding |  Collate   |   Ctype    |   Access privileges   
-----------+----------+----------+------------+------------+-----------------------
 postgres  | postgres | UTF8     | en_US.utf8 | en_US.utf8 | 
 template0 | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c/postgres          +
           |          |          |            |            | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c/postgres          +
           |          |          |            |            | postgres=CTc/postgres
 test      | postgres | UTF8     | en_US.utf8 | en_US.utf8 | 
(4 rows)

postgres=# \c test
You are now connected to database "test" as user "postgres".
test=# select * from company
test-# ;
 id | name | age |                      address                       | salary | join_date  
----+------+-----+----------------------------------------------------+--------+------------
  1 | Paul |  32 | California                                         |  20000 | 2001-07-13
(1 row)
s

完成!

標(biāo)題名稱:postgreSQL主從復(fù)制
鏈接分享:http://jinyejixie.com/article10/ijjcgo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、企業(yè)建站、服務(wù)器托管響應(yīng)式網(wǎng)站、營銷型網(wǎng)站建設(shè)、網(wǎng)站導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設(shè)計公司
游戏| 湖口县| 东阿县| 平谷区| 交城县| 永定县| 绥化市| 侯马市| 府谷县| 乐业县| 平舆县| 香港 | 隆化县| 海淀区| 和静县| 桃江县| 东明县| 福海县| 松溪县| 岚皋县| 甘南县| 云阳县| 扶余县| 武冈市| 南投市| 出国| 贵州省| 富平县| 安国市| 濮阳县| 玉林市| 巫溪县| 饶平县| 仁布县| 泽普县| 会宁县| 阿坝| 自贡市| 墨竹工卡县| 崇文区| 英山县|