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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

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

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

文章目錄

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

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

主機(jī)分配

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

PGPOOL高可用,解決單點(diǎn)問(wèn)題

pgpool自身就可以實(shí)現(xiàn)高可用,無(wú)需依賴其他插件。

1 圖例

2 看門狗簡(jiǎn)介

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

  • pgpool 服務(wù)的生命檢測(cè)
    看門狗監(jiān)控 pgpool 服務(wù)的響應(yīng)而不是進(jìn)程。 它通過(guò)被它監(jiān)控的 pgpool 發(fā)送查詢到 PostgreSQL,并檢查響應(yīng)情況。
    看門狗還監(jiān)控到從 pgpool 到前端服務(wù)器的連接(例如應(yīng)用服務(wù)器)。 從 pgpool 到前端服務(wù)器的連接作為 pgpool 的服務(wù)來(lái)監(jiān)控。

  • 看門狗進(jìn)程相互監(jiān)控
    看門狗進(jìn)程交換被監(jiān)控服務(wù)器的信息用來(lái)保證信息是最新的,并允許看門狗進(jìn)程相互監(jiān)控。

  • 在某些故障檢測(cè)中交換活躍/備用狀態(tài)
    當(dāng)一個(gè) pgpool 的故障被檢測(cè)到,看門狗通知其他的看門狗這個(gè)消息。 看門狗在舊的活躍 pgpool 發(fā)生故障后通過(guò)投票確定新的活躍 pgpool 并更新活躍/備用狀態(tài)。

  • 在服務(wù)器切換的時(shí)候?qū)崿F(xiàn)自動(dòng)虛擬 IP 地址分配
    當(dāng)一個(gè)備用 pgpool 服務(wù)器提升為活躍的,新的活躍服務(wù)器啟動(dòng)虛擬 IP 接口。 也就是,之前的活躍服務(wù)器停用虛擬 IP 接口。 這確?;顒?dòng)的 pgpool 使用相同的 IP 地址,即使在發(fā)生服務(wù)器切換的時(shí)候。

  • 在恢復(fù)的時(shí)候自動(dòng)注冊(cè)服務(wù)器為備用服務(wù)器
    當(dāng)失效的服務(wù)器恢復(fù)或者新的服務(wù)器連接上來(lái),看門狗進(jìn)程通知其他的看門狗進(jìn)程關(guān)于新服務(wù)器的信息, 看門狗進(jìn)程在活躍服務(wù)器和其他服務(wù)器上接收這些信息。 然后,新連接上的服務(wù)器注冊(cè)為備用節(jié)點(diǎn)。

3 啟動(dòng)/停止看門狗

看門狗進(jìn)程由 pgpool-II 自動(dòng)啟動(dòng)/停止,也就是說(shuō),沒(méi)有單獨(dú)的命令來(lái)啟動(dòng)/停止它。 但是,pgpool-II 啟動(dòng)時(shí)必須擁有管理員權(quán)限(root), 因?yàn)榭撮T狗進(jìn)程需要控制虛擬 IP 接口。

在等待到所有的 pgpool 啟動(dòng)后,生命監(jiān)測(cè)將啟動(dòng)。
所以在啟動(dòng)pgpool時(shí)使用root用戶啟動(dòng)

4 配置看門狗 (pgpool.conf)

看門狗的配置參數(shù)在 pgpool.conf 中配置。 在 pgpool.conf.sample 文件中的 WATCHDOG 小節(jié)是配置看門狗的示例。 以下所有的選項(xiàng)都是使用看門狗進(jìn)程必須指定的。

4.1 基本配置

4.1.1 啟用

use_watchdog
如果為 on,則激活看門狗,默認(rèn)為 off。

4.1.2到前端服務(wù)器的鏈路

trusted_servers
用于檢測(cè)前端鏈路狀態(tài)的信任服務(wù)器的列表。每個(gè)服務(wù)器需要能響應(yīng) ping。 用逗號(hào)分隔服務(wù)器的列表,例如“hostA,hostB,hostC”。

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

4.1.2pgpool-II 的生命檢查

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

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

