欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品

主頁 > 知識庫 > PostgreSQL+Pgpool實現HA主備切換的操作

PostgreSQL+Pgpool實現HA主備切換的操作

熱門標簽:重慶自動外呼系統定制 海豐有多少商家沒有地圖標注 地圖標注和圖片名稱的區別 外呼調研系統 辦公外呼電話系統 漯河外呼電話系統 打電話智能電銷機器人授權 美容工作室地圖標注 合肥公司外呼系統運營商

PostgreSQL流復制實現HA主備切換

環境說明和主機規劃

操作系統 主機名 主機 角色 端口
CentOS 7 master 10.0.0.11 PG-Master 54321
CentOS 7 slave 10.0.0.12 PG-Slave 54321
CentOS 7 pool 10.0.0.13 pgpool 54321

基礎環境配置(所有主機操作)

配置HOSTS

echo -e "10.0.0.11 master\n10.0.0.12 slave\n10.0.0.13 pool" >> /etc/hosts # 執行一次即可

配置統一的時間(若已配置,請忽略)

yum install -y ntpdate  ntpdate ntp1.aliyun.com
echo -e "# sync time from ntp1.aliyun.com\n5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com > /dev/null 2>1
" >> /var/spool/cron/root # 寫入定時任務,執行一次即可

創建postgres用戶

useradd postgres echo "your_password" | passwd --stdin postgres

配置免密鑰登陸

su - postgres
ssh-keygen -t rsa -f /home/postgres/.ssh/id_rsa -P "" 
cd ~/.ssh/
ssh-copy-id postgres@master # 三臺主機執行
scp authorized_keys postgres@slave:~/.ssh # 只在master主機執行
scp authorized_keys postgres@pool:~/.ssh # 只在master主機執行

安裝Postgresql數據庫(PG9.6)

yum install -y https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-7-x86_64/pgdg-centos96-9.6-3.noarch.rpm

yum install -y postgresql96-server postgresql96-contrib postgresql96 postgresql96-libs

創建統一的目錄結構

mkdir /data1/pg_{data,bin,logs} -p

chown -R postgres.postgres /data1/

修改系統變量

vi /etc/profile #增加以下內容
export PGHOME=/usr/pgsql-9.6/
export PGDATA=/data1/pg_data
export PGPORT=54321
export PATH=$PATH:$PGHOME/bin
# 生效
source /etc/profile

PostgreSQL流復制結構(master和slave主機操作)

master主機操作

初始化系統

/usr/pgsql-9.6/bin/postgresql96-setup initdb

vi /usr/lib/systemd/system/postgresql-9.6.service

修改postgresql-9.6.service

內容如下:

# Include the default config:
.include /usr/lib/systemd/system/postgresql-9.6.service

[Service]
Environment=PGDATA=/data1/pg_data

重啟PG服務

systemctl daemon-reload
su - postgres -c '/usr/pgsql-9.6/bin/initdb -D /data1/pg_data'
systemctl restart postgresql-9.6
systemctl enable postgresql-9.6.service

修改系統配置(以下用postgres用戶操作)

cp /data1/pg_data/pg_hba.conf{,.bak} 
cat >/data1/pg_data/pg_hba.confEOF
local all    all            trust
host all    all      10.0.0.11/32   trust
host all    all      10.0.0.12/32   trust
host all    all      0.0.0.0/0    md5
host all    all      ::1/128     trust
host replication  stream_replication  0.0.0.0/0    md5
EOF
#host replication  stream_replication  0.0.0.0/0    md5 為流復制用戶

64G

cp /data1/pg_data/postgresql.conf{,.bak}
cat >/data1/pg_data/postgresql.confEOF
listen_addresses = '*'
port = 54321
max_connections = 256
shared_buffers = 16GB
effective_cache_size = 48GB
work_mem = 64MB
maintenance_work_mem = 2GB
min_wal_size = 2GB
max_wal_size = 4GB
checkpoint_completion_target = 0.9
wal_buffers = 16MB
default_statistics_target = 100
wal_level = hot_standby
wal_log_hints = on
max_wal_senders = 1
hot_standby = on
logging_collector = on
log_directory = 'pg_log'
EOF
#操作完記得重啟 pg_ctl restart

