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