Centos7安装HighGo DB V6企业版

Centos7安装HighGo DB V6企业版

环境信息:Centos7(4core/8g) + HighGo DB V6

> 软件和资料下载
官网提供了HighGo DB 数据库软件 & 部署手册 & 参考资料下载:
http://www.highgo.com/content.php?catid=75
官方有 HighGo Database V3/V4/V5/V6 多个版本,我直接下载V6版本进行安装部署

> 内存和Swap检查
服务器资源配置(最低配置):4Core/4G/800MB
服务器资源配置(推荐配置):16Core/64G/5GB SSD
我部署的虚机配置为:4Core/8G/100G

内存检查&Swap空间检查:
# df -h
# free -h
# grep MemTotal /proc/meminfo
# grep SwapTotal /proc/meminfo

内存和对应Swap空间要求:
内存大小: Swap大小
8G:     2~4G
8~16G:  4~8G
16~64G: 8~32G
>64G:   32G

创建Swap(如果SWAP已满足,则可以跳过该步骤)
1. 创建swap文件, 指定swap文件的大小, 先指定区块大小:bs, 再指定区块数量count, 则swap文件的大小是: count*bs
在root用户下执行如下命令(创建8G的swap):
dd if=/dev/zero of=/myswapfile bs=1M count=8192

2. 指定作为交换区的文件:
mkswap /myswapfile
3. 激活交换区文件:
swapon /myswapfile

4. 设置开机时启用swap, 在/etc/fstab末尾添加如下内容:
/myswapfile    swap           swap    defaults        0 0

5. 确认swap已经被使用,另外在/目录可以看到文件swapfile
swapon -s 

如果要关闭swap,可执行命令:
swapoff /myswapfile


> 内核参数检查
cat /proc/sys/kernel/shmall #所有共享内存段相加大小,建议内存的80%,单位page,查看page大小:getconf PAGE_SIZE。8G内存设置为:8*1024*1024*1024/4096*80%=1677721
cat /proc/sys/kernel/shmmax #最大单个共享内存段大小,建议为大于shared_buffer值 ,单位bytes 。一般建议设置为内存的50%。8G内存设置为50%(8*1024*1024*1024*50%=4294967296)启动失败,我设置为75%( 8*1024*1024*1024*50%=6442450944 )
cat /proc/sys/kernel/shmmni #统范围内共享内存段的最大数量(一共能生成多少共享内存段),每个PG数据库集群至少2个共享内存段,不重新修改该值。官方建议819200,我设置该值会报错Invalid argument,我调整为默认值4096

部署手册推荐的内存大小和对应的内核参数配置建议如下:
内存大小  shmall      shmax 
8G:      7~8G,      4G
8~64G:    Mem*50%,    Mem*90%~95%
>=64G:    32G,        Mem*90%~95%

该参数配置只是作为参考,实际配置时,根据自己的实际内存情况进行调整配置,我的内存8G,最终设置的值如下(后面内核参数优化配置sysctl.conf时会一起设置,这里就不用单独设置了)
kernel.shmall = 1677721     #Mem*80%
kernel.shmmax = 6442450944  #Mem*75%
kernel.shmmni = 4096        #default 4096

注意:这几个参数如果设置不当,可能会导致数据库启动时报错。


> 关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
systemctl status firewalld.service

> 关闭SELINUX
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g"  /etc/selinux/config
setenforce 0
cat /etc/selinux/config | grep SELINUX=disabled
getenforce

> 关闭 NetworkManager
systemctl stop NetworkManager.service
systemctl disable NetworkManager.service
systemctl status NetworkManager.service

题外话:关于NetworkManager
NetworkManager是2004年RedHat启动的项目,是用来让Linux用户轻松的更轻松的检测网络、自动连接网络的程序,无论是无线还是有线连接,它都可以令您轻松管理,自动发现网卡并配置IP地址。
对于无线网络,网络管理器可以自动切换到最可靠的无线网络。利用网络管理器的程序可以自由切换在线和离线模式。网络管理器可以优先选择有线网络,支持VPN。
RHEL7上同时支持network.service和NetworkManager.service(简称NM),默认开启这2个服务,但是因为NetworkManager.service最初的兼容性不好,很多人都将其关闭。
但是在RHEL 8/Centos 8上已废弃network.service(默认不安装),只能通过NetworkManager进行网络配置。NetworkManager主要管理2个对象:Connection(网卡连接配置)和Device(网卡设备),他们之间是N:1的对应关系,同一时刻只能有一个Connection对于Device才生效。

