技术交流QQ群:①185473046   ②190706903   ③203744115   网站地图
登录

下次自动登录
现在的位置: 首页Linux>正文
BCLinux For Euler 21.10安装3节点PanWeiDB数据库集群
2025年12月09日 Linux 暂无评论 ⁄ 被围观 41次+

简介介绍:

PanWeiDB数据库:https://www.panwei.tech/

PanWeiDB是基于openGauss,openGauss基于PostgreSQL

操作系统:BCLinux For Euler 21.10

BCLinux For Euler 21.10安装配置图解教程

https://www.osyunwei.com/archives/13044.html

磐维数据库安装包:PanWeiDB_1.0.0_BCLinuxForEuler21.10_x86.tar.gz

ptk安装工具包下载地址:

https://docs.mogdb.io/zh/ptk/v1.1/install

https://cdn-mogdb.enmotech.com/ptk/latest/ptk_linux_x86_64.tar.gz

主节点ip:10.189.189.184 主机名:panweidb-node01

从节点ip:10.189.189.185 主机名:panweidb-node02

从节点ip:10.189.189.186 主机名:panweidb-node03

准备篇(在3台服务器上都进行操作)

1、关闭selinux

sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

setenforce 0

2、关闭firewall防火墙

vi /etc/yum/pluginconf.d/license-manager.conf

enabled=0 #把1修改为0,禁用yum源认证

:wq! #保存退出

systemctl stop firewalld.service

systemctl disable firewalld.service

systemctl mask firewalld

systemctl stop firewalld

yum remove firewalld -y #卸载

3、关闭swap交换分区(如果没有swap分区就不需要操作)

#执行以下命令

swapoff -a

sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

4、同步系统时间(所有节点统一时间)

rm -rf /etc/localtime #先删除默认的时区设置

ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime #替换上海/北京作为默认

vi /etc/sysconfig/clock #添加时区

Zone=Asia/Shanghai

:wq! #保存退出

timedatectl set-local-rtc 0

hwclock --systohc -u #系统时钟和硬件时钟同步,当前系统时区不为 UTC,是CST时间,所有要加-u参数

date #显示系统时间

date -s "2025-11-05 15:24:00" #修改时间

watch -n 1 date #显示实时时间

vi /etc/chrony.conf

#pool pool.ntp.org iburst #注释掉

#使用国内 NTP 服务器

server ntp.aliyun.com iburst #阿里云

server ntp.ntsc.ac.cn iburst #中国国家授时中心

:wq! #保存退出

systemctl restart chronyd

systemctl enable chronyd

chronyc makestep #立即校正时间

chronyc sources -v #查看同步状态

chronyc tracking #查看同步详情

chronyc sourcestats #统计各源稳定性

chronyc tracking | grep "Last offset" #验证时间同步精度(包括毫秒级偏移)

5、设置字符集

echo "export LANG=en_US.UTF-8" >> /etc/profile

# 查看字符集

cat /etc/profile | grep -i lang

export LANG=en_US.UTF-8

6、设置网卡MTU值

#高性能内网需要设置,一般不需要设置,使用默认值1500即可

#检查网卡名称

ip addr

#修改mtu后面的参数

ifconfig bond1 mtu 8192 #bond1是网卡名

#查看MTU值

ifconfig bond1|grep mtu

#备注:如果安装过程中提示scp拷贝失败,请修改回来。

7、关闭THP

#检查THP开启情况

cat /sys/kernel/mm/transparent_hugepage/enabled

always madvise [never]

#关闭THP

echo never > /sys/kernel/mm/transparent_hugepage/enabled

8、关闭RemoveIPC

8.1修改/etc/systemd/logind.conf文件中的“RemoveIPC”值为“no”

vi /etc/systemd/logind.conf

RemoveIPC=no

:wq! #保存退出

8.2在/usr/lib/systemd/system/systemd-logind.service中添加参数“RemoveIPC”值为“no”

vi /usr/lib/systemd/system/systemd-logind.service

RemoveIPC=no

:wq! #保存退出

8.3重启服务

systemctl daemon-reload

systemctl restart systemd-logind.service

8.4结果验证确认

loginctl show-session | grep RemoveIPC

systemctl show systemd-logind | grep RemoveIPC

9、系统内核优化

vi /etc/sysctl.conf #添加配置

# panweidb

net.ipv4.tcp_max_tw_buckets = 10000

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_keepalive_time = 30

net.ipv4.tcp_keepalive_probes = 9

net.ipv4.tcp_keepalive_intvl = 30

net.ipv4.tcp_retries1 = 5

net.ipv4.tcp_syn_retries = 5

net.ipv4.tcp_synack_retries = 5

net.ipv4.tcp_retries2 = 12

vm.overcommit_memory = 0

net.ipv4.tcp_rmem = 8192 250000 16777216

net.ipv4.tcp_wmem = 8192 250000 16777216

net.core.wmem_max = 21299200

net.core.rmem_max = 21299200

net.core.wmem_default = 21299200

net.core.rmem_default = 21299200

net.ipv4.ip_local_port_range = 26000 65535

kernel.sem = 250 6400000 1000 25600

net.core.somaxconn = 65535

net.ipv4.tcp_syncookies = 1

net.core.netdev_max_backlog = 65535

net.ipv4.tcp_max_syn_backlog = 65535

net.ipv4.tcp_fin_timeout = 60

kernel.shmall = 1073741824

kernel.shmmax = 751619276800

net.ipv4.tcp_sack = 1

net.ipv4.tcp_timestamps = 1

vm.extfrag_threshold = 500

vm.overcommit_ratio = 90

vm.swappiness = 0

:wq! #保存退出

sysctl -p #使配置生效

10、配置资源限制

vi /etc/security/limits.conf #添加配置

# panweidb

* soft nofile 1000000

* hard nofile 1000000

* soft nproc 655360

* hard nproc 655360

