日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

搭建PostgreSQL主從架構(gòu)

PostgreSQL是一個開源數(shù)據(jù)庫,以其強(qiáng)大的功能、標(biāo)準(zhǔn)合規(guī)性、可靠性和擴(kuò)展性受到廣泛認(rèn)可和采用。PostgreSQL遵循SQL標(biāo)準(zhǔn),支持NoSQL數(shù)據(jù)類型(JSON/XML/hstore)遞歸查詢、全文搜索、GIS地理信息處理等,能夠應(yīng)對各種復(fù)雜數(shù)據(jù)分析需求。廣泛應(yīng)用于互聯(lián)網(wǎng)網(wǎng)站、企業(yè)級應(yīng)用后端、數(shù)據(jù)倉庫與分析平臺、位置應(yīng)用系統(tǒng)、復(fù)雜數(shù)據(jù)對象處理等應(yīng)用場景。本文檔介紹如何在CentOS 7.x操作系統(tǒng)的ECS實(shí)例上搭建PostgreSQL主從架構(gòu)。

準(zhǔn)備工作

本教程適用于熟悉云服務(wù)器ECS、Linux系統(tǒng)、PostgreSQL的阿里云用戶。

搭建PostgreSQL主從復(fù)制架構(gòu),需要創(chuàng)建2臺專有網(wǎng)絡(luò)類型的ECS實(shí)例,一臺ECS實(shí)例作為主節(jié)點(diǎn),另一臺ECS實(shí)例作為從節(jié)點(diǎn)。創(chuàng)建的ECS實(shí)例需要滿足以下條件,更多參數(shù)說明,請參見自定義購買實(shí)例

  • 操作系統(tǒng):PostgreSQL支持多種操作系統(tǒng),本文以CentOS 7.x為例。

    Alibaba Cloud Linux 3/2不支持本文使用的YUM源安裝方式,建議您使用源碼安裝。更多其他操作系統(tǒng)安裝方式,請參見PostgreSQL官網(wǎng)

  • 實(shí)例規(guī)格:PostgreSQL主從架構(gòu)并沒有嚴(yán)格的規(guī)格限制,具體的規(guī)格選擇應(yīng)基于詳細(xì)的容量規(guī)劃、性能測試和業(yè)務(wù)增長預(yù)測。

  • 公網(wǎng)IP:建議您不為ECS實(shí)例分配公網(wǎng)IP,按需購買彈性公網(wǎng)IP綁定至ECS實(shí)例,后續(xù)您可以根據(jù)實(shí)際情況考慮升級配置或調(diào)優(yōu)架構(gòu)。詳情請參見申請彈性公網(wǎng)IP

  • 安全組:已在安全組內(nèi)添加入方向規(guī)則放行80、22、5432端口。具體操作,請參見添加安全組規(guī)則

