greenplum 集群故障(Sorry,too many clients already )排查:
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了greenplum 集群故障(Sorry,too many clients already )排查:相关的知识,希望对你有一定的参考价值。
故障现象:
1:所有业务调度任务执行失败;
2:手动测试无法连接数据库;
3:并没有收到集群的异常告警;
处理步骤:
1:首先登陆 gpcc 查看集群状态;
发现所有greenplum 节点及服务都正常,但是屏幕打印报错信息 :Sorry,too many clients already (alert)
2:在master节点通过gpstate -s和查看/usr/local/gpdata/gpmaster/gpseg-1/pg_log/gpdbxxxxxx.csv日志,都可以看到以下报错信息
"ERROR","58M01","failed to acquire resources on one or more segments","FATAL: sorry, too many clients already.
Performance Monitor - failed to connect to gpperfmon database: FATAL: sorry, too many clients already.
登陆服务器查看集群状态:
gpstate -b =》 显示简要状态
gpstate -f =》 显示备用主机详细信息
gpstate -m =》 显示镜像实例同步状态
gpstate -Q =》 快速检查主机状态
确认集群节点无异常!
调整集群最大连接数
此时基本确定集群连接数过多导致,准备使用杀掉连接解决问题,但是数据库集群已经无法连接,使用gpconfig 命令修改;
主要修改参数如下:
max_connections :最大连接数,Segment建议设置成Master的5-10倍。
查看现有配置值:
gpconfig -s max_connections
GUC : max_connections
Master value: 250
Segment value: 750
#### 修改配置
gpconfig -c max_connections -v 2000 -m 500
max_prepared_transactions
这个参数只有在启动数据库时,才能被设置。它决定能够同时处于prepared状态的事务的最大数目(参考PREPARE TRANSACTION命令)。如果它的值被设为0。则将数据库将关闭prepared事务的特性。它的值通常应该和max_connections的值一样大。每个事务消耗600字节(b)共享内存。
查看现有配置值:
gpconfig -s max_prepared_transactions
Values on all segments are consistent
GUC : max_prepared_transactions
Master value: 250
Segment value: 250
修改配置
gpconfig -c max_prepared_transactions -v 500
修改参数后,重启数据库生效
关闭数据库 :gpstop -M fast -a
快速启动: gpstart -a
验证配置是否生效:
gpconfig -s max_connections
gpconfig -s max_prepared_transactions
数据启动后,已经可以正常使用!此时涉及的数据库没有涉及在线业务,所有直接重启了。
使用超级用户登陆,处理步骤参考:
# su - gpadmin
psql -d postgres
查看所有的连接;
postgres=# SELECT * FROM pg_stat_activity;
执行以下命令查看当前的总连接数:
psql -d postgres -c "select count(*) from pg_stat_activity"
查看第2步检查到的报错库的连接数:
psql -d postgres -c "select count(*) from pg_stat_activity where datname = ‘pt_roi‘"
通过以下命令来断开报错的库的连接,释放资源:
SELECT pg_terminate_backend(pg_stat_activity.procpid) FROM pg_stat_activity WHERE pg_stat_activity.datname = ‘ $(DATABASES)‘ AND procpid <> pg_backend_pid();
问题的原因分析:
1:新业务服务没有经过测试就上线,产生大量的异常链接,导致数据库链接被沾满;
2:数据库连接没有做监控告警,导致连接被占满后才知道,需要添加连接数监控告警,大于正常数出发告警,提前处理;
3:调整数据库任务、网络链接超时时间,防止大量网络连接不能断开;
以上是关于greenplum 集群故障(Sorry,too many clients already )排查:的主要内容,如果未能解决你的问题,请参考以下文章
使用 jOOQ 和 Spring Boot 进行集成测试时出现“PSQLException: FATAL: sorry, too many clients already”错误