Centos7安装Vastbase

2022-02-21 00:00:00 修改 数据库 参数 设置 安装

Centos7安装Vastbase

环境:Centos7.8 + Vastbase-G100-V2.2 + PostGIS

# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

vi /etc/selinux/config
SELINUX=disabled

# 立即生效
setenforce 0


# 如果是集群安装,官方要求所有节点时区保持一致,如果单机安装确认系统时区和时间是否正确
date -s "2021-09-16 23:53:50"

# 如果是集群安装,官方要求把各数据库节点的网卡 MTU 值设置为相同大小。MTU 值推荐 8192,要求不小于 1500。我单机安装开发测试环境、中间网络交换机MTU默认未1500,直接忽略

# 设置 root 允许远程登录
# 在安装 Vastbase 安装时需要 root 帐户远程登录访问权限(如果已允许root远程登录的可以跳过)
vim /etc/ssh/sshd_config
PermitRootLogin yes

# 重启sshd服务生效修改配置
service sshd restart


# OS内核参数优化
vi /etc/sysctl.conf

# 在 linux6 和 7 上,使用 aio 的话,需要设置它,适应异步 IO ,可以不需要重新修改该值
fs.aio-max-nr = 1048576
# 在 linux6 和 7 上,允许打开文件数,pg 参数 max_files_per_process 对应,不重新修改该值
fs.file-max = 76724600
# 信号量,ipcs -l 或 或 -u 查看,每 16 个进程一组,每组信号量需要 17 个信号量。
# 不重新修改该值。四个参数: SEMMSL SEMMNS SEMOPM SEMMNI。SEMMSL * SEMMNI = SEMMNS (参数1 * 参数4 = 参数2),SEMMSL = SEMOPM (参数1 = 参数3)。
# 参数1(SEMMSL): max semaphores per array, 信号量,表示每个信号集中的大信号量数目,信号量是多线程环境下使用的一种设施,它负责协调各个线程, 以保证它们能够正确、合理的使用公共资源。信号量设置时,小250,对于processes参数设置较大的系统建议设置为processes+10。
# 参数2(SEMMNS): max semaphores system wide, 所有信号的大数量、即系统范围内的大信号量总数目,SEMMSL * SEMMNI。
# 参数3(SEMOPM): max ops per semop call, 代表调用单个信号集中大信号数量,即每个信号发生时的大系统操作数目,大于17,一般设置至少100,或者等于SEMMSL。
# 参数4(SEMMNI): max number of arrays, 代表是组(信号集的大值),即系统范围内的大信号集总数目。少128。
# kernel.sem = 4096 2147483647 2147483646 512000 官方是给的这个设置。如果不设置,系统默认值(ipcs -sl 命令可查看)为 :250 3200 32 128。我没有使用官方的设置,也没有使用默认值,我调整了一下
kernel.sem = 4096 83886080 4096 20480
# 所有共享内存段相加大小限制( 建议内存的 80% ,单位 page ,查看 page 大小 getconf PAGE_SIZE)
# 设置时根据自己的实际内存大小进行计算和设置,例如:page 大小 4096,8G 内存的 80% 设置为:8*1024*1024*1024/4096*80%=1677721
kernel.shmall = 1677721
# 大单个共享内存段大小(建议为大于 shared_buffer 值 ,单位 bytes 。需要计算。一般建议设置为内存的 50%。例如:8G内存,则参数设置为:8*1024*1024*1024*50%=4294967296
# kernel.shmmax = 4294967296 #50%,我设置50%启动报错
kernel.shmmax = 6442450944 #75%,我设置75%启动成功
# 系统范围内共享内存段的大数量(一共能生成多少共享内存段),每个 PG 数据库集群至少 2 个共享内存段,不重新修改该值
# kernel.shmmni = 819200 官方设置 819200,我设置该值会报错 Invalid argument,我调整为默认值 4096
kernel.shmmni = 4096
# iptables 防火墙链表相关, 不重新修改该值
net.core.netdev_max_backlog = 10000
# 网络接收 buffer 大小,单位 bytes ,不重新修改该值
net.core.rmem_default = 262144
# 允许大网络接收 buffer 大小, 单位 bytes ,不重新修改该值
net.core.rmem_max = 4194304
# 网络传输 buffer 大小,单位 bytes, 不重新修改该值
net.core.wmem_default = 262144
# 网络传输大 buffer 大小,单位 bytes ,不重新修改该值
net.core.wmem_max = 4194304
# socket 监听数,默认 128 ,不重新修改该值
net.core.somaxconn = 4096
# 加快僵尸进程回收速度,不重新修改该值
net.ipv4.tcp_fin_timeout = 5


