PostgreSQL集群+PGPool集群部署方案

1 环境准备

  1. 软件
    • CentOS 7.6
    • PGPool 4.1.0
    • PostgreSQL11.7
  2. 节点
    • node1: pgsql_1_ip : pgsql主库:数据节点1
    • node2: pgsql_2_ip : pgsql从库:数据节点2
    • node2: pgsql_3_ip : pgsql从库:数据节点3
    • VIP pgpool所需的浮动ip,自定义,与上节点同网段
  3. 配置信息
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    PostgreSQL Port:18083
    PgPool port:18999
    数据库主账号 app/
    健康检查\PCP的用户 pgpool1/pgpool1
    同步复制账号:replica/replica-vcredit
    目录结构:
    /data/pgsql11/data #PostgreSQL数据日志
    /data/pgsql11/bakFile #备份文件目录
    /data/pgsql11/bakFile/logicBackUp #PostgreSQL逻辑备份
    /data/pgsql11/bakFile/physicsBakUp #PostgreSQL物理备份
    /data/pgsql11/bakFile/pg_archive #PostgreSQL归档备份
    /data/logs/pgsql11 #PostgreSQL日志目录
    /data/logs/pgpool/ #pgpool日志目录

模板配置文件:http://112.25.66.177:10080/postgresql/conf/
此目录下的文件是从模板配置中做初步修改后的,下文 【模板配置文件修改项:】中内容即指此文件需要修改的地方

2 建立ssh互信

  • 创建SSH互信
    通过ssh互信,在pgpool集群中,一旦存在pgpool服务器或者postgreSql发生切换,可免密连接。配置步骤如下:
    注意:ssh互信需要在pgsql的启动用户下创建
  1. 在三个服务器中cd ~/.ssh/ 进入.ssh目录
  2. 执行 ssh-keygen -t rsa 生成秘钥,一路回车即可
  3. 查看秘钥 ls,其中 id_rsa.pub 为公钥,用于加密,id_rsa 为私钥用于解密
  4. 将node1的公钥id_rsa.pub中的内容拷贝到node2的authorized_keys认证文件中,则可在node2上免密连接到node1,完成三个服务器的相互免密登录则需要将本机的id_rsa.pub内容分别放入其余机器的authorized_keys认证文件中
  5. 第一次ssh登录时需要输入yes,再次访问时即可免密码登录。第一次连接时会问你是否连接,点击yes就可以了。下次登录就不会再提示了。先在node1上测试连接node2:直接用命令ssh pgsql_2_ip连接。三个环境均需相互测试
  6. 注意在ssh连接后,会连接至另一服务器上,此时需要通过exit命令退出再进行测试连接

3 PostGreSQL一主两从搭建

3.1 安装

以下操作三台机器均需配置

  • 在线安装
    1
    2
    3
    #https://www.postgresql.org/download/linux/redhat/ 在此网址输入机器信息会自动出安装命令
    # cat /etc/redhat-release查询系统版本,目前发现有些主机系统类型为redhat或者centos,更新源(手动下载)
    sudo yum install -y https://download.postgresql.org/pub/repos/yum/11/redhat/rhel-7-x86_64/pgdg-centos11-11-2.noarch.rpm
  • 离线安装
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    #1. 创建本地yum源
    #1.1 下载依赖
    mkidr /data/packages
    cd /data/packages
    wget http://112.25.66.177:10080/postgresql/rely/pgsqlSource.tar.gz
    tar -zxvf pgsqlSource.tar.gz
    #1.2 配置本地yum源
    yum install -y createrepo
    createrepo /data/packages/pgsql/
    vim /etc/yum.repos.d/pg.repo
    [pg]
    name=pg
    baseurl=file:///data/packages/pgsql
    enable=1
    gpgcheck=0
    priority=1
    #1.3 安装
    yum clean all
    yum makecache
    yum -y install postgresql11
    yum install -y postgresql11-devel postgresql11-server
    yum install -y postgis25_11-client.x86_64 postgis25_11.x86_64 #gis插件,需要则安装
  • 初始化配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#1. 配置环境变量
sudo vim /etc/profile
export PGSQL_HOME=/usr/pgsql-11
export PATH=$PATH:$PGSQL_HOME/bin

