-
Notifications
You must be signed in to change notification settings - Fork 6
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Fenju
committed
Sep 3, 2024
1 parent
c6d0548
commit 066dbdb
Showing
11 changed files
with
299 additions
and
41 deletions.
There are no files selected for viewing
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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/> | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.