修改完成后执行 sysctl –p 使参数生效


# 资源限制配置修改(修改/etc/security/limits.conf):

echo '
vastbase soft nproc unlimited
vastbase hard nproc unlimited
vastbase soft stack unlimited
vastbase hard stack unlimited
vastbase soft core unlimited
vastbase hard core unlimited
vastbase soft memlock unlimited
vastbase hard memlock unlimited
' >> /etc/security/limits.conf


# 添加排序规则
在初始化实例时,数据库会将当前操作系统所有 collation 语言排序规则信息(可以通过 Linux 命令 locale -a 查看)加入到 pg_collation 表中。
如果语言排序规则是在初始化实例之后才加入系统的,则不能自动加入到 pg_collation 系统表中,在创建表等对象时如果指定了该排序规则,则会报该排序规则不存在。
例如:linx 操作系统默认安装时只有 C、POSIX、zh_CN.utf8 等语言排序规则,如果需要数据库支持 en_US.utf8 等其他语言排序规则,需要在初始化实例之前安装其他语言排序规则。如果是在初始化实例后再安装的语言排序规则,可以通过创建一个新的数据库,指定 lc_collate、lc_ctype 来使数据库支持新增加的语言排序规则。
操作系统添加排序规则命令:使用 root 用户执行:
localedef -v -c -i en_US -f UTF-8 en_US.UTF-8


# 创建用户和数据目录

groupadd -g 1005 vastbase
useradd -g 1005 -u 1005 -m vastbase
passwd vastbase

mkdir -p /opt/vastbase/vastbase #软件安装路径
mkdir -p /opt/vastbase/data #数据库目录
chown -R vastbase:vastbase /opt/vastbase
chmod 700 /opt/vastbase

[root@localhost opt]# ls -l /opt/vastbase/
total 0
drwxr-xr-x. 2 vastbase vastbase 6 Sep 17 00:24 data
drwxr-xr-x. 2 vastbase vastbase 6 Sep 17 00:24 vastbase
[root@localhost opt]#


# 命令静默安装数据库
su - vastbase
$ cd /home/vastbase
$ mkdir -p /home/vastbase/vastbase-install
下载安装包到 /home/vastbase目录下 & 解压
$ tar -zxvf Vastbase-G100-installer-2.2_Build_4.9-CentOS-x86_64-20210901.tar.gz -C /home/vastbase/vastbase-install/
解压后会释放目录:vastbase-installer

# 提前安装依赖包,如果缺少必要依赖,安装时依赖检查会失败
$ exit
# yum install -y libicu libxslt tcl bzip2 perl
# su - vastbase
$

步是检查安装包是否完整(防篡改)
$ cd /home/vastbase/vastbase-install/vastbase-installer
$ ./vastbase_installer

检查OK,出现“欢迎安装vastbase”界面:
回车继续安装

系统配置信息确认:
回车继续安装

依赖检查:
如果缺少依赖,会提示,需要安装依赖,自动结束安装

依赖检查:

