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

歡迎訪問 生活随笔!

生活随笔

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

数据库

PostgreSQL高可用(三)解决pgpool的单点问题

發布時間:2023/12/31 数据库 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PostgreSQL高可用(三)解决pgpool的单点问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 主機分配
  • PGPOOL高可用,解決單點問題
    • 1 圖例
    • 2 看門狗簡介
    • 3 啟動/停止看門狗
    • 4 配置看門狗 (pgpool.conf)
      • 4.1 基本配置
        • 4.1.1 啟用
        • 4.1.2到前端服務器的鏈路
        • 4.1.2pgpool-II 的生命檢查
        • 4.1.3 虛擬 IP 地址
        • 4.1.4看門狗服務器自監控
        • 4.1.5 監控服務器
      • 4.2 配置文件
    • 5 pgpool的啟動和關閉
    • 6 啟動后的虛擬ip
    • 7 PG連接

PostgreSQL高可用(一)主從流復制
PostgreSQL高可用(二)使用pgpool實現主從切換+讀寫分離,付:宕機后的恢復腳本
參考文檔:
https://www.jianshu.com/p/ef183d0a9213
https://www.pgpool.net/docs/pgpool-II-3.2.1/pgpool-zh_cn.html

主機分配

  • OS:CentOS 7
  • 節點1:master(192.168.36.130)
  • 節點2:slave(192.168.36.131)
  • 節點3:pool-master(192.168.36.133)
  • 節點4:pool-slave(192.168.36.130)
    以下文章用到節點1,2,3,4

PGPOOL高可用,解決單點問題

pgpool自身就可以實現高可用,無需依賴其他插件。

1 圖例

2 看門狗簡介

“看門狗”是一個 pgpool-II 的子進程,用于添加高可用性功能。 看門狗添加的功能包括:

  • pgpool 服務的生命檢測
    看門狗監控 pgpool 服務的響應而不是進程。 它通過被它監控的 pgpool 發送查詢到 PostgreSQL,并檢查響應情況。
    看門狗還監控到從 pgpool 到前端服務器的連接(例如應用服務器)。 從 pgpool 到前端服務器的連接作為 pgpool 的服務來監控。

  • 看門狗進程相互監控
    看門狗進程交換被監控服務器的信息用來保證信息是最新的,并允許看門狗進程相互監控。

  • 在某些故障檢測中交換活躍/備用狀態
    當一個 pgpool 的故障被檢測到,看門狗通知其他的看門狗這個消息。 看門狗在舊的活躍 pgpool 發生故障后通過投票確定新的活躍 pgpool 并更新活躍/備用狀態。

  • 在服務器切換的時候實現自動虛擬 IP 地址分配
    當一個備用 pgpool 服務器提升為活躍的,新的活躍服務器啟動虛擬 IP 接口。 也就是,之前的活躍服務器停用虛擬 IP 接口。 這確保活動的 pgpool 使用相同的 IP 地址,即使在發生服務器切換的時候。

  • 在恢復的時候自動注冊服務器為備用服務器
    當失效的服務器恢復或者新的服務器連接上來,看門狗進程通知其他的看門狗進程關于新服務器的信息, 看門狗進程在活躍服務器和其他服務器上接收這些信息。 然后,新連接上的服務器注冊為備用節點。

3 啟動/停止看門狗

看門狗進程由 pgpool-II 自動啟動/停止,也就是說,沒有單獨的命令來啟動/停止它。 但是,pgpool-II 啟動時必須擁有管理員權限(root), 因為看門狗進程需要控制虛擬 IP 接口。

在等待到所有的 pgpool 啟動后,生命監測將啟動。
所以在啟動pgpool時使用root用戶啟動

4 配置看門狗 (pgpool.conf)

看門狗的配置參數在 pgpool.conf 中配置。 在 pgpool.conf.sample 文件中的 WATCHDOG 小節是配置看門狗的示例。 以下所有的選項都是使用看門狗進程必須指定的。

4.1 基本配置

