暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

磐维数据库一主二备搭建

IT那活儿 2024-11-15
539

点击上方“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

注意事项如上图所示,Sector size 为扇区的大小,必须是 512 bytes。

部署环境准备

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-release
uname -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

END


本文作者:辛志梁(上海新炬中北团队)

本文来源:“IT那活儿”公众号

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论