RHEL 8/Centos 8有三种方法来配置网络:
方法1)通过 nmcli connection add 命令配置,会自动生成ifcfg文件
方法2)手动配置 ifcfg 文件,通过 nmcli connection reload 来加载&生效配置
方法3)手动配置 ifcfg 文件,通过传统 network.service 来加载生效配置

NetworkManager 命令语法 & 常用管理命令
nmcli connection {show | up | down | modify | add | edit | clone | delete | monitor | reload | load | import | export} [ARGUMENTS...]
nmcli connection # 网络连接管理
nmcli connection show  # 查看所有网卡配置
nmcli connection reload # 重新加载网卡配置,不会立即生效
nmcli connection down ens160 && nmcli connection up ens160 # 立即生效Connection配置
nmcli connection modify ens160 ipv4.addr 192.168.1.88/24 &&  nmcli connection up ens160  # 修改IP地址&立即生效


> 设置&检查主机名
hostnamectl set-hostname hgdb
hostnamectl status

> 配置hosts
vi /etc/hosts
192.168.1.88 hgdb

> 检查时间和时区
timedatectl 
timedatectl list-timezones
timedatectl set-timezone Asia/Shanghai
date -s "20210929 17:00:00"
hwclock -w
hwclock


> 安装系统软件包
yum install -y vim wget readline readline-devel zlib zlib-devel openssl openssl-devel pam-devel libxml2-devel libxslt-devel python-devel tcl-devel gcc gcc-c++ rsync 
yum list vim wget readline readline-devel zlib zlib-devel openssl openssl-devel pam-devel libxml2-devel libxslt-devel python-devel tcl-devel gcc gcc-c++ rsync

如果不能访问外网yum源,则需要配置本地yum源,本文不做介绍
可以参考:《redhat7配置yum repos软件仓库&远程yum》
https://blog.csdn.net/sunny05296/article/details/107321824


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

#for highgo db 6.0
net.core.wmem_default=262144
fs.file-max=76724600
vm.mmap_min_addr=65536
net.core.somaxconn=4096
net.core.wmem_max=4194304
net.core.netdev_max_backlog=10000
# 信号量,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
net.core.rmem_max=4194304
vm.overcommit_ratio=90
net.ipv4.tcp_tw_reuse=1
net.core.rmem_default=262144
net.ipv4.ip_local_port_range=40000 65535
net.netfilter.nf_conntrack_max=1200000
net.ipv4.tcp_rmem=8192 87380 16777216
net.ipv4.tcp_max_syn_backlog=4096
fs.nr_open=20480000
net.ipv4.tcp_wmem=8192 87380 16777216
vm.dirty_writeback_centisecs=100
vm.dirty_ratio=95
# 所有共享内存段相加大小限制( 建议内存的 80% ,单位 page ,查看 page  大小 getconf PAGE_SIZE)
# 设置时根据自己的实际内存大小进行计算和设置,例如:page 大小 4096,8G 内存的 80% 设置为:8*1024*1024*1024/4096*80%=1677721
kernel.shmall = 1677721     #Mem*80%
# 最大单个共享内存段大小(建议为大于 shared_buffer  值 ,单位 bytes 。需要计算。一般建议设置为内存的 50%。例如:8G内存,则参数设置为:8*1024*1024*1024*50%=4294967296。如果因为该参数导致启动失败时,可以尝试调整为75%
# kernel.shmmax = 4294967296  # 50%
kernel.shmmax = 6442450944  #Mem*75%
# 系统范围内共享内存段的最大数量(一共能生成多少共享内存段),每个 PG  数据库集群至少 2 个共享内存段,不重新修改该值
# kernel.shmmni = 819200  官方设置 819200,我设置该值会报错 Invalid argument,我调整为默认值 4096
kernel.shmmni = 4096  #default 4096
vm.swappiness=0
net.ipv4.tcp_mem=8388608 12582912 16777216
vm.dirty_background_bytes=409600000
net.nf_conntrack_max=1200000
net.ipv4.tcp_max_tw_buckets=262144
fs.aio-max-nr = 1048576

生效内核参数优化配置:
sysctl -p

