PostgreSQL高可用集群搭建配置.docx
- 文档编号:7700593
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:19
- 大小:21.79KB
PostgreSQL高可用集群搭建配置.docx
《PostgreSQL高可用集群搭建配置.docx》由会员分享,可在线阅读,更多相关《PostgreSQL高可用集群搭建配置.docx(19页珍藏版)》请在冰豆网上搜索。
PostgreSQL高可用集群搭建配置
PostgreSQL高可用集群环境搭建
文件状态
[]草稿[√]正式发布[]正在修改
当前版本
V_1.0
拟制
修订
日期
审核
日期
批准
日期
1.引言
本文档介绍通过pg_auto_failover插件搭建PostgreSQL高可用集群,pg_auto_failover使用插件方式安装到PostgreSQL,对数据库的侵入性较小,并且在插件失效的情况下,不影响数据库主从复制的正常运行。
pg_auto_failover高可用集群最少需要三个节点:
monitor节点、主节点、从节点,其中monitor节点是一个安装有pg_auto_failover扩展的Postgres数据库,用于注册并检查活动Postgres节点的运行状况,monitor注册的每个Postgres节点也必须运行pg_autoctl服务,monitor服务器设置可以根据需要管理多个Postgres组。
本主从高可用方案适合对数据一致性要求较高的业务场景,流复制同步模式能保证主从数据的一致性。
主库上面的变更能实时同步到从库上面,如果从库不能及时同步将导致主库hang起,所以推荐至少需要配置两个从库,保证主库能正常写入。
2.安装环境
172.18.9.81monitor节点
172.18.9.82主节点
172.18.9.83从节点
172.18.9.83从节点
3.软件安装
3.1检查防火墙
系统为CentosLinux7时使用如下命令关闭防火墙
#systemctlstopfirewalld.service
#systemctldisablefirewalld.service
3.2检查selinux配置
执行命令,结果显示如下则表示selinux已经关闭
#getenforce
Disabled
若selinux未关闭,可执行如下命令进行关闭
#setenforce0
#vim/etc/selinux/config
修改”SELINUX=enforcing”为”SELINUX=disabled”,保存退出
3.3安装pg_auto_failover软件
172.18.9.81~172.18.9.84节点都需要安装pg_auto_failover软件
1
2
3
3.1
3.2
3.3
3.3.1yum源配置
#
#shrpm.sh
3.3.2pg-auto-failover安装
选择需要安装的pg-auto-failover版本,pg-auto-failover16_12表示基于postgresql-12安装pg-auto-failover16,安装过程会自动安装postgresql数据库软件
在线安装
#yuminstallpg-auto-failover16_12
离线安装
需要先下载pg-auto-failover安装包
#yuminstall--downloadonlypg-auto-failover16_12--downloaddir=/var/soft/
#yuminstall*.rpm
3.3.3配置系统环境参数
root用户:
vi/etc/hosts
172.18.9.81v-dbsrv-test001
172.18.9.82v-dbsrv-test002
172.18.9.83v-dbsrv-test003
172.18.9.84v-dbsrv-test004
postgres用户:
vi/etc/profile
exportPGDATA=/var/data/postgres_5432
exportPGHOME=/usr/pgsql-12
exportPATH=/usr/local/sbin:
/usr/local/bin:
/usr/sbin:
/usr/bin:
$PGHOME/bin
创建数据库文件目录:
mkdir-p/var/data
chownpostgres:
postgres/var/data
4.集群配置
为了确保数据的一致性,强烈建议使用流复制同步模式,同时为主库配置两个从库。
4.1创建monitor节点实例
创建实例
su-postgres
pg_autoctlcreatemonitor--pgdata/var/data/postgres_5432--hostname172.18.9.81--pgport5432--authtrust--ssl-self-signed
启动monitor节点
nohuppg_autoctlrun&
配置系统服务
pg_autoctl-qshowsystemd--pgdata/var/data/postgres_5432>/usr/lib/systemd/system/pgautomonitor.service
配置自动启动
systemctlenablepgautomonitor.service
4.2创建主节点实例
创建实例
su-postgres
pg_autoctlcreatepostgres--pgdata/var/data/postgres_5432--hostname172.18.9.82--authtrust--ssl-self-signed--monitor'postgres:
//autoctl_node@172.18.9.81:
5432/pg_auto_failover?
sslmode=require'
启动主节点
nohuppg_autoctlrun&
配置系统服务
pg_autoctl-qshowsystemd--pgdata/var/data/postgres_5432>/usr/lib/systemd/system/pgautonote.service
配置自动启动
systemctlenablepgautonote.service
4.3创建从节点实例
所有从节点创创建方式都是一样的过程,只是hostname的IP需要改成安装从节点的IP即可
创建实例
su-postgres
pg_autoctlcreatepostgres--pgdata/var/data/postgres_5432--hostname172.18.9.83--authtrust--ssl-self-signed--monitor'postgres:
//autoctl_node@172.18.9.81:
5432/pg_auto_failover?
sslmode=require'
启动主节点
nohuppg_autoctlrun&
配置系统服务
pg_autoctl-qshowsystemd--pgdata/var/data/postgres_5432>/usr/lib/systemd/system/pgautonote.service
配置自动启动
systemctlenablepgautonote.service
4.4配置pg_hba.conf文件
在配置完集群后,可以根据需要配置数据库允许的应用程序连接
注意:
hostallall一定要放到pg_hba.conf文件的最后
host表示安装PostgreSQL的主机
Al第一个all表示该主机上的所有数据库实例
All第二个all表示所有用户
172.18.9.82/32表示需要连接到主机的IP地址,32表示子网掩码
0.0.0.0/0则表示所有的IP
md5验证方式
md5为密码通过md5加密方式连接主机
trust为无需密码验证,就可直接连接主机
vi$PGDATA/pg_hba.conf
hostallall0.0.0.0/0md5
4.5集群状态查看
查看节点状态
pg_autoctlshowstate
Name|Node|Host:
Port|TLI:
LSN|Connection|CurrentState|AssignedState
---------+-------+------------------+----------------+--------------+---------------------+-----------------
node_13|13|172.18.9.82:
5432|5:
0/506FA70|read-write|primary|primary
node_129|129|172.18.9.83:
5432|5:
0/506FA70|read-only|secondary|secondary
查看集群配置
pg_autoctlshowsettings
Context|Name|Setting|Value
----------+----------+---------------------------+-------------------------------------
formation|default|number_sync_standbys|0
primary|node_13|synchronous_standby_names|'ANY1(pgautofailover_standby_129)'
node|node_13|candidatepriority|50
node|node_129|candidatepriority|50
node|node_13|replicationquorum|true
node|node_129|replicationquorum|true
5.日常维护
5.1集群状态查看
集群节点连接配置
$pg_autoctlshowuri
Type|Name|ConnectionString
-------------+---------+-------------------------------
monitor|monitor|postgres:
//autoctl_node@v-dbsrv-:
5432/pg_auto_failover?
sslmode=require
formation|default|postgres:
//172.18.9.82:
5432,172.18.9.83:
5432/postgres?
target_session_attrs=read-write&sslmode=require
集群节点状态
$pg_autoctlshowstate
Name|Node|Host:
Port|TLI:
LSN|Connection|CurrentState|AssignedState
---------+-------+------------------+----------------+--------------+---------------------+-----------------
node_13|13|172.18.9.82:
5432|5:
0/506FA70|read-write|primary|primary
node_129|129|172.18.9.83:
5432|5:
0/506FA70|read-only|secondary|secondary
集群配置信息
$pg_autoctlshowsettings
Context|Name|Setting|Value
----------+----------+---------------------------+------------------------------------
formation|default|number_sync_standbys|0
primary|node_129|synchronous_standby_names|'ANY1(pgautofailover_standby_13)'
node|node_13|candidatepriority|50
node|node_129|candidatepriority|50
node|node_13|replicationquorum|true
node|node_129|replicationquorum|true
5.2手动切换主从节点
主从节点需要手动切换时,可以通过pg_autoctlperformswitchover命令进行切换。
$pg_autoctlshowstate
Name|Node|Host:
Port|TLI:
LSN|Connection|CurrentState|AssignedState
---------+-------+------------------+----------------+--------------+---------------------+----------------
node_13|13|172.18.9.82:
5432|14:
0/ABC7000|read-only|secondary|secondary
node_129|129|172.18.9.83:
5432|14:
0/ABC7000|read-write|primary|primary
$pg_autoctlperformswitchover--pgdata/var/data/postgres_5432
$pg_autoctlshowstate
Name|Node|Host:
Port|TLI:
LSN|Connection|CurrentState|AssignedState
---------+-------+------------------+----------------+--------------+---------------------+----------------
node_13|13|172.18.9.82:
5432|15:
0/ABCBE40|read-write|primary|primary
node_129|129|172.18.9.83:
5432|15:
0/ABCBE40|read-only|secondary|secondary
5.3节点离线维护
从节点需要进行停机维护的时候,需要手动设置从节点为维护状态,这样备库才能安全关闭。
通过执行pg_autoctlenablemaintenance命令就可以开启维护状态,当主库的状态变成wait_primary,备库才可以安全的脱机。
开启维护状态
$pg_autoctlenablemaintenance
$pg_autoctlshowstate
Name|Node|Host:
Port|TLI:
LSN|Connection|CurrentState|AssignedState
---------+-------+------------------+----------------+--------------+---------------------+-----------------
node_13|13|172.18.9.82:
5432|15:
0/ABEE1E0|read-write|wait_primary|wait_primary
node_129|129|172.18.9.83:
5432|15:
0/ABEE1E0|none|maintenance|maintenance
关闭维护状态
$pg_autoctldisablemaintenance
$pg_autoctlshowstate
Name|Node|Host:
Port|TLI:
LSN|Connection|CurrentState|AssignedState
---------+-------+------------------+----------------+--------------+---------------------+--------------------
node_13|13|172.18.9.82:
5432|15:
0/ABF0E70|read-write|primary|primary
node_129|129|172.18.9.83:
5432|15:
0/ABF0E70|read-only|secondary|secondary
5.4删除节点
需要从集群中踢出从节点时,可以通过autoctldropnode命令进行删除。
$pg_autoctldropnode--pgdata/var/data/postgres_5432--destroy
6.故障切换测试
PostgreSQL使用可以利用libpq驱动进行故障转移(不能负载均衡),数据库的主节点或者从节点出现故障后,可以保障业务的连续性。
Java的故障转移和负载均衡可以使用PostgreSQLJDBC驱动程序。
连接配置示例:
postgres:
//crp_user:
crpkingdee@172.18.9.82:
5432,172.18.9.83:
5432/kingdee
6.1创建测试数据库
创建测试数据库
createdatabasekingdee;
\ckingdee
createtablet1(idint,namevarchar(20));
插入数据脚本
whiletrue
do
psql'postgres:
//crp_user:
crpkingdee@172.18.9.82:
5432,172.18.9.83:
5432/kingdee?
target_session_attrs=read-write'< selectnow(),inet_server_addr(); insertintot1values(1,random()); EOF sleep1 done 6.2主节点故障 主节点发生故障时,状态变成demoted,守护进程将停止主节点上面的PG数据库进程,从节点切换主节点,当状态变为read-write后,可以继续插入数据,中间中断大概50秒。 查看集群状态 $pg_autoctlshowstate Name|Node|Host: Port|TLI: LSN|Connection|CurrentState|AssignedState ---------+-------+------------------+----------------+--------------+---------------------+---------------- node_13|13|172.18.9.82: 5432|5: 0/506FA70|read-write|primary|primary node_129|129|172.18.9.83: 5432|5: 0/506FA70|read-only|secondary|secondary psql'postgres: //crp_user: crpkingdee@172.18.9.83: 5432/kingdee' selectpg_is_in_recovery(); pg_is_in_recovery ------------------- t 停止主节点 pg_autoctlstop $pg_autoctlshowstate Name|Node|Host: Port|TLI: LSN|Connection|CurrentState|AssignedState ---------+-------+------------------+----------------+--------------+---------------------+---------------- node_13|13|172.18.9.82: 5432|7: 0/50CC170|read-write! |primary|demoted node_129|129|172.18.9.83: 5432|8: 0/50D4FE0|read-write|wait_primary|wait_primary 主节点状态变成demoted,守护进程将停止PG并阻止其运行 从节点切换为read-write状态,可以插入数据 now|inet_server_addr ------------------------------+------------------ 2021-09-2022: 40: 32.014204+08|172.18.9.82 (1row) psql: error: couldnotconnecttoserver: Connectionrefused Istheserverrunningonhost"172.18.9.82"andaccepting TCP/IPconnectionsonport5432? couldnotmakeawritableconnectiontoserver"172.18.9.83: 5432" now|inet_server_addr ------------------------------+------------------ 2021-09-2022: 41: 24.788504+08|172.18.9.83 (1row) 6.3从节点故障 一主一从架构,并且使用同步模式时(默认),从库停止后,主库将hang起20秒左右,monitor需要清空synchronous_standby_names的配置,才能继续插入。 使用异步模式时,从库停止后,主库插入不受影响。 一主两从架构,当其中一个从节点停止后,主
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- PostgreSQL 可用 集群 搭建 配置