4.1.1 啟用

use_watchdog
如果為 on,則激活看門狗,默認為 off。

4.1.2到前端服務器的鏈路

trusted_servers
用于檢測前端鏈路狀態的信任服務器的列表。每個服務器需要能響應 ping。 用逗號分隔服務器的列表,例如“hostA,hostB,hostC”。

ping_path
本參數指定用于監控到前端服務器連接的 ping 命令的路徑。只需要設置路徑,例如“/bin”。

4.1.2pgpool-II 的生命檢查

wd_interval
本參數指定用于 pgpool-II 生命檢查的間隔,單位為秒(一個大于或等于 1 的數字)。

wd_life_point
pgpool-II 生命檢測失敗后重試次數(一個大于或等于 1 的數字)。

wd_lifecheck_query
用于檢查 pgpool-II 的查詢語句。默認為“SELECT 1”。

4.1.3 虛擬 IP 地址

delegate_IP
指定客戶端服務器(應用服務器等)連接到的 pgpool-II 的虛擬 IP 地址(VIP)。 當一個 pgpool 從備用切換到活躍狀態,pgpool 將使用這個 VIP。

ifconfig_path
本參數指定切換 IP 地址的命令所在的路徑。只需要設置路徑例如“/sbin”。

if_up_cmd
本參數指定用于啟用虛擬 IP 的命令。設置命令和參數例如:‘ifconfig eth0:0 inet KaTeX parse error: Expected group after '_' at position 4: _IP_? netmask 255.255.255.0’。 KaTeX parse error: Expected group after '_' at position 4: _IP_? 將被 delegate_IP 指定的 IP 地址替換。

if_down_cmd
本參數指定用于停用虛擬 IP 的命令。設置命令和參數例如:‘ifconfig eth0:0 down’。

arping_path
本參數指定用于在虛擬 IP 切換后用于發送 ARP 請求的命令的所在路徑。 只需要設置路徑例如“/usr/sbin”。

arping_cmd
本參數指定在進行虛擬 IP 切換后用于發送 ARP 請求的命令。設置命令和參數例如:‘arping -U KaTeX parse error: Expected group after '_' at position 4: _IP_? -w 1’。 KaTeX parse error: Expected group after '_' at position 4: _IP_? 將被 delegate_IP 指定的 IP 地址替換。

4.1.4看門狗服務器自監控

wd_hostname
指定用于相互監控的看門狗進程的主機名或 IP 地址。

wd_port
指定用于相互監控的看門狗進程的端口。

4.1.5 監控服務器

other_pgpool_hostname0
指定被監控的 pgpool-II 服務器的主機名。參數末尾的數字表示“服務器id”,必須從 0 開始。

other_pgpool_port0
指定被監控的 pgpool-II 服務器上的 pgpool 的端口號。參數末尾的數字表示“服務器id”,必須從 0 開始。

other_wd_port0
指定 pgpool-II 服務器上的需要被監控的看門狗的端口號。參數末尾的數字表示“服務器id”,必須從 0 開始。

4.2 配置文件

此配置基于文章前半部分進行,我將pgpool-slave放在了192.168.36.130上。
pgpool-master配置文件:

listen_addresses = '*' port = 9999 pcp_listen_addresses = '*' pcp_port = 9898 pcp_socket_dir = '/opt/pgpool'backend_hostname0 = '192.168.36.130' backend_port0 = 54321 backend_weight0 = 1 backend_data_directory0 = '/opt/psql/data' backend_flag0 = 'ALLOW_TO_FAILOVER'backend_hostname1 = '192.168.36.131' backend_port1 = 54321 backend_weight1 = 1 backend_data_directory1 = '/opt/psql/data' backend_flag1 = 'ALLOW_TO_FAILOVER'enable_pool_hba = on pool_passwd = 'pool_passwd'pid_file_name = '/opt/pgpool/pgpool.pid' logdir = '/data1/pg_logs'replication_mode = off load_balance_mode = on master_slave_mode = on master_slave_sub_mode = 'stream'sr_check_period = 5 sr_check_user = 'pgpool' sr_check_password = '123' sr_check_database = 'postgres'health_check_period = 10 health_check_timeout = 20health_check_user = 'pgpool'health_check_password = '123' health_check_database = 'postgres'failover_command = '/data1/pg_bin/failover_stream.sh %d %H /tmp/trigger_file0' #之前是單節點的配置文件,解釋在前面 #開啟看門狗 use_watchdog = on #本機的hosts或ip wd_hostname = '192.168.36.133' #看門狗的端口,默認9000 wd_port = 9000 #設置的vip delegate_IP = '192.168.36.254'if_cmd_path = '/sbin' #對網卡操作的命令,網卡名根據自己的修改 if_up_cmd = 'ifconfig ens33:0 inet $_IP_$ netmask 255.255.255.0' #對網卡操作的命令 if_down_cmd = 'ifconfig ens33:0 down' #心跳檢測端口 wd_heartbeat_port = 9694 #心跳檢測間隔時間 wd_heartbeat_keepalive = 2 # 心跳信號的死區時間間隔 wd_heartbeat_deadtime = 30 #檢測對方的hosts或ip heartbeat_destination0 = '192.168.36.130' #對方心跳檢測端口 heartbeat_destination_port0 = 9694 #網卡名 heartbeat_device0 = 'ens33' #其他pgpool的hosts或ip other_pgpool_hostname0 = '192.168.36.130' #其他pgpool的端口 other_pgpool_port0 = 9999 #其他端口 other_wd_port0 = 9000

方便對比和復制,下面是pgpool-slave的配置文件

listen_addresses = '*' port = 9999 pcp_listen_addresses = '*' pcp_port = 9898 pcp_socket_dir = '/opt/pgpool'backend_hostname0 = '192.168.36.130' backend_port0 = 54321 backend_weight0 = 1 backend_data_directory0 = '/opt/psql/data' backend_flag0 = 'ALLOW_TO_FAILOVER'backend_hostname1 = '192.168.36.131' backend_port1 = 54321 backend_weight1 = 1 backend_data_directory1 = '/opt/psql/data' backend_flag1 = 'ALLOW_TO_FAILOVER'enable_pool_hba = on pool_passwd = 'pool_passwd'pid_file_name = '/opt/pgpool/pgpool.pid' logdir = '/data1/pg_logs'replication_mode = off load_balance_mode = on master_slave_mode = on master_slave_sub_mode = 'stream'sr_check_period = 5 sr_check_user = 'pgpool' sr_check_password = '123' sr_check_database = 'postgres'health_check_period = 10 health_check_timeout = 20health_check_user = 'pgpool'health_check_password = '123' health_check_database = 'postgres'failover_command = '/data1/pg_bin/failover_stream.sh %d %H /tmp/trigger_file0'use_watchdog = onwd_hostname = '192.168.36.130' wd_port = 9000delegate_IP = '192.168.36.254'if_cmd_path = '/sbin'if_up_cmd = 'ifconfig ens33:0 inet $_IP_$ netmask 255.255.255.0'if_down_cmd = 'ifconfig ens33:0 down'wd_heartbeat_port = 9694wd_heartbeat_keepalive = 2wd_heartbeat_deadtime = 30heartbeat_destination0 = '192.168.36.133' heartbeat_destination_port0 = 9694heartbeat_device0 = 'ens33'other_pgpool_hostname0 = '192.168.36.133' other_pgpool_port0 = 9999other_wd_port0 = 9000

5 pgpool的啟動和關閉

啟動 pgpool -n -d -D > /data1/pg_logs/pgpool.log 2>&1 & 關閉 pgpool -m fast stop

6 啟動后的虛擬ip

7 PG連接

使用vip進行連接就可以了

總結

以上是生活随笔為你收集整理的PostgreSQL高可用(三)解决pgpool的单点问题的全部內容,希望文章能夠幫你解決所遇到的問題。

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