如果缺少依赖: libicu,libxslt,tcl,bzip2
$ exit #退出到root安装安装依赖
# yum install -y libicu libxslt tcl bzip2
# yum list libicu libxslt tcl bzip2
切换到 vastbase 用户,重新安装
# su - vastbase
$ cd /home/vastbase/vastbase-install/vastbase-installer
$ ./vastbase_installer
重复之前的安装过程

如果依赖检查通过,进入IPC参数检查:
如果有问题,会提示进行设置

IPC参数检查
---------------

检测到systemd-logind参数设置问题,请按照如下步骤修改:
---请显式地在 /etc/systemd/logind.conf 中设置 RemoveIPC=no
---运行命令 systemctl daemon-reload
---运行命令 systemctl restart systemd-logind

检测到show-session参数设置问题,请按照如下步骤修改:
---请显式地在 /usr/lib/systemd/system/systemd-logind.service 中设置 RemoveIPC=no

切换到 root 用户按照提示进行配置参数的设置后再重新执行安装

# su - vastbase
$ cd /home/vastbase/vastbase-install/vastbase-installer
$ ./vastbase_installer


IPC参数检查
---------------

检测到show-session参数设置问题,请按照如下步骤修改:
---请显式地在 /usr/lib/systemd/system/systemd-logind.service 中设置 RemoveIPC=no
切换到 root 用户按照提示进行配置参数的设置后再重新执行安装

# su - vastbase
$ cd /home/vastbase/vastbase-install/vastbase-installer
$ ./vastbase_installer

重复前面的安装配置,IPC参数检查完成

安装数据库
有两种模式:典型安装、自定义安装。
典型安装为安装过程的参数按默认值设置,如需自定义安装输入 2 并输入<回车>继续。我输入2,自定义安装

输入数据库超级用户(vastbase)密码:
输入密码,至少要8位

数据库加密密钥设置
输入1,使用超级用户密码

Vastbase软件安装目录:
默认位置: /home/vastbase/local/vastbase
我修改为:/opt/vastbase/vastbase

数据库目录
默认位置: /home/vastbase/data/vastbase
我修改为:/opt/vastbase/vastbase

设置数据库软件安装目录,默认为 /home/vastbase/local/vastbase
我设置为:/opt/vastbase/vastbase


设置数据库实例化路径,默认未 /home/vastbase/data/vastbase
我设置为:/opt/vastbase/data

监听端口,默认5432
我使用默认端口,直接回车

配置大连接数:默认500
我使用默认值,直接回车

配置共享内存:默认为(内存/4)MB,输入共享内存大小,单位MB,或者输入<ENTER>选择默认值(1955):
默认值,回车

后确认安装概要信息:
安装概要
---------------
Vastbase软件安装目录:
/opt/vastbase/vastbase

数据库目录:
/opt/vastbase/data

数据库超级用户:
vastbase

数据库初始化参数:
listen_addresses='*'
port=5432
max_connections=500
shared_buffers=1955MB
work_mem=4MB

确认OK,回车继续安装。安装过程包括安装数据库、实例化数据库、配置数据库参数和配置用户环境变量。输出信息如下:

正在安装,请稍后...
初始化数据库成功, 数据目录: /opt/vastbase/data
加密密钥文件生成成功
成功更新配置文件: /opt/vastbase/data/postgresql.conf

正在写入配置文件

正在写入cluster_config.xml文件

正在写入环境变量
成功更新配置文件: '/home/vastbase/.bashrc'
===============================================================================
安装完成
---------------

请先指定license路径(license路径错误会导致启动数据库失败):
请将license路径写入文件 /opt/vastbase/data/postgresql.conf, 形式为 license_path='license路径'

初始化数据库运行环境:
source ~/.bashrc

启用、停止、重启数据库:
vb_ctl <start/stop/restart>


已安装完成,输入<ENTER>退出:

退出安装界面,按照提示,指定 License 文件路径。
如果不指定,默认以 /etc/vastbase/.license 作为 license 文件位置,执行:
$ vi /opt/vastbase/data/postgresql.conf
末尾追加: license_path='/opt/vastbase/vastbase/license