source /etc/profile
#2. 初始化数据库
mkdir -p /data/pgsql11/
chown -R app:app /data
mkdir -p /data/logs/pgsql11 #创建pgsql日志目录
touch /data/logs/pgsql11/pgsql.log #pgsql启动日志
mkdir /data/logs/pgpool/ #创建pgpool日志目录
chown -R app:app /var/run/postgresql #更改文件夹操作权限,该文件夹存放套接字文件
#主库的归档文件目录
mkdir -p /data/pgsql11/bakFile/pg_archive

3.2 主服务器配置

  1. 主库初始化
    1
    2
    #初始化数据库
    initdb -D /data/pgsql11/data
  2. 配置文件 /data/pgsql11/data/pg_hba.conf
    该文件用于设置pgsql用户登录认证方式
    模板配置文件修改项:IP地址
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #文件末尾增如下
    #该文件有优先级,若符合前项规则就不会匹配后者
    #配置运行刚刚创建的replica用户可以进行连接,
    host replication replica pgsql_1_ip/32 md5
    host replication replica pgsql_2_ip/32 md5
    host replication replica pgsql_3_ip/32 md5
    #配置本地免密登录
    host all all pgsql_1_ip/32 trust
    host all all pgsql_2_ip/32 trust
    host all all pgsql_3_ip/32 trust
    #任意ip md5认证登录
    host all all 0.0.0.0/0 md5
  3. 配置文件 /data/pgsql11/data/postgresql.conf
    模板配置文件修改项:无
    1
    2
    3
    4
    5
    6
    7
    8
    listen_addresses = ‘*’  #监听所有ip
    archive_mode = on #开启归档模式
    archive_command = ‘mv %p /data/pgsql11/bakFile/pg_archive/%f’ #归档命令
    wal_level = hot_standby #热备模式
    max_wal_senders = 32 #最多有32个流复制连接
    wal_sender_timeout = 60s #流复制超时时间
    wal_keep_segments = 10240
    max_connections = 100 #最大连接时间,必须要小于从库的配置
  4. 启动数据库
1
2
3
4
5
6
7
8
9
10
#启动
pg_ctl -D /data/pgsql11/data -l /data/logs/pgsql11/pgsql.log start
#创建同步用户
psql -h pgsql_1_ip -p 18083 -d postgres
CREATE USER replica WITH PASSWORD 'replica-vcredit' REPLICATION;
#创建流复制检查用户和pcp命名用户
CREATE USER pgpool1 WITH PASSWORD 'pgpool1';
#修改超管用户密码
ALTER USER app WITH PASSWORD 'passwd';
#ALTER USER app WITH PASSWORD 'DYYB7q7kKp7S445i';