* soft memlock unlimited

* hard memlock unlimited

* soft core unlimited

* hard core unlimited

* soft stack unlimited

* hard stack unlimited

omm hard as unlimited

omm hard nofile 1000000

omm hard nproc unlimited

omm hard stack unlimited

omm soft as unlimited

omm soft nofile 1000000

omm soft nproc unlimited

omm soft stack unlimited

:wq! #保存退出

vi /etc/security/limits.d/90-nproc.conf

# panweidb

* soft nofile 1000000

* hard nofile 1000000

* soft nproc 655360

* hard nproc 655360

* soft memlock unlimited

* hard memlock unlimited

* soft core unlimited

* hard core unlimited

* soft stack unlimited

* hard stack unlimited

:wq! #保存退出

11、安装数据库依赖包

#安装依赖包

yum install -y numactl libaio-devel flex bison ncurses-devel glibc-devel patch readline-devel python3 bzip2 gcc gcc-c++ zlib-devel ncurses-devel expect

#检查 python3 版本,如果为 Python 3.7.9 则满足要求,如果不满足则需进行编译安装

#BCLinux For Euler 21.10默认已经安装了Python 3.7.9

python3 --version #检查 python3 版本

#修改系统默认的python版本为python3

which python #查找默认的python安装路径

which pip

mv /usr/bin/python /usr/bin/python.bak

mv /usr/bin/pip /usr/bin/pip.bak

ln -sf /usr/bin/python3 /usr/bin/python

ln -sf /usr/bin/pip3 /usr/bin/pip

python --version #检查系统默认的python版本

12、修改主机名

主节点ip:10.189.189.184 主机名:panweidb-node01

从节点ip:10.189.189.185 主机名:panweidb-node02

从节点ip:10.189.189.186 主机名:panweidb-node03

hostnamectl set-hostname panweidb-node01 #主库上执行

hostnamectl set-hostname panweidb-node02 #从库上执行

hostnamectl set-hostname panweidb-node03 #从库上执行

vi /etc/hostname #编辑配置文件

panweidb-node01 #修改localhost.localdomain为panweidb-node01 ,从库修改为panweidb-node02 、panweidb-node03

:wq! #保存退出

13、修改hosts设置

vi /etc/hosts #编辑配置文件

127.0.0.1 panweidb-node01 localhost #修改localhost.localdomain为panweidb-node01,从库修改为panweidb-node02、panweidb-node03

10.189.189.184 panweidb-node01

10.189.189.185 panweidb-node02

10.189.189.186 panweidb-node03

:wq! #保存退出

14、创建用户及用户组

groupadd -g 1101 dbgrp

useradd -g dbgrp -u 1101 -m omm

echo 'DBpwd@210205'|passwd --stdin omm #密码为小于等于15个字符的字符串

15、配置主节点到2个从节点的root 用户和 omm 用户ssh互信

15.1 root用户互信

#在主节点服务器需要操作

ssh-keygen #输入命令,按三次回车,会生成私钥和公钥

cd /root/.ssh #进入目录,会看到生成的私钥和公钥

#拷贝公钥

ssh-copy-id root@10.189.189.184 #输入10.189.189.184的root密码

ssh-copy-id root@10.189.189.185 #输入10.189.189.185的root密码

ssh-copy-id root@10.189.189.186 #输入10.189.189.186的root密码

ssh-copy-id root@panweidb-node01 #输入10.189.189.184的root密码

ssh-copy-id root@panweidb-node02 #输入10.189.189.185的root密码

ssh-copy-id root@panweidb-node03 #输入10.189.189.186的root密码

15.2 omm用户互信

#在主节点服务器操作,切换到su - omm用户

ssh-keygen #输入命令,按三次回车,会生成私钥和公钥

cd /home/omm/.ssh #进入目录,会看到生成的私钥和公钥

#拷贝公钥

ssh-copy-id omm@10.189.189.184 #输入10.189.189.184的omm密码DBpwd@210205

ssh-copy-id omm@10.189.189.185 #输入10.189.189.185的omm密码

ssh-copy-id omm@10.189.189.186 #输入10.189.189.186的omm密码

ssh-copy-id omm@panweidb-node01 #输入10.189.189.184的omm密码

ssh-copy-id omm@panweidb-node02 #输入10.189.189.185的omm密码

ssh-copy-id omm@panweidb-node03 #输入10.189.189.186的omm密码

#在主服务器测试

ssh 10.189.189.184

ssh 10.189.189.185

ssh 10.189.189.186

ssh panweidb-node01

ssh panweidb-node02

ssh panweidb-node03

16、配置2个从节点到主节点的root 用户和 omm 用户ssh互信

16.1在从节点10.189.189.185执行,

16.1.1配置root互信

ssh-keygen #输入命令,按三次回车,会生成私钥和公钥

cd /root/.ssh #进入目录,会看到生成的私钥和公钥

#拷贝公钥

ssh-copy-id root@10.189.189.184 #输入10.189.189.184的root密码

ssh-copy-id root@panweidb-node01 #输入10.189.189.184的root密码

#在从服务器10.189.189.185上测试

ssh 10.189.189.184

ssh panweidb-node01

16.1.2配置omm互信,切换到su - omm用户

ssh-keygen #输入命令,按三次回车,会生成私钥和公钥

cd /home/omm/.ssh #进入目录,会看到生成的私钥和公钥

#拷贝公钥

ssh-copy-id omm@10.189.189.184 #输入10.189.189.184的omm密码DBpwd@210205

ssh-copy-id omm@panweidb-node01 #输入10.189.189.184的omm密码

#在从服务器10.189.189.185上测试

ssh 10.189.189.184

ssh panweidb-node01

16.2在从节点10.189.189.186执行,

16.2.1配置root互信

ssh-keygen #输入命令,按三次回车,会生成私钥和公钥

cd /root/.ssh #进入目录,会看到生成的私钥和公钥