初始化数据库运行环境
$ source ~/.bashrc

启停数据库
$ vb_ctl <start/stop/restart>

登录数据库
实例化数据库过程中会默认创建数据库超级用户 vastbase,执行命令登录数据库。
$ vsql -r -d vastbase


状态检查
$ vb_ctl query


检查 Vastbase 运行日志


卸载
卸载 Vastbase 的过程包含卸载 Vastbase 和对 Vastbase 服务器的环境做清理。

以操作系统用户 vastbase 登录数据库节点
使用 gs_uninstall 卸载 vastbase
gs_uninstall --delete-data

错误排查:如果卸载失败请根据 $GAUSSLOG/vastbase/gs_uninstall-YYYY-MM-DD_HHMMSS.log 中的日志信息排查错误。


初启动数据库报错:

[vastbase@localhost ~]$ vb_ctl start
[2021-09-27 17:27:15.402][17515][][vb_ctl]: vb_ctl started,datadir is /opt/vastbase/data
[2021-09-27 17:27:15.545][17515][][vb_ctl]: waiting for server to start...
.0 LOG: [Alarm Module]can not read GAUSS_WARNING_TYPE env.

0 LOG: [Alarm Module]Host Name: localhost.localdomain

0 LOG: [Alarm Module]Host IP: 127.0.0.1

0 LOG: [Alarm Module]Get ENV GS_CLUSTER_NAME failed!

0 LOG: [Alarm Module]Invalid data in AlarmItem file! Read alarm English name failed! line: 52

0 WARNING: failed to open feature control file, please check whether it exists: FileName=gaussdb.version, Errno=2, Errmessage=No such file or directory.
0 WARNING: failed to parse feature control file: gaussdb.version.
0 WARNING: Failed to load the product control file, so gaussdb cannot distinguish product version.
0 LOG: Failed to initialze environment for codegen.
The core dump path is an invalid directory
2021-09-27 17:27:15.830 [unknown] [unknown] localhost 47228177914624 0 0 [BACKEND] LOG: when starting as multi_standby mode, we couldn't support data replicaton.
2021-09-27 17:27:15.830 [unknown] [unknown] localhost 47228177914624 0 0 [REDO] LOG: Recovery parallelism, cpu count = 4, max = 8, actual = 4
2021-09-27 17:27:15.830 [unknown] [unknown] localhost 47228177914624 0 0 [REDO] LOG: ConfigRecoveryParallelism, true_max_recovery_parallelism:8, max_recovery_parallelism:8
gaussdb.state does not exist, and skipt setting since it is optional.2021-09-27 17:27:15.830 [unknown] [unknown] localhost 47228177914624 0 0 [BACKEND] LOG: [Alarm Module]can not read GAUSS_WARNING_TYPE env.

2021-09-27 17:27:15.830 [unknown] [unknown] localhost 47228177914624 0 0 [BACKEND] LOG: [Alarm Module]Host Name: localhost.localdomain

2021-09-27 17:27:15.830 [unknown] [unknown] localhost 47228177914624 0 0 [BACKEND] LOG: [Alarm Module]Host IP: 127.0.0.1

2021-09-27 17:27:15.830 [unknown] [unknown] localhost 47228177914624 0 0 [BACKEND] LOG: [Alarm Module]Get ENV GS_CLUSTER_NAME failed!

2021-09-27 17:27:15.830 [unknown] [unknown] localhost 47228177914624 0 0 [BACKEND] LOG: [Alarm Module]Invalid data in AlarmItem file! Read alarm English name failed! line: 52

2021-09-27 17:27:15.830 [unknown] [unknown] localhost 47228177914624 0 0 [BACKEND] LOG: Transparent encryption disabled.