3.3 从服务器配置

  1. 基础备份
    1
    2
    3
    4
    5
    6
    7
    8
    9
    pg_basebackup -F p --progress -D /data/pgsql11/data/ -h pgsql_1_ip -p 18083 -U replica
    replica-vcredit
    命令行参数如下:
    -F p 指定输出格式:p原样输出,即把主数据库中的各个数据文件,配置文件、目录结构都完全一样的写到备份目录;
    -P, --progress 在备份过程中实时打印备份进度
    -D 指定把备份写到那个目录
    -h 启动的主库数据库地址
    -p 端口号
    -U 流复制用户
  2. 配置文件 /data/pgsql11/data/recovery.conf
    模板配置文件修改项:主节点ip
    1
    2
    3
    4
    5
    cd /data/pgsql11/data/
    touch recovery.conf
    standby_mode = on #表示该节点是从库
    primary_conninfo = 'host=pgsql_1_ip port=18083 user=replica password=replica-vcredit' #主机信息和连接用户
    recovery_target_timeline = 'latest' #说明恢复到最新状态
  3. 配置文件 /data/pgsql11/data/postgresql.conf
    模板配置文件修改项:无
    1
    2
    3
    4
    5
    6
    7
    vim postgresql.conf
    wal_level = hot_standby #热备模式
    max_connections = 300 #最大连接时间
    hot_standby = on #说明这台机器用于数据归档和数据查询
    #max_standby_streaming_delay = 30s #流备份的最大延迟时间
    #wal_receiver_status_interval = 1s #向主机汇报本机状态的间隔时间
    hot_standby_feedback = on #r出现错误复制,向主机反馈
  4. 启动数据库
    1
    2
    pg_ctl -D /data/pgsql11/data -l /data/logs/pgsql11/pgsql.log start
    #至此,主从配置完成,可更改主库数据,查看从库是否更新进行测试。

    3.4 数据库启动后操作

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #1. 查看进程 ps -aux
    主库有sender进程
    从库有receiver进程
    #2. 给postgreSql安装gis扩展
    psql -h pgsql_1_ip -p 18083 -d postgres
    postgres=# CREATE EXTENSION postgis;
    CREATE EXTENSION
    postgres=# SELECT postgis_full_version();
    #3. 启停主数据库
    pg_ctl -D /data/pgsql11/data -l /data/logs/pgsql11/pgsql.log start
    pg_ctl -D /data/pgsql11/data -l /data/logs/pgsql11/pgsql.log stop
    pg_ctl -D /data/pgsql11/data -l /data/logs/pgsql11/pgsql.log reload

    4 Pgpool集群搭建

    4.1 pgpool-II安装

  • 安装pgpool-II
    1
    2
    sudo yum install -y pgpool-II-11.x86_64
    sudo yum install -y pgpool-II-11-extensions.x86_64
  • 安装扩展函数
    1
    2
    3
    4
    5
    6
    7
    #1. 安装pgpool-regclass函数,此函数可解决在不同的 schema 中处理相同的表名出现的问题(临时表不会出问题)
    psql -h pgsql_1_ip -p 18083 -d postgres #连接主库
    postgres=# CREATE EXTENSION pgpool_regclass;
    CREATE EXTENSION
    #2. 安装C语言函数 pgpool-recovery,用于在线恢复节点
    postgres=# CREATE EXTENSION pgpool_recovery;
    CREATE EXTENSION
  • 建立insert_lock 表
    该表主要用与解决 pgpool-Ⅱ和 VACUUM 表锁的互斥问题。
    1
    2
    psql -f /usr/pgpool-11/share/pgpool-II/insert_lock.sql -h pgsql_1_ip -p 18083 -U app template1
    #template1数据库为创建数据库时的默认模板数据库,修改此数据库可使以后创建的数据库都有insert_lock 表

    4.2 pgpool-II配置

  • 配置信息
    模板配置文件:http://112.25.66.177:10080/postgresql/conf/pgpool/
    操作机器:pgsql_1_ip、pgsql_2_ip、pgsql_3_ip
    操作用户:root

    4.2.1 配置文件 /etc/pgpool-II-11/pgpool.conf

  • 单点配置
    默认配置文件修改项
    backend_hostname0
    backend_hostname1
    backend_hostname2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#1. 连接
listen_addresses = '*' #指定pgpool-II 将接受 TCP/IP 连接的主机名或者IP地址
port = 18999 # pgpool-II 监听 TCP/IP 连接的端口号
socket_dir = '/var/run' # pgpool-II 建立用于建立接受 UNIX 域套接字连接的目录。
pcp_listen_addresses = '*' #指定 pcp 进程接收 TCP/IP 连接的主机名或IP地址。
pcp_port = 18898 # PCP 进程接受连接的端口号。
pcp_socket_dir = '/var/run' #PCP 进程用于建立接受 UNIX 域套接字连接的目录。
#2. 后端
backend_hostname0 = 'pgsql_1_ip' #指出连接到 PostgreSQL 后台程序的地址。0为主数据库//主库IP
backend_port0 = 18083 #指定后台程序的端口号。
backend_weight0 = 1 #指定后台程序的负载均衡权重。
backend_data_directory0 = '/data/pgsql11/data' #指定后台的数据库实例的目录。
backend_flag0 = 'ALLOW_TO_FAILOVER' #允许故障切换或者从后台程序断开。
backend_hostname1 = 'pgsql_2_ip' #从库1
backend_port1 = 18083
backend_weight1 = 1000
backend_data_directory1 = '/data/pgsql11/data'
backend_flag1 = 'ALLOW_TO_FAILOVER'
backend_hostname2 = 'pgsql_3_ip' #从库2
backend_port2 = 18083
backend_weight2 = 1000
backend_data_directory2 = '/data/pgsql11/data'
backend_flag2 = 'ALLOW_TO_FAILOVER'
#3. 客户端认证
enable_pool_hba = on #如果为 on,则使用 pgpool_hba.conf 来进行客户端认证。
pool_passwd = 'pool_passwd' #指定用于 md5 认证的文件名。默认值为"pool_passwd"。"" 表示禁用。
#4. 日志
log_line_prefix = '%t: pid %p: ' #输出到每行日志开头的打印样式字符串,默认值打印时间戳和进程号
log_connections = off #如果为 on,进入的连接将被打印到日志中。
log_hostname = off #如果为 on,ps 命令将显示客户端的主机名而不是 IP 地址。
log_statement = off当设置为 on 时生成 SQL 日志消息。
log_per_node_statement = on #针对每个 DB 节点产生日志,要知道一个 SELECT 的结果是不是从查询缓存获得,需要启用它
pid_file_name = '/var/run/pgpool-II-11/pgpool.pid' #到包含 pgpool-II 进程 ID 的文件的完整路径名。//目录需要手动创建