注意:
1)kernel.shmmax & kernel.shmall 由于数据库会自动修改,所以这里手动配置内核参数优化时,可以不用设置
2)如果遇到报错:
   sysctl: cannot stat /proc/sys/net/netfilter/nf_conntrack_max: No such file or directory
   sysctl: cannot stat /proc/sys/net/nf_conntrack_max: No such file or directory
   可能是 conntrack没有加载,lsmod |grep conntrack ,如果 返回 为空,表示没有加载
   执行命令加载: modprobe ip_conntrack 
   重新执行 sysctl -p 即可
   也可以忽略该错误、或者注释掉 net.nf_conntrack_max  & net.netfilter.nf_conntrack_max 这两个参数的优化
   
   关于ip_conntrack
   ip_conntract就是linux NAT的一个跟踪连接条目的模块,用来跟踪和记录连接状态,是netfilter的一部份。
   ip_conntrack模块会使用一个哈希表记录 tcp 通讯协议的 established connection 记录。当这个哈希表满了的时候,便会导致 nf_conntrack: table full, dropping packet 错误。

> OS limits配置(根据自己实际环境进行合理配置)
echo '
#for highgo db 6.0.
highgo soft core unlimited
highgo hard nproc unlimited
highgo soft nproc unlimited
highgo hard memlock unlimited
highgo hard nofile 1024000
highgo soft memlock unlimited
highgo soft nofile 1024000
' >> /etc/security/limits.conf


HighGo DB V6企业版-单机安装

根据下载的安装包不同,安装方式也有区别,主要由两种:
1)下载的rpm包:使用rpm命令安装
2)下载的.tar.gz包:解压后,使用 runinstall 安装脚本进行命令行静默安装(本文暂不做介绍)


【rpm 包方式安装HighGo DB V6企业版】
rpm 包安装步骤以企业版 v6.0.1 为例,安装 rpm 包会默认创建 highgo 用户,该用户默认没有密码。安装文件的属主均为 highgo 用户。安装完毕后,需使用 highgo 用户执行 initdb 及后续操作。
rpm 方式安装无需配置路径和端口,安装完成后的默认路径和相关配置为:
HGDB_HOME=/opt/HighGo6.0.1-cluster
HG_BASE=/opt/HighGo6.0.1-cluster
PGPORT=5866
PGDATA=/opt/HighGo6.0.1-cluster/data

> 安装数据库单机,使用 root 用户安装 rpm 包
上传rpm安装包&license文件(hgdb.lic)到/opt目录下,执行rpm安装
# cd /opt
# rpm -ivh hgdb6.0.1-enterprise-centos7-x86-64-20201020.rpm

Preparing...                          ################################# [100%]
Updating / installing...
   1:hgdb-cluster-6.0.1-1.el7.centos  ################################# [100%]
Note: Forwarding request to 'systemctl enable hgdb-cluster-6.0.1.service'.
Created symlink from /etc/systemd/system/multi-user.target.wants/hgdb-cluster-6.0.1.service to /usr/lib/systemd/system/hgdb-cluster-6.0.1.service.
Created symlink from /etc/systemd/system/graphical.target.wants/hgdb-cluster-6.0.1.service to /usr/lib/systemd/system/hgdb-cluster-6.0.1.service.
[root@hgdb opt]# 
安装完成后,会生成service文件:/usr/lib/systemd/system/hgdb-cluster-6.0.1.service
安装完成后,会在 /opt 目录下生成安装目录 HighGo6.0.1-cluster
# ls /opt/HighGo6.0.1-cluster/
bin  conf  diag  etc  icon  include  lib  share

设置highgo用户密码
安装完后默认生成的highgo用户无密码,设置密码(不支持".")
# passwd highgo


> 环境变量生效
安装完毕后会在 /opt/HighGo6.0.1-cluster/etc 目录下生成一个名为 highgodb.env 的文件,内容如下所示
# ls /opt/HighGo6.0.1-cluster/etc
5866  hgdb-cluster-6.0.1  hgdb-cluster-6.0.1.cluster  hgdb-cluster-6.0.1.service  hgdb-cluster-6.0.1.single  highgodb.env  jdbc-forward  setup

查看环境变量配置文件
$ cat /opt/HighGo6.0.1-cluster/etc/highgodb.env 
export PATH=/opt/HighGo6.0.1-cluster/bin:$PATH
export LD_LIBRARY_PATH=/usr/lib64:/opt/HighGo6.0.1-cluster/lib:$LD_LIBRARY_PATH
export HGDB_HOME=/opt/HighGo6.0.1-cluster
export HG_BASE=/opt/HighGo6.0.1-cluster
export PGPORT=5866
export PGDATA=/opt/HighGo6.0.1-cluster/data