2021-09-27 17:27:15.833 [unknown] [unknown] localhost 47228177914624 0 0 [BACKEND] LOG: loaded library "security_plugin"
2021-09-27 17:27:15.833 [unknown] [unknown] localhost 47228177914624 0 0 [BACKEND] WARNING: could not create any HA TCP/IP sockets
2021-09-27 17:27:15.835 [unknown] [unknown] localhost 47228177914624 0 0 [BACKEND] WARNING: No explicit IP is configured for listen_addresses GUC.
2021-09-27 17:27:15.835 [unknown] [unknown] localhost 47228177914624 0 0 [BACKEND] LOG: InitNuma numaNodeNum: 1 numa_distribute_mode: none inheritThreadPool: 0.
2021-09-27 17:27:15.835 [unknown] [unknown] localhost 47228177914624 0 0 [BACKEND] LOG: reserved memory for backend threads is: 220 MB
2021-09-27 17:27:15.835 [unknown] [unknown] localhost 47228177914624 0 0 [BACKEND] LOG: reserved memory for WAL buffers is: 128 MB
2021-09-27 17:27:15.835 [unknown] [unknown] localhost 47228177914624 0 0 [BACKEND] LOG: Set max backend reserve memory is: 348 MB, max dynamic memory is: 6137 MB
2021-09-27 17:27:15.835 [unknown] [unknown] localhost 47228177914624 0 0 [BACKEND] LOG: shared memory 5290 Mbytes, memory context 6485 Mbytes, max process memory 12288 Mbytes
2021-09-27 17:27:15.835 [unknown] [unknown] localhost 47228177914624 0 0 [BACKEND] FATAL: could not create shared memory segment: Invalid argument
2021-09-27 17:27:15.835 [unknown] [unknown] localhost 47228177914624 0 0 [BACKEND] DETAIL: Failed system call was shmget(key=5432001, size=5547679744, 03600).
2021-09-27 17:27:15.835 [unknown] [unknown] localhost 47228177914624 0 0 [BACKEND] HINT: This error usually means that PostgreSQL's request for a shared memory segment exceeded your kernel's SHMMAX parameter. You can either reduce the request size or reconfigure the kernel with larger SHMMAX. To reduce the request size (currently 5547679744 bytes), reduce PostgreSQL's shared memory usage, perhaps by reducing shared_buffers.
If the request size is already small, it's possible that it is less than your kernel's SHMMIN parameter, in which case raising the request size or reconfiguring SHMMIN is called for.
The PostgreSQL documentation contains more information about shared memory configuration.
2021-09-27 17:27:15.839 [unknown] [unknown] localhost 47228177914624 0 0 [BACKEND] LOG: FiniNuma allocIndex: 0.
[2021-09-27 17:27:16.546][17515][][vb_ctl]: waitpid 17518 failed, exitstatus is 256, ret is 2

[2021-09-27 17:27:16.546][17515][][vb_ctl]: stopped waiting
[2021-09-27 17:27:16.546][17515][][vb_ctl]: could not start server
Examine the log output.
[vastbase@localhost ~]$


找到了其中的关键报错信息:
LOG: shared memory 5290 Mbytes, memory context 6485 Mbytes, max process memory 12288 Mbytes
FATAL: could not create shared memory segment: Invalid argument
DETAIL: Failed system call was shmget(key=5432001, size=5547679744, 03600).
HINT: This error usually means that PostgreSQL's request for a shared memory segment exceeded your kernel's SHMMAX parameter.
You can either reduce the request size or reconfigure the kernel with larger SHMMAX.
To reduce the request size (currently 5547679744 bytes), reduce PostgreSQL's shared memory usage, perhaps by reducing shared_buffers.
If the request size is already small, it's possible that it is less than your kernel's SHMMIN parameter, in which case raising the request size or reconfiguring SHMMIN is called for.
The PostgreSQL documentation contains more information about shared memory configuration.


关于 shared_buffers