#拷贝公钥

ssh-copy-id root@10.189.189.184 #输入10.189.189.184的root密码

ssh-copy-id root@panweidb-node01 #输入10.189.189.184的root密码

#在从服务器10.189.189.186上测试

ssh 10.189.189.184

ssh panweidb-node01

16.2.2配置omm互信,切换到su - omm用户

ssh-keygen #输入命令,按三次回车,会生成私钥和公钥

cd /home/omm/.ssh #进入目录,会看到生成的私钥和公钥

#拷贝公钥

ssh-copy-id omm@10.189.189.184 #输入10.189.189.184的omm密码DBpwd@210205

ssh-copy-id omm@panweidb-node01 #输入10.189.189.184的omm密码

#在从服务器10.189.189.186上测试

ssh 10.189.189.184

ssh panweidb-node01

安装篇(只在主节点操作)

使用root用户操作

su - root #切换到root用户

1、上传数据库安装包和安装工具包(主节点)

mkdir -p /data/apps/soft #创建包存放目录

mkdir -p /data/apps/ptk #创建PTK安装工具包解压目录

上传数据库安装包PanWeiDB_1.0.0_BCLinuxForEuler21.10_x86.tar.gz和安装工具包ptk_linux_x86_64.tar.gz到/data/apps/soft目录

root用户解压ptk安装工具包到/data/apps/ptk目录(主节点)

cd /data/apps/soft

tar -xf ptk_linux_x86_64.tar.gz -C /data/apps/ptk

生成加密密码

cd /data/apps/ptk

./ptk encrypt A1b2c3@2025

[root@panweidb-node01 /data/apps/ptk]# ./ptk encrypt A1b2c3@2025

DBpwd@210205: pTk6YTRhNDExM2Y9PTxBPUA9Q0pualotaHN4X0taOGNxd2xWMjV2VFNDTXctMUQ1enVKdVpvWTdwcXpiWWeq

用户配置ptk模板文件(主节点)

修改如下模版文件,例如下面是一主两备的配置文件

特别注意格式,空格缩进等

vi /data/apps/ptk/config.yaml

global:

cluster_name: "panweidb"

user: "omm"

group: "dbgrp"

db_password: "pTk6YTRhNDExM2Y9PTxBPUA9Q0pualotaHN4X0taOGNxd2xWMjV2VFNDTXctMUQ1enVKdVpvWTdwcXpiWWeq"

db_port: 5432

base_dir: "/data/apps/panweidb"

log_dir: "/data/apps/panweidb/log/omm"

cm_option:

dir: "/data/apps/panweidb/cm"

cm_server_port: 18800

db_service_vip: ""

gs_initdb_opts:

- "--encoding=UTF-8"

- "--locale=en_US.UTF8"

- "--lc-collate=en_US.UTF8"

- "--lc-ctype=en_US.UTF8"

- "--lc-messages=en_US.UTF8"

- "--dbcompatibility=PG"

ssh_option:

port: 22

user: omm

password: "pTk6YTRhNDExM2Y9PTxBPUA9Q0pualotaHN4X0taOGNxd2xWMjV2VFNDTXctMUQ1enVKdVpvWTdwcXpiWWeq"

db_servers:

- host: 10.189.189.184

role: primary

az_name: "AZ1"

az_priority: 1

db_conf:

synchronous_standby_names: 'dn_6002'

ssh_option:

port: 22

user: omm

password: "pTk6YTRhNDExM2Y9PTxBPUA9Q0pualotaHN4X0taOGNxd2xWMjV2VFNDTXctMUQ1enVKdVpvWTdwcXpiWWeq"

- host: 10.189.189.185

role: standby

az_name: "AZ1"

az_priority: 1

db_conf:

synchronous_standby_names: 'dn_6001'

ssh_option:

port: 22

user: omm

password: "pTk6YTRhNDExM2Y9PTxBPUA9Q0pualotaHN4X0taOGNxd2xWMjV2VFNDTXctMUQ1enVKdVpvWTdwcXpiWWeq"

- host: 10.189.189.186

role: standby

az_name: "AZ1"

az_priority: 1

db_conf:

synchronous_standby_names: 'ANY 2(dn_6001,dn_6002)'

ssh_option:

port: 22

user: omm

password: "pTk6YTRhNDExM2Y9PTxBPUA9Q0pualotaHN4X0taOGNxd2xWMjV2VFNDTXctMUQ1enVKdVpvWTdwcXpiWWeq"

cm_servers:

- host: 10.189.189.184

port: 18800

role: ""

- host: 10.189.189.185

port: 18800

role: ""

- host: 10.189.189.186

port: 18800

role: ""

:wq! #保存退出

#检查环境,确保无Abnormal即可

cd /data/apps/ptk/

./ptk checkos -f config.yaml

# Check Results

Item | Level

------------------------------------+----------

A1.Check_OS_Version | OK

A2.Check_Kernel_Version | OK

A3.Check_Unicode | OK

A4.Check_TimeZone | OK

A5.Check_Swap_Memory_Configure | OK

A6.Check_SysCtl_Parameter | Warning

A7.Check_FileSystem_Configure | OK

A8.Check_Disk_Configure | OK

A9.Check_Logical_Block | OK

A9.Check_BlockDev_Configure | Warning

A10.Check_NR_Request | OK

A10.Check_Asynchronous_IO_Request | OK

A10.Check_IO_Configure | Warning

A11.Check_Network_Configure | OK

A12.Check_Time_Consistency | OK

A13.Check_Firewall_Status | OK

A14.Check_THP_Status | OK

A15.Check_Dependent_Package | OK

A16.Check_CPU_Instruction_Set | OK

A17.Check_Port | OK

A18.Check_Selinux | OK

A19.Check_User_Ulimit | OK

A20.Check_Directory | OK

Total count 23, abnormal count 0, warning count 3

[root@panweidb-node01 ptk]#

