在openEuler平台构建带timescaledbV2时序数据库插件的PostgreSqlV14.5容器

2023-10-29

在openEuler平台部署特定版本的PostgreSql在安装包收集上存在较大难题,本次需求为制作zabbix系统所需的timescaledbV2插件的PostgreSqlV14.5数据库,在评估多种方案后,采用了基于CentOS底包制作容器方式来实现

一、提前准备事宜

在正式部署前,请提前完成以下事宜:

  • 收集centos底包

笔者下载的是centos:latest版本镜像底包,实际版本为CentOS8.3.2011,对应保存为名为“centos8.3.2011.tar ”的文件,其他CentOS8系版本也可以的。

  • 收集centos8运行环境下PostgreSqlV14.5及其时序数据库插件

经现网生产系统测试,以下版本zabbix运行良好,且具备平台从Mysql移植数据至PostgreSql库的能力:

postgresql14-14.5-1PGDG.rhel8.x86_64.rpm
postgresql14-libs-14.5-1PGDG.rhel8.x86_64.rpm
postgresql14-server-14.5-1PGDG.rhel8.x86_64.rpm
timescaledb-2-postgresql-14-2.7.0-0.el8.x86_64.rpm
timescaledb-tools-0.14.1-0.el8.x86_64.rpm
timescaledb-2-loader-postgresql-14-2.7.0-0.el8.x86_64.rpm

以上rpm包打包为名为“postgresql14.5el8rpm.tgz”的文件。

  • 将容器底包和rpm文件包上传至内网服务器。

二、基于容器底包进行指定版本数据库程序的安装

  1. 将容器底包载入

# docker load -i centos8.3.2011.tar 
Loaded image: quay.io/centos/centos:latest
[root@localhost dockerfile]# docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
quay.io/centos/centos   latest              300e315adb2f        2 years ago         209MBdock
  1. 启动容器

#docker run --privileged  -itd --name pgtsdb quay.io/centos/centos:latest /sbin/init         
1597f853e87b7e37e1472a839f2b7ff0289c4b6a3ab097ac525d3fcc048573aa
  1. 将rpm包传入容器(本步骤没有反馈信息)

# docker cp /tmp/postgresql14.5el8rpm.tgz pgtsdb:/tmp
  1. 进入容器安装数据库及插件的rpm包

# docker exec -it pgtsdb /bin/bash                         
[root@1597f853e87b /]# cd /opt
[root@1597f853e87b opt]# mv /tmp/postgresql14.5el8rpm.tgz .
[root@1597f853e87b opt]# mkdir postgresql14ts-rpm
[root@1597f853e87b opt]# tar -xzvf postgresql14.5el8rpm.tgz 
postgresql14-14.5-1PGDG.rhel8.x86_64.rpm
postgresql14-libs-14.5-1PGDG.rhel8.x86_64.rpm
postgresql14-server-14.5-1PGDG.rhel8.x86_64.rpm
timescaledb-2-postgresql-14-2.7.0-0.el8.x86_64.rpm
timescaledb-tools-0.14.1-0.el8.x86_64.rpm
timescaledb-2-loader-postgresql-14-2.7.0-0.el8.x86_64.rpm
[root@1597f853e87b opt]# mv *.rpm postgresql14ts-rpm/
[root@1597f853e87b opt]# cd postgresql14ts-rpm/
[root@1597f853e87b postgresql14ts-rpm]# ls
postgresql14-14.5-1PGDG.rhel8.x86_64.rpm         timescaledb-2-loader-postgresql-14-2.7.0-0.el8.x86_64.rpm
postgresql14-libs-14.5-1PGDG.rhel8.x86_64.rpm    timescaledb-2-postgresql-14-2.7.0-0.el8.x86_64.rpm
postgresql14-server-14.5-1PGDG.rhel8.x86_64.rpm  timescaledb-tools-0.14.1-0.el8.x86_64.rpm
[root@1597f853e87b opt]# yum install glibc-common glibc-langpack-en -y
Failed to set locale, defaulting to C.UTF-8
Waiting for process with pid 125 to finish.


