国产数据库HaloDB 从小白到专家
一、HaloDB介绍
1.1、产品介绍
羲和数据库(简称 Halo )是杭州易景数通科技自主研发、精心打造的新一代高性能安全自主可控全场景通用型统一数据库。
羲和数据库已成功入选工信部信创产品图谱。Halo14 数据库支持多种操作系统和硬件平台,已经和麒麟、统信、中科方德、东方通、宝兰德、鲲鹏、飞腾、兆芯、海光等主流厂商几十个产品完成了产品互认证,同时我们也是国家高新技术企业、工信部信创工委会的会员单位、工信部电子技术标准化研究院数据库标准工作组成员单位、中国高科技产业化研究会会员单位。
针对不同类型的客户需求,Halo14 数据库提供标准版、企业版、专业版、开发版等。
1.2、产品特性
先进的多平台兼容能力
独有的多模式兼容技术(MMC),针对在 Oracle、MySQL、 PostgreSQL 等数据库上构建的应用系统,能大幅减少应用代码的修改量甚至不修改应用代码即可完成迁移,并且无任何性能损耗;现有系统快速完成迁移;快速、低成本大规模替换;开发人员保留原有开发习惯,快速适应。
先进的内核架构
业内率先提出的插件式内核架构,高度可扩展。同时提供优异的容灾能力,独有的分组复制能力,不影响性能的同时实现异地容灾,并且达到 RPO=0。
全场景覆盖
新一代高性能安全自主可控全场景通用型统一数据库。通过配置的方式,适配不同的应用场景,打造全场景覆盖的能力,满足企业大部分数据存储处理需求,从而消除数据孤岛,降低系统复杂度,保护企业既有投资,降低企业成本。同时支持 x86、arm 等异构平台之间的混合部署
二、环境初始化
2.1、主机重命名
vi /etc/hostname
或 hostnamectl set-hostname Node1
2.2、关闭SELINUX
sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config
2.3、关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
或设置开放端口:
查看开放的端口:
firewall-cmd --list-ports
开启防火墙端口:
firewall-cmd --zone=public --add-port=5432/tcp --permanent
命令含义:
–zone #作用域
–add-port=9200/tcp #添加端口,格式为:端口/通讯协议
–permanent #永久生效,没有此参数重启后失效
重新加载一遍才会生效:
firewall-cmd --reload
2.4、安装依赖包
yum install -y iproute bind iptables which sudo sysstat make cmake gcc gcc-c++ uuid uuid-devel bison flex perl perl-devel perl-ExtUtils-Embed readline readline-devel libxml2 libxml2-devel iotop tcpdump strace gdb systemtap net-tools xdpyinfo smartmontools ksh bc libaio libaio-devel libX11 libXau libXi libXtst libicu libicu-devel libXrender libXrender-devel libxcb libgcc libstdc++ libstdc++-devel libcurl libcurl-devel zlib-devel tcl glibc glibc-devel ftp openssl openssl-devel binutils nfs-utils python-devel
zstd zstd-devel lz4 lz4-devel autoconf
2.5、配置内核参数
默认情况下,共享内存段通常是足够的。大多数情况下只需要调整系统信号就可以了。 /etc/sysctl.conf 典型的设置如下:
cat >> /etc/sysctl.conf <<EOF
kernel.sem = 4096 4194304 32768 1024
EOF
执行生效
sysctl -p
2.6、修改资源限制
在/etc/security/limits.conf 文件添加如下参数: vi /etc/security/limits.conf
cat >> /etc/security/limits.conf<<EOF
halo soft nproc unlimited
halo hard nproc unlimited
halo soft nofile 1024000
halo hard nofile 1024000
halo soft stack unlimited
halo hard stack unlimited
halo soft memlock unlimited
halo hard memlock unlimited
halo soft core unlimited
halo hard core unlimited
EOF
2.7、创建用户
groupadd halo -g 3000
useradd halo -g 3000 -u 3000
echo "halo"|passwd --stdin halo
2.8、配置sudo
sed -i.bak '100ahalo ALL=(ALL) NOPASSWD:ALL' /etc/sudoers
2.9、目录规划
| 目录编号 | 目录名称 | 备注 |
|---|---|---|
| 1 | /halo | haloDB根目录 |
| 2 | /install | 安装包存放目录 |
| 3 | /halo/data | haloDB数据目录 |
| 4 | /var/run/halo | 进程目录 |
2.9.1、安装目录
mkdir /install /halo
chmod -R 777 /install /halo
sudo chown -R halo:halo /postgres /install
2.9.2、数据安装目录
mkdir -p /halo/data
chown -R halo:halo /halo/data
chmod -R 0700 /halo/data
说明:数据目录是 Halo14 数据库中存放数据文件的目录,我们建议的数据目录为/data/halo/,
也可以根据需要自定义设置。您可以根据业务系统数据量来单独设置数据目录路径,例如
将数据目录初始化在本机硬盘或者挂载在盘阵上。需要注意的是 Halo 数据库数据目录的
拥有者必须为 halo 用户,且目录权限应该为 0700 或者 0750。
2.9.3、进程目录
说明:进程目录默认路径/var/run/halo,如不存在需要手工创建。
mkdir /var/run/halo
chown halo:halo /var/run/halo
- 注意:在/var/run 目录下的用户内容在操作系统重启后会被系统自动清理,为防止因为系统重启,导致的路径丢失错误,可以在/etc/rc.local 中配置系统重启后自动重建路径。
在/etc/rc.local 和/etc/rc.d/rc.local 文件添加自动重建
vi /etc/rc.d/rc.local
/usr/bin/mkdir /var/run/halo /usr/bin/chown halo:halo /var/run/halo
chmod +x /etc/rc.d/rc.local
三、HaloDB部署
3.1、解压安装包
tar xzvf halo_14.el7.x86_64.tar.gz -C /halo/
3.2、切换目录,安装HaloDB
[halo@Node1 install]$ cd /halo/
[halo@Node1 halo]$ ls
product
[halo@Node1 halo]$ cd product/
[halo@Node1 product]$ ls
dbms instantclient_12_2 shield
[halo@Node1 product]$
- 说明:解压安装包后得到 product 目录,product 目录有三个子目录 dbms,instantclient_xx_x,shield
3.3、上传授权文件
cp /install/license.lic /halo/product/dbms/14
- 说明:移动或拷贝 license 到 halo14 应用程序目录/halo/product/dbms/14 。license.lic 文件是 Halo14 数据库提供的软件许可文件,根据客户服务器硬件信息
(MAC 地址、IP 地址、CPU 序列号、主板序列号)生成授权证书,同时可以给授权证书 设置生效时间、失效时间、发布类型、最大并发连接数、mac 地址、ip 等信息进行设置。 如果在 license 文件中信息与安装环境中相关信息不匹配,数据库将无法启动。
3.4、配置环境变量
- 说明: 用户环境变量只对当前用户生效,当用户登录时执行,每个用户都可以使用该文件来配置专属于自己的环境变量。
vi /home/halo/.bash_profile
#Halo 数据库应用程序的安装目录
export HALO_HOME=/halo/product/dbms/14
#指定可执行程序在运行时查找共享库的路径
export LD_LIBRARY_PATH=$HALO_HOME/lib
# 进程目录的路径
export PGHOST=/var/run/halo
#数据目录路径
export PGDATA=/halo/data
export PATH=$HALO_HOME/bin:$PATH
export PATH
source /home/halo/.bash_profile
3.5、初始化数据库
- 说明:初始化的过程会创建数据库集群包括数据目录及其子目录和子文件、生成系统表以及创建 template1 和 halo0root 数据库。当创建新数据库时,将会复制 template1 数据库中的 所有内容,halo0root 数据库是供用户、实例程序和第三方应用程序使用的默认数据库。 初始化必须以 halo 用户(运行数据库服务器进程)身份运行它,不能以 root 用户运行初 始化操作。 --halo 用户下操作 :pg_ctl init -D /data/halo,或者–halo 用户下操作 :initdb -D /data/halo
[halo@Node1 ~]$ pg_ctl init -D /halo/data
The files belonging to this database system will be owned by user "halo".
This user must also own the server process.
The database cluster will be initialized with locale "en_US.UTF-8".
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".
Data page checksums are disabled.
fixing permissions on existing directory /halo/data ... ok
creating subdirectories ... ok
selecting dynamic shared memory implementation ... posix
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting default time zone ... Asia/Shanghai
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... ok
initdb: warning: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the option -A, or
--auth-local and --auth-host, the next time you run initdb.
Success. You can now start the database server using:
/halo/product/dbms/14/bin/pg_ctl -D /halo/data -l logfile start
[halo@Node1 ~]$
3.6、启动数据库
- 说明:在 halo 用户下进行启动数据库操作
–halo 用户下操作 :pg_ctl start
验证安装版本:pg_ctl -V
psql -c “select version()”
[halo@Node1 ~]$ pg_ctl -D /halo/data -l logfile start
waiting for server to start.... done
server started
[halo@Node1 ~]$
[halo@Node1 ~]$ psql
psql (1.0.14.12 (240719))
Type "help" for help.
halo0root=# select version();
version
-----------------------------------------------------------------------------------
------------------------------------
羲和(Halo) 1.0.14.12 (240719) on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5
20150623 (Red Hat 4.8.5-44), 64-bit
(1 row)
halo0root=#
四、HaloDB产品新特性
4.1、开启 Oracle 模式
1、修改配置文件
vi $PGDATA/postgresql.conf
#开启二次解析
#standard_parserengine_auxiliary = 'on' --> standard_parserengine_auxiliary = 'on'
#修改数据库模式为 oracle
#database_compat_mode = 'postgresql' --> database_compat_mode = 'oracle'
#实现和 Oracle 相同的 date 类型
#oracle.use_datetime_as_date = false --> oracle.use_datetime_as_date = true
#是否可以用“=”操作符来判断一个值是否为 NULL。
#transform_null_equals = off --> transform_null_equals = 'off'
2、创建数据库并创建扩展
--halo 用户下操作
pg_ctl restart
psql -c " create database oracle_test;"
psql -d oracle_test -c
"create extension aux_oracle cascade ;"
注意:采用 oracle 模式情况下,数据库都要创建扩展才能使用 oracle 语法
4.2、开启 MySQL 模式
1、修改配置文件
vi $PGDATA/postgresql.conf
#数据库模式改为 mysql
#database_compat_mode = 'postgresql' --> database_compat_mode = 'mysql'
#开启第二监听
#second_listener_on = false --> second_listener_on = 1
#修改第二端口
#second_port = 3307 --> second_port = 3306
# 根据版本修改日志体现版本
#mysql.halo_mysql_version = '5.7.32-log' --> mysql.halo_mysql_version =
'8.0.21-log'
# 字符序不区分大小写
#mysql.ci_collation = true --> mysql.ci_collation = true
2、重启数据库并创建扩展
--halo 用户下操作
pg_ctl restart
psql -c "create extension aux_mysql; "
3、设置 mysql 应用的用户
--halo 用户下操作
psql
halo0root=# set password_encryption='mysql_native_password';
13Halo14
SET
halo0root=# CREATE USER mysqltest SUPERUSER PASSWORD '123456';
CREATE ROLE
注意:采用 mysql 模式情况下,mysql 的数据库即 schema,只需要在 halo0root 库下创建
schema 就可以。
五、问题
5.1、无法启动数据库,检查错误如下
[halo@Node1 ~]$ cat /halo/data/diag/haloserver-2024-09-23_221802.log
2024-09-23 22:18:02.462 CST [18924] LOG: starting 羲和(Halo) 1.0.14.12 (240719) on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44), 64-bit
2024-09-23 22:18:02.462 CST [18924] LOG: listening on IPv6 address "::1", port 1921
2024-09-23 22:18:02.462 CST [18924] LOG: listening on IPv4 address "127.0.0.1", port 1921
2024-09-23 22:18:02.463 CST [18924] FATAL: could not create lock file "/var/run/halo/.s.PGSQL.1921.lock": No such file or directory
2024-09-23 22:18:02.464 CST [18924] LOG: database system is shut down
- 解决方案:创建进程目录
说明:进程目录默认路径/var/run/halo,如不存在需要手工创建。
mkdir /var/run/halo
chown halo:halo /var/run/halo- 注意:在/var/run 目录下的用户内容在操作系统重启后会被系统自动清理,为防止因为系统重启,导致的路径丢失错误,可以在/etc/rc.local 中配置系统重启后自动重建路径。
在/etc/rc.local 和/etc/rc.d/rc.local 文件添加自动重建
vi /etc/rc.d/rc.local
/usr/bin/mkdir /var/run/halo /usr/bin/chown halo:halo /var/run/halo
chmod +x /etc/rc.d/rc.local
六、总结
Halo 由以下几个核心模块组成:
- 安全模块:提供用户认证、授权、用户管理等功能。
- 插件模块:提供插件管理、插件加载、插件通信、扩展点等功能。
- 主题模块:提供主题管理、模板渲染、主题配置等功能。
- 内置内容管理模块:提供文章、分类、标签、评论、附件、页面、菜单、设置等功能。