#创建目录,所有节点执行

切换到root用户操作

mkdir -p /data/apps/

赋权(所有节点执行)

chown -R omm: /data/apps/

chmod 755 /data/apps/

omm用户安装数据库(主节点)

omm用户执行如下命令安装数据库:

su - omm

cd /data/apps/ptk/

./ptk install --file=/data/apps/ptk/config.yaml --skip-check-os --skip-check-distro --skip-create-user --install-cm --pkg=/data/apps/soft/PanWeiDB_1.0.0_BCLinuxForEuler21.10_x86.tar.gz

? If you continue to install the software,

you are accepting the license agreement of the software.

[Y]: Accept and continue

[C]: Show content of licence agreement

[N]: Abort installation and exit

Please enter (Default [Y]):

[Y]: 接受并继续安装。如果您同意软件的许可协议,请输入 "Y" 并按下回车键继续安装。

[C]: 查看许可协议内容。如果您想查看软件的许可协议内容,请输入 "C" 并按下回车键,然后系统会显示许可协议的具体内容。

[N]: 中止安装并退出。如果您不同意软件的许可协议或不希望继续安装,请输入 "N" 并按下回车键,安装过程将中止并退出。

? [retry: 1] please choose the authentication method to connect root@10.189.189.185: [Use arrows to move, type to filter]

> password

keyfile

选择密码验证

输入密码

? [retry: 1] please choose the authentication method to connect root@10.189.189.186: [Use arrows to move, type to filter]

> password

keyfile

选择密码验证

继续输入密码

注意:我们之前已经设置过ssh免密登录,这一步就不需要再输入密码了

Cluster Name: "panweidb"

+--------------+----------------+-------------+----------+------------+-----------------------------+----------+

| az(priority) | ip | user(group) | port | role | database dir | upstream |

+--------------+----------------+-------------+----------+------------+-----------------------------+----------+

| AZ1(1) | 10.189.189.184 | omm(dbgrp) | db:5432 | db:primary | db:/data/apps/panweidb/database | - |

| | | | cm:18800 | | cm:/data/apps/panweidb/cm | |

| | 10.189.189.185 | omm(dbgrp) | db:5432 | db:standby | db:/data/apps/panweidb/database | - |

| | | | cm:18800 | | cm:/data/apps/panweidb/cm | |

| | 10.189.189.186 | omm(dbgrp) | db:5432 | db:standby | db:/data/apps/panweidb/database | - |

| | | | cm:18800 | | cm:/data/apps/panweidb/cm | |

+--------------+----------------+-------------+----------+------------+-----------------------------+----------+

✔ Is cluster config correct (default=n) [y/n]: y

[Y]: 集群配置正确。如果您确认集群配置信息正确,请输入 "Y" 并按下回车键继续。

[N]: 集群配置不正确。如果您认为集群配置有误,请输入 "N" 并按下回车键,安装程序将中止并退出。

数据库会自动安装,请耐心等待直到安装完成。

cluste_name | host | user | port | status | message

--------------+----------------+------+------+---------------+----------

panweidb | 10.189.189.184 | omm | 5432 | start_success | success

| 10.189.189.185 | omm | 5432 | start_success | success

| 10.189.189.186 | omm | 5432 | start_success | success

[omm@panweidb-node01 ptk]$

如果需要卸载重装,卸载命令如下:

/data/apps/ptk/ptk uninstall --name=panweidb

#查看集群状态

#退出omm用户,再重新切换到omm用户

exit

su - omm

查看集群状态(主节点)

gs_om -t status --detail

#进入控制台

gsql -d postgres -p 5432 -r

安装完成后如果yum源不能使用解决办法

[root@panweidb-node02 ~]# echo $LD_LIBRARY_PATH

/data/apps/panweidb/tool/lib:/data/apps/panweidb/tool/script/gspylib/clib:

#执行这个

unset LD_LIBRARY_PATH

#再次检查,输出为空就正常了

[root@panweidb-node02 ~]# echo $LD_LIBRARY_PATH

yum install telnet #正常使用yum

#使用omm用户创建目录,三个节点都执行

mkdir -p /data/apps/panweidb/pg_audit

mkdir -p /data/apps/panweidb/archive

2、配置数据库基线参数(只在主节点执行)

cp /data/apps/panweidb/data/postgresql.conf /data/apps/panweidb/data/postgresql.conf.bak.`date +"%Y%m%d"`

vi /data/apps/gs_guc_v2.9_20230824.sh #编辑配置

#!/bin/bash

source /home/omm/.bashrc

## 备份参数文件

cp /data/apps/panweidb/database/postgresql.conf /data/apps/panweidb/database/postgresql.conf.bak.`date +"%Y%m%d"`

##连接访问相关参数

##listen_addresses : 数据库服务器监听本地的IP地址,* 监听所有IP,重启生效

##remote_read_mode : 开启远程读功能,non_authentication指不进行证书认证,重启生效

##password_encryption_type : 数据库密码加密类型,1指采用sha256和md5两种方式分别对密码加密

##password_reuse_time : 检查密码重用的天数,0表示不检查

##password_lock_time : 账号的锁定时间,0表示不锁定

##password_effect_time : 密码有效时间,0表示长期有效

##session_timeout : 不进行任何操作的会话断开时间,0表示参数不生效

function SecureAccess(){

gs_guc set -I all -N all -c "listen_addresses = '*'"

gs_guc set -I all -N all -c "password_encryption_type=1"

gs_guc set -I all -N all -c "password_reuse_time=0"

gs_guc set -I all -N all -c "password_lock_time=0"

gs_guc set -I all -N all -c "password_effect_time=0"

gs_guc set -I all -N all -c "session_timeout='0'"

}

##wal相关参数

##wal_level : 写入wal日志信息的详细程度,logical级别的wal信息支持逻辑解析,重启生效