os                                                                                                                          160 MB/s | 6.8 MB     00:00    
baseos                                                                                                                      168 MB/s | 2.2 MB     00:00    
Package glibc-common-2.28-127.el8.x86_64 is already installed.
Dependencies resolved.
============================================================================================================================================================
 Package                                        Architecture                   Version                                 Repository                      Size
============================================================================================================================================================
Installing:
 glibc-langpack-en                              x86_64                         2.28-189.el8                            baseos                         834 k
Upgrading:
 glibc                                          x86_64                         2.28-189.el8                            baseos                         2.2 M
 glibc-common                                   x86_64                         2.28-189.el8                            baseos                         1.3 M
 glibc-minimal-langpack                         x86_64                         2.28-189.el8                            baseos                          61 k

...
Upgraded:
  glibc-2.28-189.el8.x86_64                  glibc-common-2.28-189.el8.x86_64                  glibc-minimal-langpack-2.28-189.el8.x86_64                 

Installed:
  glibc-langpack-en-2.28-189.el8.x86_64                                                                                                                     

Complete!
[root@1597f853e87b opt]# cd /opt/postgresql14ts-rpm/ && yum localinstall *.rpm 
Last metadata expiration check: 0:39:29 ago on Tue 07 Feb 2023 03:46:53 AM UTC.
Dependencies resolved.
============================================================================================================================================================
 Package                                               Architecture              Version                              Repository                       Size
============================================================================================================================================================
Installing:
 postgresql14                                          x86_64                    14.5-1PGDG.rhel8                     @commandline                    1.5 M
 postgresql14-libs                                     x86_64                    14.5-1PGDG.rhel8                     @commandline                    278 k
 postgresql14-server                                   x86_64                    14.5-1PGDG.rhel8                     @commandline                    5.7 M
 timescaledb-2-loader-postgresql-14                    x86_64                    2.7.0-0.el8                          @commandline                     26 k
 timescaledb-2-postgresql-14                           x86_64                    2.7.0-0.el8                          @commandline                    578 k
 timescaledb-tools                                     x86_64                    0.14.1-0.el8                         @commandline                    2.9 M
Upgrading:
 openssl-libs                                          x86_64                    1:1.1.1k-5.el8_5                     baseos                          1.5 M
Installing dependencies:
 libicu                                                x86_64                    60.3-2.el8_1                         baseos                          8.8 M
 lz4                                                   x86_64                    1.8.3-3.el8_4                        baseos                          103 k
 openssl                                               x86_64                    1:1.1.1k-5.el8_5                     baseos                          709 k

...
Installed:
  libicu-60.3-2.el8_1.x86_64                               lz4-1.8.3-3.el8_4.x86_64                          openssl-1:1.1.1k-5.el8_5.x86_64               
  postgresql14-14.5-1PGDG.rhel8.x86_64                     postgresql14-libs-14.5-1PGDG.rhel8.x86_64         postgresql14-server-14.5-1PGDG.rhel8.x86_64   
  timescaledb-2-loader-postgresql-14-2.7.0-0.el8.x86_64    timescaledb-2-postgresql-14-2.7.0-0.el8.x86_64    timescaledb-tools-0.14.1-0.el8.x86_64         

Complete!

三、数据库初始化

以下为容器内执行:

  1. 初始化数据库,因为是容器化部署,后面会对数据存储目录进行持久化挂载,所以初始化到默认目录就可以了:

# /usr/pgsql-14/bin/postgresql-14-setup initdb         
Initializing database ... OK
  1. 启动postgresql数据库,检查数据库运行状态:

