当前位置:   article > 正文

greenplum 集群故障(Sorry,too many clients already )排查:

too many clients already current:3000
故障现象:
  1. 1:所有业务调度任务执行失败;
  2. 2:手动测试无法连接数据库;
  3. 3:并没有收到集群的异常告警;
处理步骤:
  1. 1:首先登陆 gpcc 查看集群状态;
  2. 发现所有greenplum 节点及服务都正常,但是屏幕打印报错信息 :Sorry,too many clients already (alert)
  3. 2:在master节点通过gpstate -s和查看/usr/local/gpdata/gpmaster/gpseg-1/pg_log/gpdbxxxxxx.csv日志,都可以看到以下报错信息
  4. "ERROR","58M01","failed to acquire resources on one or more segments","FATAL: sorry, too many clients already.
  5. Performance Monitor - failed to connect to gpperfmon database: FATAL: sorry, too many clients already.
登陆服务器查看集群状态:
  1. gpstate -b =》 显示简要状态
  2. gpstate -f =》 显示备用主机详细信息
  3. gpstate -m =》 显示镜像实例同步状态
  4. gpstate -Q =》 快速检查主机状态
  5. 确认集群节点无异常!
调整集群最大连接数

此时基本确定集群连接数过多导致,准备使用杀掉连接解决问题,但是数据库集群已经无法连接,使用gpconfig 命令修改;

  1. 主要修改参数如下:
  2. max_connections :最大连接数,Segment建议设置成Master的5-10倍。
  3. 查看现有配置值:
  4. gpconfig -s max_connections
  5. GUC : max_connections
  6. Master value: 250
  7. Segment value: 750
  8. #### 修改配置
  9. gpconfig -c max_connections -v 2000 -m 500
  1. max_prepared_transactions
  2. 这个参数只有在启动数据库时,才能被设置。它决定能够同时处于prepared状态的事务的最大数目(参考PREPARE TRANSACTION命令)。如果它的值被设为0。则将数据库将关闭prepared事务的特性。它的值通常应该和max_connections的值一样大。每个事务消耗600字节(b)共享内存。
  3. 查看现有配置值:
  4. gpconfig -s max_prepared_transactions
  5. Values on all segments are consistent
  6. GUC : max_prepared_transactions
  7. Master value: 250
  8. Segment value: 250
  9. 修改配置
  10. gpconfig -c max_prepared_transactions -v 500
修改参数后,重启数据库生效
  1. 关闭数据库 :gpstop -M fast -a
  2. 快速启动: gpstart -a
验证配置是否生效:
  1. gpconfig -s max_connections
  2. gpconfig -s max_prepared_transactions

数据启动后,已经可以正常使用!此时涉及的数据库没有涉及在线业务,所有直接重启了。

使用超级用户登陆,处理步骤参考:
  1. # su - gpadmin
  2. psql -d postgres
  3. 查看所有的连接;
  4. postgres=# SELECT * FROM pg_stat_activity;
  5. 执行以下命令查看当前的总连接数:
  6. psql -d postgres -c "select count(*) from pg_stat_activity"
  7. 查看第2步检查到的报错库的连接数:
  8. psql -d postgres -c "select count(*) from pg_stat_activity where datname = 'pt_roi'"
  9. 通过以下命令来断开报错的库的连接,释放资源:
  10. SELECT pg_terminate_backend(pg_stat_activity.procpid) FROM pg_stat_activity WHERE pg_stat_activity.datname = ' $(DATABASES)' AND procpid <> pg_backend_pid();
问题的原因分析:
  1. 1:新业务服务没有经过测试就上线,产生大量的异常链接,导致数据库链接被沾满;
  2. 2:数据库连接没有做监控告警,导致连接被占满后才知道,需要添加连接数监控告警,大于正常数出发告警,提前处理;
  3. 3:调整数据库任务、网络链接超时时间,防止大量网络连接不能断开;
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/454927
推荐阅读
  

闽ICP备14008679号