128G

listen_addresses = '*'
port = 54321
max_connections = 256
shared_buffers = 32GB
effective_cache_size = 96GB
work_mem = 128MB
maintenance_work_mem = 2GB
min_wal_size = 2GB
max_wal_size = 4GB
checkpoint_completion_target = 0.9
wal_buffers = 16MB
default_statistics_target = 100
wal_level = hot_standby
wal_log_hints = on
max_wal_senders = 1
hot_standby = on
logging_collector = on
log_directory = 'pg_log'

在主庫中創建流復制用戶(stream_replication)和PGPool用戶(srcheck)

CREATE USER stream_replication replication LOGIN CONNECTION LIMIT 5 ENCRYPTED PASSWORD 'your_password';

CREATE USER srcheck replication LOGIN CONNECTION LIMIT 5 ENCRYPTED PASSWORD 'your_password';

修改主庫pg_hba.conf文件(已操作見cat >/data1/pg_data/pg_hba.confEOF)

host replication stream_replication 0.0.0.0/0 md5

slave主機操作

初始化系統

/usr/pgsql-9.6/bin/postgresql96-setup initdb

vi /usr/lib/systemd/system/postgresql-9.6.service

修改postgresql-9.6.service

內容如下:

# Include the default config:
.include /usr/lib/systemd/system/postgresql-9.6.service

[Service]
Environment=PGDATA=/data1/pg_data

重啟PG服務

systemctl daemon-reload

基礎備份復制到備庫服務器

rm -rf /data1/pg_data # 如果沒有重要數據可操作,主要為同步主庫路徑

su - postgres -c 'pg_basebackup -D $PGDATA --format=p -h master -p 54321 -U stream_replication -W'

修改備庫配置信息

cp $PGHOME/share/recovery.conf.sample $PGDATA/recovery.conf

vi $PGDATA/recovery.conf

增加以下內容

standby_mode='on'
primary_conninfo = 'host=master port=54321 user=stream_replication password=your_password'
restore_command = ''
recovery_target_timeline = 'latest'
# 重啟PG服務
systemctl restart postgresql-9.6
systemctl enable postgresql-9.6.service

驗證

主節點執行

create table test (id int4, create_time timestamp(0) without time zone);
insert into test values (1, now());
select * from test;

備節點執行

select * from test;

其他查詢

進入測試數據庫test,主庫上執行如下命令返回f,備庫上返回t。 select pg_is_in_recovery();

執行如下命令查看快照,它返回主庫記錄點、備庫記錄點;主庫每增加一條寫入,記錄點的值就會加1。

select txid_current_snapshot();

執行如下命令可以查看主備同步狀態。

select * from pg_stat_replication;

字段state顯示的同步狀態有:startup(連接中)、catchup(同步中)、streaming(同步);字段sync_state顯示的模式有:async(異步)、sync(同步)、potential(雖然現在是異步模式,但是有可能升級到同步模式)。

主備切換

假設主庫崩潰了,備庫如何從只讀狀態切換為讀寫狀態呢?只要把備庫的postgresql.conf中hot_standby修改為off,并且刪除recovery.conf,然后重啟庫就可以提供服務了。

PGPool2(pool主機操作)

安裝PGPool2

yum install -y http://www.pgpool.net/yum/rpms/3.6/redhat/rhel-7-x86_64/pgpool-II-release-3.6-1.noarch.rpm
yum -y install pgpool-II-pg96 pgpool-II-pg96-debuginfo pgpool-II-pg96-devel pgpool-II-pg96-extensions
systemctl enable pgpool.service #開啟自動啟動

添加Pgpool-II運行用戶

useradd postgres # 環境準備時已操作
chown -R postgres.postgres /etc/pgpool-II
chown -R postgres.postgres /var/run/pgpool/

配置pool_hba.conf

cp /etc/pgpool-II/pool_hba.conf{,.bak}