切换到 highgo 用户配置环境变量&生效环境变量
# su - highgo
$ echo 'source /opt/HighGo6.0.1-cluster/etc/highgodb.env' >> /home/highgo/.bashrc
$ source .bashrc

检查环境变量是否生效
$ echo $PGDATA

> 手动初始化DB(data 目录)
$ cd /opt/HighGo6.0.1-cluster/
$ initdb -D /opt/HighGo6.0.1-cluster/data > /opt/HighGo6.0.1-cluster/bin/initdb.log

初始化数据库时会要求设置数据库超级用户(管理员 highgo)的密码,提示输密码、二次确认密码。注意:瀚高DB用户密码设置时,不支持”."符号
Enter new superuser password:
Enter it again:
initdb: warning: enabling "md5" authentication for local connections
You can change this by editing pg_hba.conf or using the option -A, or
--auth-local and --auth-host, the next time you run initdb.
[highgo@hgdb bin]$

DB初始化完毕以后,查看日志:
[highgo@hgdb HighGo6.0.1-cluster]$ cat /opt/HighGo6.0.1-cluster/bin/initdb.log
The files belonging to this database system will be owned by user "highgo".
This user must also own the server process.

The database cluster will be initialized with locale "en_US.UTF-8".
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".

Data page checksums are disabled.
Data encryption is disabled.

creating directory /opt/HighGo6.0.1-cluster/data ... ok
creating subdirectories ... ok
selecting dynamic shared memory implementation ... posix
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting default time zone ... Asia/Shanghai
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... ok

Success. You can now start the database server using:
    pg_ctl -D /opt/HighGo6.0.1-cluster/data -l logfile start
[highgo@hgdb HighGo6.0.1-cluster]$ 

也可以使用 pwfile文件设置密码,在数据库安装目录下,手动创建 pwfile 文件,并输入超级用户的密码(我跳过):
[highgo@hgdb etc]$ cat pwdfile
Highgo@123
$ initdb /opt/HighGo6.0.1-cluster/data --pwfile=/opt/HighGo6.0.1-cluster/etc/pwdfile >/opt/HighGo6.0.1-cluster/bin/initdb.log

> 启动数据库
$ pg_ctl --help  # 可查看命令帮助信息
$ pg_ctl start
2021-09-29 18:34:02.388 CST [2727] LOG:  starting HighGo Database 6 Release 6.0.1-64-bit Production
2021-09-29 18:34:02.391 CST [2727] LOG:  listening on IPv6 address "::1", port 5866
2021-09-29 18:34:02.391 CST [2727] LOG:  listening on IPv4 address "127.0.0.1", port 5866
2021-09-29 18:34:02.393 CST [2727] LOG:  listening on Unix socket "/tmp/.s.PGSQL.5866"
2021-09-29 18:34:02.403 CST [2727] LOG:  This is a trial edition, validate until 2022-09-29 18:16:07.
2021-09-29 18:34:02.405 CST [2728] LOG:  database system was shut down at 2021-09-29 18:16:08 CST
2021-09-29 18:34:02.408 CST [2727] LOG:  database system is ready to accept connections

也可以按照安装日志提示的方法启动,加参数-D和-l:pg_ctl -D /opt/HighGo6.0.1-cluster/data -l /opt/HighGo6.0.1-cluster/logfile.log start。
-D, --pgdata=DATADIR   location of the database storage area. 
-l, --log=FILENAME     write (or append) server log to FILENAME.
环境变量 $PGDATA 配置过了,也可以不用指定-D参数。-l也可以不指定,我就没有指定参数,直接启动

数据库管理命令:
$ pg_ctl start | stop | restart | status


监听服务查看
$ netstat -an |grep 5866
tcp        0      0 127.0.0.1:5866          0.0.0.0:*               LISTEN     
tcp6       0      0 ::1:5866                :::*                    LISTEN     
unix  2      [ ACC ]     STREAM     LISTENING     30998    /tmp/.s.PGSQL.5866