# systemctl enable --now postgresql-14  
Created symlink /etc/systemd/system/multi-user.target.wants/postgresql-14.service → /usr/lib/systemd/system/postgresql-14.service.
# systemctl status postgresql-14              
● postgresql-14.service - PostgreSQL 14 database server
   Loaded: loaded (/usr/lib/systemd/system/postgresql-14.service; enabled; vendor preset: disabled)
   Active: active (running) since Tue 2023-02-07 04:26:50 UTC; 10s ago
     Docs: https://www.postgresql.org/docs/14/static/
  Process: 386 ExecStartPre=/usr/pgsql-14/bin/postgresql-14-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS)
 Main PID: 391 (postmaster)
    Tasks: 8 (limit: 304871)
   Memory: 14.4M
   CGroup: /docker/1597f853e87b7e37e1472a839f2b7ff0289c4b6a3ab097ac525d3fcc048573aa/system.slice/postgresql-14.service
           ├─391 /usr/pgsql-14/bin/postmaster -D /var/lib/pgsql/14/data/
           ├─392 postgres: logger 
           ├─394 postgres: checkpointer 
           ├─395 postgres: background writer 
           ├─396 postgres: walwriter 
           ├─397 postgres: autovacuum launcher 
           ├─398 postgres: stats collector 
           └─399 postgres: logical replication launcher 

Feb 07 04:26:49 1597f853e87b systemd[1]: Starting PostgreSQL 14 database server...
Feb 07 04:26:49 1597f853e87b postmaster[391]: 2023-02-07 04:26:49.993 UTC [391] LOG:  redirecting log output to logging collector process
Feb 07 04:26:49 1597f853e87b postmaster[391]: 2023-02-07 04:26:49.993 UTC [391] HINT:  Future log output will appear in directory "log".
Feb 07 04:26:50 1597f853e87b systemd[1]: Started PostgreSQL 14 database server.

显示“Started PostgreSQL 14 database server”,数据库运行正常。

  1. 登录数据库并修改管理员帐户密码

# su - postgres -c "psql"
psql (14.5)
Type "help" for help.

postgres=# ALTER USER postgres WITH PASSWORD '此处设置为postgres帐户密码';
ALTER ROLE
postgres=# exit
  1. 加载timescale时序数据库插件,交互式命令时一路y即可,后续可以再行配置。

[root@1597f853e87b postgresql14ts-rpm]# timescaledb-tune --pg-config=/usr/pgsql-14/bin/pg_config --conf-path /var/lib/pgsql/14/data/postgresql.conf   
Using postgresql.conf at this path:
/var/lib/pgsql/14/data/postgresql.conf

Writing backup to:
/tmp/timescaledb_tune.backup202302070428

shared_preload_libraries needs to be updated
Current:
#shared_preload_libraries = ''
Recommended:
shared_preload_libraries = 'timescaledb'
Is this okay? [(y)es/(n)o]: y
success: shared_preload_libraries will be updated

Tune memory/parallelism/WAL and other settings? [(y)es/(n)o]: y
Recommendations based on 46.55 GB of available memory and 16 CPUs for PostgreSQL 14

Memory settings recommendations
Current:
shared_buffers = 128MB
#effective_cache_size = 4GB
#maintenance_work_mem = 64MB
#work_mem = 4MB
Recommended:
shared_buffers = 11917MB
effective_cache_size = 35753MB
maintenance_work_mem = 2047MB
work_mem = 7627kB
Is this okay? [(y)es/(s)kip/(q)uit]: y
success: memory settings will be updated

Parallelism settings recommendations
Current:
missing: timescaledb.max_background_workers
#max_worker_processes = 8
#max_parallel_workers_per_gather = 2
#max_parallel_workers = 8
Recommended:
timescaledb.max_background_workers = 8
max_worker_processes = 27
max_parallel_workers_per_gather = 8
max_parallel_workers = 16
Is this okay? [(y)es/(s)kip/(q)uit]: y
success: parallelism settings will be updated

WAL settings recommendations
Current:
#wal_buffers = -1
min_wal_size = 80MB
Recommended:
wal_buffers = 16MB
min_wal_size = 512MB
Is this okay? [(y)es/(s)kip/(q)uit]: y
success: WAL settings will be updated

Background writer settings recommendations
Current:
Recommended:
Is this okay? [(y)es/(s)kip/(q)uit]: y
success: background writer settings will be updated

