Skip to content

Commit

Permalink
更新
Browse files Browse the repository at this point in the history
  • Loading branch information
Fenju committed Sep 3, 2024
1 parent c6d0548 commit 066dbdb
Show file tree
Hide file tree
Showing 11 changed files with 299 additions and 41 deletions.
Binary file added content/chinese/news/images/news-post-14-1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added content/chinese/news/images/news-post-14-2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added content/chinese/news/images/news-post-14-3.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added content/chinese/news/images/news-post-14-4.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added content/chinese/news/images/news-post-14-5.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added content/chinese/news/images/news-post-14-6.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added content/chinese/news/images/news-post-14-7.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
253 changes: 212 additions & 41 deletions content/chinese/news/news-post-13.md
Original file line number Diff line number Diff line change
@@ -1,76 +1,247 @@
---
title: "社区贡献 | OpenTenBase集群部署初探"
date: 2024-08-30T12:48:00+08:00
title: "社区贡献 | OpenTenBase监控踩坑指南"
date: 2024-09-03T09:20:00+08:00
#image_webp: images/news/news-post-2.webp
image: images/news/news-post-12.png
image: images/news/news-post-14.png
author: OpenTenBase
description: ""
---


开始踩坑
监控踩坑概览
======

官方源码地址:```
git clone https://github.com/OpenTenBase/OpenTenBase```
首先,通过Docker安装了Prometheus,配置了必要的文件形式进行服务发现,实现了系统正常监控。接着,使用Docker启动Grafana,并配置数据源连接到Prometheus,展示监控面板。最后,安装了postgres\_exporter以监控数据库,并解决了启动报错问题。在配置监控面板时,通过Grafana的仪表板市场找到了适合的监控面板,并成功导入使用。

在这篇文章中,以Centos 8为例展示了如何进行部署。如果你需要了解基本的安装操作步骤,可以参考这个链接:https://docs.opentenbase.org/guide/01-quickstart
安装监控
====

本文就不再一一演示这些基本步骤了,而是想分享一些官方文档中没有提及的各种奇葩问题的解决方法。
Docker安装
--------

uuid-devel匹配不到
--------------
1、Docker要求 CentOs 系统的内核版本高于 3.10

上来第一步就发现了问题,当执行环境依赖安装时
```yum -y install gcc make readline-devel zlib-devel openssl-devel uuid-devel bison flex git```
通过 uname-r命令查看当前的内核版本

在Centos 8系统上,可能会遇到一个错误提示:找不到 uuid-devel 软件包。这是因为在Centos 8的默认软件仓库中找不到 uuid-devel 软件包,尽管 uuid-devel 实际上是一个必需的依赖项。此外,安装类似uuid依赖包也无法解决问题,否则在执行configure命令时可能会出现错误提示:`configure: error: library 'ossp-uuid' or 'uuid' is required for OSSP UUID`
`uname -r`

幸运的是,CentOS的“PowerTools”软件库中包含了 uuid-devel 软件包,但默认情况下未启用。要启用该软件库,可以使用以下命令`dnf config-manager --set-enabled powertools`
,如果没有dnf命令,则执行一下:`yum install dnf-plugins-core`
2、使用 root 权限登录 Centos。确保 yum 包更新到最新。

configure: error: readline library not found
--------------------------------------------
`yum -y update`

在执行configure命令时报错:configure: error: readline library not found
3、卸载旧版本(如果安装过旧版本的话)

如果遇到这个问题,可以尝试执行以下命令来安装必要的依赖包:`yum -y install gcc make readline-devel`
即可
`sudo yum remove -y docker*`

确保所有的依赖环境都已安装完毕后,再执行make -sj命令。在执行这一步之前,请确保剩余可用内存大于等于4G,以避免内存溢出问题。尽管官方文档建议最低内存为4G,但建议将内存扩大至8G,以确保后续执行init all命令时不会遇到各种奇怪的问题。切记,不要将内存设置得过低,否则可能会导致后续命令的异常行为。
4、安装需要的软件包,yum-utl 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的