步驟一:配置PostgreSQL主節(jié)點(diǎn)

  1. 遠(yuǎn)程連接PostgreSQL主節(jié)點(diǎn)。

  2. 安裝PostgreSQL。

    1. 運(yùn)行以下命令,添加PostgreSQL官方Y(jié)UM倉庫。

      sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
    2. 安裝PostgreSQL 15。

      sudo yum install -y postgresql15-server
      說明

      本教程以PostgreSQL 15版本為例。您可以根據(jù)業(yè)務(wù)需求選擇合適的版本。

  3. 初始化PostgreSQL數(shù)據(jù)庫。

    sudo /usr/pgsql-15/bin/postgresql-15-setup initdb

    回顯如下所示時,說明PostgreSQL數(shù)據(jù)庫已初始化完成。

    image

  4. 依次運(yùn)行以下命令,啟動服務(wù)并設(shè)置服務(wù)開機(jī)自啟動。

    sudo systemctl enable postgresql-15
    sudo systemctl start postgresql-15
  5. 在主節(jié)點(diǎn)上創(chuàng)建數(shù)據(jù)庫賬號replica(用于主從復(fù)制),并設(shè)置密碼及登錄權(quán)限和備份權(quán)限。

    1. 運(yùn)行以下命令,登錄postgres用戶。

      sudo su - postgres

      回顯結(jié)果出現(xiàn)-bash-4.2$時表示成功登錄。

      image

    2. 輸入以下命令,進(jìn)入PostgreSQL交互終端。

      psql

      回顯結(jié)果出現(xiàn)postgres=#時表示成功進(jìn)入交互終端。

      image

    3. 運(yùn)行以下命令,為用戶postgres設(shè)置密碼,增強(qiáng)安全性。

      ALTER USER postgres WITH PASSWORD 'YourPassWord';
    4. 輸入以下SQL語句創(chuàng)建數(shù)據(jù)庫賬號,并設(shè)置密碼、登錄權(quán)限和備份權(quán)限。

      CREATE ROLE user login replication encrypted password 'YourPassWord';

      本示例中創(chuàng)建數(shù)據(jù)庫賬號replica,并將密碼設(shè)置為replica

      CREATE ROLE replica login replication encrypted password 'replica';
    5. 查詢賬號是否創(chuàng)建成功。

      SELECT usename from pg_user;

      返回結(jié)果如下,表示已創(chuàng)建成功。

      image

    6. 查詢權(quán)限是否創(chuàng)建成功。

      SELECT rolname from pg_roles;

      返回結(jié)果如下,表示已創(chuàng)建成功。

      image

    7. 輸入以下命令,按Enter鍵退出SQL終端。

      \q
    8. 輸入以下命令,按Enter鍵退出PostgreSQL。

      exit
  6. 設(shè)置replica用戶白名單。

    1. 運(yùn)行以下命令,打開pg_hba.conf文件。

      sudo vim /var/lib/pgsql/15/data/pg_hba.conf
    2. i鍵進(jìn)入編輯模式,在IPv4 local connections段添加下面兩行內(nèi)容。

      host    all             all             <從節(jié)點(diǎn)的VPC IPv4網(wǎng)段>          md5     #允許VPC網(wǎng)段中md5密碼認(rèn)證連接
      host    replication     replica         <從節(jié)點(diǎn)的VPC IPv4網(wǎng)段>          md5     #允許用戶從replication數(shù)據(jù)庫進(jìn)行數(shù)據(jù)同步

      image

    3. Esc鍵,輸入:wq,按下Enter鍵,保存并退出pg_hba.conf文件。

  7. 配置postgresql.conf文件。

    1. 運(yùn)行以下命令,打開postgresql.conf文件。

      sudo vim /var/lib/pgsql/15/data/postgresql.conf
    2. 分別找到以下參數(shù),并將參數(shù)修改為以下內(nèi)容:

      listen_addresses = '*'   #監(jiān)聽的IP地址
      max_connections = 100    #最大連接數(shù),從庫的max_connections必須要大于主庫的
      wal_level = replica      #記錄足夠的信息以支持常見的備庫用途,包括流復(fù)制和熱備。
      synchronous_commit = on  #開啟同步復(fù)制
      max_wal_senders = 32     #同步最大的進(jìn)程數(shù)量
      wal_sender_timeout = 60s #流復(fù)制主機(jī)發(fā)送數(shù)據(jù)的超時時間
    3. Esc鍵,輸入:wq,按下Enter鍵,保存并退出postgresql.conf文件。

  8. 運(yùn)行以下命令,重啟PostgreSQL服務(wù)。

    sudo systemctl restart postgresql-15