vi /etc/pgpool-II/pool_hba.conf

增加內容

host all all 0.0.0.0/0 md5

配置pcp.conf

主節點登陸后執行:

postgres=# select rolname,rolpassword from pg_authid;
  rolname  |    rolpassword    
--------------------+-------------------------------------
 pg_signal_backend | 
 srcheck   | md5662c10f61b27a9ab38ce69157186b25f
 postgres   | md5d3612d57ee8d4c147cf27b11e3a0974d
 stream_replication | md59279ef6b904bc483e4f85e6d44cfc0ed
(4 rows)

vi /etc/pgpool-II/pool_passwd

增加SQL執行結果的內容,形式為$rolname:$rolpassword例如:

srcheck:md5662c10f61b27a9ab38ce69157186b25f

或者:

pg_md5 -u postgres your_password

vi /etc/pgpool-II/pcp.conf ## 加入 postgres:上一命令的輸出

配置pgpool.conf

cp /etc/pgpool-II/pgpool.conf{,.bak}

vi /etc/pgpool-II/pgpool.conf

內容如下:

# CONNECTIONS

listen_addresses = '*'
port = 54321
socket_dir = '/var/run/pgpool'
pcp_listen_addresses = '*'
pcp_port = 9898
pcp_socket_dir = '/var/run/pgpool'

# - Backend Connection Settings -

backend_hostname0 = 'master'
backend_port0 = 54321
backend_weight0 = 1
backend_data_directory0 = '/data1/pg_data'
backend_flag0 = 'ALLOW_TO_FAILOVER'

backend_hostname1 = 'slave'
backend_port1 = 54321
backend_weight1 = 1
backend_data_directory1 = '/data1/pg_data'
backend_flag1 = 'ALLOW_TO_FAILOVER'

# - Authentication -

enable_pool_hba = on
pool_passwd = 'pool_passwd'

# FILE LOCATIONS

pid_file_name = '/var/run/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 = 'srcheck'
sr_check_password = '123456'
sr_check_database = 'postgres'

# HEALTH CHECK 健康檢查

health_check_period = 10
health_check_timeout = 20
health_check_user = 'srcheck'
health_check_password = '123456'
health_check_database = 'postgres'

# FAILOVER AND FAILBACK

failover_command = '/data1/pg_bin/failover_stream.sh %H'

failover_stream.sh腳本

vim /data1/pg_bin/failover_stream.sh
chmod 777 /data1/pg_bin/failover_stream.sh
chmod u+s /sbin/ifconfig 
chmod u+s /usr/sbin
pgpool -n -d -D > /data1/pg_logs/pgpool.log 2>1  ## 啟動
pgpool -m fast stop ## 關閉

failover_stream.sh內容:

#! /bin/sh 
# Failover command for streaming replication. 
# Arguments: $1: new master hostname. 

new_master=$1 
trigger_command="$PGHOME/bin/pg_ctl promote -D $PGDATA" 

# Prompte standby database. 
/usr/bin/ssh -T $new_master $trigger_command 

exit 0;

登陸設置

當執行pgpool -n -d -D > /data1/pg_logs/pgpool.log 2>1 后可查看集群狀態:

[postgres@pool pgpool-II]$ psql -p 54321 -h 10.0.0.13 -U srcheck -d postgres

postgres=# show pool_nodes;
 node_id | hostname | port | status | lb_weight | role | select_cnt | load_balance_node | replication_delay 
---------+----------+-------+--------+-----------+---------+------------+-------------------+-------------------
 0  | master | 54321 | up  | 0.500000 | primary | 0   | false    | 0
 1  | slave | 54321 | up  | 0.500000 | standby | 0   | true    | 0
(2 rows)

如果未發現集群狀態,請在master和slave主機分別執行以下操作:

[postgres@pool ~]$ pcp_attach_node -d -U postgres -h pool -p 9898 -n 0
[postgres@pool ~]$ pcp_attach_node -d -U postgres -h pool -p 9898 -n 1
#詳情查詢命令pcp_attach_node