$ ps aux |grep postgres
highgo    2727  0.0  0.2 365616 22716 ?        Ss   18:34   0:00 /opt/HighGo6.0.1-cluster/bin/postgres -D /opt/HighGo6.0.1-cluster/data
highgo    2729  0.0  0.0 365616  3364 ?        Ss   18:34   0:00 postgres: checkpointer   
highgo    2730  0.0  0.0 365772  4644 ?        Ss   18:34   0:00 postgres: background writer   
highgo    2731  0.0  0.0 365616  7544 ?        Ss   18:34   0:00 postgres: walwriter   
highgo    2732  0.0  0.0 366168  4468 ?        Ss   18:34   0:00 postgres: autovacuum launcher   
highgo    2733  0.0  0.0 219940  3412 ?        Ss   18:34   0:00 postgres: stats collector   
highgo    2734  0.0  0.0 366192  4104 ?        Ss   18:34   0:00 postgres: logical replication launcher   
highgo    2814  0.0  0.0 112816   980 pts/0    S+   18:37   0:00 grep --color=auto postgres

> 如果要关闭服务
$ pg_ctl stop

最好在initdb完成后就查看&修改默认的安全策略,默认密码过期时间只有7天
$ psql -U highgo
highgo=# select show_secure_param();
           show_secure_param           
---------------------------------------
 hg_idcheck.pwdlock = 5 time(s),      +
 hg_idcheck.pwdlocktime = 24 hour(s), +
 hg_idcheck.pwdvaliduntil = 7 day(s), +

修改安全策略
 
select set_secure_param('hg_idcheck.pwdlock','10');
select set_secure_param('hg_idcheck.pwdlocktime','2D');
select set_secure_param('hg_idcheck.pwdvaliduntil','365');

highgo=# select show_secure_param();                               
            show_secure_param            
-----------------------------------------
 hg_idcheck.pwdlock = 10 time(s),       +
 hg_idcheck.pwdlocktime = 2 day(s),     +
 hg_idcheck.pwdvaliduntil = 365 day(s), +
 


> 配置允许远程访问(不限制任何主机并允许远程登录)
注意:如果监听地址不修改,远程无法通过IP访问,会报错:Connection refused.

修改远程访问控制策略($PGDATA/pg_hba.conf):
$ echo 'host  all  all  0.0.0.0/0  md5' >> /opt/HighGo6.0.1-cluster/data/pg_hba.conf

修改监听地址,默认仅监听 127.0.0.1($PGDATA/postgresql.conf)
$ vi /opt/HighGo6.0.1-cluster/data/postgresql.conf
#listen_addresses = 'localhost'
listen_addresses = '*'
也可以直接在数据库中执行修改命令:alter system set listen_addresses = '*'; 

重启数据库生效
$ pg_ctl  restart

> License检查
$ check_lic -D $PGDATA
License file status exception.

请确保 license 名称为 hgdb.lic,license 文件存放的位置为$PGDATA 目录;
如果没有 license,安装后,启动信息显示,允许试用1年:This is a trial edition, validate until 2022-09-29 18:16:07.

$ cp /opt/hgdb.lic  $PGDATA
$ check_lic -D $PGDATA

############## HIGHGODB LICENSE ###################
License status:Normal
License validity:2021-11-30
Database Version:Highgo Database 6.0.1 Trail Edition
###################################################


> 登录数据库
$ psql -U highgo -d highgo
Password for user highgo: 
psql (6.0.1)
PSQL: Release 6.0.1
Type "help" for help.
highgo=# 
highgo=# \l
                               List of databases
   Name    | Owner  | Encoding |   Collate   |    Ctype    | Access privileges 
-----------+--------+----------+-------------+-------------+-------------------
 highgo    | highgo | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 template0 | highgo | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/highgo        +
           |        |          |             |             | highgo=CTc/highgo
 template1 | highgo | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/highgo        +
           |        |          |             |             | highgo=CTc/highgo
(3 rows)

> 查看版本信息
highgo=#  select version();
                                                 version                                                 
---------------------------------------------------------------------------------------------------------
 PostgreSQL 12.3 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39), 64-bit
(1 row)
highgo=# 
highgo=# show server_version;
 server_version 
----------------
 12.3
(1 row)
highgo=# 

> 创建 user & db & table 测试

相关其他常用命令详情可以参考:《 PostgreSQL常用操作命令》 https://blog.csdn.net/sunny05296/article/details/108466453

highgo=# CREATE USER test WITH PASSWORD 'High@123';
highgo=# CREATE DATABASE testdb01 OWNER test;
highgo=# GRANT ALL PRIVILEGES ON DATABASE testdb01 TO test;

