点击上方“IT那活儿”公众号--专注于企业全栈运维技术分享,不管IT什么活儿,干就完了!!!
磐维数据库简介
磐维数据库(PanWeiDB)是中国移动首个基于中国本土开源数据库openGauss打造的面向ICT基础设施的自研数据库产品。
生态兼容方面
磐维数据库基于内核深度兼容,增加了大量对主流商业数据库及开源数据库的兼容特性。
多模多态方面
磐维数据库支持行存、列存、内存多种存储模式;支持集中式、分布式、一体机、云化多种部署形态,为业务系统提供了更灵活的部署方式。
数据迁移方面
磐维数据库支持多数据源、多模式的全自动化数据迁移,并能进行自动兼容评估,智能给出改造建议。
性能方面
磐维数据库内核级对SQL引擎和存储引擎进行深度优化,实现了TPC-C1000仓170万的突破。
安全方面
磐维数据库支持从接入认证、用户及权限管理、安全审计、数据安全等多个方面端到端保障数据安全。同时引入SM3、SM4等国密算法,满足国家信息安全规范要求。
数据库安装规范
2.1 硬件环境要求
项目 | 配置描述 |
cpu | 功能调试最小1×8 核 2.0GHz。 性能测试和商业部署时,单实例部署建议1×16核 2.0GHz。 CPU超线程和非超线程两种模式都支持。 |
硬盘 | 用于安装panweidb的硬盘需最少满足如下要求: •至少1GB用于安装panweidb的应用程序。 •每个主机需大约300MB用于元数据存储。 •预留70%以上的磁盘剩余空间用于数据存储。 建议系统盘配置为Raid1,数据盘配置为Raid5,且规划4组Raid5数据盘用于安装panweidb。有关Raid的配置方法在本手册中不做介绍。请参考硬件厂家的手册或互联网上的方法进行配置,其中Disk Cache Policy一项需要设置为Disabled,否则机器异常掉电后有数据丢失的风险。 cmdb支持使用SSD盘作为数据库的主存储设备,支持SAS接口和NVME协议的SSD盘,以RAID的方式部署使用。 |
网络要求 | 300兆以上以太网。 建议网卡设置为双网卡冗余bond。有关网卡冗余bond的配置方法在本手册中不做介绍。请参考硬件厂商的手册或互联网上的方法进行配置。 |
2.2 软件环境要求
软件类型 | 配置描述 |
Linux操作系统 | X86:CentOS 7、BC-linux 7.x、BC-linux 8.2、 BClinux for Euler 21.10、 openEuler 20.03、 Kylin V10 SP1
ARM:BClinux for Euler 21.10、openEuler 20.03、 Kylin V10 SP1、 UOS v20 1050u2e、UOS v20 1060e
说明:需要在英文操作系统上安装使用。 |
Linux文件系统 | 剩余inode个数 > 15亿(推荐) |
工具 | bzip2 |
| Python3 | 使用操作系统默认的python3,不能手工编译 |
| rdtscp指令集(x86) | 执行lscpu | grep rdtscp命令查看是否支持rdtscp指令集。 |
2.3 文件系统环境要求
文件系统环境所要求的扇区必须为 512bytes,查看方法如下:
# lsblk
# ll /dev/mapper/vg--docker-lvapp
# fdisk -l /dev/dm-2