环境及ssh
------
`yum install -y yum-utils`

执行`vim ~/.bashrc`
编辑系统环境变量后记得source ~/.bashrc,要不然无法找到命令pgxc\_ctl
5、设置yum源,并更新yum 的包索引

在集群部署过程中,只有一台服务器需要进行编译操作,其他服务器只需进行环境变量配置、用户及目录设置以及SSH连接的配置。这样设计的原因是因为在执行deploy all命令时,已经编译好的安装包会被发送到其他机器上。
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache

为了实现集群节点机器之间的SSH无密码登录,首先需要在各个节点机器上配置好SSH密钥认证。这样一来,在部署和初始化过程中,可以通过SSH连接到每个节点的机器而无需输入密码。在这个过程中,需要确保已经打通了第二台及其IP的SSH连接,并且也打通了自己机器的SSH连接。
6、安装docker

`ssh-copy-id -i ~/.ssh/id_rsa.pub destination-user@destination-server`
`yum install -y docker-ce`

启动和节点排查
-------
8、启动并加入开机启动

在进行集群部署时,接下来的步骤是使用pgxc\_ctl进行部署。如果对pgxc\_ctl的命令不熟悉,可以通过使用help命令来查看帮助文档。在本次部署的机器上,运行monitor all命令时,只能显示一个信息然后程序强制退出,这表明肯定有节点启动失败了。因此,建议单独使用monitor命令来查看各个节点的状态,以便更清楚地了解每个节点的运行情况。
`systemctl start docker && systemctl enable docker`

<img src=../images/news-post-13-1.png class="img-fluid" /><br/>
9、验证安装是否成功(有client和service两部分表示docker安装启动都成功了)

如果某一个一直无法正常启动,比如显示`gtm_ctl: another server might be running; trying to start server anyway`
,那么可能会是你没有正常关闭,通常需要你手动去删除对应的pid文件,
`docker version`

本次以gtm为例,如果不知道的pid文件位置在哪里,那么可以使用`find / -name '*gtm*.pid'`
,找到后删除对应的文件即可。然后再次启动start all。
10、配置docker镜像

如果还是无法启动,那么则可以去看下对应日志,还以gtm为例。`cd /data/opentenbase/data/gtm/slave/gtm_log`
进入对应日志目录,然后查看日志。这里显示的最后是
`cd etc/docker`
然后编辑`vim daemon.json`

<img src=../images/news-post-13-2.png class="img-fluid" /><br/>
{
"registry-mirrors": \["https://jbw52uwf.mirror.aliyuncs.com"\]
}

建议考虑进行扩容操作。显然这里资源不足。如果你的内存已经达到了8GB,那么可以考虑进一步扩展CPU资源至2核心。本次部署的系统只有1核心的CPU,显然已经不够用了,扩容后系统性能应该会恢复正常
保存退出

<img src=../images/news-post-13-3.png class="img-fluid" /><br/>
重启docker服务

systemctl daemon-reload
systemctl restart docker

下载Prometheus
------------

在进行监控优化时,您可以从Prometheus官方网站下载最新版:https://prometheus.io/download/

您可以选择下载源代码并解压使用,也可以通过Docker直接启动。本教程将重点介绍使用Docker进行快速部署。

执行命令:

`docker run -d -p 9090:9090 -v etc/prometheus:/etc/prometheus prom/prometheus`

完成挂载后,请对配置文件进行必要的修改以确保系统正常监控。

`vim prometheus.yml`

# my global config
global:
  scrape\_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation\_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape\_timeout is set to the global default (10s).

# Alertmanager configuration
alerting:
  alertmanagers:
    \- static\_configs:
        \- targets:
          # - alertmanager:9093

# Load rules once and periodically evaluate them according to the global 'evaluation\_interval'.
rule\_files:
  # - "first\_rules.yml"
  # - "second\_rules.yml"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape\_configs:
  # The job name is added as a label \`job=<job\_name>\` to any timeseries scraped from this config.
  \- job\_name: "prometheus"

    # metrics\_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static\_configs:
      \- targets: \["192.168.56.10:9090"\]
  # 主要修改这里,添加文件形式的扫描
  \- job\_name: "node"
    file\_sd\_configs:
    \- refresh\_interval: 10s
      files:
      \- "/etc/prometheus/conf/node\*.yaml"

当前Prometheus的配置采用文件形式进行服务发现。在修改配置时,无需重新启动,系统将自动更新并生效,更新间隔为10秒。

为了修改相关配置文件,首先创建一个名为conf的目录(`mkdir conf`
)然后通过cd命令进入目录(`cd etc/prometheus/conf`
)接着使用vim编辑器来修改文件(`vim node-ms.yaml`

\- targets:
  \- "ip:port"
  labels:
    hostname: pg

为了自定义配置信息,请将相应的IP地址和主机名修改为您自己的信息。完成修改后,启动Prometheus服务,然后您可以通过访问http://您的IP地址:9090/ 来查看Prometheus的监控数据。

下载Grafana
---------

为了确保配置的持久性,我们可以通过Docker容器以持久化形式启动Grafana。您可以使用以下命令来启动Grafana容器,并在容器重启后保留配置信息:

`docker run -d -p 3000:3000 --name=grafana --volume grafana-storage:/var/lib/grafana grafana/grafana-enterprise`

启动后,您可以在浏览器中输入http://您的IP地址:3000/

使用默认的用户名和密码admin/admin登录,以查看Grafana监控界面。

### 配置数据源

<img src=../images/news-post-14-1.png class="img-fluid" /><br/>

在这里,只需填写URL(http://ip:9090/ )即可保存配置。这个URL指向Prometheus的地址,Grafana将通过该地址与Prometheus建立连接,从而获取数据用于展示监控面板。

<img src=../images/news-post-14-2.png class="img-fluid" /><br/>

下载Exporter
----------

Prometheus官方提供了丰富的Exporter,您可以在https://prometheus.io/docs/instrumenting/exporters/ 找到相关信息。

我们可以安装postgres\_exporter来监控数据库,官方地址为https://github.com/prometheus-community/postgres\_exporter。

同样可以以Docker启动:

`docker run --net=host -e DATA_SOURCE_NAME="postgresql://opentenbase:@ip:port/postgres?sslmode=disable" quay.io/prometheuscommunity/postgres-exporter`

ip和host修改为自己的信息即可,官方示例中对opentenbase用户并没有设置登录密码,我们也不设置密码进行登录。

启动后,我们首先登录到数据库中,然后进行数据库用户的相关设置。

```
CREATE OR REPLACE FUNCTION \_\_tmp\_create\_user() returns void as $$
BEGIN
  IF NOT EXISTS (
          SELECT                       \-- SELECT list can stay empty for this
          FROM   pg\_catalog.pg\_user
          WHERE  usename = 'postgres\_exporter') THEN
    CREATE USER postgres\_exporter;
  END IF;
END;
$$ language plpgsql;
SELECT \_\_tmp\_create\_user();
DROP FUNCTION \_\_tmp\_create\_user();
ALTER USER postgres\_exporter WITH PASSWORD 'password';
ALTER USER postgres\_exporter SET SEARCH\_PATH TO postgres\_exporter,pg\_catalog;
GRANT CONNECT ON DATABASE postgres TO postgres\_exporter;
\-- OpenTenBase中集成的PostgreSQL版本是10,所以可以执行以下语句,历史版本可前往开源地址进行查看。
GRANT pg\_monitor to postgres\_exporter;
```
### postgres\_exporter启动报错修复
```
panic: Error converting setting "session\_memory\_size" value "3M" to float: strconv.ParseFloat: parsing "3M": invalid syntax
goroutine 42 \[running\]:
main.(\*pgSetting).metric(0xc000081720, 0xc0000d5c50?)
        /app/cmd/postgres\_exporter/pg\_setting.go:87 +0x325
main.querySettings(0x0?, 0xc00010d290)
        /app/cmd/postgres\_exporter/pg\_setting.go:56 +0x287
main.(\*Server).Scrape(0xc00010d290, 0xc000028011?, 0x90?)
        /app/cmd/postgres\_exporter/server.go:121 +0xcb
main.(\*Exporter).scrapeDSN(0xc0000000c0, 0x44d406?, {0xc000028011, 0x46})
        /app/cmd/postgres\_exporter/datasource.go:115 +0x1c5
main.(\*Exporter).scrape(0xc0000000c0, 0x0?)
        /app/cmd/postgres\_exporter/postgres\_exporter.go:679 +0x16c
main.(\*Exporter).Collect(0xc0000000c0, 0xc00003ff60?)
        /app/cmd/postgres\_exporter/postgres\_exporter.go:568 +0x25
github.com/prometheus/client\_golang/prometheus.(\*Registry).Gather.func1()
        /go/pkg/mod/github.com/prometheus/client\[email protected]/prometheus/registry.go:457 +0xe7
created by github.com/prometheus/client\_golang/prometheus.(\*Registry).Gather in goroutine 18
        /go/pkg/mod/github.com/prometheus/client\[email protected]/prometheus/registry.go:547 +0xbab
```
查看postgres\_exporter其源码发现端倪:

SELECT name, setting, COALESCE(unit, ''), short\_desc, vartype FROM pg\_settings WHERE vartype IN ('bool', 'integer', 'real') AND name != 'sync\_commit\_cancel\_wait';

<img src=../images/news-post-14-3.png class="img-fluid" /><br/>

确实是因为session\_memory\_size的显示问题,不过已经提交了PR修复,官方修复后即可成功。

<img src=../images/news-post-14-4.png class="img-fluid" /><br/>

配置监控面板
======

一旦所有组件都成功启动,接下来我们需要前往市场寻找我们想要的监控面板。你可以访问Grafana的官方仪表板市场:https://grafana.com/grafana/dashboards/?search=postgresql

<img src=../images/news-post-14-5.png class="img-fluid" /><br/>

一旦找到您喜欢的面板,请点击此处进行导入。以下以ID:9628为示例进行导入操作。

这里选择我们的数据源。

<img src=../images/news-post-14-6.png class="img-fluid" /><br/>

让我们来看一下效果如何:

<img src=../images/news-post-14-7.png class="img-fluid" /><br/>

<img src=../images/news-post-9-12.png class="img-fluid" /><br/>

Expand Down
87 changes: 87 additions & 0 deletions content/chinese/news/news-post-14.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
---
title: "社区贡献 | OpenTenBase集群部署初探"
date: 2024-08-30T12:48:00+08:00
#image_webp: images/news/news-post-2.webp
image: images/news/news-post-12.png
author: OpenTenBase
description: ""
---


开始踩坑

官方源码地址:```
git clone https://github.com/OpenTenBase/OpenTenBase```

在这篇文章中,以Centos 8为例展示了如何进行部署。如果你需要了解基本的安装操作步骤,可以参考这个链接:https://docs.opentenbase.org/guide/01-quickstart

本文就不再一一演示这些基本步骤了,而是想分享一些官方文档中没有提及的各种奇葩问题的解决方法。

uuid-devel匹配不到
--------------

上来第一步就发现了问题,当执行环境依赖安装时
```yum -y install gcc make readline-devel zlib-devel openssl-devel uuid-devel bison flex git```

在Centos 8系统上,可能会遇到一个错误提示:找不到 uuid-devel 软件包。这是因为在Centos 8的默认软件仓库中找不到 uuid-devel 软件包,尽管 uuid-devel 实际上是一个必需的依赖项。此外,安装类似uuid依赖包也无法解决问题,否则在执行configure命令时可能会出现错误提示:`configure: error: library 'ossp-uuid' or 'uuid' is required for OSSP UUID`

幸运的是,CentOS的“PowerTools”软件库中包含了 uuid-devel 软件包,但默认情况下未启用。要启用该软件库,可以使用以下命令`dnf config-manager --set-enabled powertools`
,如果没有dnf命令,则执行一下:`yum install dnf-plugins-core`

configure: error: readline library not found
--------------------------------------------

在执行configure命令时报错:configure: error: readline library not found

如果遇到这个问题,可以尝试执行以下命令来安装必要的依赖包:`yum -y install gcc make readline-devel`
即可

确保所有的依赖环境都已安装完毕后,再执行make -sj命令。在执行这一步之前,请确保剩余可用内存大于等于4G,以避免内存溢出问题。尽管官方文档建议最低内存为4G,但建议将内存扩大至8G,以确保后续执行init all命令时不会遇到各种奇怪的问题。切记,不要将内存设置得过低,否则可能会导致后续命令的异常行为。

环境及ssh
------

执行`vim ~/.bashrc`
编辑系统环境变量后记得source ~/.bashrc,要不然无法找到命令pgxc\_ctl

在集群部署过程中,只有一台服务器需要进行编译操作,其他服务器只需进行环境变量配置、用户及目录设置以及SSH连接的配置。这样设计的原因是因为在执行deploy all命令时,已经编译好的安装包会被发送到其他机器上。

为了实现集群节点机器之间的SSH无密码登录,首先需要在各个节点机器上配置好SSH密钥认证。这样一来,在部署和初始化过程中,可以通过SSH连接到每个节点的机器而无需输入密码。在这个过程中,需要确保已经打通了第二台及其IP的SSH连接,并且也打通了自己机器的SSH连接。

`ssh-copy-id -i ~/.ssh/id_rsa.pub destination-user@destination-server`

启动和节点排查
-------

在进行集群部署时,接下来的步骤是使用pgxc\_ctl进行部署。如果对pgxc\_ctl的命令不熟悉,可以通过使用help命令来查看帮助文档。在本次部署的机器上,运行monitor all命令时,只能显示一个信息然后程序强制退出,这表明肯定有节点启动失败了。因此,建议单独使用monitor命令来查看各个节点的状态,以便更清楚地了解每个节点的运行情况。

<img src=../images/news-post-13-1.png class="img-fluid" /><br/>

如果某一个一直无法正常启动,比如显示`gtm_ctl: another server might be running; trying to start server anyway`
,那么可能会是你没有正常关闭,通常需要你手动去删除对应的pid文件,

本次以gtm为例,如果不知道的pid文件位置在哪里,那么可以使用`find / -name '*gtm*.pid'`
,找到后删除对应的文件即可。然后再次启动start all。

如果还是无法启动,那么则可以去看下对应日志,还以gtm为例。`cd /data/opentenbase/data/gtm/slave/gtm_log`
进入对应日志目录,然后查看日志。这里显示的最后是

<img src=../images/news-post-13-2.png class="img-fluid" /><br/>

建议考虑进行扩容操作。显然这里资源不足。如果你的内存已经达到了8GB,那么可以考虑进一步扩展CPU资源至2核心。本次部署的系统只有1核心的CPU,显然已经不够用了,扩容后系统性能应该会恢复正常。

<img src=../images/news-post-13-3.png class="img-fluid" /><br/>

<img src=../images/news-post-9-12.png class="img-fluid" /><br/>

**官网:** https://www.opentenbase.org/

**贡献代码**

* AtomGit

https://atomgit.com/opentenbase/OpenTenBase

* GitHub

https://github.com/OpenTenBase/OpenTenBase
Binary file added public/images/news/news-post-13.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/images/news/news-post-14.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 066dbdb

Please sign in to comment.