logdir = '/data/logs/pgpool' #保存pool_status文件的目录。
#5. 主备模式下开启负载均衡
replication_mode = off#设置为 on 以启用复制模式,在主/备模式中, [replication_mode](http://www.pgpool.net/docs/pgpool-II-3.5.4/doc/pgpool-zh_cn.html#REPLICATION_MODE) 必须被设置为 off,并且 [master_slave_mode](http://www.pgpool.net/docs/pgpool-II-3.5.4/doc/pgpool-zh_cn.html#MASTER_SLAVE_MODE) 为 on
load_balance_mode = on # 当设置为 on时,SELECT 查询将被分发到每个后台程序上用于负载均衡。
master_slave_mode = on # 主备模式
master_slave_sub_mode = 'stream' # 使用 PostgreSQL 内置的复制系统(基于流复制)时被设置
sr_check_period = 10 #本参数指出基于流复制的延迟检查的间隔,单位为秒
#注:需要提前创建好以下配置所指定的用户
sr_check_user = 'pgpool1' #执行基于流复制检查的用户名。用户必须存在于所有的 PostgreSQL 后端上,否则,检查将出错。
sr_check_password = 'pgpool1' #执行流复制检测的用户的密码。
sr_check_database = 'postgres' #执行流复制延迟检测的数据库。
delay_threshold = 10000000 #指定能够容忍的备机上相对于主服务器上的 WAL 的复制延迟,单位为字节。 如果延迟到达了 delay_threshold,pgpool-II 不再发送 SELECT 查询到备机。 所有的东西都被发送到主服务器,即使启用了负载均衡模式,直到备机追赶上来。
#6. 健康检查
health_check_period = 10 # 本参数指出健康检查的间隔,单位为秒。
health_check_timeout = 20 # 本参数用于避免健康检查在例如网线断开等情况下等待很长时间。
health_check_user = 'pgpool1' #用于执行健康检查的用户。用户必须存在于 PostgreSQL 后台中。
health_check_password = 'pgpool1' #用于执行健康检查的用户的密码。
health_check_database = 'postgres' #执行健康检查的数据库名。
  • 集群配置
    需先完成单点配置
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #默认配置修改项
    wd_hostname
    delegate_IP
    if_up_cmd
    if_down_cmd
    heartbeat_destination0
    heartbeat_device0
    heartbeat_destination1
    heartbeat_device1
    other_pgpool_hostname0
    other_pgpool_hostname1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#1. 配置看门狗