部署环境准备
3.1 IP地址和主机角色
主机名 | IP | 数据库角色 | 数据库端口 |
hostname1 | 10.0.0.1 | Primary | 17700 |
hostname2 | 10.0.0.2 | Standby | 17700 |
hostname3 | 10.0.0.3 | Standby | 17700 |
3.2 文件规划存放
序号 | 文件系统 | 用途 |
1 | /database/panweidb/data | 存放数据文件 |
2 | /database/panweidb/data/pg_xlog | 存放WAL文件 |
3 | /database/panweidb/log | 存放数据库日志 |
4 | /database/panweidb/pg_audit | 存放审计日志 |
5 | /database/panweidb/app | 数据库安装目录 |
6 | /database/panweidb/cm | cm目录 |
7 | /database/panweidb/soft | 软件介质目录 |
8 | /backup | 备份目录 |
9 | /archive | 存放归档日志 |
注:
如果有三块盘,数据目录/database,备份目录/backup,归档目录/archive;
如果有两块盘,一块盘分两个分区,备份目录和归档目录挂一块在/backup目录和/archive下,另外一块盘挂/database分区;
如果是一块盘,/backup、/archive、/database挂成三个分区。
系统环境优化
4.1 检查 kernel 版本
cat /etc/redhat-releaseuname -r
4.2 检查root权限是否禁止登录
注意事项:
检查三台主机的 sshd_config 文件内 PermitRootLogin 是否为 yes,如果不是,需要修改为 yes,并重启 sshd 服务。
cat /etc/ssh/sshd_config | grep PermitRootLogin
PermitRootLogin yes
vi /etc/ssh/sshd_config
# 重启sshd服务systemctl restart sshd
4.3 关闭SELINUX
# 修改配置文件
cat /etc/selinux/config | grep -i SELINUX
SELINUX=disabled
# 关闭SELINUXsetenforce 0
4.4 关闭防火墙
# 查看防火墙状态
systemctl status firewalld
# 关闭防火墙
systemctl disable firewalld.servicesystemctl stop firewalld.servic
4.5 设置字符集
#查看字符集
echo $LANG
#设置字符集
export LANG=en_US.UTF-8
4.6 设置时区和时间
# 检查时间和时区,时间应该同步一致;时区应该一样。
date
# 如果不一样,则执行如下操作(需要确认时间服务器使用ntpd还是chronyd)
## 拷贝时区文件
cp ../usr/share/zoneinfo/Asia/Shanghai /etc/localtime
## 设置三节点统一时间
date -s "Wed Nov 2 16:00:07 CST 2022"
# 如果使用ntp服务
vi /etc/ntp.conf
server 10.0.0.1 prefer
systemctl start ntpd
systemctl enable ntpd
systemctl status ntpd
ntpq -p
# 如果使用chrony,需要配置时间服务器地址
vi /etc/chrony.conf
文档末尾添加
server 10.XX.XXX.52 iburst
# 客户端重启服务
systemctl enable chronyd
systemctl restart chronyd
systemctl status chronyd
# 查看时间同步源 chronyc sources -v
4.7 关闭 swap 交换
swapoff -a
free -g
4.8 设置网卡MTU值(可选)
## 检查网卡名称
ip a
## 检查网卡
当speed 超过 20000Mb/s(万兆)时(不包含20000Mb/s),可设置mtu参数,其他情况下可以跳过此步骤
ethtool bond0 #bond/网卡名
##在使用上述命令查询的网卡名称替换红字部分后,查看网卡参数
ifconfig bond0 mtu 8192 #bond/网卡名
## 查看MTU值
ifconfig bond0|grep mtu #bond/网卡名
4.9 关闭透明大页THP
#检查THP开启情况
cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
##关闭THP
echo never > /sys/kernel/mm/transparent_hugepage/enabled
##设置重启后自动关闭
chmod +x /etc/rc.d/rc.local
systemctl enable rc-local.service
cat >> /etc/rc.d/rc.local <<EOF
swapoff -a
if test -f /sys/kernel/mm/transparent_hugepage/enabled;
then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag;
then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi EOF
4.10 关闭RemoveIPC
1) 修改/etc/systemd/logind.conf文件中的“RemoveIPC”值为“no”
vim /etc/systemd/logind.conf
RemoveIPC=no
2) 修改/usr/lib/systemd/system/systemd-logind.service文件中的“RemoveIPC”值为“no”
vim /usr/lib/systemd/system/systemd-logind.service
RemoveIPC=no
3) 重启服务
systemctl daemon-reload
systemctl restart systemd-logind.service
4) 结果验证确认
loginctl show-session | grep RemoveIPC
systemctl show systemd-logind | grep RemoveIPC
4.11 内核参数优化
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
kernel.core_pattern=/database/panweidb/corefile/%e.%p.%u.%t.core
# 执行以下命令生效
sysctl -p
4.12 配置资源限制
vi /etc/security/limits.d/90-nproc.conf
或者
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
4.13 磁盘划分
如果有三块盘,数据目录/database,备份目录/backup,归档目录/archive;
如果有两块盘,一块盘分两个分区,备份目录和归档目录挂一块在/backup目录和/archive下,另外一块盘挂/database分区;
如果是一块盘,/backup、/archive、/database挂成三个分区。
1)创建gpt分区表
lsblk
parted /dev/sdb mklabel gptparted /dev/sdc mklabel gpt
2)创建分区
parted /dev/sdb mkpart primary 1024 100%
parted /dev/sdc mkpart primary 1024 50%
parted /dev/sdc mkpart primary 50% 100%
lsblk
mkdir /database
mkdir /backup
mkdir /archive
3)创建LVM
pvcreate /dev/sdb1 /dev/sdc1 /dev/sdc2
vgcreate vg00 /dev/sdb1
vgcreate vg01 /dev/sdc1 /dev/sdc2
lvcreate -l +100%Free -n lv_database vg00
lvcreate -L 893G -n lv_backup vg01
lvcreate -l +100%Free -n lv_archive vg01
lvs
mkfs.ext4 /dev/mapper/vg00-lv_database
mkfs.ext4 /dev/mapper/vg01-lv_backup
mkfs.ext4 /dev/mapper/vg01-lv_archive
mount /dev/mapper/vg00-lv_database /database
mount /dev/mapper/vg01-lv_backup /backup
mount /dev/mapper/vg01-lv_archive /archive
vi /etc/fstab
/dev/mapper/vg00-lv_database /database ext4 acl,user_xattr 1 2
/dev/mapper/vg01-lv_backup /backup ext4 acl,user_xattr 1 2
/dev/mapper/vg01-lv_archive /archive ext4 acl,user_xattr 1 2
mount -a
OM安装 PanWeiDB 主备集群
以bclinux_euler21.10-x86_64操作系统为例进行安装,该系统目前安装磐维数据库较稳定。
5.1 安装数据库依赖(所有节点)
yum -y install libaio-devel flex bison ncurses-devel glibc-devel patch readline-devel python3 expect* bzip2 libnsl* gcc gcc-c++ zlib-devel ncurses-devel expect
5.2 检查python3(所有节点)
# 检查 python3 版本,如果为 Python 3.6或3.7则满足要求,如果不满足则需重新yum安装。
python3 --version
5.3 修改服务器hostname(所有节点)
#检查服务器当前的hostname
hostname
#根据/etc/hosts的规划,分别重置hostname
hostnamectl set-hostname hostname1/hostname2/hostname3
5.4 配置/etc/hosts文件(所有节点)
cat >> /etc/hosts <<EOF
10.0.0.1 hostname1
10.0.0.2 hostname2
10.0.0.3 hostname3EOF
5.5 创建omm用户及用户组(所有节点)
groupadd -g 1101 dbgrp
useradd -g dbgrp -u 1101 -m omm
cd /usr/bin/./passwd omm
5.6 创建目录(所有节点)
mkdir -p /database/panweidb
mkdir -p /database/panweidb/archive
mkdir -p /database/panweidb/pg_audit
5.7 创建安装包目录(主节点)
mkdir -p /database/panweidb/soft
5.8 上传并解压安装包(主节点)
# 将安装包存放在/database/panweidb/soft 目录下:
cd /database/panweidb/soft
tar -xf 'PanWeiDB-2.0.0_Build0(9fbca90)-bclinux_euler21.10-x86_64-no_mot.tar.gz'
tar -xf 'PanWeiDB-2.0.0_Build0(9fbca90)-bclinux-64bit-om.tar.gz'
5.9 编写XML文件(主节点)
#一主两备三节点的配置文件如下:
vi /database/panweidb/soft/panweidb1m2s.xml
<?xml version="1.0" encoding="utf-8"?>
<ROOT>
<CLUSTER>
<PARAM name="clusterName" value="panweidb" />
<PARAM name="nodeNames" value="hostname1,hostname2,hostname3"/>
<PARAM name="gaussdbAppPath" value="/database/panweidb/app" />
<PARAM name="gaussdbLogPath" value="/database/panweidb/log" />
<PARAM name="tmpMppdbPath" value="/database/panweidb/tmp"/>
<PARAM name="gaussdbToolPath" value="/database/panweidb/tool" />
<PARAM name="corePath" value="/database/panweidb/corefile"/>
<PARAM name="backIp1s" value="10.0.0.1,10.0.0.2,10.0.0.3"/>
</CLUSTER>
<DEVICELIST>
<DEVICE sn="hostname1">
<PARAM name="name" value="hostname1"/>
<PARAM name="azName" value="AZ1"/>
<PARAM name="azPriority" value="1"/>
<PARAM name="backIp1" value="10.0.0.1"/>
<PARAM name="sshIp1" value="10.0.0.1"/>
<PARAM name="cmsNum" value="1"/>
<PARAM name="cmServerPortBase" value="18800"/>
<PARAM name="cmServerListenIp1" value="10.0.0.1,10.0.0.2,10.0.0.3"/>
<PARAM name="cmServerHaIp1" value="10.0.0.1,10.0.0.2,10.0.0.3"/>
<PARAM name="cmServerlevel" value="1"/>
<PARAM name="cmServerRelation" value="hostname1,hostname2,hostname3"/>
<PARAM name="cmDir" value="/database/panweidb/cm"/>
<PARAM name="dataNum" value="1"/>
<PARAM name="dataPortBase" value="17700"/>
<PARAM name="dataNode1" value="/database/panweidb/data,hostname2,/database/panweidb/data,hostname3,/database/panweidb/data"/>
<PARAM name="dataNode1_syncNum" value="1"/>
</DEVICE>
<DEVICE sn="hostname2">
<PARAM name="name" value="hostname2"/>
<PARAM name="azName" value="AZ1"/>
<PARAM name="azPriority" value="1"/>
<PARAM name="backIp1" value="10.0.0.2"/>
<PARAM name="sshIp1" value="10.0.0.2"/>
<PARAM name="cmServerPortStandby" value="18800"/>
<PARAM name="cmDir" value="/database/panweidb/cm"/>
</DEVICE>
<DEVICE sn="hostname3">
<PARAM name="name" value="hostname3"/>
<PARAM name="azName" value="AZ1"/>
<PARAM name="azPriority" value="1"/>
<PARAM name="backIp1" value="10.0.0.3"/>
<PARAM name="sshIp1" value="10.0.0.3"/>
<PARAM name="cmServerPortStandby" value="18800"/>
<PARAM name="cmDir" value="/database/panweidb/cm"/>
</DEVICE>
</DEVICELIST>
</ROOT>
5.10 安装目录授权(主节点)
chown -R omm:dbgrp /database/panweidb
chmod -R 755 /database/panweidb
5.11 root用户预安装(主节点)
cd /database/panweidb/soft/script
#三节点:一主两备
./gs_preinstall -U omm -G dbgrp -X /database/panweidb/soft/panweidb1m2s.xml
##输入"yes",root和omm用户密码
5.12 安装目录授权(主节点)
chown -R omm:dbgrp /database/panweidb
chmod -R 755 /database/panweidb
5.13 omm用户安装(主节点)
su - omm
#三节点:一主两备
gs_install -X /database/panweidb/soft/panweidb1m2s.xml \
--gsinit-parameter="--encoding=UTF8" \
--gsinit-parameter="--lc-collate=C" \
--gsinit-parameter="--lc-ctype=C" \
--gsinit-parameter="--dbcompatibility=B"
注意事项:
数据库兼容性只能全局设置,后续不可更改,必须确认好项目使用的数据库兼容性。dbcompatibility取值范围:A、B、C、PG。分别表示兼容O、MY、TD和POSTGRES。
如果安装失败请根/database/panweidb/log/omm/om目录中的日志排查错误。
数据库初始密码设置与操作系统omm密码一致。
5.14 查看集群状态
gs_om -t status --detail
[ CMServer State ]
node node_ip instance state
---------------------------------------------------------------------------
1 hostname1 10.0.0.1 1 /database/panweidb/cm/cm_server Primary
2 hostname2 10.0.0.2 2 /database/panweidb/cm/cm_server Standby
3 hostname3 10.0.0.3 3 /database/panweidb/cm/cm_server Standby
[ Cluster State ]
cluster_state : Normal
redistributing : No
balanced : Yes
current_az : AZ_ALL
[ Datanode State ]
node node_ip instance state
------------------------------------------------------------------------------
1 hostname1 10.0.0.1 6001 /database/panweidb/data P Primary Normal
2 hostname2 10.0.0.2 6002 /database/panweidb/data S Standby Normal
3 hostname3 10.0.0.3 6003 /database/panweidb/data S Standby Normal
5.15 配置数据库基线参数(最佳性能)
先执行如下脚本文件,先删除脚本行尾的 ^M。
cd /database/panweidb/soft
sh gs_guc_v2.10_20231027.txt
再根据部署节点执行如下:
#三节点执行如下设置
gs_guc set -N hostname1 -D /database/panweidb/data -c "synchronous_standby_names = 'dn_6002'"
gs_guc set -N hostname2 -D /database/panweidb/data -c "synchronous_standby_names = 'dn_6001'"
gs_guc set -N hostname3 -D /database/panweidb/data -c "synchronous_standby_names = 'ANY 2(dn_6001,dn_6002)'"
设置磁盘告警阈值:
gs_guc reload -Z cmserver -N all -I all -c "datastorage_threshold_value_check=85"
注意:
当数据目录所在磁盘占用超过datastorage_threshold_value_check设置的阈值,自动将数据库设置为只读模式。参考现场主机磁盘目录告警修改此参数或磁盘告警值。
重启数据库集群:
gs_om -t stop && gs_om -t start
5.16 查看集群状态
gs_om -t status --detail
[ CMServer State ]
node node_ip instance state
----------------------------------------------------------------------------
1 hostname1 10.0.0.1 1 /database/panweidb/cm/cm_server Primary
2 hostname2 10.0.0.2 2 /database/panweidb/cm/cm_server Standby
3 hostname3 10.0.0.3 3 /database/panweidb/cm/cm_server Standby
[ Cluster State ]
cluster_state : Normal
redistributing : No
balanced : Yes
current_az : AZ_ALL
[ Datanode State ]
node node_ip instance state
------------------------------------------------------------------------------
1 hostname1 10.0.0.1 6001 /database/panweidb/data P Primary Normal
2 hostname2 10.0.0.2 6002 /database/panweidb/data S Standby Normal
3 hostname3 10.0.0.3 6003 /database/panweidb/data S Standby Normal
创建和使用数据库
6.1 登录数据库
su - omm
gsql -d panweidb -p 17700
6.2 创建用户
create user scott identified by 'tigger';
6.3 创建表空间
CREATE TABLESPACE fastspace owner scott RELATIVE LOCATION 'tablespace/tablespace_1';
GRANT CREATE ON TABLESPACE fastspace TO scott;
6.4 创建数据库 scott,使用表空间 fastspace
CREATE DATABASE scott WITH TABLESPACE = fastspace;
6.5 授权用户 scott 访问数据库 scott
grant all privileges on database scott to scott;
6.6 使用以下命令为数据库设置默认的模式搜索路径
ALTER DATABASE scott SET search_path TO pa_catalog,public;
6.7 修改数据库表空间
ALTER DATABASE scott SET TABLESPACE fastspace;
gsql -d scott -U scott -W 'tigger'
--登录数据库gsql -h 10.0.0.1 -p 17700 -d scott -U scott -W 'tigger'
磐维客户端安装
7.1 在需要连接的主机上解压数据库工具包
mkdir -p /opt/panweitools
tar -xzf PanWeiDB_V2.0-S2.0.3_B01-tools-bclinux_euler21.10-x86_64.tar.gz -C /opt/panweitools
7.2 授予可执行权限
chmod -R 755 /opt/panweitools/
7.3 设置环境变量
方式一:
临时生效方式。
export PATH=$PATH:/opt/panweitools/bin
export LD_LIBRARY_PATH=/opt/panweitools/lib:/opt/panweitools/lib/postgresql:$LD_LIBRARY_PATH
方式二:
永久生效方式。
vi ~/.bash_profile
export PATH=$PATH:/opt/panweitools/bin
export LD_LIBRARY_PATH=/usr/local/lib:/lib64:/usr/lib64
export LD_LIBRARY_PATH=/opt/panweitools/lib:/opt/panweitools/lib/postgresql:$LD_LIBRARY_PATH
##生效
source ~/.bash_profile
7.4 验证工具可用
gsql --help

本文作者:辛志梁(上海新炬中北团队)
本文来源:“IT那活儿”公众号