wd_lifecheck_query
用于檢查 pgpool-II 的查詢語(yǔ)句。默認(rèn)為“SELECT 1”。

4.1.3 虛擬 IP 地址

delegate_IP
指定客戶端服務(wù)器(應(yīng)用服務(wù)器等)連接到的 pgpool-II 的虛擬 IP 地址(VIP)。 當(dāng)一個(gè) pgpool 從備用切換到活躍狀態(tài),pgpool 將使用這個(gè) VIP。

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

if_up_cmd
本參數(shù)指定用于啟用虛擬 IP 的命令。設(shè)置命令和參數(shù)例如:‘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
本參數(shù)指定用于停用虛擬 IP 的命令。設(shè)置命令和參數(shù)例如:‘ifconfig eth0:0 down’。

arping_path
本參數(shù)指定用于在虛擬 IP 切換后用于發(fā)送 ARP 請(qǐng)求的命令的所在路徑。 只需要設(shè)置路徑例如“/usr/sbin”。

arping_cmd
本參數(shù)指定在進(jìn)行虛擬 IP 切換后用于發(fā)送 ARP 請(qǐng)求的命令。設(shè)置命令和參數(shù)例如:‘a(chǎn)rping -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看門狗服務(wù)器自監(jiān)控

wd_hostname
指定用于相互監(jiān)控的看門狗進(jìn)程的主機(jī)名或 IP 地址。

wd_port
指定用于相互監(jiān)控的看門狗進(jìn)程的端口。

4.1.5 監(jiān)控服務(wù)器

other_pgpool_hostname0
指定被監(jiān)控的 pgpool-II 服務(wù)器的主機(jī)名。參數(shù)末尾的數(shù)字表示“服務(wù)器id”,必須從 0 開(kāi)始。

other_pgpool_port0
指定被監(jiān)控的 pgpool-II 服務(wù)器上的 pgpool 的端口號(hào)。參數(shù)末尾的數(shù)字表示“服務(wù)器id”,必須從 0 開(kāi)始。

other_wd_port0
指定 pgpool-II 服務(wù)器上的需要被監(jiān)控的看門狗的端口號(hào)。參數(shù)末尾的數(shù)字表示“服務(wù)器id”,必須從 0 開(kāi)始。

4.2 配置文件

此配置基于文章前半部分進(jìn)行,我將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' #之前是單節(jié)點(diǎn)的配置文件,解釋在前面 #開(kāi)啟看門狗 use_watchdog = on #本機(jī)的hosts或ip wd_hostname = '192.168.36.133' #看門狗的端口,默認(rèn)9000 wd_port = 9000 #設(shè)置的vip delegate_IP = '192.168.36.254'if_cmd_path = '/sbin' #對(duì)網(wǎng)卡操作的命令,網(wǎng)卡名根據(jù)自己的修改 if_up_cmd = 'ifconfig ens33:0 inet $_IP_$ netmask 255.255.255.0' #對(duì)網(wǎng)卡操作的命令 if_down_cmd = 'ifconfig ens33:0 down' #心跳檢測(cè)端口 wd_heartbeat_port = 9694 #心跳檢測(cè)間隔時(shí)間 wd_heartbeat_keepalive = 2 # 心跳信號(hào)的死區(qū)時(shí)間間隔 wd_heartbeat_deadtime = 30 #檢測(cè)對(duì)方的hosts或ip heartbeat_destination0 = '192.168.36.130' #對(duì)方心跳檢測(cè)端口 heartbeat_destination_port0 = 9694 #網(wǎng)卡名 heartbeat_device0 = 'ens33' #其他pgpool的hosts或ip other_pgpool_hostname0 = '192.168.36.130' #其他pgpool的端口 other_pgpool_port0 = 9999 #其他端口 other_wd_port0 = 9000

方便對(duì)比和復(fù)制,下面是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的啟動(dòng)和關(guān)閉

啟動(dòng) pgpool -n -d -D > /data1/pg_logs/pgpool.log 2>&1 & 關(guān)閉 pgpool -m fast stop

6 啟動(dòng)后的虛擬ip

7 PG連接

使用vip進(jìn)行連接就可以了

總結(jié)

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

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。