Postgresql笔记(三)repmgr+pgpool实现双机流式复制、集群

实现目标:主库可读可写,从库只读,两库之间为流式复制,若主库宕机,从库自动升级成主库
环境 Debian 9

软件介绍

Repmgr是一个开源工具套件,用于管理PostgreSQL服务器集群中的复制和故障转移。它使用工具来增强PostgreSQL的内置热备份功能,以设置备用服务器,监控复制以及执行管理任务,例如故障转移或手动切换操作。

Repmgr 4.1版文档地址 https://repmgr.org/docs/4.1/index.html

Pgpool是一个工作在PostgreSQL多服务器和PostgreSQL数据库客户端之间的中间件。
pgpool http://www.pgpool.net/docs/latest/en/html/
pgpoolAdmin http://www.pgpool.net/docs/pgpoolAdmin/index_en.html

Pgpool

Pgpool

安装步骤

wget http://www.pgpool.net/download.php?f=pgpool-II-4.0.1.tar.gz
tar -xzvf download.php\?f\=pgpool-II-4.0.1.tar.gz
./configure
make
make install
ln -s /usr/local/lib/libpcp.so.1 /usr/lib/libpcp.so.1
cd /usr/local/etc
cp pgpool.conf.sample-replication pgpool.conf
#配置局域网段/指定IP trust
#host    all         all         192.168.0.0/16        trust
cp pool_hba.conf.sample pool_hba.conf
cp pcp.conf.sample pcp.conf
chmod 644 pgpool.conf pool_hba.conf pcp.conf
chown www-data pgpool.conf pool_hba.conf pcp.conf
#配置service
cd /lib/systemd/system
vim pgpool.service
ln -s /lib/systemd/system/pgpool.service /etc/systemd/system/multi-user.target.wants/pgpool.service
useradd pgpool
passwd pgpool
systemctl start pgpool
# 配置pgpool.conf的图形化页面工具
wget http://www.pgpool.net/download.php?f=pgpoolAdmin-4.0.0.tar.gz
tar -xzvf download.php?f=pgpoolAdmin-4.0.0.tar.gz
apt -y install php-fpm php-pgsql
mv pgpoolAdmin-4.0.0 /var/www/pgpoolAdmin
vim /etc/nginx/sites-avaliable/pgpool-nginx.conf
cd /var/www/pgpoolAdmin
chmod 777 templates_c
chown www-data /var/www/pgpoolAdmin/conf/pgmgt.conf.php
chmod 644 /var/www/pgpoolAdmin/conf/pgmgt.conf.php
# 配置好nginx后 访问 /install/index.php

Repmgr

apt-get install postgresql-11-repmgr
# 分别copy主库从库的repmgr.conf文件
# ----master start-----
createuser -s repmgr
createdb repmgr -O repmgr
psql -U repmgr
  # 执行SQL
  ALTER USER repmgr SET search_path TO repmgr, "$user", public;
# 
repmgr -f /etc/postgresql/11/main/repmgr.conf primary register
# -----master end ----
# -----slave start ----
/usr/lib/postgresql/11/bin/pg_ctl -w -D /var/lib/postgresql/11/main stop
repmgr -h node1 -U repmgr -d repmgr -f  /etc/postgresql/11/main/repmgr.conf standby clone --force
/usr/lib/postgresql/11/bin/pg_ctl -D /var/lib/postgresql/11/main -l /var/log/postgresql/postgresql-11-main.log -w -o "-c config_file=/etc/postgresql/11/main/postgresql.conf" start
repmgr standby register -f /etc/postgresql/11/main/repmgr.conf
repmgr -f /etc/postgresql/11/main/repmgr.conf cluster show
vim ~/.bashrc
  alias repmgrf='repmgr -f /etc/postgresql/11/main/repmgr.conf'
# -----slave end ----

# repmgrd (监控repmgr)
repmgrd -f /etc/postgresql/11/main/repmgr.conf --pid-file /tmp/repmgrd.pid --daemonize > /var/log/postgresql/repmgr.log 2>&1

postgres配置

postgresql主要修改配置