highgo=# \c - test

highgo=#
create table test01(
id integer not null,
name character(255) not null,
price decimal(8,2) not null,
primary key(id)
);

insert into test01(id,name,price) values (1,'a',11.5),(2,'b',20.3);

highgo=> select tablename from pg_tables where schemaname='public';
 tablename 
-----------
 test01
(1 row)


切换到数据库 testdb01 中创建测试表
highgo=> \c testdb01
PSQL: Release 6.0.1
You are now connected to database "testdb01" as user "test".
testdb01=> 

create table test01(
id integer not null,
name character(255) not null,
price decimal(8,2) not null,
primary key(id)
);

testdb01=> insert into test01(id,name,price) values (1,'a',11.5),(2,'b',20.3);

testdb01=> select tablename from pg_tables where schemaname='public';
 tablename 
-----------
 test01
(1 row)


> 服务脚本&自启动配置

HighGo service服务脚本

数据库服务管理
单机或集群安装后,都可通过 systemctl 命令管理数据库服务。默认释放了service文件:/usr/lib/systemd/system/hgdb-cluster-6.0.1.service,内容如下:
[Unit]
Description=highgodb-6.0.1
Requires=network.target local-fs.target
After=network.target local-fs.target

[Service]
Type=forking
User=highgo

OOMScoreAdjust=-1000
ExecStartPre=/usr/bin/sleep 30
ExecStart=/opt/HighGo6.0.1-cluster/etc/hgdb-cluster-6.0.1 start
ExecStop=/opt/HighGo6.0.1-cluster/etc/hgdb-cluster-6.0.1 stop
TimeoutSec=1800

[Install]
WantedBy=multi-user.target graphical.target

使用 systemctl 要注意:请勿同时使用 pg_ctl start/stop 和 systemctl start/stop 命令启停数据库,会造成 systemctl 异常。
例如:systemctl stop 命令无法关停由 pg_ctl start 命令启动的数据库进程。数据库服务器重启自动加入集群的功能依赖 systemctl,请在使用该功能前调整 systemctl status 使之状态正常。
如遇非正常状态,可能是由于 pg_ctl 命令导致,可重复执行 systemctl start/stop解决问题。

在$HGDB_HOME/etc 下存在两个脚本文件 hgdb-cluster-6.0.1.single 和 hgdb-cluster-6.0.1.cluster 分别对应配置单机和集群服务,还有一个软连接文件 hgdb-cluster-6.0.1,默认连接到集群脚本文件。

配置服务脚本前,前面由于我已经 pg_ctl start 启动过服务了,先停止服务:
# su - highgo
$ pg_ctl  stop
$ exit  #切换到root

# cd /opt/HighGo6.0.1-cluster/etc
[root@hgdb etc]# ls -l
total 40
-rw-r--r--. 1 highgo highgo   33 Oct 20  2020 5866
lrwxrwxrwx. 1 highgo highgo   26 Sep 29 17:13 hgdb-cluster-6.0.1 -> hgdb-cluster-6.0.1.cluster
-rwxr-xr-x. 1 highgo highgo 3879 Sep 29 17:13 hgdb-cluster-6.0.1.cluster
-rwxr-xr-x. 1 root   root   3879 Sep 29 20:24 hgdb-cluster-6.0.1.cluster.bak
-rw-r--r--. 1 highgo highgo  397 Sep 29 17:13 hgdb-cluster-6.0.1.service
-rwxr-xr-x. 1 highgo highgo 5359 Sep 29 17:13 hgdb-cluster-6.0.1.single
-rwxr-xr-x. 1 root   root   5359 Sep 29 20:06 hgdb-cluster-6.0.1.single.bak
-rw-r--r--. 1 highgo highgo  272 Oct 20  2020 highgodb.env
drwxr-xr-x. 2 highgo highgo  115 Sep 29 17:13 jdbc-forward
-rwxr-xr-x. 1 highgo highgo 1982 Oct 20  2020 setup
[root@hgdb etc]# 

服务软连接默认是链接到hgdb-cluster-6.0.1.cluster的:hgdb-cluster-6.0.1 -> hgdb-cluster-6.0.1.cluster
单机环境中,使用如下步骤配置数据库服务:
# cd /opt/HighGo6.0.1-cluster/etc
备份启动脚本
# cp hgdb-cluster-6.0.1.single hgdb-cluster-6.0.1.single.bak
# cp hgdb-cluster-6.0.1.cluster  hgdb-cluster-6.0.1.cluster.bak

