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配置文件:
方便對比和復制,下面是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 = 90005 pgpool的啟動和關閉
啟動 pgpool -n -d -D > /data1/pg_logs/pgpool.log 2>&1 & 關閉 pgpool -m fast stop6 啟動后的虛擬ip
7 PG連接
使用vip進行連接就可以了
總結
以上是生活随笔為你收集整理的PostgreSQL高可用(三)解决pgpool的单点问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 博士这五年
- 下一篇: mac下smartsvn安装与破解