#Master: postgresql.conf
shared_preload_libraries = 'repmgr'
wal_level = 'hot_standby'
archive_mode = on      
  
#Slave: postgresql.conf
shared_preload_libraries = 'repmgr'
hot_standby = on
hot_standby_feedback = on   

从库的recovery.conf

# slave
# /var/lib/postgresql/11/main/recovery.conf
standby_mode = 'on'
primary_conninfo = 'host=node1 user=repmgr application_name=pg_node2 connect_timeout=2'
recovery_target_timeline = 'latest'

部分配置文件sample

pgpool.service

[Unit]

Description=Pgpool-II

After=syslog.target network.target

Wants=network.target

[Service]
User=pgpool

Type=forking

ExecStartPre=/bin/sh -c "rm -f /tmp/.s.PGSQL.9999”

ExecStartPre=/bin/sh -c "rm -f /tmp/.s.PGSQL.9898"

RestartSec=5s

ExecStart=/usr/local/bin/pgpool -f /usr/local/etc/pgpool.conf -a /usr/local/etc/pool_hba.conf -F /usr/local/etc/pcp.conf

ExecStop=/usr/local/bin/pgpool -f /usr/local/etc/pgpool.conf -a /usr/local/etc/pool_hba.conf -F /usr/local/etc/pcp.conf stop

ExecReload=/usr/local/bin/pgpool -f /usr/local/etc/pgpool.conf -a /usr/local/etc/pool_hba.conf -F /usr/local/etc/pcp.conf reload

Restart=always

StandardOutput=syslog

StandardError=syslog

SyslogIdentifier=my_pgpool

PIDFile=/var/run/pgpool/pgpool.pid

[Install]

WantedBy=multi-user.target

pgpool-nginx.conf

server {
        listen 80;
        server_name  pgpool.xxx.com;
        location ~ \.php$ {
                        root /var/www/html/pgpoolAdmin;
                        index index.php;
                        #fastcgi_pass 127.0.0.1:9000;
                        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
                        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                        include fastcgi_params;
                }
        location / {
                root /var/www/html/pgpoolAdmin;
        }

}

repmgr.conf

# https://raw.githubusercontent.com/2ndQuadrant/repmgr/master/repmgr.conf.sample
node_id=1
node_name=pg_node1
conninfo='host=node1 user=repmgr dbname=repmgr connect_timeout=2'
data_directory='/var/lib/postgresql/11/main'

monitoring_history=yes
log_file='/var/log/postgresql/repmgr.log'

service_start_command = '/usr/lib/postgresql/11/bin/pg_ctl -D /var/lib/postgresql/11/main -l /var/log/postgresql/postgresql-11-main.log -w -o "-c config_file=/etc/postgresql/11/main/postgresql.conf" start'
service_restart_command = '/usr/lib/postgresql/11/bin/pg_ctl -w -D /var/lib/postgresql/11/main -l /var/log/postgresql/postgresql-11-main.log restart'
service_reload_command = '/usr/lib/postgresql/11/bin/pg_ctl -w -D /var/lib/postgresql/11/main -l /var/log/postgresql/postgresql-11-main.log reload'

failover=automatic
promote_command='repmgr standby promote -f /etc/postgresql/11/main/repmgr.conf --log-to-file'
follow_command='repmgr standby follow -f /etc/postgresql/11/main/repmgr.conf --log-to-file --upstream-node-id=2'

promote_check_timeout=30                # The length of time (in seconds) to wait
                                        # for the new primary to finish promoting

primary_follow_timeout=30               # The max length of time (in seconds) to wait
                                        # for the new primary to become available

#event_notification_command='/data/send_mail "repmgr event notification" "node Id: %n \n事件: %e \n成功(1?): %s \n时间: %t \n详情: %d"'

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,444评论 4 365
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,867评论 1 298
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 110,157评论 0 248
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,312评论 0 214
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,673评论 3 289
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,802评论 1 223
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,010评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,743评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,470评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,696评论 2 250
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,187评论 1 262
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,538评论 3 258
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,188评论 3 240
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,127评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,902评论 0 198
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,889评论 2 283
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,741评论 2 274

推荐阅读更多精彩内容