use_watchdog = on #如果为 on,则激活看门狗。
wd_hostname = 'pgsql_1_ip ' #设置本节点的节点名,指定 pgpool-II 的主机名或者IP地址
wd_port = 18900 #指定看门狗的通信端口。
wd_priority = 1 #本参数用于设定在主看门狗节点选举时本地看门狗节点的优先权。 在集群启动的时候或者旧的看门狗故障的时候,wd_priority 值较高的节点会被选为主看门狗节点。
wd_ipc_socket_dir = '/var/run' #建立 pgpool-II 看门狗 IPC 连接的本地域套接字建立的目录。
#2. 虚拟IP控制
delegate_IP = 'VIP' #指定客户端的服务(例如应用服务等)连接到的 pgpool-II 的虚拟 IP (VIP) 地址。 当一个 pgpool-II 从备节点切换为激活节点时,pgpool-II 接管这个 VIP。
if_cmd_path = '/sbin' #本参数指定用于切换 IP 地址的命令的所在路径。
if_up_cmd = 'ifconfig ens192:0 inet $_IP_$ netmask 255.255.255.0' #本参数指定一个命令用以启用虚拟 IP。设置命令和参数,例如 "ip addr add $_IP_$/24 dev eth0 label eth0:0"。 参数 $_IP_$ 会被 [delegate_IP](http://www.pgpool.net/docs/pgpool-II-3.5.4/doc/pgpool-zh_cn.html#DELEGATE_IP) 设置的值替换。ens192根据现场机器改掉。
if_down_cmd = 'ifconfig ens192:0 down' #本参数指定一个命令用以停用虚拟 IP
#注:ifconfig ens192:0 inet $_IP_$ netmask 255.255.255.0'为给网卡配置ip的命令,ens192:0表示虚拟网络接口,给单个网卡配置多个ip时可设置为eth192:x (x是0-255),netmask 255.255.255.0 配置的是子网掩码,我们可以通过ifconfig命令查看本机网卡
arping_cmd = 'arping -U $_IP_$ -w 1' #arping命令,调整需要重启
#arping,用来向局域网内的其它主机发送ARP请求的指令,它可以用来测试局域网内的某个IP是否已被使用。
#3. 心跳模式
wd_lifecheck_method = 'heartbeat' #本参数指定存活检查的模式。
wd_interval = 10 #本参数指定 pgpool-II 进行存活检查的间隔,单位为秒
wd_heartbeat_port = 9694 #本选项指定接收心跳信号的端口号。默认为 9694 。
wd_heartbeat_keepalive = 2 #本选项指定发送心跳信号的间隔(秒)。默认值为 2。
wd_heartbeat_deadtime = 30 #如果本选项指定的时间周期内没有收到心跳信号,则看门狗认为远端的 pgpool-II 发生故障。
heartbeat_destination0 = 'pgsql_2_ip' #设置其它PostgreSQL节点的节点名,本选项指定心跳信号发送的目标,可以是 IP 地址或主机名。设置其它PostgreSQL节点的节点名
heartbeat_destination_port0 = 9694 #本选项指定由 [heartbeat_destinationX](http://www.pgpool.net/docs/pgpool-II-3.5.4/doc/HEARTBEAT_DESTINATION) 指定的心跳信号目标的端口号。这个值通常等于 [wd_heartbeat_port](http://www.pgpool.net/docs/pgpool-II-3.5.4/doc/WD_HEARTBEAT_PORT)。
heartbeat_device0 = 'ens192' #ifconfig查看本节点网卡名称 #本选项指定用于发送心跳信号到由 [heartbeat_destinationX](http://www.pgpool.net/docs/pgpool-II-3.5.4/doc/HEARTBEAT_DESTINATION)指定的目标的设备名。
heartbeat_destination1 = 'pgsql_3_ip' #设置其它PostgreSQL节点的节点名
heartbeat_destination_port1 = 9694
heartbeat_device1 = 'ens192'
#4. 服务监控
other_pgpool_hostname0 = 'pgsql_2_ip' #指定需要监控的 pgpool-II 服务器主机。这用于发送/接收查询和数据包,同时也是看门狗的标识。 设置其它Pgpool节点的节点名
other_pgpool_port0 = 18999 # 指定需要监控的 pgpool-II 服务器的 pgpool 服务的端口。
other_wd_port0 = 18900 # 指定需要监控的 pgpool-II 服务器的看门狗的端口。
other_pgpool_hostname1 = 'pgsql_3_ip' #同other_pgpool_hostname0 若pgpool为双节点则无需此参数
other_pgpool_port1 = 18999
other_wd_port1 = 18900

4.2.2 配置文件 /etc/pgpool-II-11/pool_hba.conf