##full_page_writes : 全量检查点情况下,第一次checkpoint后会将每个页面内容全部记录到wal日志,建议设置为off以及使用增量检查点及双写功能

##wal_log_hints : 同full_page_writes,包含提示位的非关键信息,重启生效

##xloginsert_locks : 并发写预写式日志锁的个数,提高写预写式日志的效率,重启生效

##advance_xlog_file_num : 提前初始化xlog文件的数目,在高并发情况下可减少创建xlog文件的性能影响,重启生效

function WAL(){

gs_guc set -I all -N all -c "wal_level=logical"

gs_guc set -I all -N all -c "full_page_writes=off"

gs_guc set -I all -N all -c "wal_log_hints=off"

gs_guc set -I all -N all -c "xloginsert_locks=48"

gs_guc set -I all -N all -c "advance_xlog_file_num=10"

gs_guc set -N all -I all -c "archive_mode=on"

gs_guc set -N all -I all -c "archive_dest='/data/apps/panweidb/archive'"

}

##复制相关参数

##wal_keep_segments : wal文件保留数量,每个文件16MB,增大此值,在重做备库过程中可有效避免wal被移除的错误

##max_wal_senders : 上游节点sender线程的总数量,包括流复制和逻辑复制,重启生效

##most_available_sync : 最大可用模式,当同步备库故障后自动降级为异步,不阻塞主库数据变更,重启生效

##catchup2normal_wait_time : 异步备变同步备过程中,阻塞主库数据变更的时间,0表示不阻塞,重启生效

##enable_slot_log : 将主节点的复制槽信息同步到集群内其他节点,避免集群内各节点的slot不一致

##max_replication_slots : 最大复制槽的数量,包含物理复制槽和逻辑复制槽,重启生效

##wal_receiver_timeout : wal receiver线程超时时间,增加此值可减少由于网络抖动导致的复制关系重建次数

##sync_config_strategy : 该参数用以设置主备节点间数据库参数配置信息的同步方案,由于通常环境中备库服务器配置与主库并非1:1,因此如果同步参数配置,可能导致某些参数对于备库硬件资源而言过大,设置为none_node表示不同步,重启生效

function replicatioxtdSlots(){

gs_guc set -I all -N all -c "wal_keep_segments=1024"

gs_guc set -I all -N all -c "max_wal_senders=16"

gs_guc set -I all -N all -c "most_available_sync=on"

gs_guc set -I all -N all -c "catchup2normal_wait_time=0"

gs_guc set -I all -N all -c "enable_slot_log=on"

gs_guc set -I all -N all -c "max_replication_slots=32"

gs_guc set -I all -N all -c "wal_receiver_timeout=60s"

gs_guc set -I all -N all -c "sync_config_strategy=none_node"

gs_guc set -I all -N all -c "wal_sender_timeout=10s"

}

##日志相关参数

##log_duration : 已完成SQL语句的执行时间是否要记录到日志中,需要结合log_statement使用

##log_line_prefix : 每条日志的前缀信息,时间戳、用户名、数据库名、客户端ip和端口、线程id、会话id

##log_checkpoints : 记录checkpoint信息到日志里

function dbLog(){

gs_guc set -I all -N all -c "log_duration=off"

gs_guc set -I all -N all -c "log_line_prefix='%m %u %d %r %p %S'"

gs_guc set -I all -N all -c "log_checkpoints=on"

gs_guc set -I all -N all -c "temp_file_limit=100GB"

}

##vacuum相关参数

##vacuum_cost_limit : vacuum线程开销限制,达到此值后开始休眠

##autovacuum_max_workers : autovacuum的最大并发数,每个worker都要消耗maintextce_work_mem大小的内存

##autovacuum_naptime : autovacuum的休眠时间,减少此值增加autovacuum的频率,统计信息更准确,但磁盘会更加繁忙

##autovacuum_vacuum_cost_delay : autovacuum的开销延迟,减少此值增加了autovacuum的频率

##autovacuum_io_limits : autovacuum线程每秒触发的io上限

##scale_factor 与 threshold 结合使用,触发条件一般是:表数据量 * scale_factor + threshold

##autovacuum_vacuum_scale_factor : 触发vacuum的缩放系数

##autovacuum_analyze_scale_factor : 触发analyze的缩放系数

##autovacuum_vacuum_threshold : 触发vacuum的阈值

##autovacuum_analyze_threshold : 触发analyze的阈值

function VACUUM(){

gs_guc set -I all -N all -c "vacuum_cost_limit=1000"

gs_guc set -I all -N all -c "autovacuum_max_workers=10"

gs_guc set -I all -N all -c "autovacuum_naptime=20s"

gs_guc set -I all -N all -c "autovacuum_vacuum_cost_delay=10"

gs_guc set -I all -N all -c "autovacuum_vacuum_scale_factor=0.05"

gs_guc set -I all -N all -c "autovacuum_analyze_scale_factor=0.02"

gs_guc set -I all -N all -c "autovacuum_vacuum_threshold=200"

gs_guc set -I all -N all -c "autovacuum_analyze_threshold=200"

gs_guc set -I all -N all -c "autovacuum_io_limits=104857600"

}

##性能统计相关参数

##instr_unique_sql_count : dbe_perf.statement表中的记录数

##enable_wdr_snapshot : 是否开启wdr快照功能,默认每小时执行一次,保留8天时间,类似oracle的AWR

##log_min_duration_statement : 慢sql阈值,执行时间超过这个值的sql会记录到statement_history表中

##track_activity_query_size : 当前执行query的文本字节数,重启生效

##enable_instr_rt_percentile : 是否开启计算系统中80%和95%的SQL响应时间的功能,off表示关闭sql响应时间信息计算功能