将软连接连接到单机脚本(如果是集群环境则链接到集群脚本)文件即可
# ln -sf hgdb-cluster-6.0.1.single hgdb-cluster-6.0.1
[root@hgdb etc]# ls -l
total 40
-rw-r--r--. 1 highgo highgo   33 Oct 20  2020 5866
lrwxrwxrwx. 1 root   root     25 Sep 29 20:28 hgdb-cluster-6.0.1 -> hgdb-cluster-6.0.1.single
-rwxr-xr-x. 1 highgo highgo 3879 Sep 29 17:13 hgdb-cluster-6.0.1.cluster
-rwxr-xr-x. 1 root   root   3879 Sep 29 20:24 hgdb-cluster-6.0.1.cluster.bak
-rw-r--r--. 1 highgo highgo  397 Sep 29 17:13 hgdb-cluster-6.0.1.service
-rwxr-xr-x. 1 highgo highgo 5359 Sep 29 17:13 hgdb-cluster-6.0.1.single
-rwxr-xr-x. 1 root   root   5359 Sep 29 20:06 hgdb-cluster-6.0.1.single.bak
-rw-r--r--. 1 highgo highgo  272 Oct 20  2020 highgodb.env
drwxr-xr-x. 2 highgo highgo  115 Sep 29 17:13 jdbc-forward
-rwxr-xr-x. 1 highgo highgo 1982 Oct 20  2020 setup
[root@hgdb etc]# 

再次确认关闭数据库,务必先使用 pg_ctl stop 命令关闭数据库
# su - highgo
$ pg_ctl stop
$ exit

启动服务
# systemctl start hgdb-cluster-6.0.1.service

停止服务
# systemctl stop hgdb-cluster-6.0.1.service

为了方便管理,我把服务重命名为(hgdb.service):
# mv /usr/lib/systemd/system/hgdb-cluster-6.0.1.service  /usr/lib/systemd/system/hgdb.service
# systemctl  enable hgdb.service
Created symlink from /etc/systemd/system/multi-user.target.wants/hgdb.service to /usr/lib/systemd/system/hgdb.service.
Created symlink from /etc/systemd/system/graphical.target.wants/hgdb.service to /usr/lib/systemd/system/hgdb.service.

启动服务
# systemctl start hgdb.service

设置服务自启动
# systemctl  enable hgdb.service

其他管理命令:systemctl start/stop/status/enable/disable hgdb.service


切记:请勿同时使用 pg_ctl start/stop  命令启停数据库。


HighGO常用的数据库参数修改命令(注意:数据库参数修改后,需要重启数据库生效),如果只是简单测试,可以不用调整,我跳过
alter system set max_connections = 2000; #连接数
alter system set shared_buffers = '512MB'; #total_memory*25%
alter system set checkpoint_completion_target = 0.8;
#日志参数
alter system set log_destination = 'csvlog';
alter system set logging_collector = on;
alter system set log_directory = 'hgdb_log';
alter system set log_filename = 'highgodb-%a.log';
alter system set log_rotation_age = '1d'; #每天生成一个新的日志文件
alter system set log_rotation_size = 0; #不限制单个日志文件大小
alter system set log_truncate_on_rotation = on; #覆盖同名文件
#只保留 7 天日志,循环覆盖
alter system set log_hostname = on;
alter system set log_line_prefix = '%m';
alter system set log_statement = 'ddl';


HighGo DB 集群的安装,这里暂不做介绍,后续再补充。


postgis 安装
HighGo数据库支持PostGis3.0。上传 postgis3.0-hgdb6.0.1-enterprise-centos7-x86-64-20201020.tar.gz 到 /opt
企业版V6版本分离postgis插件,postgis单独以tar包形式存放,不再放入数据库安装包中,postgis安装步骤以企业版
整体安装流程包括:
1)安装瀚高数据库、initdb
2)解压PostGIS压缩包
3)将解压后的lib、share下的文件拷贝到数据库安装路径的相应路径下
4)启动数据库
5)创建postgis扩展

具体操作如下

> 安装装HighGo数据库,初始化数据库。我前面已经完成了,跳过,直接进入下一步进行postgis安装