pgpool可以按照和PostgreSQL的hba.conf类似的方式配置自己的主机认证,所有连接到pgpool上的客户端连接将接受认证,这解决了后端PostgreSQL无法直接对前端主机进行IP地址限制的问题。

  1. 配置文件 pool_hba.conf
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #文件末尾增如下
    #该文件有优先级,若符合前项规则就不会匹配后者
    #配置运行刚刚创建的replica用户可以进行连接,
    host replication replica pgsql_1_ip/32 md5
    host replication replica pgsql_2_ip/32 md5
    host replication replica pgsql_3_ip/32 md5
    #配置本地免密登录
    host all all pgsql_1_ip/32 trust
    host all all pgsql_2_ip/32 trust
    host all all pgsql_3_ip/32 trust
    #任意ip md5认证登录
    host all all 0.0.0.0/0 md5
  2. 认证文件 pool_passwd
    1
    2
    3
    4
    5
    #pool_passwd 此文件用于进行pgpool登陆的认证只有存在其中的用户及密码方可登陆pgpool
    #pool_passwd 中用户必须在pgsql中存在
    cd /etc/pgpool-II-11
    sudo pg_md5 -p -m -u app pool_passwd
    password:

    4.2.3 配置文件 /etc/pgpool-II-11/pcp.conf

    pgpool-II 有一个用于管理功能的接口,用于通过网络获取数据库节点信息、关闭 pgpool-II 等。要使用 PCP 命令,必须进行用户认证。这需要在 pcp.conf 文件中定义一个用户和密码。(pcp具体命令可参考网址http://www.pgpool.net/docs/pgpool-II-3.5.4/doc/pgpool-zh_cn.html#memcached_params)。
    1
    2
    3
    4
    5
    6
    #1. 使用pg_md5命令加密密码
    pg_md5 pgpool1
    #2. 编写pcp.config文件
    vim /etc/pgpool-II-11/pcp.conf
    #冒号前后不能有空格,输入上文中加密码的pgpool1用户密码
    pgpool1:1fe5203073aa5e6d4bf9480cd93413e8

    4.3 pgpool的启动与测试

    4.3.1 pgpool的启停

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    sudo pgpool -n > /data/logs/pgpool/pgpool.log 2>&1 & #后端启动命令,先启动主服务器,再启动从服务器,启动日志在pgpool.log查看
    sudo pgpool -C -D -n > /data/logs/pgpool/pgpool.log 2>&1 &
    #-C,在memqcache_method=memcached时清除查询缓存oidmaps(如果是shmem,则在pgpool启动时丢弃。)
    #-D,--放弃状态放弃pgpool_status文件,不还原以前的状态
    sudo pgpool stop #停止命令,如果还有客户端连接着, pgpool-II 等待它们断开连接,然后才结束运行。可用以下命令:
    sudo pgpool -m fast stop #快速停止命令
    #若以上均不能停止pgpool,则需kill掉pgpool的所有进程:
    sudo killall -9 pgpool
    #集群模式下关进程需要kill watchdog的进程
    ps -aux | grep pgpool
    sudo kill pid
    #删除所占端口文件
    #/tmp/下
    #/var/run/postgresql/下
    sudo rm -rf /run/.s.PGSQL.18898
    sudo rm -rf /run/.s.PGSQL.18999

    4.3.2 测试

  • 连接
    1
    2
    3
    4
    5
    psql -h pgsql_1_ip -p 18999 -d postgres #连接主pgpool
    psql -h pgsql_2_ip -p 18999 -d postgres #连接从pgpool
    psql -h pgsql_3_ip -p 18999 -d postgres #连接从pgpool
    #连接vip:
    psql -h VIP -p 18999 -d postgres #通过虚拟ip连接pgpool
  • HA测试
    1
    2
    3
    4
    #1. 模拟master端pgpool宕机,关闭vip所在节点的pgpool 
    sudo pgpool -m fast stop
    #2. psql -h VIP -p 18999 -d postgres #通过虚拟ip连接pgpool
    #show pool_nodes;命令查看集群状态

    5. Q&A

    5.1 问题1

    问题:如遇pgpool.log中报错 ifup[/sbin/ifconfig] doesn’t have setuid bit
    解决:
    1
    2
    sudo chmod +s /sbin/ifconfig
    sudo chmod +s /sbin/arping