1,什么是 shred_buffer?
在数据库系统中,我们主要关注磁盘 IO,大多数 OLTP 工作负载都是随机 IO,因此从磁盘获取非常慢
为了解决这个问题,postgres将数据缓存在RAM中,以此来提高性能,即使SSD的情况下RAM也要快很多
shared_buffers 是一个 8KB 的数组,postgres在从磁盘中查询数据前,会先查找 shared_buffers 的页,如果命中,就直接返回,避免从磁盘查询

2,shared_buffers 存储什么?
1)表数据
2)索引,索引也存储在8K块中
3)执行计划,存储基于会话的执行计划,会话结束,缓存的计划也就被丢弃

3,什么时候加载 shared_buffers?
1)在访问数据时,数据会先加载到os缓存,然后再加载到shared_buffers,这个加载过程可能是一些查询,也可以使用pg_prewarm预热缓存
2)当然也可能同时存在os和shared_buffers两份一样的缓存(双缓存)
3)查找到的时候会先在shared_buffers查找是否有缓存,如果没有再到os缓存查找,后再从磁盘获取
4)OS缓存使用简单的LRU(移除近久未使用的缓存),而数据库采用的优化的时钟扫描,即缓存使用频率高的会被保存,低的被移除

4,shared_buffers 如何设置合理参数
Windows服务器:有效范围是 64MB ~ 512MB,默认128MB
Linux服务器:一般建议设置为内存的25%,也有的设置为75%,但可能会超出系统内存。设置所有的缓存需要注意不要超过总内存大小


关于报错信息说明:
FATAL: could not create shared memory segment: Invalid argument
DETAIL: Failed system call was shmget(key=5432001, size=5547679744, 03600).

这个可能导致该错误的原因有:
1)可能是系统的内核对共享内存区的限制 (kernel.shmmax) 小于 PostgreSQL 试图创建的工作区域(size=5547679744 字节)
2)可能是因为试图在同一台机器上启动多个服务器,并且它们所需的总空间超过了内核的限制,也会报这个错

解决方案:
1)可以尝试以小于正常数量的缓冲区(shared_buffers)启动服务器
=> vi /opt/vastbase/data/postgresql.conf 尝试调小 shared_buffers 参数(我数据库安装时设置的是内存*1/4=1995MB),调小为1000MB发现问题没有解决,还是报错,后放弃了该修改方案
2)重新配置内核参数,增加共享内存允许的值,把 kernel.shmmax 由原来内存的 50% 调大为内存的 75%,报错问题得到解决
=> vi /etc/sysctl.conf
# kernel.shmmax = 4294967296 # 50%
kernel.shmmax = 6442450944 # 75%

$ vb_ctl start

启动成功

查看服务监听该端口

[vastbase@localhost ~]$ netstat -an |grep 5432
tcp 0 0 0.0.0.0:5432 0.0.0.0:* LISTEN
tcp6 0 0 :::5432 :::* LISTEN
tcp6 0 0 ::1:42436 ::1:5432 TIME_WAIT
unix 2 [ ACC ] STREAM LISTENING 183478 /tmp/.s.PGSQL.5432
[vastbase@localhost ~]$

相关命令:


登录数据库实例
$ vsql -r -d vastbase
vastbase=#


查看版本
vastbase=# select version();
version
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
PostgreSQL 9.2.4 (Vastbase G100 V2.2 (Build 4.9.3201)) compiled at 2021-09-01 17:41:12 commit 0 last mr on x86_64-unknown-linux-gnu, compiled by g++ (GCC) 7.3.0, 64-bit
(1 row)

vastbase=# show server_version;
server_version
----------------
9.2.4
(1 row)

其他常用命令,和PostgreSQL类似,可以参考:《 PostgreSQL常用操作命令》

PostGIS安装

待补充
————————————————
版权声明:本文为CSDN博主「sunny05296」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/sunny05296/article/details/120517940

相关文章