本文档采用openGauss结合ShardingSphere中间件的架构,实现openGauss数据库分布式OLAP场景的环境部署。
术语说明:
开源数据库引擎:openGauss
shardingsphere Proxy:定位为透明化的数据库代理端,提供封装了数据库二进制协议的服务端版本,用于完成对异构语言的支持。 目前提供 MySQL 和PostgreSQL(兼容 openGauss 等基于 PostgreSQL 的数据库)版本,它可以使用任何兼容 MySQL/PostgreSQL 协议的访问客户端(如:MySQL Command Client, MySQL Workbench, Navicat等)操作数据,对 DBA 更加友好。
zookeeper:ZooKeeper 是 Apache 软件基金会的一个软件项目,它为大型分布式计算提供开源的分布式配置服务、同步服务和命名注册。
OLAP:Online Analytical Processing:联机分析处理,大数据分析的应用技术,提供复杂的分析操作、
侧重决策支持。
组件介绍
ZooKeeper介绍
ZooKeeper 是一个分布式协调服务 ,由 Apache 进行维护。
ZooKeeper 可以视为一个高可用的文件系统。
ZooKeeper 可以用于发布/订阅、负载均衡、命令服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列等功能 。
shardingsphere-proxy 介绍
ShardingSphere-proxy(以下简称为"proxy")定位为透明化的数据库代理端,提供封装了数据库二进制协议的服务端版本,用于完成对异构语言的支持。
ShardingSphere-Proxy 是 ShardingSphere 生态中的一个接入端,定位为对客户端透明的数据库代理。ShardingSphere Proxy 不局限于 Java,其实现了 MySQL、PostgreSQL 数据库协议,可以使用各种兼容 MySQL / PostgreSQL 协议的客户端连接并操作数据。
ShardingSphere-Proxy 是一个服务进程。从客户端程序连接来说,它和 MySQL 数据库并没有什么区别。
proxy实现分布式的核心原理是,使用netty捕获客户端(gsql或jdbc)的sql语句,通过抽象语法树解析sql,根据配置的分库分片规则,改写sql语句,使其路由到对应的数据库上并聚合多个sql的返回结果,再将结果通过netty返回给客户端,这样就完成了分库分片的全流程,如下图示:
ShardingSphere-JDBC和ShardingSphere-Proxy区别:
ShardingSphere-JDBC | ShardingSphere-Proxy | |
数据库 | 任意 | 基于 MySQL / PostgreSQL 协议的数据库 |
连接消耗数 | 高 | 低 |
异构语言 | 支持 Java 等基于 JVM 语言 | 任意 |
性能 | 损耗低 | 损耗略高 |
无中心化 | 是 | 否 |
静态入口 | 无 | 有 |
在做了分库分表或其他规则的情况下,数据会分散到多个数据库实例上,在管理上难免会有一些不便;或者使用非 Java 语言的开发者,需要 ShardingSphere 所提供的能力…… 以上这些情况,正是 ShardingSphere-Proxy 力所能及之处。
ShardingSphere-Proxy 隐藏了后端实际数据库,对于客户端来说就是在使用一个数据库,不需要关心 ShardingSphere 如何协调背后的数据库,对于使用非 Java 语言的开发者或 DBA 更友好。
在协议方面,ShardingSphere PostgreSQL Proxy 实现了 Simple Query 与大部分 Extended Query 协议,支持异构语言通过 PostgreSQL/openGauss 驱动连接 Proxy。ShardingSphere openGauss Proxy 在复用 PostgreSQL 协议的基础上,还支持 openGauss 特有的批量插入协议。
不过,由于 ShardingSphere-Proxy 相比 ShardingSphere-JDBC 增加了一层网络交互,SQL 执行的延时会有所增加,损耗相比 ShardingSphere-JDBC 略高。
ShardingSphere-Proxy 与 PostgreSQL 的生态对接
兼容 PostgreSQL Simple Query 与 Extended Query
Simple Query 与 Extended Query 是大多数用户在使用 PostgreSQL 时最常用的协议。
比如,使用如下命令行工具 psql 连接 PostgreSQL 数据库进行 CRUD 操作时,主要使用 Simple Query 协议与数据库交互。
$ psql -h 127.0.0.1 -U postgres
psql (14.0 (Debian 14.0-1.pgdg110+1))
Type "help" for help.
postgres=# select id, name from person where age < 35;
id | name
----+------
1 | Foo
(1 row)
Simple Query 的协议交互示意图如下:
当用户使用 PostgreSQL JDBC Driver 等驱动时,可能会如下代码使用 PreparedStatement,默认情况下对应着 Extended Query 协议。
String sql = "select id, name from person where age > ?";
PreparedStatement ps = connection.prepareStatement(sql);
ps.setInt(1, 35);
ResultSet resultSet = ps.executeQuery();
Extended Query 的协议交互示意图如下:
目前,ShardingSphere PostgreSQL Proxy 实现了 Simple Query 与大部分 Extended Query 协议,不过,因为数据库客户端与驱动已经封装好 API 供用户使用,一般用户并不需要关心数据库协议层面的事情。
ShardingSphere-Proxy 兼容 PostgreSQL 的 Simple Query 与 Extended Query 意味着:用户可以使用常见的 PostgreSQL 客户端或驱动连接 ShardingSphere-Proxy 进行 CRUD 操作,利用 ShardingSphere 在数据库上层提供的增量能力。
ShardingSphere-Proxy 与 openGauss 的生态对接
支持 openGauss JDBC Driver
openGauss 数据库有对应的 JDBC 驱动,JDBC URL 的前缀jdbc:opengauss。虽然用 PostgreSQL 的 JDBC 驱动也能够连接 openGauss 数据库,但这样就无法完全利用 openGauss 特有的批量插入等特性。ShardingSphere 增加了 openGauss 数据库类型,能够识别 openGauss JDBC Driver,开发者在使用 ShardingSphere 的时候可以直接使用 openGauss 的 JDBC 驱动。
支持 openGauss 批量插入协议
举一个例子,当我们 prepare 一个 insert 语句如下
insert into person (id, name, age) values (?, ?, ?)
以 JDBC 为例,我们可能会使用如下方法执行批量插入:
String sql = "insert into person (id, name, age) values (?, ?, ?)";
PreparedStatement ps = connection.prepareStatement(sql);
ps.setLong(1, 1);
ps.setString(2, "Foo");
ps.setInt(3, 18);
ps.addBatch();
ps.setLong(1, 2);
ps.setString(2, "Bar");
ps.setInt(3, 36);
ps.addBatch();
ps.setLong(1, 3);
ps.setString(2, "Tom");
ps.setInt(3, 54);
ps.addBatch();
ps.executeBatch();
在 PostgreSQL 协议层面,Bind 消息每次能够传递一组参数形成 Portal,Execute 每次能够执行一个 Portal。执行批量插入可以通过反复执行 Bind 和 Execute 实现。协议交互示意图如下:
Batch Bind 是 openGauss 特有的消息类型,相比原本的 Bind,Batch Bind 一次能够传递多组参数,使用 Batch Bind 执行批量插入的协议交互示意如下:
ShardingSphere-Proxy openGauss 实现了对 Batch Bind 协议的支持,也就是说,客户端能够直接用 openGauss 的客户端或驱动对 ShardingSphere Proxy 执行批量插入。
ShardingSphere-Proxy 后续要做的事情
支持 ShardingSphere PostgreSQL Proxy 逻辑 MetaData 查询
ShardingSphere-Proxy 作为透明数据库代理,用户无需关心 Proxy 如何协调背后的数据库。
以下图为例,在 ShardingSphere-Proxy 中配置逻辑库 sharding_db 和逻辑表 person,Proxy背后实际对应了 2 个数据库共 4 个表。
目前在 ShardingSphere MySQL Proxy 中分别执行 show schemas、show tables 语句,查询的结果能够正常的列出逻辑库 sharding_db 和逻辑表 person。
使用 psql 连接 PostgreSQL 时可以通过 \l、\d 等命令查询库、表。但与 MySQL 不同的是,show tables是 MySQL 所支持的语句,而在 psql 中所使用的 \d 实际上对应了一条比较复杂的 SQL,目前使用 ShardingSphere PostgreSQL Proxy 暂时无法查询出逻辑库或逻辑表。
支持 Extended Query 的 Describe Prepared Statement
PostgreSQL 协议的 Describe 消息有两种变体,分别是 Describe Portal 和 Describe Prepared Statement。目前 ShardingSphere Proxy 仅支持 Describe Portal,暂时不支持 Describe Prepared Statement。
Describe Prepared Statement 的实际应用举例:在 PreparedStatement 执行之前获取结果集的 MetaData。
PreparedStatement preparedStatement = connection.prepareStatement("select * from t_order limit ?"); ResultSetMetaData metaData = preparedStatement.getMetaData();
ShardingSphere 与 PostgreSQL/openGauss 生态对接的过程仍在进行,后续需要做的事情还有很多。如果您对我们所做的事情感兴趣,欢迎通过 GitHub 或邮件列表参与 ShardingSphere 社区。
GitHub: https://github.com/apache/shard
下载安装包
软件名称 | 软件版本 | 备注 |
shardingsphere | ShardingSphere | ShardingSphere-5.2.0官网发布二进制包地址:https://archive.apache.org/dist/shardingsphere/5.2.0/apache-shardingsphere-5.2.0-shardingsphere-proxy-bin.tar.gz |
openGauss | 5.0.1企业版 | |
zookeeper | 3.6.0及以上版本 | https://zookeeper.apache.org/releases.html#downl |
环境配置
架构规划
应用 | IP:PORT |
zookeeper | 192.168.40.152:2181 |
opengauss1 | 192.168.40.152:15400 |
opengauss2 | 192.168.40.153:15400 |
opengauss3 | 192.168.40.154:15400 |
shardingsphere-proxy | 192.168.40.152:13000 |
注意事项:依赖shardingSphere+ZK注册中心+opengauss集群部署方式;shardingSphere版本限制5.2.0及以上;
java环境配置
Java 8 Update 161或更高版本(8u161+) (64位)。同时支持Oracle JDK和Open JDK;AArch64
(Bisheng JDK 1.8.262 或者更高版本);
cat >> install_jdk.sh << "EOF"
#!/bin/bash
dir=$(pwd)
#1.配置 JDK 环境解压到 JDK 到指定路径。
tar -xvf $dir/jdk-8u341-linux-x64.tar.gz -C /usr/local
cat >> /etc/profile << "EOF"
export JAVA_HOME=/usr/local/jdk1.8.0_341
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
export PATH=${JAVA_PATH}:$PATH
export JAVA_BIN=${JAVA_HOME}/bin
EOF
source /etc/profile
java -version
EOF
部署过程
安装opengauss数据库
请参考opengauss官网部署文档;由于验证分片场景,至少安装2个数据库。 本文档采用部署3个企业版数据库节点。
3个节点均安装
系统参数配置
操作系统主机命名(可选)
如果采用默认主机名,可忽略该步骤,默认的主机名localhost.localdomain,xml文件中的主机名也需要改成localhost.localdomain
hostnamectl set-hostname opendb01
/etc/hosts配置(可选)
如果采用默认主机名,可忽略该步骤,预安装会自动追加127.0.0.1 localhost #Gauss OM IP Hosts Mapping
cp /etc/hosts /etc/hosts.bak
cat >>/etc/hosts<<EOF
192.168.40.110 opendb01
EOF
limits.conf
不用配置该文件,会自动追加如下内容:
cp /etc/security/limits.conf /etc/security/limits.conf_bak_`date +%F`
cat >> /etc/security/limits.conf << "EOF"
#add by openGauss
root soft as unlimited
omm soft as unlimited
root hard as unlimited
omm hard as unlimited
root soft nproc unlimited
omm soft nproc unlimited
root hard nproc unlimited
omm hard nproc unlimited
EOF
关闭透明页
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
--加入开机启动
echo '
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag' >>/etc/rc.local
chmod +x /etc/rc.local
防火墙配置
systemctl stop firewalld.service
systemctl disable firewalld.service
如果启用防火墙需进行如下配置:
如果数据库端口和ssh端口不是15400和22,需视情况更改
firewall-cmd --zone=public --add-port=15400/tcp --permanent
firewall-cmd --zone=public --add-port=22/tcp --permanent
firewall-cmd --reload
selinux配置
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
setenforce 0
关闭 numa和禁用透明大页
sed -i "s/quiet/quiet numa=off transparent_hugepage=never/g" /etc/default/grub
grub2-mkconfig -o /etc/grub2.cfg
设置字符集参数
echo "export LANG=en_US.UTF-8" >> /etc/profile
source /etc/profile
设置时区和时间
如果服务器时间和当前时间相差8小时或者12小时,需要查看时区,分析是否决定更改。
非可视化更改步骤
--查看当前时间
[root@opendb01 ~]# date
Fri Jan 26 16:50:55 CST 2024
--查看当前时区
root@HKSZF-ZW-172-19-146-176:/topsoft# timedatectl
Local time: Wed 2024-01-24 05:51:05 UTC
Universal time: Wed 2024-01-24 05:51:05 UTC
RTC time: Wed 2024-01-24 05:51:56
Time zone: Etc/UTC (UTC, +0000)
System clock synchronized: no
systemd-timesyncd.service active: yes
RTC in local TZ: no
--更改时区 执行tzselect命令
root@HKSZF-ZW-172-19-146-176:/topsoft# tzselect
Please identify a location so that time zone rules can be set correctly.
Please select a continent, ocean, "coord", or "TZ".
1) Africa
2) Americas
3) Antarctica
4) Asia
5) Atlantic Ocean
6) Australia
7) Europe
8) Indian Ocean
9) Pacific Ocean
10) coord - I want to use geographical coordinates.
11) TZ - I want to specify the time zone using the Posix TZ format.
--找到Asia,输入4,回车
Please select a country whose clocks agree with yours.
1) Afghanistan 18) Israel 35) Palestine
2) Armenia 19) Japan 36) Philippines
3) Azerbaijan 20) Jordan 37) Qatar
4) Bahrain 21) Kazakhstan 38) Russia
5) Bangladesh 22) Korea (North) 39) Saudi Arabia
6) Bhutan 23) Korea (South) 40) Singapore
7) Brunei 24) Kuwait 41) Sri Lanka
8) Cambodia 25) Kyrgyzstan 42) Syria
9) China 26) Laos 43) Taiwan
10) Cyprus 27) Lebanon 44) Tajikistan
11) East Timor 28) Macau 45) Thailand
12) Georgia 29) Malaysia 46) Turkmenistan
13) Hong Kong 30) Mongolia 47) United Arab Emirates
14) India 31) Myanmar (Burma) 48) Uzbekistan
15) Indonesia 32) Nepal 49) Vietnam
16) Iran 33) Oman 50) Yemen
17) Iraq 34) Pakistan
--找到china,输入9,回车
Please select one of the following time zone regions.
1) Beijing Time
2) Xinjiang Time
--找到北京时间,输入1,回车
Please select one of the following time zone regions.
1) Beijing Time
2) Xinjiang Time
--选择yes,输入1,回车
The following information has been given:
China
Beijing Time
Therefore TZ='Asia/Shanghai' will be used.
Selected time is now: Wed Jan 24 21:40:32 CST 2024.
Universal Time is now: Wed Jan 24 13:40:32 UTC 2024.
Is the above information OK?
1) Yes
2) No
--更新设置
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
--查看是否更改成功
root@HKSZF-ZW-172-19-146-176:/topsoft# date
Wed Jan 24 21:42:00 CST 2024
root@HKSZF-ZW-172-19-146-176:/topsoft# timedatectl
Local time: Wed 2024-01-24 21:42:06 CST
Universal time: Wed 2024-01-24 13:42:06 UTC
RTC time: Wed 2024-01-24 06:09:59
Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: no
systemd-timesyncd.service active: yes
RTC in local TZ: no
可视化更改步骤
--查看当前时间
[root@opendb01 ~]# date
Fri Jan 26 16:50:55 CST 2024
--查看当前时区
root@HKSZF-ZW-172-19-146-176:/topsoft# timedatectl
Local time: Wed 2024-01-24 05:51:05 UTC
Universal time: Wed 2024-01-24 05:51:05 UTC
RTC time: Wed 2024-01-24 05:51:56
Time zone: Etc/UTC (UTC, +0000)
System clock synchronized: no
systemd-timesyncd.service active: yes
RTC in local TZ: no
在可视化界面中查看
选择进入 Applications -> System Tools -> Settings -> Details -> Date & Time
调整时间
点击“Date & Time”行中任意位置,弹出弹窗,调整时间为当前北京时间,再关闭弹窗,即保存。如下图所示:
再次使用命令查看,本地时间已显示为北京时间
[root@localhost src]# timedatectl
Local time: Mon 2022-04-04 13:14:03 CST
Universal time: Mon 2022-04-04 05:14:03 UTC
RTC time: Mon 2022-04-04 05:14:03
Time zone: Asia/Shanghai (CST, +0800)
NTP enabled: no
NTP synchronized: no
RTC in local TZ: no
DST active: n/a
关闭swap交换内存(可选)
关闭swap交换内存是为了保障数据库的访问性能,避免把数据库的缓冲区内存淘汰到磁盘上。 如果服务器内存比较小,内存过载时,可打开swap交换内存保障正常运行。
swapoff -a
关闭RemoveIPC
在各数据库节点上,关闭RemoveIPC。CentOS操作系统默认为关闭,可以跳过该步骤。
- 修改/etc/systemd/logind.conf文件中的“RemoveIPC”值为“no”。a. 使用VIM打开logind.conf文件。
--更改后的/etc/systemd/logind.conf
vim /etc/systemd/logind.conf
RemoveIPC=no
--更改后的
vim /usr/lib/systemd/system/systemd-logind.service
RemoveIPC=no
--重新加载配置参数
systemctl daemon-reload
systemctl restart systemd-logind
--检查修改是否生效
loginctl show-session | grep RemoveIPC
systemctl show systemd-logind | grep RemoveIPC
关闭HISTORY记录(可选)
为避免指令历史记录安全隐患,需关闭各主机的history指令。
更改/etc/profile中HISTSIZE值
vim /etc/profile
HISTSIZE默认值为1000 更改为 HISTSIZE=0
--生效
source /etc/profile
配置yum源
将操作系统镜像上传至/opt目录下
mount /opt/*.iso /mnt/
cat << EOF >> /etc/fstab
/dev/sr0 /mnt iso9660 loop 0 0
EOF
mkdir -p /etc/yum.repos.d/bak
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak
cat >> /etc/yum.repos.d/os.repo <<"EOF"
[OS1]
name=OS
baseurl=file:///mnt
enabled=1
gpgcheck=0
EOF
安装依赖包
yum install -y bzip2 libaio-devel flex bison ncurses-devel glibc-devel \
patch redhat-lsb-core readline-devel
注意:openEuler+x86环境中 yum install -y libnsl kylinV10中无redhat-lsb-core,如果是Centos
操作系统采用如下步骤:
--kylinV10 操作系统下安装依赖包如下:
yum install -y bzip2 libaio-devel flex bison ncurses-devel glibc-devel \
patch readline-devel
python版本升级
python版本如果是3.6.x,可跳过该步骤
python版本2.7.5需升级至3.6.x版本,centos7 用python3.6 ,欧拉20用python3.7,其实不需要去编译安装python,直接用操作系统自带的包管理器yum install python3或dnf install python3,装上去就是对应的版本了。切不要编译安装,不然跳坑,预安装时报错。
--查看python版本
[root@opendb01 ~]# python --version
Python 2.7.5
[root@opendb01 ~]# python3 --version
python3命令找不到
--采用yum方式安装操作系统自带的包管理器中的python3
yum install python3
--再次查看python版本
[root@opendb01 ~]# python --version
Python 2.7.5
[root@opendb01 ~]# python3 --version
Python 3.6.8
创建用户及用户组(可选)
可以创建也可以不创建,自行操作
--创建用户组dbgrp
groupadd dbgrp
--创建用户组dbgroup下的普通用户omm,并设置密码为omm
useradd -g dbgrp omm
passwd omm
为了实现安装过程中安装帐户权限最小化,及安装后openGauss的系统运行安全性,安装脚本在安装过程中会自动按照用户指定内容创建安装用户,并将此用户作为后续运行和维护openGauss的管理员帐户。
用户/组名 | 所属类型 | 规划建议 |
dbgrp | 操作系统 | 建议规划单独的用户组,例如dbgrp。 初始化安装环境时,由-G参数所指定的安装用户所属的用户组。该用户组如果不存在,则会自动创建,也可提前创建好用户组。在执行gs_preinstall脚本时会检查权限。gs_preinstall脚本会自动赋予此组中的用户对安装目录、数据目录的访问和执行权限。 创建dbgrp用户组命令: groupadd dbgrp |
omm | 操作系统 | 建议规划用户用于运行和维护openGauss,例如omm。 初始化安装环境时,由-U参数所指定和自动创建的操作系统用户,如果已经存在该用户,请清理该用户或更换初始化用户。从安全性考虑,对此用户的所属组规划如下: 所属组:dbgrp |
在安装openGauss过程中root用户运行 openGauss-5.0.1-CentOS-64bit-om.tar.gz中scripts目录中的“gs_preinstall”时,会创建与安装用户同名的数据库用户,即数据库用户omm。此用户具备数据库的最高操作权限,此用户初始密码由用户指定。
目录规划
--创建存放安装包的目录
mkdir -p /topsoft/soft/openGauss
chmod 777 -R /topsoft/soft
--创建目录 目录会自动创建,可选择不创建
mkdir -p /topsoft/huawei/install/app #数据库安装目录
mkdir -p /topsoft/huawei/log/omm #日志目录
mkdir -p /topsoft/huawei/tmp #临时文件目录
mkdir -p /topsoft/huawei/install/om #数据库工具目录
mkdir -p /topsoft/huawei/corefile #数据库core文件目录
不建议把安装包的存放目录规划到openGauss用户的根目录或其子目录下,可能导致权限问题。。安装目录和数据目录在统一目录下也会导致权限问题,建议安装目录和数据目录分开。
openGauss用户须具有/topsoft/soft/openGauss目录的读写权限。
下载并上传安装包
登录openGauss开源社区软件包 | openGauss,选择对应平台的企业版安装包。
上传至/topsoft/soft/openGauss目录,安装包“openGauss-5.0.1-CentOS-64bit-all.tar.gz”和配置文件“cluster_config.xml”都上传至上一步所创建的目录中。
配置单节点XML文件
安装openGauss前需要创建XML文件。XML文件包含部署openGauss的服务器信息、安装路径、IP地址以及端口号等。用于告知openGauss如何部署。用户需根据不同场景配置对应的XML文件。
关于如何配置XML文件,详细请参见创建XML配置文件。
将cluster_config.xml上传至/topsoft/soft/openGauss目录,安装包“openGauss-5.0.1-CentOS-64bit-all.tar.gz”和配置文件“cluster_config.xml”都上传至上一步所创建的目录中。
为确保成功安装,检查hostname与/etc/hostname是否一致。预安装过程中,会对hostname进行检查。
默认端口5432,若待用自定义端口,更改xml文件中的端口号
官方XML文件模板
cat cluster_config.xml
<?xml version="1.0" encoding="UTF-8"?>
<ROOT>
<!-- openGauss整体信息 -->
<CLUSTER>
<!-- 数据库名称 -->
<PARAM name="clusterName" value="dbCluster" />
<!-- 数据库节点名称(hostname) -->
<PARAM name="nodeNames" value="node1_hostname" />
<!-- 数据库安装目录-->
<PARAM name="gaussdbAppPath" value="/opt/huawei/install/app" />
<!-- 日志目录-->
<PARAM name="gaussdbLogPath" value="/var/log/omm" />
<!-- 临时文件目录-->
<PARAM name="tmpMppdbPath" value="/opt/huawei/tmp" />
<!-- 数据库工具目录-->
<PARAM name="gaussdbToolPath" value="/opt/huawei/install/om" />
<!-- 数据库core文件目录-->
<PARAM name="corePath" value="/opt/huawei/corefile" />
<!-- 节点IP,与数据库节点名称列表一一对应 -->
<PARAM name="backIp1s" value="192.168.0.1"/>
</CLUSTER>
<!-- 每台服务器上的节点部署信息 -->
<DEVICELIST>
<!-- 节点1上的部署信息 -->
<DEVICE sn="node1_hostname">
<!-- 节点1的主机名称 -->
<PARAM name="name" value="node1_hostname"/>
<!-- 节点1所在的AZ及AZ优先级 -->
<PARAM name="azName" value="AZ1"/>
<PARAM name="azPriority" value="1"/>
<!-- 节点1的IP,如果服务器只有一个网卡可用,将backIP1和sshIP1配置成同一个IP -->
<PARAM name="backIp1" value="192.168.0.1"/>
<PARAM name="sshIp1" value="192.168.0.1"/>
<!--dbnode-->
<PARAM name="dataNum" value="1"/>
<PARAM name="dataPortBase" value="15400"/>
<PARAM name="dataNode1" value="/opt/huawei/install/data/dn"/>
<PARAM name="dataNode1_syncNum" value="0"/>
</DEVICE>
</DEVICELIST>
</ROOT>
根据官方模板更改后的xml文件
cat cluster_config.xml
<?xml version="1.0" encoding="UTF-8"?>
<ROOT>
<!-- openGauss整体信息 -->
<CLUSTER>
<!-- 数据库名称 -->
<PARAM name="clusterName" value="dbCluster" />
<!-- 数据库节点名称(hostname) -->
<PARAM name="nodeNames" value="opendb01" />
<!-- 数据库安装目录-->
<PARAM name="gaussdbAppPath" value="/topsoft/huawei/install/app" />
<!-- 日志目录-->
<PARAM name="gaussdbLogPath" value="/topsoft/huawei/log/omm" />
<!-- 临时文件目录-->
<PARAM name="tmpMppdbPath" value="/topsoft/huawei/tmp" />
<!-- 数据库工具目录-->
<PARAM name="gaussdbToolPath" value="/topsoft/huawei/install/om" />
<!-- 数据库core文件目录-->
<PARAM name="corePath" value="/topsoft/huawei/corefile" />
<!-- 节点IP,与数据库节点名称列表一一对应 -->
<PARAM name="backIp1s" value="192.168.40.110"/>
</CLUSTER>
<!-- 每台服务器上的节点部署信息 -->
<DEVICELIST>
<!-- 节点1上的部署信息 -->
<DEVICE sn="opendb01">
<!-- 节点1的主机名称 -->
<PARAM name="name" value="opendb01"/>
<!-- 节点1所在的AZ及AZ优先级 -->
<PARAM name="azName" value="AZ1"/>
<PARAM name="azPriority" value="1"/>
<!-- 节点1的IP,如果服务器只有一个网卡可用,将backIP1和sshIP1配置成同一个IP -->
<PARAM name="backIp1" value="192.168.40.110"/>
<PARAM name="sshIp1" value="192.168.40.110"/>
<!--dbnode-->
<PARAM name="dataNum" value="1"/>
<PARAM name="dataPortBase" value="15400"/>
<PARAM name="dataNode1" value="/topsoft/huawei/install/data/dn"/>
<PARAM name="dataNode1_syncNum" value="0"/>
</DEVICE>
</DEVICELIST>
</ROOT>
可通过以下全局替换
vi /topsoft/soft/openGauss/cluster_config.xml
:%s#node1_hostname#opendb01#g #主机名
:%s#/opt/huawei/install/app#/topsoft/huawei/install/app#g #安装目录
:%s#/opt/huawei/install/app#/topsoft/huawei/install/app#g #安装目录
:%s#/var/log/omm#/topsoft/huawei/log/omm#g #日志目录
:%s#/opt/huawei/tmp#/topsoft/huawei/tmp#g #临时文件目录
:%s#/opt/huawei/install/om#/topsoft/huawei/install/om#g #数据库工具目录
:%s#/opt/huawei/corefile#/topsoft/huawei/corefile#g #数据库core文件目录
:%s#192.168.0.1#192.168.40.110#g #IP地址
:%s#/opt/huawei/install/data/dn#/topsoft/huawei/install/data/dn#g #数据节点目录 /opt/huawei/install/data/dn
解压安装包
对于个人开发者或非企业级环境,下载极简安装包(不安装OM等组件)即可。本文档采用的是企业版安装,因此安装OM等组件
注意:安装包“openGauss-5.0.1-CentOS-64bit-all.tar.gz”和配置文件“cluster_config.xml”需在同一目录中,本文档是/topsoft/soft/openGauss目录。
--进入安装包所在目录
[root@opendb01 ~]# cd /topsoft/soft/openGauss/
[root@localhost openGauss]# ls -l
total 130712
-rw-r--r--. 1 root root 1905 Jan 27 08:31 cluster_config.xml
-rw-r--r--. 1 root root 133842584 Jan 27 08:30 openGauss-5.0.1-CentOS-64bit-all.tar.gz
--解压openGauss-5.0.1-CentOS-64bit-all.tar.gz安装包
tar -xvf openGauss-5.0.1-CentOS-64bit-all.tar.gz
--查看解压后的文件
[root@localhost ~]# cd /topsoft/soft/openGauss/
[root@localhost openGauss]# ls -lS
total 131764
-rw-r--r--. 1 root root 99901554 Dec 15 20:34 openGauss-5.0.1-CentOS-64bit.tar.bz2
-rw-r--r--. 1 root root 22528301 Dec 15 20:34 openGauss-5.0.1-CentOS-64bit-cm.tar.gz
-rw-r--r--. 1 root root 11971903 Dec 15 20:33 openGauss-5.0.1-CentOS-64bit-om.tar.gz #数据库工具目录
-rw-------. 1 root root 499269 Dec 15 20:32 upgrade_sql.tar.gz
-rw-r--r--. 1 root root 105 Dec 15 20:34 openGauss-5.0.1-CentOS-64bit-cm.sha256
-rw-r--r--. 1 root root 65 Dec 15 20:33 openGauss-5.0.1-CentOS-64bit-om.sha256
-rw-r--r--. 1 root root 65 Dec 15 20:34 openGauss-5.0.1-CentOS-64bit.sha256
-rw-------. 1 root root 65 Dec 15 20:32 upgrade_sql.sha256
参数说明:
-S :按文件类型排序
--继续解压openGauss-5.0.1-CentOS-64bit-om.tar.gz 数据库工具包 企业版安装需要解压该包极简版不需要
tar -xvf openGauss-5.0.1-CentOS-64bit-om.tar.gz
--查看解压后的文件 script目录中生成gs_preinstall等各种OM工具脚本
[root@opendb01 openGauss]# ls -lS
total 262484
-rw-r--r--. 1 root root 133842584 Jan 24 06:03 openGauss-5.0.1-CentOS-64bit-all.tar.gz
-rw-r--r--. 1 root root 99901554 Dec 15 20:34 openGauss-5.0.1-CentOS-64bit.tar.bz2
-rw-r--r--. 1 root root 22528301 Dec 15 20:34 openGauss-5.0.1-CentOS-64bit-cm.tar.gz
-rw-r--r--. 1 root root 11971903 Dec 15 20:33 openGauss-5.0.1-CentOS-64bit-om.tar.gz
-rw-------. 1 root root 499269 Dec 15 20:32 upgrade_sql.tar.gz
drwxr-xr-x. 14 root root 4096 Dec 15 20:33 lib
drwxr-xr-x. 10 root root 4096 Dec 15 20:33 script
-rw-r--r--. 1 root root 105 Dec 15 20:34 openGauss-5.0.1-CentOS-64bit-cm.sha256
-rw-r--r--. 1 root root 65 Dec 15 20:33 openGauss-5.0.1-CentOS-64bit-om.sha256
-rw-r--r--. 1 root root 65 Dec 15 20:34 openGauss-5.0.1-CentOS-64bit.sha256
-rw-------. 1 root root 65 Dec 15 20:32 upgrade_sql.sha256
-rw-r--r--. 1 root root 32 Dec 15 20:33 version.cfg
- 在执行前置脚本gs_preinstall时,需要规划好openGauss配置文件路径、安装包存放路径、程序安装目录、实例数据目录,后续普通用户使用过程中不能再更改这些路径。
- 运行前置脚本gs_preinstall准备安装环境时,脚本内部会自动将openGauss配置文件、解压后的安装包同步拷贝到其余服务器的相同目录下。
- 在执行前置脚本或者互信前,请检查/etc/profile文件中是否包含错误输出信息,如果存在错误输出,需手动处理。
使用gs_preinstall初始化安装环境
安装环境的初始化包含上传安装包和XML文件(二者需在同一目录)、解压安装包、使用gs_preinstall准备好安装环境。
分2种场景初始化,自行选择。
准备安装用户及环境
创建完openGauss配置文件后,在执行安装前,为了后续能以最小权限进行安装及openGauss管理操作,保证系统安全性,需要运行安装前置脚本gs_preinstall准备好安装用户及环境。在执行前置脚本gs_preinstall时,需要规划好openGauss配置文件路径、安装包存放路径、程序安装目录、实例数据目录,后续普通用户使用过程中不能再更改这些路径。
安装前置脚本gs_preinstall可以协助用户自动完成如下的安装环境准备工作:
- 自动设置Linux内核参数以达到提高服务器负载能力的目的。这些参数直接影响数据库系统的运行状态,请仅在确认必要时调整。openGauss所设置的Linux内核参数取值请参见配置操作系统参数。
- 脚本内部会自动将openGauss配置文件、安装包拷贝到openGauss主机的相同目录下。
- openGauss安装用户、用户组不存在时,自动创建安装用户以及用户组。
- 读取openGauss配置文件中的目录信息并创建,将目录权限授予安装用户。
- 只能使用root用户执行gs_preinstall命令
- 在执行前置脚本或者互信前,请检查/etc/profile文件中是否包含错误输出信息,如果存在错误输出,需手动处理。
注意:如果是openEuler(openEuler 20.03)的操作系统,执行如下命令打开performance.sh文件,用#注释sysctl -w vm.min_free_kbytes=112640 &> /dev/null,键入“ESC”键进入指令模式,执行**:wq**保存并退出修改。
vi /etc/profile.d/performance.sh
场景1:采用交互模式执行前置
[root@opendb01 /]# cd /topsoft/soft/openGauss/script/
./gs_preinstall -U omm -G dbgrp -X /topsoft/soft/openGauss/cluster_config.xml
这里设置:omm用户密码omm
预安装脚本执行的详细过程如下:
[root@localhost script]# ./gs_preinstall -U omm -G dbgrp -X /topsoft/soft/openGauss/cluster_config.xml
Parsing the configuration file.
Successfully parsed the configuration file.
Installing the tools on the local node.
Successfully installed the tools on the local node.
Setting host ip env
Successfully set host ip env.
Are you sure you want to create the user[omm] (yes/no)?
Please enter password for cluster user.
Password:
Please enter password for cluster user again.
Password:
Generate cluster user password files successfully.
Successfully created [omm] user on all nodes.
Preparing SSH service.
Successfully prepared SSH service.
Checking OS software.
Successfully check os software.
Checking OS version.
Successfully checked OS version.
Creating cluster's path.
Successfully created cluster's path.
Set and check OS parameter.
Setting OS parameters.
Successfully set OS parameters.
Warning: Installation environment contains some warning messages.
Please get more details by "/topsoft/soft/openGauss/script/gs_checkos -i A -h opendb01 --detail".
Set and check OS parameter completed.
Preparing CRON service.
Successfully prepared CRON service.
Setting user environmental variables.
Successfully set user environmental variables.
Setting the dynamic link library.
Successfully set the dynamic link library.
Setting Core file
Successfully set core path.
Setting pssh path
Successfully set pssh path.
Setting Cgroup.
Successfully set Cgroup.
Set ARM Optimization.
No need to set ARM Optimization.
Fixing server package owner.
Setting finish flag.
Successfully set finish flag.
Preinstallation succeeded.
执行安装
使用gs_install安装openGauss。安装脚本gs_install必须以前置脚本中指定的omm执行,否则,脚本执行会报错。
/topsoft/soft/openGauss/cluster_config.xml为openGauss配置文件的路径。在执行过程中,用户需根据提示输入数据库的密码,密码具有一定的复杂度,为保证用户正常使用该数据库,请记住输入的数据库密码。这里设置为Topnet@123
设置的密码要符合复杂度要求:
- 最少包含8个字符,最多包含16个字符。
- 不能和用户名、当前密码(ALTER)、或当前密码反序相同。
- 至少包含大写字母(A-Z)、小写字母(a-z)、数字、非字母数字字符(限定为~!@#$%^&*()-_=+\|[{}];:,<.>/?)四类字符中的三类字符。
注意事项:
- openGauss支持字符集的多种写法:gbk/GBK、UTF-8/UTF8/utf8/utf-8和Latine1/latine1。
- 安装时若不指定字符集,默认字符集为SQL_ASCII,为简化和统一区域loacle默认设置为C,若想指定其他字符集和区域,请在安装时使用参数–gsinit-parameter="–locale=LOCALE"来指定,LOCALE为新数据库设置缺省的区域。
- 默认端口5432
--赋予配置文件777的权限,因为安装脚本gs_install必须以前置脚本中指定的omm执行
chmod 777 /topsoft/soft/openGauss/cluster_config.xml
chmod 777 /topsoft/soft
--切换用户 omm为前置脚本gs_preinstall中-U参数指定的用户
su - omm
--查看配置文件/etc/profile中的语言参数
[omm@opendb01 dn_6001]$ cat /etc/profile | grep LANG
export LANG=en_US.UTF-8
--查看系统支持UTF-8编码的区域
locale -a|grep utf8
--执行安装脚本
gs_install -X /topsoft/soft/openGauss/cluster_config.xml --gsinit-parameter="--locale=en_US.utf8"
安装过程中会生成ssl证书,证书存放路径为{gaussdbAppPath}/share/sslcert/om,其中{gaussdbAppPath}为openGauss配置文件中指定的程序安装目录。
[omm@opendb01 om]$ cd /topsoft/huawei/install/app/share/sslcert/om
[omm@opendb01 om]$ ls -l
total 64
-rw-------. 1 omm dbgrp 4399 Jan 27 08:43 cacert.pem
-rw-------. 1 omm dbgrp 4402 Jan 27 08:43 client.crt
-rw-------. 1 omm dbgrp 1766 Jan 27 08:43 client.key
-rw-------. 1 omm dbgrp 56 Jan 27 08:43 client.key.cipher
-rw-------. 1 omm dbgrp 1218 Jan 27 08:43 client.key.pk8
-rw-------. 1 omm dbgrp 24 Jan 27 08:43 client.key.rand
-rw-------. 1 omm dbgrp 10921 Jan 27 08:43 openssl.cnf
-rw-------. 1 omm dbgrp 4402 Jan 27 08:43 server.crt
-rw-------. 1 omm dbgrp 1766 Jan 27 08:43 server.key
-rw-------. 1 omm dbgrp 56 Jan 27 08:43 server.key.cipher
-rw-------. 1 omm dbgrp 24 Jan 27 08:43 server.key.rand
日志文件路径下会生成两个日志文件:“gs_install-YYYY-MMDD_HHMMSS.log”和“gs_local-YYYY-MM-DD_HHMMSS.log”。
/topsoft/huawei/log/omm/omm/om/gs_install-2024-01-27_084156.log
详细过程如下:
[omm@opendb01 ~]$ gs_install -X /topsoft/soft/openGauss/cluster_config.xml
Parsing the configuration file.
Check preinstall on every node.
Successfully checked preinstall on every node.
Creating the backup directory.
Successfully created the backup directory.
begin deploy..
Installing the cluster.
begin prepare Install Cluster..
Checking the installation environment on all nodes.
begin install Cluster..
Installing applications on all nodes.
Successfully installed APP.
begin init Instance..
encrypt cipher and rand files for database.
Please enter password for database:
Please repeat for database:
begin to create CA cert files
The sslcert will be generated in /topsoft/huawei/install/app/share/sslcert/om
NO cm_server instance, no need to create CA for CM.
Non-dss_ssl_enable, no need to create CA for DSS
Cluster installation is completed.
Configuring.
Deleting instances from all nodes.
Successfully deleted instances from all nodes.
Checking node configuration on all nodes.
Initializing instances on all nodes.
Updating instance configuration on all nodes.
Check consistence of memCheck and coresCheck on database nodes.
Configuring pg_hba on all nodes.
Configuration is completed.
The cluster status is Normal.
Successfully started cluster.
Successfully installed application.
end deploy..
配置参数文件
查看进程,确定数据目录位置
--查看进程,确定数据目录位置
[root@topnet31 ~]# ps -ef | grep gaussdb
omm 8011 1 4 09:35 ? 00:00:12 /topsoft/huawei/install/app/bin/gaussdb -D /topsoft/huawei/install/data/dn
远程访问
--更改pg_hba.conf
[root@topnet31 ~]# cd /topsoft/huawei/install/data/dn
[root@topnet31 dn]# vi pg_hba.conf
增加:
host all all 0.0.0.0/0 md5
密码参数
--更改pg_hba.conf
[root@topnet31 ~]# cd /topsoft/huawei/install/data/dn
[root@topnet31 dn]# vi postgresql.conf
更改前
#password_encryption_type = 2 #Password storage type, 0 is md5 for PG, 1 is sha256 + md5, 2 is sha256 only
更改后
password_encryption_type = 1 #Password storage type, 0 is md5 for PG, 1 is sha256 + md5, 2 is sha256 only
重启数据库服务
--停止
cd /topsoft/huawei/install/om/script
gs_om -t stop
--启动
cd /topsoft/huawei/install/om/script
gs_om -t start
查询openGauss状态
gs_om -t status --detail
--查询某主机上的实例状态,请在命令中增加“-h”项 主机名
gs_om -t status -h plat2
创建业务用户
由于使用客户端工具通过omm用户访问数据库提示FATAL: Forbid remote connection with initial user。故需创建1个业务用户。
--登录数据库
su - omm
gsql -d postgres -p 15400
--创建业务用户
CREATE USER sync WITH password 'Topnet_123';
或
--创建业务用户(超管角色)
CREATE USER sync WITH SYSADMIN password 'Topnet_123';
--创建业务数据库
create database fuwa owner sync;
grant all privileges on database fuwa to sync;
访问数据库
连接数据库的客户端工具包括gsql、应用程序接口(如JDBC)。
- gsql是openGauss自带的客户端工具。使用gsql连接数据库,可以交互式地输入、编辑、执行SQL语句。
- 用户可以使用标准的数据库应用程序接口(如JDBC),开发基于openGauss的应用程序。
--查看进程
[omm@topnet31 ~]$ ps -ef | grep gaussdb
omm 9577 1 4 09:42 ? 00:00:09 /topsoft/huawei/install/app/bin/gaussdb -D /topsoft/huawei/install/data/dn
或
[omm@opendb03 dn]$ gs_ctl query -D /topsoft/huawei/install/data/dn
[2024-02-05 09:46:31.212][10258][][gs_ctl]: gs_ctl query ,datadir is /topsoft/huawei/install/data/dn
HA state:
local_role : Normal
static_connections : 0
db_state : Normal
detail_information : Normal
Senders info:
No information
Receiver info:
No information
本地连接数据库
gsql是openGauss提供的在命令行下运行的数据库连接工具。此工具除了具备操作数据库的基本功能,还提供了若干高级特性,便于用户使用。本节只介绍如何使用gsql连接数据库,关于gsql使用方法的更多信息请参考《工具与命令参考》中“客户端工具 > gsql”章节。
缺省情况下,客户端连接数据库后处于空闲状态时会根据参数session_timeout的默认值自动断开连接。如果要关闭超时设置,设置参数session_timeout为0即可。默认为0表示关闭超时设置
以操作系统用户omm登录数据库主节点。
su - omm
法一:
gsql -d postgres -p 15400
参数说明:
-d 连接的数据库名称,
-p 数据库主节点的端口号
法二:
gsql -d "host=127.0.0.1 port=15400 dbname=postgres user=omm password=Topnet@123"
--登录后如下:
[omm@localhost ~]$ gsql -d postgres -p 15400
gsql ((openGauss 5.0.1 build 33b035fd) compiled at 2023-12-15 20:28:19 commit 0 last mr )
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.
openGauss=# \l+
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges | Size | Tablespace | Description
-----------+-------+----------+------------+------------+-------------------+-------+------------+--------------------------------------------
postgres | omm | UTF8 | en_US.utf8 | en_US.utf8 | | 13 MB | pg_default | default administrative connection database
template0 | omm | UTF8 | en_US.utf8 | en_US.utf8 | =c/omm +| 13 MB | pg_default | default template for new databases
| | | | | omm=CTc/omm | | |
template1 | omm | UTF8 | en_US.utf8 | en_US.utf8 | =c/omm +| 13 MB | pg_default | unmodifiable empty database
| | | | | omm=CTc/omm | | |
(3 rows)
--查看数据库状态
[omm@localhost ~]$ gs_om -t status
-----------------------------------------------------------------------
cluster_name : dbCluster
cluster_state : Normal #“Normal”表示数据库可正常使用
redistributing : No
--创建数据库 不能是en_US.utf8不然报错
openGauss=# create database test with encoding 'utf8' template = template0;
CREATE DATABASE
dbeaver连接数据库
下载驱动
官方下载地址:软件包 | openGauss
创建驱动
1.数据库-->驱动管理器-->新建
类名:org.opengauss.Driver
URL模板:jdbc:opengauss://{host}[:{port}]/[{database}]
2.库中添加驱动文件
连接
问题处理
--问题描述
dbeaver连接opengauss提示Connection reset
--解决办法
不能使用omm初始管理员用户登录,创建业务用户使用业务用户访问
CREATE USER uxsino WITH SYSADMIN password "Uxs!nO10";
查数据库版本
安装目录下查看
cat /topsoft/huawei/install/om/version.cfg
配置启动zookeeper
本文档采用单点架构。
注意事项:
- 生产环境建议使用集群模式部署。
- 集群模式部署推荐使用 ZooKeeper 注册中心。
- ZooKeeper 存在配置信息时,则以 ZooKeeper 中的配置为准。
解压tar包
cd /opt
tar -xvf apache-zookeeper-3.7.2-bin.tar.gz
配置zoo.cfg文件
进入解压后文件夹的conf目录下,复制zoo_sample.cfg,重命名为zoo.cfg文件,并修改配置
如下信息:
--创建数据目录,目录可不创建启动过程中会自动创建
mkdir -p /topsoft/zookeeper
--配置zoo.cfg文件
cd /opt/apache-zookeeper-3.7.2-bin/conf/
cp zoo_sample.cfg zoo.cfg
--编辑zoo.cfg文件
vi zoo.cfg
修改以下参数:
dataDir=/topsoft/zookeeper #快照路径
clientPort=2181
admin.serverPort=8888
备注:dataDir的目录需要自己创建。两个端口号自由配置不冲突即可,但切记不要使已经被别人占用的
端口。
dataLogDir=/topsoft/zookeeper/logs #默认没有dataLogDir,若需要自定义路径增加该参数,若不指定默认日志位置/opt/apache-zookeeper-3.7.2-bin/logs即安装目录/logs
启动zookeeper
启动zookeeper,bin目录下运行zkServer.sh。
cd /opt/apache-zookeeper-3.7.2-bin/bin/
sh ./zkServer.sh start #命令本身具备后台启动
日志位置:/opt/apache-zookeeper-3.7.2-bin/logs
配置文件位置:/opt/apache-zookeeper-3.7.2-bin/conf
查看进程:ps -ef | grep zookeeper
配置启动shardingsphere-proxy
文档:https://shardingsphere.apache.org/document/current/cn/user-manual/common-config/
解压tar包
cd /opt
tar -xvf apache-shardingsphere-5.2.0-shardingsphere-proxy-bin.tar.gz
替换openGauss驱动
--自带的是3.0的opengauss驱动包
cd /opt/apache-shardingsphere-5.2.0-shardingsphere-proxy-bin/lib
ls -l open*
-rw-r--r--. 1 501 games 844919 Apr 25 2022 opengauss-jdbc-3.0.0.jar
--移除更换成5.0的opengauss驱动包
cd /opt/apache-shardingsphere-5.2.0-shardingsphere-proxy-bin/lib
ls -l open*
-rw-r--r--. 1 root root 903436 Feb 5 15:44 opengauss-jdbc-5.0.1.jar
修改server.yaml配置信息
server.yaml 配置中默认集群运行模式,本文档采用单机的运行配置。
cd /opt/apache-shardingsphere-5.2.0-shardingsphere-proxy-bin/conf/
cp server.yaml server.yaml_bak_20240205
vi server.yaml
追加如下内容:
mode:
type: Cluster #不配置则默认单机模式 可选配置:Standalone、Cluster
repository: #持久化仓库配置
type: ZooKeeper # 持久化仓库类型
props: # 持久化仓库所需属性
namespace: governance_ds # 注册中心命名空间
server-lists: 192.168.40.152:2181 ## 注册中心连接地址
retryIntervalMilliseconds: 5000
timeToLiveSeconds: 60
maxRetries: 3
operationTimeoutMilliseconds: 5000
overwrite: false
rules: # 认证信息
- !AUTHORITY
users:
- root@%:root # 初始化用户
- sharding@:sharding
provider:
type: ALL_PRIVILEGES_PERMITTED
补充:
使用持久化仓库需要额外引入对应的 Maven 依赖,推荐使用:
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>shardingsphere-cluster-mode-repository-zookeeper</artifactId>
<version>${shardingsphere.version}</version>
</dependency>
配置opengauss数据库分片信息
配置opengauss数据库分片信息,新增./apache-shardingsphere-5.2.0-shardingsphere-proxybin/conf/config-sharding.yaml文件
cp config-sharding.yaml config-sharding.yaml_bak_20240205
vi config-sharding.yaml
备注:如下配置信息,t_order表按照user_id%2结果进行分库至ds_0或ds_1库;按照order_id%2结果进行分表(每个库下2张分表);若无特殊要求,可采用不含审计参数的配置文件。如果用含审计参数的配置文件,auditStrategy和auditors必须配合使用,不然启动报错Can not find all auditors `[sharding_key_required_auditor]` in database `fuwa`.
场景1:含审计参数
cat config-sharding.yaml
#databaseName: sharding_db
schemaName: shared_fuwa ##逻辑数据源,可自定义
dataSources:
ds_0:
url: jdbc:opengauss://192.168.40.152:15400/fuwa?loggerLevel=OFF
username: sync
password: Topnet_123
connectionTimeoutMilliseconds: 30000
idleTimeoutMilliseconds: 60000
maxLifetimeMilliseconds: 1800000
maxPoolSize: 50
minPoolSize: 1
ds_1:
url: jdbc:opengauss://192.168.40.153:15400/fuwa?loggerLevel=OFF
username: sync
password: Topnet_123
connectionTimeoutMilliseconds: 30000
idleTimeoutMilliseconds: 60000
maxLifetimeMilliseconds: 1800000
maxPoolSize: 50
minPoolSize: 1
ds_2:
url: jdbc:opengauss://192.168.40.154:15400/fuwa?loggerLevel=OFF
username: sync
password: Topnet_123
connectionTimeoutMilliseconds: 30000
idleTimeoutMilliseconds: 60000
maxLifetimeMilliseconds: 1800000
maxPoolSize: 50
minPoolSize: 1
rules:
- !SHARDING
tables: # 数据分片规则配置
t_order:
actualDataNodes: ds_${0..1}.t_order_${0..1}
tableStrategy:
standard:
shardingColumn: order_id
shardingAlgorithmName: t_order_inline
keyGenerateStrategy:
column: order_id
keyGeneratorName: snowflake
auditStrategy:
auditorNames:
- sharding_key_required_auditor
allowHintDisable: true
defaultDatabaseStrategy:
standard:
shardingColumn: user_id
shardingAlgorithmName: database_inline
defaultTableStrategy:
none:
shardingAlgorithms:
database_inline:
type: INLINE
props:
algorithm-expression: ds_${user_id % 2}
t_order_inline:
type: INLINE
props:
algorithm-expression: t_order_${order_id % 2}
keyGenerators:
snowflake:
type: SNOWFLAKE
auditors:
sharding_key_required_auditor:
type: DML_SHARDING_CONDITIONS
场景2:不含审计参数
cat config-sharding.yaml
#databaseName: sharding_db
schemaName: shared_fuwa ##逻辑数据源,可自定义
dataSources:
ds_0:
url: jdbc:opengauss://192.168.40.152:15400/fuwa?loggerLevel=OFF
username: sync
password: Topnet_123
connectionTimeoutMilliseconds: 30000
idleTimeoutMilliseconds: 60000
maxLifetimeMilliseconds: 1800000
maxPoolSize: 50
minPoolSize: 1
ds_1:
url: jdbc:opengauss://192.168.40.153:15400/fuwa?loggerLevel=OFF
username: sync
password: Topnet_123
connectionTimeoutMilliseconds: 30000
idleTimeoutMilliseconds: 60000
maxLifetimeMilliseconds: 1800000
maxPoolSize: 50
minPoolSize: 1
ds_2:
url: jdbc:opengauss://192.168.40.154:15400/fuwa?loggerLevel=OFF
username: sync
password: Topnet_123
connectionTimeoutMilliseconds: 30000
idleTimeoutMilliseconds: 60000
maxLifetimeMilliseconds: 1800000
maxPoolSize: 50
minPoolSize: 1
rules:
- !SHARDING
tables: # 数据分片规则配置
t_order: # 逻辑表名称
actualDataNodes: ds_${0..1}.t_order_${0..1} # 由数据源名 + 表名组成(参考 Inline 语法规则)
tableStrategy: # 分表策略,同分库策略
standard:
shardingColumn: order_id
shardingAlgorithmName: t_order_inline
keyGenerateStrategy: # 分布式序列策略
column: order_id # 自增列名称,缺省表示不使用自增主键生成器
keyGeneratorName: snowflake # 分布式序列算法名称
defaultDatabaseStrategy: # 分库策略,缺省表示使用默认分库策略,以下的分片策略只能选其一
standard:
shardingColumn: user_id
shardingAlgorithmName: database_inline
defaultTableStrategy:
none:
shardingAlgorithms:
database_inline:
type: INLINE
props:
algorithm-expression: ds_${user_id % 2}
t_order_inline:
type: INLINE
props:
algorithm-expression: t_order_${order_id % 2}
keyGenerators:
snowflake:
type: SNOWFLAKE
启动shardingsphere-proxy
启动shardingsphere-proxy,bin目录下运行start.sh,启动端口为13000
执行启动命令:sh bin/start.sh。默认启动端口 3307,可以通过启动脚本命令追加参数的方式替换端口:sh bin/start.sh 3308
cd /opt/apache-shardingsphere-5.2.0-shardingsphere-proxy-bin/bin
sh /opt/apache-shardingsphere-5.2.0-shardingsphere-proxy-bin/bin/start.sh 13000
查看 ShardingSphere-Proxy 是否启动成功,执行查看日志命令:tail -100f logs/stdout.log。如最后一行出现下述信息,即为启动成功:
[INFO ] 2024-02-05 17:57:02.853 [main] o.a.s.p.frontend.ShardingSphereProxy - ShardingSphere-Proxy Cluster mode started successfully
配置文件位置:/opt/apache-shardingsphere-5.2.0-shardingsphere-proxy-bin/conf
日志:/opt/apache-shardingsphere-5.2.0-shardingsphere-proxy-bin/logs/stdout.log
分片表创建及数据插入
gsql客户端连接shardingsphere-proxy,进行分片表创建及数据插入
--连接shardingsphere-proxy指令
su - omm
gsql -d sharding_db -p 13000 -h 192.168.40.152 -U sharding -W sharding -r #连接shardingsphere-proxy指令
create table t_order (
user_id int,
order_name varchar(30),
order_value varchar(50),
order_id int default 0
);--建表语句
insert into t_order values(1,'test1','values1',1),(1,'test1','values12',2),
(2,'test2','values2',1),(2,'test2','values22',2);
问题处理
启动shardingsphere-proxy报错Can not find all auditors
--问题描述
启动shardingsphere-proxy报错
[root@opendb01 bin]# tail -300f /opt/apache-shardingsphere-5.2.0-shardingsphere-proxy-bin/logs/stdout.log
......
[INFO ] 2024-02-05 15:47:44.920 [main] o.o.core.v3.ConnectionFactoryImpl - Connect complete. ID: 2e065e33-dbcb-4499-ac2d-dea6692b8202
Exception in thread "main" java.lang.IllegalStateException: Can not find all auditors `[sharding_key_required_auditor]` in database `fuwa`.
--分析过程
查看分片配置文件内容
#databaseName: sharding_db
schemaName: shared_fuwa ##逻辑数据源,可自定义
dataSources:
ds_0:
url: jdbc:opengauss://192.168.40.152:15400/fuwa?loggerLevel=OFF
username: sync
password: Topnet_123
connectionTimeoutMilliseconds: 30000
idleTimeoutMilliseconds: 60000
maxLifetimeMilliseconds: 1800000
maxPoolSize: 50
minPoolSize: 1
ds_1:
url: jdbc:opengauss://192.168.40.153:15400/fuwa?loggerLevel=OFF
username: sync
password: Topnet_123
connectionTimeoutMilliseconds: 30000
idleTimeoutMilliseconds: 60000
maxLifetimeMilliseconds: 1800000
maxPoolSize: 50
minPoolSize: 1
ds_2:
url: jdbc:opengauss://192.168.40.154:15400/fuwa?loggerLevel=OFF
username: sync
password: Topnet_123
connectionTimeoutMilliseconds: 30000
idleTimeoutMilliseconds: 60000
maxLifetimeMilliseconds: 1800000
maxPoolSize: 50
minPoolSize: 1
rules:
- !SHARDING
tables:
t_order:
actualDataNodes: ds_${0..1}.t_order_${0..1}
tableStrategy:
standard:
shardingColumn: order_id
shardingAlgorithmName: t_order_inline
keyGenerateStrategy:
column: order_id
keyGeneratorName: snowflake
defaultDatabaseStrategy:
standard:
shardingColumn: user_id
shardingAlgorithmName: database_inline
defaultTableStrategy:
none:
shardingAlgorithms:
database_inline:
type: INLINE
props:
algorithm-expression: ds_${user_id % 2}
t_order_inline:
type: INLINE
props:
algorithm-expression: t_order_${order_id % 2}
keyGenerators:
snowflake:
type: SNOWFLAKE
--问题原因
shardingsphere-proxy的配置文件config-sharding.yaml中审计参数配置不正确,去除审计参数后未清除
zk信息
--解决办法
1.停止zookeeper
ps -ef | grep zookeeper
kill -9 34610
2.清除所有zookeeper数据,数据目录在zoo.cfg中
查看zoo.cfg中参数
[root@opendb01 conf]# cat zoo.cfg | grep data
dataDir=/topsoft/zookeeper
dataLogDir=/topsoft/zookeeper/logs
# The number of snapshots to retain in dataDir
查看集群下是否有myid文件,如果有需要保留
删除 目录会自动创建
rm -rf /topsoft/zookeeper
rm -rf /topsoft/zookeeper/logs
3.启动zookeeper
cd /opt/apache-zookeeper-3.7.2-bin/bin/
sh ./zkServer.sh start #命令本身具备后台启动
日志位置:/opt/apache-zookeeper-3.7.2-bin/logs
配置文件位置:/opt/apache-zookeeper-3.7.2-bin/conf
查看进程:ps -ef | grep zookeeper
Not allow DML operation without sharding conditions
--问题描述
shared_fuwa=> select * from t_order;
ERROR: SQL check failed, error message: Not allow DML operation without sharding conditions
--问题原因
使用ShardingSphere做数据库分片,当使用查询条件不包含分片字段时,就会报错:Not allow DML operation without sharding conditions。
--解决办法
查询时带分片字段条件
shared_fuwa=> select * from t_order where user_id=1;
user_id | order_name | order_value | order_id
---------+------------+-------------+----------
1 | test1 | values12 | 2
1 | test1 | values1 | 1
或
如果要查询时不带分片字段条件
1.server.yaml设置proxy-hint-enabled为true
props:
#是否允许在 ShardingSphere-Proxy 中使用 Hint。使用 Hint 会将 Proxy 的线程处理模型由 IO 多路复用变更为每个请求一个独立的线程,会降低 Proxy 的吞吐量。
proxy-hint-enabled: true
2.config-sharding.yaml设置为allow-range-query-with-inline-sharding: true
shardingAlgorithms:
database_inline:
type: INLINE
props:
algorithm-expression: ds_${user_id % 2}
allow-range-query-with-inline-sharding: true
补充:
审计算法配置信息: