从最早的阿里去O到现在,国产数据库可谓百花齐放、如火如荼的发展,华为Gauss数据库也紧跟时代步伐,于2019年9月19日宣布开源openGauss数据库,到2020年6月30日正式开源。
今天有幸参加墨天轮组织的openGauss训练营学习,收获颇多。作为一名曾经Oracle和SQLserver的老司机,迫不及待尝试一下这款高性能、高安全、高可靠的企业级开源关系型数据库。
感谢今天几位openGauss数据库专家老师分别介绍的openGauss体系架构、主备HA集群部署、WDR报告和性能调优、AI特性及内存优化表,让我这个小白对openGauss数据库有了初步的认识。
在自己的虚机上快速安装好数据库是深入学习的第一步,“纸上得来终觉浅、绝知此事要躬行”,马上动起手来,一起尝鲜了。
感谢墨天轮小助手发的参考文档:
基于CentOS 7.6操作系统安装脚本链接地址:
https://www.modb.pro/db/106407
照着安装基本没问题(当然首先您得有linux系统基础),虽然有其它数据库经验,但安装还是遇到了一点坑。
下图是课上老师介绍的安装openGauss数据库的操作系统要求参考:
手头电脑其实存放了有Centos7.7的版本的操作系统介质,和要求的7.6版本更新一个补丁版本,打算用这个版本测试一番,一般小版本差别应该是能支持的。
虚机系统的安装不在详述:
准备好虚机系统,为了快一点,配置如下:4cpu、8G内存,20G硬盘(2cpu和4G内存也没问题)。
采用最小化安装,设置好时区。
分区划分参考如下,10分钟左右完成了主机名和IP等设置。
最小化安装遇到几个小坑,提前和大家分享一下,避免走弯路,当然如果你想踩踩坑也是可以的,可加深安装的印象。
安装过程注意点可提前了解下,解决了的话,10分钟内基本就可完成openGasuss数据库单机版的安装了:
-
centos7.7在安装过程中提示不支持
解决办法:修改/etc/redhat-release的7.7为7.6即可(今天老师在问题中做了回复,确认可行),依此参考centos7.9应该也是可以安装的(未测试),只需要修改该文件即可。
另一方法:可修改/soft/openGauss/script/gspylib/os/gsplatform.py文件中SUPPORT_RHEL7X_VERSION_LIST位置,增加7.7-7.9版本的支持,[“7.0”, “7.1”, “7.2”, “7.3”, “7.4”, “7.5”, “7.6”, “7.7”, “7.8”, “7.9”, “10”]。
-
虚机配置好dns,确保可连华为网站下载yum源和安装包
可ping通:ping opengauss.obs.cn-south-1.myhuaweicloud.com
-
系统提前安装wget这个包:yum install wget -y,避免一键脚本安装到13步的时候失败(加在脚本里即可解决).
-
运行一键脚本前提前做快照
如上图所示,这样即使遇到问题了,也可快速回退处理,节省不少时间。
对比参考文档中第8步的脚本wget顺序调整了一下,对于最小化安装系统来说,也算是修复脚本小bug.
把下面脚本编辑到i.sh文件中,注意修改第1步中的MY_HOSTNAME主机名和MY_HOSTIP的IP地址即可。
#!/bin/bash
## Author: 贾军锋
## Date: 2021-04-15
## 2021-09-15 modified by jyc
## OS: CentOS7.6 [最小硬件配置:2c/4G]
## Database:openGauss 2.0.1
## Description:一键式实现操作系统环境配置、openGauss软件下载、openGauss软件安装等步骤,帮助大家提升安装openGauss数据库效率
## Tips: 请确保操作系统可以连接外网
## 0.关闭virbr0网卡 [本地虚拟机标准化安装openEuler系统会默认存在virbr0网卡,删除该网卡以避免干扰数据库的安装]
## virsh net-destroy default
## virsh net-list
## echo "Net device virbr0 is disabled."
## 1.定义主机信息[请根据实际情况修改]
export MY_HOSTNAME=omm02 ## 主机名
export MY_HOSTIP=192.168.52.143 ## IP地址
export MY_SOFTWARE_DIRECTORY=/soft/openGauss ## 软件包所在目录
export MY_XML=/soft/openGauss/clusterconfig.xml ## 集群配置文件XML
export openGauss_Download_url=https://opengauss.obs.cn-south-1.myhuaweicloud.com/2.0.1/x86/openGauss-2.0.1-CentOS-64bit-all.tar.gz ## openGauss软件包下载地址
## 1. 设置主机名并配置hosts文件
hostnamectl set-hostname $MY_HOSTNAME
sed -i '/$MY_HOSTIP/d' /etc/hosts
echo "$MY_HOSTIP $MY_HOSTNAME #Gauss OM IP Hosts Mapping" >> /etc/hosts
cat /etc/hosts
echo "1.Configure /etc/hosts completed."
echo -e "\n"
## 2. 关闭防火墙
systemctl disable firewalld.service
systemctl stop firewalld.service
echo "Firewalld " `systemctl status firewalld|grep Active`
echo "2.Disable firewalld service completed."
echo -e "\n"
## 3. 关闭SELinux
sed -i '/^SELINUX=/d' /etc/selinux/config
echo "SELINUX=disabled" >> /etc/selinux/config
cat /etc/selinux/config|grep "SELINUX=disabled"
echo "3.Disable SELINUX completed."
echo -e "\n"
## 4. 设置操作系统字符集编码
echo "LANG=en_US.UTF-8" >> /etc/profile
source /etc/profile
echo $LANG
echo "4.Configure encoding completed."
echo -e "\n"
## 5. 设置操作系统时区
rm -fr /etc/localtime
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
date -R
hwclock
echo "5.Configure Timezone completed."
echo -e "\n"
## 6. 关闭SWAP分区 [对于2G内存的设备,建议待安装完毕后再打开SWAP以间接 “扩容内存容量”]
sed -i '/swap/s/^/#/' /etc/fstab
swapoff -a
free -m
echo "6.Close swap partition completed."
echo -e "\n"
## 7. 配置SSH服务,关闭Banner,允许root远程登录
sed -i '/Banner/s/^/#/' /etc/ssh/sshd_config
sed -i '/PermitRootLogin/s/^/#/' /etc/ssh/sshd_config
echo -e "\n" >> /etc/ssh/sshd_config
echo "Banner none " >> /etc/ssh/sshd_config
echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
cat /etc/ssh/sshd_config |grep -v ^#|grep -E 'PermitRoot|Banner'
echo "7.Configure SSH Service completed."
echo -e "\n"
## 8. 配置YUM源、安装依赖包、修改默认Python3版本
yum install -y wget
mkdir /etc/yum.repos.d/bak
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak/
wget -O /etc/yum.repos.d/CentOS-Base.repo https://repo.huaweicloud.com/repository/conf/CentOS-7-reg.repo
yum clean all
yum install -y bzip2 python3
yum install -y libaio-devel flex bison ncurses-devel glibc-devel patch redhat-lsb-core readline-devel net-tools tar
mv /usr/bin/python /usr/bin/python2_bak
ln -s /usr/bin/python3 /usr/bin/python
python -V
echo "8.Configure Install Packages and change default Python version completed."
echo -e "\n"
## 9. 配置 sysctl.conf 和 performance.sh
cat >> /etc/sysctl.conf << EOF
net.ipv4.tcp_retries1 = 5
net.ipv4.tcp_syn_retries = 5
net.sctp.path_max_retrans = 10
net.sctp.max_init_retransmits = 10
EOF
sysctl -p
echo "9.Configure sysctl.conf and performance.sh completed."
echo -e "\n"
## 10. 配置资源限制
echo "* soft stack 3072" >> /etc/security/limits.conf
echo "* hard stack 3072" >> /etc/security/limits.conf
echo "* soft nofile 1000000" >> /etc/security/limits.conf
echo "* hard nofile 1000000" >> /etc/security/limits.conf
echo "* soft nproc unlimited" >> /etc/security/limits.d/90-nproc.conf
tail -n 4 /etc/security/limits.conf
tail -n 1 /etc/security/limits.d/90-nproc.conf
echo "10.Configure resource limits completed."
echo -e "\n"
## 11. 关闭透明大页[Only for CentOS]
cat >>/etc/rc.d/rc.local<<EOF
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
chmod +x /etc/rc.d/rc.local
/usr/bin/sh /etc/rc.d/rc.local
cat /sys/kernel/mm/transparent_hugepage/enabled
cat /sys/kernel/mm/transparent_hugepage/defrag
echo "11.Close transparent_hugepage completed."
echo -e "\n"
## 12. 禁用RemoveIPC[Only for openEuler]
## sed -i '/^RemoveIPC/d' /etc/systemd/logind.conf
## sed -i '/^RemoveIPC/d' /usr/lib/systemd/system/systemd-logind.service
## echo "RemoveIPC=no" >> /etc/systemd/logind.conf
## echo "RemoveIPC=no" >> /usr/lib/systemd/system/systemd-logind.service
## systemctl daemon-reload
## systemctl restart systemd-logind
## loginctl show-session | grep RemoveIPC
## systemctl show systemd-logind | grep RemoveIPC
## echo "12.Disable RemoveIPC completed."
## echo -e "\n"
## 13. 下载openGauss软件包
mkdir -p $MY_SOFTWARE_DIRECTORY
cd $MY_SOFTWARE_DIRECTORY
wget $openGauss_Download_url
echo "13.openGauss software download completed."
echo -e "\n"
## 14. 配置XML文件
rm -fr $MY_XML
cat >> $MY_XML <<EOF
<?xml version="1.0" encoding="UTF-8"?>
<ROOT>
<!-- openGauss整体信息 -->
<CLUSTER>
<PARAM name="clusterName" value="dbCluster" />
<PARAM name="nodeNames" value="$MY_HOSTNAME" />
<PARAM name="backIp1s" value="$MY_HOSTIP"/>
<PARAM name="gaussdbAppPath" value="/gaussdb/app" />
<PARAM name="gaussdbLogPath" value="/gaussdb/log" />
<PARAM name="gaussdbToolPath" value="/gaussdb/om" />
<PARAM name="corePath" value="/gaussdb/corefile"/>
</CLUSTER>
<!-- 每台服务器上的节点部署信息 -->
<DEVICELIST>
<!-- node1上的节点部署信息 -->
<DEVICE sn="$MY_HOSTNAME">
<PARAM name="name" value="$MY_HOSTNAME"/>
<PARAM name="azName" value="AZ1"/>
<PARAM name="azPriority" value="1"/>
<!-- 如果服务器只有一个网卡可用,将backIP1和sshIP1配置成同一个IP -->
<PARAM name="backIp1" value="$MY_HOSTIP"/>
<PARAM name="sshIp1" value="$MY_HOSTIP"/>
<!--dbnode-->
<PARAM name="dataNum" value="1"/>
<PARAM name="dataPortBase" value="26000"/>
<PARAM name="dataNode1" value="/gaussdb/data/db1"/>
</DEVICE>
</DEVICELIST>
</ROOT>
EOF
cat $MY_XML
echo "14.Configure XML file completed."
echo -e "\n"
## 15. 解压安装包并修改目录权限
echo "Begin to Uncompress openGauss Package and Modify directory permissions:"
cd $MY_SOFTWARE_DIRECTORY
tar -zxvf *all.tar.gz
tar -zxvf *om.tar.gz
ls -l
chmod -R 777 $MY_SOFTWARE_DIRECTORY/../
echo "15.Uncompress openGauss Package completed."
echo -e "\n"
## 16. 执行 gs_preinstall
echo "Begin to execute openGauss preinstall:"
python $MY_SOFTWARE_DIRECTORY/script/gs_preinstall -U omm -G dbgrp -X $MY_XML
echo "16.openGauss preinstall completed."
echo -e "\n"
## 17. 检查预安装环境
echo "Begin to Check OS environment:"
$MY_SOFTWARE_DIRECTORY/script/gs_checkos -i A -h $MY_HOSTNAME --detail
## 18. 执行 gs_install
echo "Begin to execute openGauss install:"
touch /home/omm/install_db
cat >> /home/omm/install_db <<EOF
source ~/.bashrc
gs_install -X $MY_XML --gsinit-parameter="--encoding=UTF8" --dn-guc="max_process_memory=3GB" --dn-guc="shared_buffers=128MB" --dn-guc="cstore_buffers=16MB"
EOF
chown -R omm:dbgrp /home/omm/install_db
su - omm -c "sh /home/omm/install_db"
echo "17.openGauss install completed."
echo -e "\n"
## 安装完毕!
echo "openGauss Install completed.congratulations"
echo "Congratulations!!!"
root用户执行上述脚本安装:
sh i.sh
简单测试:
[root@omm02 ~]# netstat -tunlp|grep LISTEN|grep gauss
tcp 0 0 192.168.52.143:26000 0.0.0.0:* LISTEN 7215/gaussdb
tcp 0 0 192.168.52.143:26001 0.0.0.0:* LISTEN 7215/gaussdb
[root@omm02 ~]# su - omm
Last login: Sat Sep 11 18:43:42 CST 2021 on pts/1
[omm@omm02 ~]$ gsql -p 26000 -d postgres
gsql ((openGauss 2.0.1 build d97c0e8a) compiled at 2021-06-02 19:37:17 commit 0 last mr )
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.
postgres=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+-------+----------+---------+-------+-------------------
postgres | omm | UTF8 | C | C |
template0 | omm | UTF8 | C | C | =c/omm +
| | | | | omm=CTc/omm
template1 | omm | UTF8 | C | C | =c/omm +
| | | | | omm=CTc/omm
(3 rows)
postgres=# \du
List of roles
Role name | Attributes | Member of
-----------+------------------------------------------------------------------------------------------------------------------+-----------
omm | Sysadmin, Create role, Create DB, Replication, Administer audit, Monitoradmin, Operatoradmin, Policyadmin, UseFT | {}
postgres=# \dn
List of schemas
Name | Owner
-------------+-------
cstore | omm
dbe_perf | omm
pkg_service | omm
public | omm
snapshot | omm
(5 rows)
postgres=# \dx
List of installed extensions
Name | Version | Schema | Description
-----------------+---------+------------+--------------------------------------------------
dist_fdw | 1.0 | pg_catalog | foreign-data wrapper for distfs access
file_fdw | 1.0 | pg_catalog | foreign-data wrapper for flat file access
hdfs_fdw | 1.0 | pg_catalog | foreign-data wrapper for flat file access
hstore | 1.1 | pg_catalog | data type for storing sets of (key, value) pairs
log_fdw | 1.0 | pg_catalog | Foreign Data Wrapper for accessing logging data
mot_fdw | 1.0 | pg_catalog | foreign-data wrapper for MOT access
plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
security_plugin | 1.0 | pg_catalog | provides security functionality
(8 rows)
postgres=# create database jyc;
CREATE DATABASE
postgres=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+-------+----------+---------+-------+-------------------
jyc | omm | UTF8 | C | C |
postgres | omm | UTF8 | C | C |
template0 | omm | UTF8 | C | C | =c/omm +
| | | | | omm=CTc/omm
template1 | omm | UTF8 | C | C | =c/omm +
| | | | | omm=CTc/omm
(4 rows)
postgres=# \c jyc
Non-SSL connection (SSL connection is recommended when requiring high-security)
You are now connected to database "jyc" as user "omm".
jyc=# create table test(id int);
CREATE TABLE
jyc=# insert into test values(1);
INSERT 0 1
jyc=# select * from test;
id
----
1
(1 row)
jyc=# \q
[omm@omm02 ~]$
有兴趣的小伙伴也可试着安装一下看看吧?
等有空了,继续搭建:openGauss 2.0.0 安装部署(1主+1备+1级联备)
https://www.modb.pro/db/49097
其它基础参考:
openGaussDB 初体验(上)
https://cloud.tencent.com/developer/article/1675265?from=article.detail.1675262
openGaussDB 初体验(下)
https://cloud.tencent.com/developer/article/1675262?from=article.detail.1675265