function perfStats(){

gs_guc set -I all -N all -c "instr_unique_sql_count=200000"

gs_guc set -I all -N all -c "enable_wdr_snapshot=on"

gs_guc set -I all -N all -c "log_min_duration_statement=200"

gs_guc set -I all -N all -c "track_activity_query_size=2048"

gs_guc set -I all -N all -c "enable_instr_rt_percentile=off"

gs_guc set -I all -N all -c "enable_opfusion=off"

}

##审计参数

##audit_enabled : 审计进程的开启和关闭

##audit_login_logout : 决定是否审计panweidb用户的登录(包括登录成功和登录失败)、注销

##audit_grant_revoke : 是否审计openGauss用户权限授予和回收的操作

##audit_databasebase_process : 是否对openGauss的启动、停止、切换和恢复进行审计

##audit_user_locked : 是否审计openGauss用户的锁定和解锁

##audit_user_violation : 是否审计用户的越权访问操作

##audit_system_object : 数据库对象的CREATE,ALTER,DROP操作审计

##audit_dml_state_select : SELECT操作审计

##audit_dml_state : 表的INSERT、UPDATE和DELETE操作审计

##audit_function_exec : 存储过程和自定义函数的执行审计

##audit_copy_exec : 是否审计COPY操作

##audit_set_parameter : 是否审计SET操作

##audit_xid_info : 是否记录审计日志记录事务ID功能

##audit_directory : 审计文件的存储目录

##audit_resource_policy : 审计日志的保存策略。

##audit_space_limit : 审计文件占用的磁盘空间总量

##audit_file_remain_time : 审计日志文件的最小保存时间,单位天

function audit(){

gs_guc set -N all -I all -c "audit_enabled=on"

gs_guc set -N all -I all -c "audit_login_logout=7"

gs_guc set -N all -I all -c "audit_grant_revoke=1"

gs_guc set -N all -I all -c "audit_databasebase_process=0"

gs_guc set -N all -I all -c "audit_user_locked=0"

gs_guc set -N all -I all -c "audit_user_violation=0"

gs_guc set -N all -I all -c "audit_system_object=0"

gs_guc set -N all -I all -c "audit_dml_state_select=0"

gs_guc set -N all -I all -c "audit_dml_state=0"

gs_guc set -N all -I all -c "audit_function_exec=0"

gs_guc set -N all -I all -c "audit_copy_exec=0"

gs_guc set -N all -I all -c "audit_set_parameter=0"

gs_guc set -N all -I all -c "audit_xid_info=0"

gs_guc set -N all -I all -c "audit_directory='/data/apps/panweidb/pg_audit'"

gs_guc set -N all -I all -c "audit_resource_policy=off"

gs_guc set -N all -I all -c "audit_file_remain_time=7"

gs_guc set -N all -I all -c "audit_space_limit=5GB"

}

##其他参数

##cstore_buffers : 列存共享缓存区大小,在不使用列存存储的场景可将此参数调到最低来节省内存开销,重启生效

##local_syscache_threshold : 每个会话的最大缓存大小,设置过高会引发动态内存不足,即数据库级别的OOM

##standby_shared_buffers_fraction : 备节点使用shared_buffer的比例

##checkpoint_segments : 触发全量checkpoint的wal数量,即使开启增量检查点,此参数依然有效

##checkpoint_completion_target : checkpoint间隔内完成全量checkpoint所需的时间

##max_files_per_process : 进程允许打开的最大文件数量

##behavior_compat_options : 数据库兼容性配置选项,参数值display_leading_zero会展示小数点前面的0

##lc_messages : 信息语言显示格式

##lc_monetary : 货币的显示格式

##lc_numeric : 数值的显示格式

##lc_time : 时间和时区的显示格式

function otherKeyParams(){

gs_guc set -I all -N all -c "cstore_buffers=16MB"

gs_guc set -I all -N all -c "local_syscache_threshold=32MB"

gs_guc set -I all -N all -c "standby_shared_buffers_fraction=1"

gs_guc set -I all -N all -c "checkpoint_segments=1024"

gs_guc set -I all -N all -c "checkpoint_completion_target=0.8"

gs_guc set -I all -N all -c "max_files_per_process=100000"

gs_guc set -I all -N all -c "behavior_compat_options='display_leading_zero'"

gs_guc set -I all -N all -c "lc_messages='en_US.UTF-8'"

gs_guc set -I all -N all -c "lc_monetary='en_US.UTF-8'"

gs_guc set -I all -N all -c "lc_numeric='en_US.UTF-8'"

gs_guc set -I all -N all -c "lc_time='en_US.UTF-8'"

gs_guc set -N all -I all -c "enable_save_databasechanged_timestamp=off"

gs_guc set -N all -I all -c "track_sql_count=off"

gs_guc set -N all -I all -c "enable_instr_rt_percentile=off"

gs_guc set -N all -I all -c "enable_instance_metric_persistent=off"

gs_guc set -N all -I all -c "enable_logical_io_statistics=off"

gs_guc set -N all -I all -c "enable_user_metric_persistent=off"

gs_guc set -N all -I all -c "enable_mergejoin=on"

gs_guc set -N all -I all -c "enable_nestloop=on"

gs_guc set -N all -I all -c "enable_pbe_optimization=off"

gs_guc set -N all -I all -c "enable_asp=on"

gs_guc set -N all -I all -c "recovery_max_workers=4"

gs_guc set -N all -I all -c "enable_alarm=off"

gs_guc set -N all -I all -c "enable_codegen=off"

gs_guc set -N all -I all -c "pagewriter_sleep=200"

gs_guc set -N all -I all -c "update_lockwait_timeout=1min"

gs_guc set -N all -I all -c "lockwait_timeout=1min"

gs_guc set -N all -I all -c "max_size_for_xlog_prune=104857600"

gs_guc set -N all -I all -c "gs_clean_timeout=0"

gs_guc set -N all -I all -c "enable_ustore=off"

gs_guc set -N all -I all -c "random_page_cost=1.5"

}