> 解压 postgis-6.0.0-centos7-x86_64.tar.gz
# cd /opt
# mkdir postgis
# tar -zxvf postgis3.0-hgdb6.0.1-enterprise-centos7-x86-64-20201020.tar.gz -C postgis
# ls postgis
lib  share

> 拷贝文件
# cp postgis
# cp postgis/lib/postgresql/* /opt/HighGo6.0.2-cluster/lib/postgresql/
# cp -r postgis/share/postgresql/contrib/*  /opt/HighGo6.0.2-cluster/share/postgresql/contrib/
# cp -r postgis/share/postgresql/extension/* /opt/HighGo6.0.2-cluster/share/postgresql/extension/

> 重新启动数据库
# systemctl restart hgdb.service

> highgo用户登录、创建postgis扩展
# su - highgo
$ psql -U highgo -d testdb01
testdb01=# create extension postgis;
#瀚高企业版 V6支持 PostGis3.0,而在 3.0中,栅格数据是单独的扩展,若使用则需,执行下面的命令
testdb01=# create extension postgis_raster;

#不同的db使用,切换db创建postgis扩展
testdb01=# \c highgo
PSQL: Release HighGo Database 6 Release 6.0.2-64-bit Production
You are now connected to database "highgo" as user "highgo".
highgo=# create extension postgis;
highgo=# create extension postgis_raster;

验证是否安装成功

highgo=# SELECT postgis_full_version();
                                                                                                                         postgis_full_version                              
                                                                                            
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------
 POSTGIS="3.1.0dev 6.0.2-14-g8ee2f84" [EXTENSION] PGSQL="120" GEOS="3.8.0-CAPI-1.13.1 " PROJ="Rel. 4.9.3, 15 August 2016" GDAL="GDAL 2.4.2, released 2019/06/28 GDAL_DATA n
ot found" LIBXML="2.9.1" LIBJSON="0.14" LIBPROTOBUF="1.3.3" WAGYU="0.5.0 (Internal)" RASTER
(1 row)

highgo=# \q

test用户登录testdb01,创建空间属性的测试表:

$ psql -U test -d testdb01
testdb01=> 
testdb01=> CREATE TABLE geom_test01(id integer not null, name varchar(255), primary key(id));
testdb01=> SELECT AddGeometryColumn('geom_test01', 'zone_geom', 4326, 'POINT', 2);
testdb01=> INSERT INTO geom_test01(id, zone_geom, name) VALUES (1, ST_GeomFromText('POINT(-0.1250 52.500)',4326), 'test');
testdb01=> INSERT INTO geom_test01(id, zone_geom, name) VALUES (2, ST_GeomFromText('POINT(27.91162480 -33.01532)', 4326),'test');
testdb01=> SELECT * FROM geom_test01;
testdb01=> SELECT id, ST_AsText(zone_geom), ST_AsEwkt(zone_geom), ST_X(zone_geom), ST_Y(zone_geom) FROM geom_test01;

测试结果如下:
testdb01=> SELECT * FROM geom_test01;
 id | name |                     zone_geom                      
----+------+----------------------------------------------------
  1 | test | 0101000020E6100000000000000000C0BF0000000000404A40
  2 | test | 0101000020E6100000F8382E3E60E93B40C47C7901F68140C0
(2 rows)

testdb01=> SELECT id, ST_AsText(zone_geom), ST_AsEwkt(zone_geom), ST_X(zone_geom), ST_Y(zone_geom) FROM geom_test01;
 id |          st_astext          |               st_asewkt               |    st_x    |   st_y    
----+-----------------------------+---------------------------------------+------------+-----------
  1 | POINT(-0.125 52.5)          | SRID=4326;POINT(-0.125 52.5)          |     -0.125 |      52.5
  2 | POINT(27.9116248 -33.01532) | SRID=4326;POINT(27.9116248 -33.01532) | 27.9116248 | -33.01532
(2 rows)

testdb01=> 

创建测试表02:
CREATE TABLE geom_test02(
id integer not null,
zone_geom geometry(point, 4326),
name varchar(255),
primary key(id)
);

INSERT INTO geom_test02(id, zone_geom, name) values (1, st_geomfromtext('point(27.91162480 -33.01532)', 4326), 'aaa');
SELECT * FROM geom_test02;
SELECT id, ST_AsText(zone_geom), ST_AsEwkt(zone_geom), ST_X(zone_geom), ST_Y(zone_geom) FROM geom_test02;


 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值