Miscellaneous settings recommendations
Current:
#default_statistics_target = 100
#random_page_cost = 4.0
#checkpoint_completion_target = 0.9
#max_locks_per_transaction = 64
#autovacuum_max_workers = 3
#autovacuum_naptime = 1min
#effective_io_concurrency = 1
Recommended:
default_statistics_target = 500
random_page_cost = 1.1
checkpoint_completion_target = 0.9
max_locks_per_transaction = 512
autovacuum_max_workers = 10
autovacuum_naptime = 10
effective_io_concurrency = 256
Is this okay? [(y)es/(s)kip/(q)uit]: y
success: miscellaneous settings will be updated
Saving changes to: /var/lib/pgsql/14/data/postgresql.conf
  1. 键入exit退出容器

  1. 在openeuler主机上重启容器

# docker restart pgtsdb
  1. 再次输入docker exec -it pgtsdb /bin/bash进入容器

# systemctl status postgresql-14 
● postgresql-14.service - PostgreSQL 14 database server
   Loaded: loaded (/usr/lib/systemd/system/postgresql-14.service; enabled; vendor preset: disabled)
   Active: active (running) since Tue 2023-02-07 04:31:26 UTC; 5s ago
     Docs: https://www.postgresql.org/docs/14/static/
  Process: 124 ExecStartPre=/usr/pgsql-14/bin/postgresql-14-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS)
 Main PID: 133 (postmaster)
    Tasks: 9 (limit: 304871)
   Memory: 263.1M
   CGroup: /docker/1597f853e87b7e37e1472a839f2b7ff0289c4b6a3ab097ac525d3fcc048573aa/system.slice/postgresql-14.service
           ├─133 /usr/pgsql-14/bin/postmaster -D /var/lib/pgsql/14/data/
           ├─161 postgres: logger 
           ├─163 postgres: checkpointer 
           ├─164 postgres: background writer 
           ├─165 postgres: walwriter 
           ├─166 postgres: autovacuum launcher 
           ├─167 postgres: stats collector 
           ├─168 postgres: TimescaleDB Background Worker Launcher 
           └─169 postgres: logical replication launcher 

Feb 07 04:31:26 1597f853e87b systemd[1]: Starting PostgreSQL 14 database server...
Feb 07 04:31:26 1597f853e87b postmaster[133]: 2023-02-07 04:31:26.526 UTC [133] LOG:  redirecting log output to logging collector process
Feb 07 04:31:26 1597f853e87b postmaster[133]: 2023-02-07 04:31:26.526 UTC [133] HINT:  Future log output will appear in directory "log".
Feb 07 04:31:26 1597f853e87b systemd[1]: Started PostgreSQL 14 database server.

看到“TimescaleDB Background Worker Launcher”即可确认时序数据库插件已挂载成功。

四、将制作完成的容器二次打包为PostgreSQl14.5withTimeScale2的镜像,供后续分发部署或分享

  1. 打包当前镜像

# docker commit -m "centos8 postgresql with timescale" -a "daijianbing"  1597f853e87b pg14withtimescale:v14.5         
sha256:10a71bd1190298baa8ba33dcc1d976bc5f62989611bdb0e05d0f99938d8433ff
[root@localhost dockerfile]# docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
pg14withtimescale       v14.5               10a71bd11902        6 seconds ago       413MB
quay.io/centos/centos   latest              300e315adb2f        2 years ago         209MB
  1. 删除当前容器,通过新镜像再次生成容器,并检查应用包运行情况