##max_process_memory : 整个实例允许使用的最大内存,由于要预留一部分内存给操作系统,所以这个参数需要根据RAM大小动态调整,调整规则:RAM * n% / 数据库实例数量,重启生效

##shared_buffers : 行存共享缓存区大小,建议设置为max_process_memory的40%,重启生效

##max_connections : 数据库实例允许的最大连接数,设置过高会引起动态内存不足的错误,需结合业务使用设定,重启生效

##work_mem : 工作内存一般指排序、hash或join占用的内存,对于复杂query,增大此内存可减少临时文件的使用

##maintextce_work_mem : 维护内存一般指vacuum或create index使用的内存,增加此参数可提高效率

##wal_buffers : wal缓存大小,调整此参数对数据库性能有一定影响

##max_prepared_transactions : 预编译事务的数量,建议与max_connections保持一致

## 判断RAM的大小,将数据库内存大小分4个阶梯,分别是0~4GB、4~8GB、8~64GB以及64-nGB.

## 当RAM小于等于4G,建议使用数据库默认参数

## 其他三个阶梯有相应的建议参数值

memory=`free -g|awk '{print $2}' |sed -n 2p`

if [[ $memory -le 4 ]]

then

echo "Defined values of specify parameters or use the default parameters"

else

if [[ $memory -gt 4 ]] && [[ $memory -le 8 ]]

then

gs_guc set -I all -N all -c "max_process_memory=$((memory*6/10))GB"

gs_guc set -I all -N all -c "shared_buffers=$((memory*2/10))GB"

gs_guc set -I all -N all -c "max_connections=500"

gs_guc set -I all -N all -c "work_mem=16MB"

gs_guc set -I all -N all -c "maintextce_work_mem=512MB"

gs_guc set -I all -N all -c "wal_buffers=128MB"

gs_guc set -I all -N all -c "max_prepared_transactions=500"

elif [[ $memory -gt 8 ]] && [[ $memory -le 64 ]]

then

gs_guc set -I all -N all -c "max_process_memory=$((memory*7/10))GB"

gs_guc set -I all -N all -c "shared_buffers=$((memory*2/10))GB"

gs_guc set -I all -N all -c "max_connections=1000"

gs_guc set -I all -N all -c "work_mem=32MB"

gs_guc set -I all -N all -c "maintextce_work_mem=1GB"

gs_guc set -I all -N all -c "wal_buffers=512MB"

gs_guc set -I all -N all -c "max_prepared_transactions=1000"

elif [[ $memory -gt 64 ]]

then

gs_guc set -I all -N all -c "max_process_memory=$((memory*8/10))GB"

gs_guc set -I all -N all -c "shared_buffers=$((memory*3/10))GB"

gs_guc set -I all -N all -c "max_connections=3000"

gs_guc set -I all -N all -c "work_mem=64MB"

gs_guc set -I all -N all -c "maintextce_work_mem=2GB"

gs_guc set -I all -N all -c "wal_buffers=1GB"

gs_guc set -I all -N all -c "max_prepared_transactions=3000"

else

echo "There may be a problem with the script, please contact us for support"

fi

WAL

replicatioxtdSlots

dbLog

VACUUM

perfStats

otherKeyParams

audit

fi

SecureAccess

:wq! #保存退出

#添加执行权限

chmod +x /data/apps/gs_guc_v2.9_20230824.sh

sh /data/apps/gs_guc_v2.9_20230824.sh #执行

#设置访问权限(3个节点都设置)

vi /data/apps/panweidb/data/pg_hba.conf

host all all 10.189.189.0/24 sha256

:wq! #保存退出

#或者用命令行添加IP到所有节点的pg_hba.conf(只在主节点操作)

gs_guc set -Z datanode -N all -I all -h "host all all 10.189.189.0/24 sha256"

# 重启数据库集群(只在主节点操作)

gs_om -t stop && gs_om -t start

gs_om -t status --detail

测试篇

1、创建数据库,只在主库执行

gsql -d postgres -p 5432 -r #进入数据库控制台

CREATE DATABASE test_db DBCOMPATIBILITY 'PG' ENCODING 'UTF8' LC_COLLATE 'en_US.utf8' LC_CTYPE 'en_US.utf8';

#创建数据库test_db

2、创建用户testuser并设置密码

CREATE USER testuser WITH PASSWORD 'A1b2c3@2025';

3、授予用户testuser对数据库test_db具有所有操作权限

gsql -d postgres -p 5432 -r #进入数据库控制台

\c test_db #必须要先用管理员omm账号登录控制台,再切换到test_db数据库,执行下面的命令才能生效

GRANT ALL PRIVILEGES ON DATABASE test_db TO testuser;

4、授予用户对所有表和索引具有全部权限

gsql -d postgres -p 5432 -r

#进入数据库控制台

\c test_db

#必须要先用管理员omm账号登录控制台,再切换到test_db数据库,执行下面的命令才能生效

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO testuser;

GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO testuser;

5、授予"testuser"用户对后续创建的所有表和索引具有全部权限

gsql -d postgres -p 5432 -r #进入数据库控制台

\c test_db

#必须要先用管理员omm账号登录控制台,再切换到test_db数据库,执行下面的命令才能生效

GRANT USAGE, CREATE ON SCHEMA public TO testuser;

ALTER DEFAULT PRIVILEGES FOR USER testuser IN SCHEMA public GRANT ALL ON TABLES TO testuser;

ALTER DEFAULT PRIVILEGES FOR USER testuser IN SCHEMA public GRANT ALL ON SEQUENCES TO testuser;

6、创建表panweidbtest

gsql -d test_db -p 5432 -r

#进入数据库控制台

CREATE TABLE panweidbtest (id SERIAL PRIMARY KEY,name VARCHAR(100),age INT);

GRANT ALL PRIVILEGES ON panweidbtest TO testuser;

#允许用户testuser对表具有所有操作权限

7、插入数据