步驟二:配置PostgreSQL從節(jié)點(diǎn)

  1. 遠(yuǎn)程連接PostgreSQL從節(jié)點(diǎn)。

    具體操作,請參見通過密碼或密鑰認(rèn)證登錄Linux實(shí)例

  2. 安裝PostgreSQL。

    1. 運(yùn)行以下命令,添加PostgreSQL官方Y(jié)UM倉庫。

      sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
    2. 安裝PostgreSQL 15。

      sudo yum install -y postgresql15-server
      說明

      本教程以PostgreSQL 15版本為例。您可以根據(jù)業(yè)務(wù)需求選擇合適的版本。

  3. 運(yùn)行以下命令,使用pg_basebackup基礎(chǔ)備份工具從主庫創(chuàng)建從庫的基礎(chǔ)備份。

    pg_basebackup -D /var/lib/pgsql/15/data -h <主節(jié)點(diǎn)公網(wǎng)IP> -p 5432 -U replica -X stream -P

    出現(xiàn)Password時,輸入主庫的密碼。出現(xiàn)如下所示時,表示已同步成功。

    image

  4. 配置從庫的postgresql.conf文件。

    1. 運(yùn)行以下命令,打開postgresql.conf文件。

      sudo vim /var/lib/pgsql/15/data/postgresql.conf
    2. 分別找到以下參數(shù),并將參數(shù)修改為以下內(nèi)容。

      primary_conninfo = 'host=<主節(jié)點(diǎn)IP> port=5432 user=replica password=replica' #對應(yīng)主庫的連接信息
      recovery_target_timeline = 'latest' #流復(fù)制同步到最新的數(shù)據(jù)
      max_connections = 1000             # 最大連接數(shù),從節(jié)點(diǎn)需設(shè)置比主節(jié)點(diǎn)大
      hot_standby = on                   # 開啟熱備
      max_standby_streaming_delay = 30s  # 數(shù)據(jù)流備份的最大延遲時間
      wal_receiver_status_interval = 1s  # 從節(jié)點(diǎn)向主節(jié)點(diǎn)報告自身狀態(tài)的最長間隔時間
      hot_standby_feedback = on          # 如果有錯誤的數(shù)據(jù)復(fù)制向主進(jìn)行反饋

      image

    3. Esc鍵,輸入:wq,按下Enter鍵,保存并退出postgresql.conf文件。

  5. 運(yùn)行以下命令,修改數(shù)據(jù)目錄的屬組和屬主。

    sudo chown -R postgres.postgres /var/lib/pgsql/15/data
  6. 依次運(yùn)行以下命令,啟動服務(wù)并設(shè)置服務(wù)開機(jī)自啟動。

    sudo systemctl enable postgresql-15
    sudo systemctl start postgresql-15

步驟三:檢測驗(yàn)證

檢測驗(yàn)證需要主從節(jié)點(diǎn)之間存在數(shù)據(jù)交互,例如,從節(jié)點(diǎn)備份目錄時,進(jìn)行檢測能夠得到預(yù)期的結(jié)果。

sudo pg_basebackup -D /var/lib/pgsql/15/data -h <主節(jié)點(diǎn)IP> -p 5432 -U replica -X stream -P
  1. 在主節(jié)點(diǎn)中運(yùn)行以下命令,查看sender進(jìn)程。

    ps aux |grep sender

    返回結(jié)果如下,表示可以成功查看到sender進(jìn)程。

    postgres  2916  0.0  0.3 340388  3220 ?        Ss   15:38   0:00 postgres: walsender  replica 192.168.**.**(49640) streaming 0/F01C1A8
  2. 在從節(jié)點(diǎn)中運(yùn)行以下命令,查看receiver進(jìn)程。

    ps aux |grep receiver

    返回結(jié)果類似如下,表示可以成功查看到receiver進(jìn)程。

    postgres 23284  0.0  0.3 387100  3444 ?        Ss   16:04   0:00 postgres: walreceiver   streaming 0/F01C1A8
  3. 在主節(jié)點(diǎn)中進(jìn)入PostgreSQL交互終端,輸入以下SQL語句,在主庫中查看從庫狀態(tài)。

    1. 運(yùn)行以下命令,登錄postgres用戶。

      sudo su - postgres

      回顯結(jié)果出現(xiàn)-bash-4.2$時表示成功登錄。

    2. 輸入以下命令,進(jìn)入PostgreSQL交互終端。

      psql

      回顯結(jié)果出現(xiàn)postgres=#時表示成功進(jìn)入交互終端。

    3. 運(yùn)行以下命令,在主庫中查看從庫狀態(tài)。

      select * from pg_stat_replication;

      返回結(jié)果類似如下,表示可成功查看到從庫狀態(tài)。

      pid | usesysid | usename | application_name | client_addr | client_hostname | client_port | backend_start | backend_xmin | state | sent_location | write_locati
      on | flush_location | replay_location | sync_priority | sync_state 
      ------+----------+---------+------------------+---------------+-----------------+------------- +-------------------------------+--------------+-----------+---------------+-------------
      ---+----------------+-----------------+---------------+------------
      2916 | 16393 | replica | walreceiver | 192.168.**.** | | 49640 | 2017-05-02 15:38:06.188988+08 | 1836 | streaming | 0/F01C0C8 | 0/F01C0C8 
      | 0/F01C0C8 | 0/F01C0C8 | 0 | async
      (1 rows)
    4. 輸入以下命令,并按Enter退出SQL終端。

      \q
    5. 輸入以下命令,并按Enter退出PostgreSQL。

      exit