[root@localhost dockerfile]# docker rm pgtsdb
Error response from daemon: You cannot remove a running container 1597f853e87b7e37e1472a839f2b7ff0289c4b6a3ab097ac525d3fcc048573aa. Stop the container before attempting removal or force remove
[root@localhost dockerfile]# docker rm -f pgtsdb
pgtsdb
[root@localhost dockerfile]# docker run --privileged  -itd --name pgtsdb pg14withtimescale:v14.5 /sbin/init     
6174a0afb9d5f5cfae048831e4772e3461e99a78cb5b09eaf868e45187dca9d2
[root@localhost dockerfile]# docker exec -it pgtsdb /bin/bash
[root@6174a0afb9d5 /]# systemctl status postgresql-14
● postgresql-14.service - PostgreSQL 14 database server
   Loaded: loaded (/usr/lib/systemd/system/postgresql-14.service; enabled; vendor preset: disabled)
   Active: active (running) since Tue 2023-02-07 04:35:02 UTC; 4s ago
     Docs: https://www.postgresql.org/docs/14/static/
  Process: 76 ExecStartPre=/usr/pgsql-14/bin/postgresql-14-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS)
 Main PID: 139 (postmaster)
    Tasks: 9 (limit: 304871)
   Memory: 264.1M
   CGroup: /docker/6174a0afb9d5f5cfae048831e4772e3461e99a78cb5b09eaf868e45187dca9d2/system.slice/postgresql-14.service
           ├─139 /usr/pgsql-14/bin/postmaster -D /var/lib/pgsql/14/data/
           ├─156 postgres: logger 
           ├─158 postgres: checkpointer 
           ├─159 postgres: background writer 
           ├─160 postgres: walwriter 
           ├─161 postgres: autovacuum launcher 
           ├─162 postgres: stats collector 
           ├─163 postgres: TimescaleDB Background Worker Launcher 
           └─164 postgres: logical replication launcher 

Feb 07 04:34:58 6174a0afb9d5 systemd[1]: Starting PostgreSQL 14 database server...
Feb 07 04:34:58 6174a0afb9d5 postmaster[139]: 2023-02-07 04:34:58.711 UTC [139] LOG:  redirecting log output to logging collector process
Feb 07 04:34:58 6174a0afb9d5 postmaster[139]: 2023-02-07 04:34:58.711 UTC [139] HINT:  Future log output will appear in directory "log".
Feb 07 04:35:02 6174a0afb9d5 systemd[1]: Started PostgreSQL 14 database server.
[root@6174a0afb9d5 /]# exit

通过新镜像生成的容器运行良好,至此,带timescaledbV2时序数据库插件的PostgreSqlV14.5容器镜像在openEuler平台构建完成。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在openEuler平台构建带timescaledbV2时序数据库插件的PostgreSqlV14.5容器 的相关文章