HA切換

模擬master主機宕機

Master端:

[postgres@master ~]$ pg_ctl stop
waiting for server to shut down.... done
server stopped

當前集群狀態

[postgres@pool ~]$ psql -p 54321 -h 10.0.0.13 -U srcheck -d postgres
psql (9.6.1)
Type "help" for help.

postgres=# show pool_nodes;
 node_id | hostname | port | status | lb_weight | role | select_cnt | load_balance_node | replication_delay 
---------+----------+------+--------+-----------+---------+------------+-------------------+-------------------
 0  | master | 5432 | down| 0.500000 | standby | 0    | false | 0
 1  | slave  | 5432 | up  | 0.500000 | primary | 0    | true | 0
(2 rows)

發現master已經是standby了,且down機了

修改master,啟動

當master主機宕機后,此時slave主機PG數據庫成為主庫,修改master成為slave的從庫即可

[postgres@master ~]$ vim recovery.conf
standby_mode='on'
primary_conninfo = 'host=slave port=54321 user=stream_replication password=your_password'
restore_command = ''
recovery_target_timeline = 'latest'

同步時間線

#如果報時間線沖突落后,先停掉pg服務,然后執行同步時間線,否知直接看狀態
[postgres@master ~]$ pg_rewind --target-pgdata=/data1/pg_data --source-server='host=slave port=54321 user=postgres dbname=postgres'
servers diverged at WAL position 0/5000098 on timeline 1
rewinding from last common checkpoint at 0/5000028 on timeline 1
Done!
# 重新啟動數據庫
[postgres@master ~]$ pg_ctl start

再次查看當前狀態

[postgres@pool ~]$ psql -p 54321 -h 10.0.0.13 -U srcheck -d postgres
postgres=# show pool_nodes;
 node_id | hostname | port | status | lb_weight | role | select_cnt | load_balance_node | replication_delay 
---------+----------+------+--------+-----------+---------+------------+-------------------+-------------------
 0  | master | 5432 | down| 0.500000 | standby | 0    | false | 0
 1  | slave  | 5432 | up  | 0.500000 | primary | 0    | true | 0
(2 rows)

#注意雖然master已經啟動了,但是還是down,需要手動將master節點添加進pgpool,master的node_id是0,所以-n 0
[postgres@pool ~]$ pcp_attach_node -d -U postgres -h pool -p 54321 -n 0
#提示輸入密碼,輸入pcp管理密碼
#查看當前狀態
[postgres@pool ~]$ psql -p 54321 -h 10.0.0.13 -U srcheck -d postgres
postgres=# show pool_nodes;
 node_id | hostname | port | status | lb_weight | role | select_cnt | load_balance_node | replication_delay 
---------+----------+------+--------+-----------+---------+------------+-------------------+-------------------
 0  | master | 5432 | up | 0.500000 | standby | 0    | false | 0
 1  | slave  | 5432 | up  | 0.500000 | primary | 0    | true | 0
(2 rows)

現在兩個節點都是up了。

主從兩節點pgpool健康檢查腳本(pgpool_check.sh)

說明:此腳本是基于PGpool只安裝到master和slave兩個主機上的情況下使用,在master主機有了pgpool進程后,可在slave主機執行sh pgpool_check.sh 即可

#! /bin/bash
# Check Master host pgpool-process

while true
do
 pgcount=$(nmap 10.0.0.11|egrep '9898|9999'|wc -l)

 if [ $pgcount -eq 2 ] ; then
  echo 'Master host pgpool is GOOD!!!' > /dev/null 2>1
 else
  echo -e "Master host pgpool is \033[31m BAD!!! \033[0m"
  echo -e "Master host pgpool is \033[31m BAD!!! \033[0m"
  echo -e "Master host pgpool is \033[31m BAD!!! \033[0m"
  echo -e "SYSTEM WILL DO THE SHELL : \033[34m su - postgres -c 'pgpool -n -d -D > /data1/pg_logs/pgpool.log 2>1 ' \033[0m"
  su - postgres -c 'pgpool -n -d -D > /data1/pg_logs/pgpool.log 2>1 '
  pgport=$(netstat -lntup|egrep '9898|9999'|wc -l)
  [ $pgport -gt 0 ]  echo -e "Slave host pgpool is \033[32m RUNNING!!! \033[0m"
  exit 0
 fi