INSERT INTO panweidbtest (name, age) VALUES ('John', 25);

INSERT INTO panweidbtest (name, age) VALUES ('Jane', 30);

8、查看表数据

select * from panweidbtest;

#运行以下命令查询pg_stat_replication视图,以查看当前连接到数据库的从库信息

SELECT application_name, client_addr, sync_state FROM pg_stat_replication;

#主库中执行以下SQL语句来查询流复制的状态

SELECT * FROM pg_stat_replication;

9、导入sql文件到数据库

gsql -d test_db -p 5432 -r -f /tmp/test_db_backup.sql

主备数据库部署Keepalived VIP高可用

#数据库同步模式检查

#主节点

su - omm

gsql -d postgres -p 5432 -r

PanWeiDB=# show synchronous_standby_names;

查询结果应为 dn_6002

#备 1 节点

su - omm

gsql -d postgres -p 5432 -r

PanWeiDB=# show synchronous_standby_names;

查询结果应为 dn_6001

#备 2 节点

su - omm

gsql -d postgres -p 5432 -r

PanWeiDB=# show synchronous_standby_names;

查询结果应为 ANY 2(dn_6001,dn_6002)

安装Keepalived

在主节点和备1节点上操作

yum install keepalived

#备份原有的配置文件

mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak`date +"%Y%m%d"`

#主节点的配置文件

vi /etc/keepalived/keepalived.conf

vrrp_script check_primary {

script "/etc/keepalived/check_primary.sh"

interval 1

fall 3

rise 3

}

vrrp_instance VI_1 {

interface ens192 #网卡名称

virtual_router_id 140

state MASTER

nopreempt

priority 150

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

}

unicast_src_ip 10.189.189.184 #主节点IP

unicast_peer {

10.189.189.185 #备1节点IP

}

track_script {

check_primary

}

virtual_ipaddress {

10.189.189.183 #VIP

}

}

:wq! #保存退出

# 备 1 节点

vi /etc/keepalived/keepalived.conf

vrrp_script check_primary {

script "/etc/keepalived/check_primary.sh"

interval 1

fall 3

rise 3

}

vrrp_instance VI_1 {

interface ens192 #band/网卡名称

virtual_router_id 140

state BACKUP

nopreempt

priority 130

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

}

unicast_src_ip 10.189.189.185 #备1节点IP

unicast_peer {

10.189.189.184 #主点IP

}

track_script {

check_primary

}

virtual_ipaddress {

10.189.189.183 #VIP

}

}

:wq! #保存退出

配置 Keepalived 检测脚本

# 主节点

vi /etc/keepalived/check_primary.sh

#!/bin/bash

su - omm -c "gs_ctl query -D /data/apps/panweidb/data |grep 'local_role.*Primary' > /dev/null"

if [ $? -eq 0 ];

then

exit 0

else

exit 1

fi

:wq! #保存退出

# 备 1 节点

vi /etc/keepalived/check_primary.sh

#!/bin/bash

su - omm -c "gs_ctl query -D /data/apps/panweidb/data |grep 'local_role.*Primary' > /dev/null"

if [ $? -eq 0 ];

then

exit 0

else

exit 1

fi

:wq! #保存退出

chmod +x /etc/keepalived/check_primary.sh

vi /etc/sysconfig/keepalived

KEEPALIVED_OPTIONS="-D -f /etc/keepalived/keepalived.conf"

启动 Keepalived(主节点和备 1 节点依次执行,先主后备)

# 主节点

systemctl daemon-reload

systemctl enable keepalived

systemctl start keepalived

systemctl status keepalived

# 备 1 节点

systemctl daemon-reload

systemctl enable keepalived

systemctl start keepalived

systemctl status keepalived

检查Keepalived

# 主节点

## 检查 keepalived 软件是否启动

ps -ef | grep keepalived

## 查看 VIP 是否挂载

ip a

# 备 1 节点

## 检查 keepalived 软件是否启

ps -ef | grep keepalived

PanWeiDB高可用切换方案

10.189.189.184 主节点

10.189.189.185 备1节点

10.189.189.186 备2节点

10.189.189.183 VIP

## 主库

gsql -d postgres -p 5432 -c "show synchronous_standby_names"

gsql -d postgres -p 5432 -c "show listen_addresses"

## 备库1

gsql -d postgres -p 5432 -c "show synchronous_standby_names"

模拟主库数据库服务异常

对应数据库进程发生故障场景,使用kill的命令杀掉主库数据库服务

1、检查数据库角色及vip是否可以正常切换

2、检查主节点数据库服务是否可以自动拉起

1、主节点查看当前集群状态及VIP挂载

su - omm

gs_om -t status --detail&&ip a|grep -i 10.189.189.183

2、主节点查看数据库服务,并kill -9 模拟故障

su - omm

echo $PGDATA

date && ps -ef | grep $PGDATA | grep -v grep | awk '{print $2}' | xargs kill -9

3、备1节点查看集群状态:

## CM组件已自动切换备1节点为primary,并重新拉起主节点数据库作为standby加入集群,VIP自动漂移到备1节点

su - omm

gs_om -t status --detail&&ip a|grep -i 10.189.189.183

4、恢复最初的主从环境(主节点执行)

su - omm

cm_ctl switchover -n 1 -D /data/apps/panweidb/data

gs_om -t status --detail && ip a|grep -i 10.189.189.183

至此,BCLinux For Euler 21.10安装3节点PanWeiDB数据库集群完成。

     

  系统运维技术交流QQ群:①185473046 系统运维技术交流□Ⅰ ②190706903 系统运维技术交流™Ⅱ ③203744115 系统运维技术交流™Ⅲ

给我留言

您必须 [ 登录 ] 才能发表留言!



Copyright© 2011-2025 系统运维 All rights reserved
版权声明:本站所有文章均为作者原创内容,如需转载,请注明出处及原文链接
陕ICP备11001040号-3