随机推荐

  • [论文阅读]《Database Maanagement Systems》-第三章

    第三章 THE RELATIONAL MODEL 关系模型 P75 P112 synopsis 概要 大纲 supplanted 代替 排挤掉 by far 到目前为止 Prototype relational database 原型关系数
  • Jetpack学习之Navigation

    Jetpack提供了一个名为Navigation的组件 用来管理页面 Actvity和Fragment 以Fragment为主 和App bar Navigation的优势 可视化的页面导航图 便于理清页面间的关系 通过destinatio
  • Java基础:Java的优点和缺点

    优点 1 跨平台 可移植性 是Java的核心优势之一 Java的运行是通过JVM来实现的 只需要在操作系统上安装对应的虚找机即可运行 节省代码重复编写时间 2 面向对象 Java是完全的面向对象语言 非常适合大型软件的设计和开发 3 简单性
  • 使用Vue调用后台接口

    最近在学习使用vue 看完调接口之后 立马使用springboot作为后台 跃跃欲试 很尴尬 刚刚写完一个后台 vue调用就出错了 1 跨域的问题 我还以为是需要的接口和我的接口不一致 后来知道并不是端口问题 解决办法 前台vue的调用地址
  • 利用script标签实现的跨域名AJAX请求(ExtJS)

    在AJAX应用环境中 由于安全的原因 浏览器不允许XMLHttpRequest组件请求跨域资源 在很多情况下 这个限制给我来带来的诸多不便 很多同行 研究了各种各样的解决方案 1 通过修改document domain和隐藏的IFrame来
  • Java中常见的异常总结,Exception如何捕获和处理

    什么是异常 异常机制 异常机制是指当程序出现错误后 程序如何处理 具体来说 异常机制提供了程序退出的安全通道 当出现错误后 程序执行的流程发生改变 程序的控制权转移到异常处理器 通俗一点来说 就是为了让程序不被中断 继续执行 程序错误 1
  • 13-2_Qt 5.9 C++开发指南_线程同步_QMutex+QMutexLocker(目前较为常用)

    文章目录 1 线程同步的概念 2 基于互斥量的线程同步 3 QMutex实现线程同步源代码 3 1 qdicethread h 3 2 qdicethread cpp 3 3 dialog h 3 4 dialog cpp 4 QMutex
  • AI资讯--2017年资讯汇总

    九个研究方向 持续学习 Continual learning 可解读的决策 Explainable decisions 安全飞地 Secure enclaves 对抗学习 Adversarial learning 在保密数据上共享学习 Sh
  • Beanutils.copyProperties

    BeanUtils提供对Java反射和自省API的包装 其主要目的是利用反射机制对JavaBean的属性进行处理 使用效果 使用前 UserInfo userInfo UserInfo form User user new User use
  • 搭建菜谱应用微信小程序-前后端

    搭建菜谱应用微信小程序 前后端 框架简析 后端使用TP6框架 mysql 前端使用uni app 代码 框架简析 后端使用TP6框架 mysql 使用了这个项目来修改精简 https gitee com jameson512 novelap
  • Spring Cloud学习笔记【消息总线-SpringCloud Bus】

    SpringCloud Bus概述 概述 Spring Cloud Bus是Spring Cloud生态系统中的一个组件 用于实现微服务架构中的消息总线 它利用了轻量级消息代理 如RabbitMQ或Kafka 作为通信中间件 实现了在分布式
  • EaseUS Data Recovery Wizard Technician数据恢复软件安装

    EaseUS Data Recovery Wizard Technician是最好的数据恢复软件 可以解决所有的数据丢失问题 支持从硬盘 外置硬盘 U盘 存储卡 数码相机 手机 音乐播放器等存储介质中恢复因删除 格式化 软件崩溃 硬盘损坏
  • 【达摩院OpenVI】图像MOS评价协助清理“垃圾”照片

    团队模型 论文 博文 直播合集 点击此处浏览 一 背景 MOS Mean Opinion Score 是一种常用的主观质量评价方法 常用于视频 图像等多媒体领域中的质量评价 MOS视觉评价通常是通过让受试者观看视频 图像 对视频的清晰度 锐
  • 数组指针 一维

    概念 我们把指向数组的指针叫做数组指针 后面还会学到指针数组 这两个是不一样的 根据中学语文偏正词组的知识可以知道 前者是指针 后者是数组 数组的指针其实就是数组在内存的起始地址 先看一个例子 int a 6 i 那么a i 和 a i 是
  • 目标检测常用评价指标及其计算方法

    目录 一 目标检测常用评价指标 二 速度指标 三 精度指标 1 混淆矩阵 2 Precision Recall F1 F 1 Precision 2 Recall 3 F1 4 F 3IoU Intersection over Union
  • C++字符串与转移字符

    先看以下代码 include
  • WCE下添加fliter及使用filter(二)

    转载请标明是引用于 http blog csdn net chenyujing1234 完成注册表cim capture reg START CIM Capture DShow filter HKEY CLASSES ROOT Filter
  • CSDN博客的文字颜色、字体和字号设置

    文章目录 一 文本颜色设置 字体颜色参考 二 文本字号设置 三 文本字体设置 四 实战演练 五 转载自 一 文本颜色设置 代码 font color red 1 我是文本 红色red font font color blue 2 我是文本
  • 倒计时小插件,懒人专用

    一 下载该插件 下载地址 https download csdn net download weixin 43684214 78400201 二 解压后 打开浏览器的开发者模式 三 安装后效果如图
  • 在openEuler平台构建带timescaledbV2时序数据库插件的PostgreSqlV14.5容器

    在openEuler平台部署特定版本的PostgreSql在安装包收集上存在较大难题 本次需求为制作zabbix系统所需的timescaledbV2插件的PostgreSqlV14 5数据库 在评估多种方案后 采用了基于CentOS底包制作