done

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • PostgreSQL 主備數據宕機恢復測試方案
  • PostgreSQL 數據同步到ES 搭建操作
  • postgresql 如何查看pg_wal目錄下xlog文件總大小
  • postgresql之使用lsn 獲取 wal文件名的實例
  • 修改postgresql存儲目錄的操作方式
  • postgresql運維之遠程遷移操作
  • postgresql 12版本搭建及主備部署操作

標簽:晉城 蚌埠 來賓 珠海 錦州 烏海 株洲 衡陽

巨人網絡通訊聲明:本文標題《PostgreSQL+Pgpool實現HA主備切換的操作》,本文關鍵詞  PostgreSQL+Pgpool,實現,主備,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《PostgreSQL+Pgpool實現HA主備切換的操作》相關的同類信息!
  • 本頁收集關于PostgreSQL+Pgpool實現HA主備切換的操作的相關信息資訊供網民參考!
  • 推薦文章
    欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品
  • <rt id="w000q"><acronym id="w000q"></acronym></rt>
  • <abbr id="w000q"></abbr>
    <rt id="w000q"></rt>
    久久亚洲欧美国产精品乐播 | 毛片av一区二区| 成人涩涩免费视频| 免费看黄色三级| 日韩一区二区免费在线观看| 国产欧美久久久精品影院| 青青草97国产精品免费观看| www.四虎精品| 欧美视频日韩视频在线观看| 亚洲图片欧美激情| 成人av手机在线观看| 成人欧美一区二区三区黑人一| 欧美成人艳星乳罩| 亚洲超丰满肉感bbw| 99视频在线精品| 色呦呦国产精品| 一区二区欧美国产| 国产亚洲精品成人a| 91麻豆精品国产91久久久更新时间| 亚洲成人www| 在线免费观看a级片| wwwwxxxxx欧美| 国产精品 欧美精品| 欧美卡一卡二卡三| 一区二区三区在线免费观看| 中文字幕永久免费| 91麻豆精品国产91久久久 | 亚洲影院在线观看| 国产大学生视频| 欧美成人性战久久| 国产高清不卡一区| 日本韩国一区二区三区视频| 亚洲二区在线观看| 亚洲午夜福利在线观看| 亚洲国产精品激情在线观看| 不卡影院免费观看| 欧美日韩aaaaa| 美女国产一区二区三区| 免费在线观看a级片| 亚洲精品老司机| 久久久久国产精品无码免费看| 精品国产乱码久久久久久浪潮 | 欧美一区二区成人| 国产综合久久久久久鬼色| 久久r这里只有精品| 亚洲电影视频在线| 美女被到爽高潮视频| 中文字幕一区二区三区四区| 在线播放第一页| 久久久久久久久久久电影| av毛片久久久久**hd| 在线播放/欧美激情| 国产乱一区二区| 欧美综合天天夜夜久久| 免费欧美高清视频| 色综合久久久久| 蜜臀久久久99精品久久久久久| 99久久久免费精品| 亚洲bdsm女犯bdsm网站| 秋霞网一区二区三区| 亚洲综合无码一区二区| 在线观看亚洲大片短视频| 一区二区在线观看免费视频播放| 一级性生活毛片| 亚洲少妇中出一区| 超碰97人人干| 亚洲欧美日韩一区二区| 日韩精品卡通动漫网站| 亚洲日本乱码在线观看| 无码人妻aⅴ一区二区三区69岛| 亚洲欧美日韩久久精品| 久久午夜福利电影| 亚洲小说欧美激情另类| 久草手机视频在线观看| 天天操天天干天天综合网| 天天操天天操天天操天天操天天操| 天天综合网 天天综合色| 四虎永久免费在线| 久久av中文字幕片| 欧美日韩久久久| 岛国精品一区二区| 精品乱人伦一区二区三区| 99riav久久精品riav| 久久久91精品国产一区二区精品| 四虎成人免费视频| 国产精品国产三级国产aⅴ原创 | 日韩精品一区二区三区四区视频| 国产三级一区二区| 久久久久久久久久影视| 1024亚洲合集| 国产调教在线观看| 日本不卡123| 欧美男人的天堂一二区| 成人国产精品免费| 国产欧美一区二区精品性色| aaaaa一级片| 亚洲成人免费视| 欧洲国产伦久久久久久久| 成人做爰69片免费看网站| www精品美女久久久tv| 日韩网站在线播放| 亚洲国产精品久久艾草纯爱| 色94色欧美sute亚洲线路一ni| 国产一区二区三区四| 在线播放中文字幕一区| 潘金莲一级淫片aaaaaaa| 国产精品成人在线观看| 亚洲精品国产精品国自| 久久精品免费观看| 欧美成人伊人久久综合网| 在线播放av网址| 亚洲韩国一区二区三区| 欧洲av在线精品| 91色在线porny| 亚洲欧美色图小说| 日本国产一区二区| 99久久99久久精品免费观看| 国产精品久久久久毛片软件| 一级免费黄色录像| 国产精品亚洲第一| 国产欧美va欧美不卡在线| 欧美老女人性生活视频| 国模套图日韩精品一区二区| www日韩大片| jizz日本在线播放| 国产精品1区2区3区在线观看| 久久久精品免费免费| 少妇视频在线播放| 国产乱子伦一区二区三区国色天香 | 三级黄色片在线观看| 国产一区中文字幕| 国产拍揄自揄精品视频麻豆| 少妇视频在线播放| 国产成人av电影| 国产精品国产自产拍在线| 一道本成人在线| 丰满少妇一区二区三区专区| 亚洲国产精品影院| 制服丝袜日韩国产| 黄色国产在线观看| 精品一区二区三区欧美| 久久久久久久久久久久久夜| 国产精品视频看看| 成人av集中营| 亚洲成在人线免费| 精品欧美乱码久久久久久1区2区| 欧美特级黄色录像| 国产精品亚洲人在线观看| 国产精品初高中害羞小美女文| 在线免费视频一区二区| 成年人小视频在线观看| 免费看日韩a级影片| 久久久不卡网国产精品二区| 国产精品三区在线观看| 下面一进一出好爽视频| 五月婷婷另类国产| 精品嫩草影院久久| 男人在线观看视频| 在线观看一区二区三区视频| 日韩不卡在线观看日韩不卡视频| ww久久中文字幕| 一本久久精品一区二区| 日本50路肥熟bbw| 久久99久久久久| 国产精品精品国产色婷婷| 欧美日韩日日摸| 色欲狠狠躁天天躁无码中文字幕| 国产盗摄精品一区二区三区在线| 一区二区高清免费观看影视大全| 欧美一区二区免费视频| 国产一区第一页| 成人一区二区三区仙踪林| 老司机免费视频一区二区三区| 国产精品天美传媒沈樵| 欧美福利电影网| 青青青视频在线免费观看| 精品国产aⅴ一区二区三区东京热 久久久久99人妻一区二区三区 | 久久av红桃一区二区禁漫| 国产chinesehd精品露脸| 美女视频网站久久| 亚洲天堂精品在线观看| 日韩欧美一区在线| 国产三级国产精品国产国在线观看| youjizz.com日本| 精品国产91洋老外米糕| 我要看黄色一级片| 欧美一区二区免费在线观看| 福利一区二区在线| 日韩在线播放一区二区| 国产精品你懂的在线欣赏| 欧美二区乱c少妇| 久久噜噜色综合一区二区| 亚洲一区二区三区四区五区六区| 丰满亚洲少妇av| 奇米影视一区二区三区| 亚洲精品写真福利| 国产午夜精品一区二区| 欧美放荡的少妇| 91精品福利视频| 欧美另类69xxxx|