实验内容
本实验主要内容为在CentOS 7.9上安装部署openGauss数据库,并进行简单的数据库相关操作。
实验环境说明
l 组网说明
本实验环境为虚拟机VMware Workstation
Pro + CentOS 7.9 + openGauss 2.1.0。
l 设备介绍
我所使用的具体设备:
设备明细表
|
设备名称 |
设备型号 |
|
Linux操作系统 |
CentOS 7.9 |
|
windows操作系统 |
win10 x86 64位 |
|
虚拟机 |
VMware Workstation
Pro |
|
Python |
Python 3.6.X |
实验环境安装
官网文档使用的是Oracle VM VirtualBox我安装了一下觉得不太好用,还是推荐用VMware Workstation Pro。在VMware Workstation Pro上创建centos7.9(最新,稍后会进行修改)虚拟机,参考链接如下超详细虚拟机VMware安装Centos7教程(图文) - 知乎 (zhihu.com):不是本文重点,不再赘述。与官方文档不同的是我选择了安装带桌面的centos,更加方便。
openGauss安装
1.
修改操作系统版本
如果CentOS版本不是7.6的需要进行修改,如果是7.6则无需修改,
先vi /etc/redhat-releas 打开编辑文件,然后将内容改为CentOS Linux release 7.6.2003
(Core)。输入”i”切换到编辑模式,移动鼠标到修改位置修改内容,然后按下ESC键退出编辑模式,然后输入”:wq”退出并进行保存,具体如下:
[root@db1 ~]# vi /etc/redhat-release
CentOS Linux release 7.6.2003 (Core)
2.
查看本地ip
使用命令 :
Ifconig

3.
使用一键部署openGauss2.0.1[CentOS 7.6] - 墨天轮 (modb.pro)内的代码进行安装,注意将代码里的ip改为自己的ip
vi auto_install.sh
然后将代码复制

在命令行中输入以下命令进行运行,开始自动安装
sh auto_install.sh
询问yes/no填yes
然后输入密码,这里注意输入的密码必须符合要求,否则会安装失败
4.
查看是否安装成功
Su - omm

安装成功后数据库默认开启 只需要命令
gsql -d
postgres -p 26000 -r

而如果数据库关闭了,就需要先执行
再执行
gsql -d
postgres -p 26000 -r
否则会出现failed to connect Unknown:26000 的错误
下面对自动安装的代码进行分析
## 1.定义主机信息[请根据实际情况修改]
export MY_HOSTNAME=node1
## 主机名
export
MY_HOSTIP=192.168.244.128 ## 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版本
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 wget 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"/>
<PARAM
name="clusterType" value="single-inst"/>
</CLUSTER>
<!-- 每台服务器上的节点部署信息 -->
<DEVICELIST>
<!-- node1上的节点部署信息 -->
<DEVICE
sn="1000001">
<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!!!"
可以看出代码主要完成了以下几个工作:
1)
定义主机信息, 设置主机名并配置hosts文件
2)
关闭防火墙
3)
关闭SELinux
4)
设置操作系统字符集编码
5)
设置操作系统时区
6)
关闭SWAP分区 [对于2G内存的设备,建议待安装完毕后再打开SWAP以间接 “扩容内存容量”]
7)
配置SSH服务,关闭Banner,允许root远程登录
8)
配置YUM源、安装依赖包、修改默认Python3版本
9)
配置 sysctl.conf 和
performance.sh
10)
配置资源限制
11)
关闭透明大页[Only for CentOS]
12)
下载openGauss软件包
13)
配置XML文件
14)
解压安装包并修改目录权限
15)
执行 gs_preinstall
16)
检查预安装环境
17)
执行 gs_install
数据库使用
l 安装JDK
l (1)首先执行如下命令搜索 jdk 安装包:
yum search java|grep jdk

这里我们选择 1.8 版本,执行如下命令进行安装。注意:默安装默认的目录为:/usr/lib/jvm/
yum
install java-1.8.0-openjdk


安装完毕后执行
java -version 命令即可查看当前的版本。

默认安装完只有运行环境,也就说 java 安装目录下只有 jre 文件夹,我们执行
javac 命令会提示“未找到命令”:

我们执行如下命令安装开发环境:
yum
install java-1.8.0-openjdk-devel.x86_64、

安装完可看到 java
安装目录下出现 bin、lib 等文件夹。再次输入
javac 说明安装成功:

l 配置 JAVA_HOME
首先我们依次执行如下命令,一步步找到正确的 JAVA_HOME 位置:

可以发现最终找到的位置如下:

执行如下命令打开配置环境变量的文件:
vi
/etc/profile
在里面添加以下配置(JAVA_HOME 参数根据前面找到的目录路径设置):

最后执行如下命令让配置生效:
source
/etc/profile


l 下载驱动
wget -P /home/download https://opengauss.obs.cn-south-1.myhuaweicloud.com/1.1.0/arm/openGauss-1.1.0-JDBC.tar.gz


解压该文件
tar -zxvf
openGauss-1.1.0-JDBC.tar.gz

解压后的文件名为postgresql.jar
l 修改数据库的pg_hba.conf文件
在GS_HOME中查找pg_hba.conf文件,本实验中数据库GS_HOME设置的为/gaussdb/data/db1,实际操作中GS_HOME地址可以查看安装时的配置文件:<PARAM name="dataNode1"
value="/gaussdb/data/db1"/>。
编写测试程序(修改ip,端口,用户,密码)
cd /gaussdb/data/db1
vi
pg_hba.conf
在ipv4最后添加host all all 0.0.0.0/0 sha256 目的为修改网络连接规则,使得一些工具可以连接至该服务器。

切换至 omm 用户环境,使用 gs_ctl 将策略生效。
su - omm
gs_ctl
reload -D /gaussdb/data/db1/

登录openGauus,创建新用户(如果已经有则忽略这一步),远程登录不允许使用omm用户.
CREATE USER jack PASSWORD
'Test@123';

如果使用内存表,则需要授予新用户权限:
grant usage on foreign server
mot_server to jack;

修改数据库监听地址
cd /gaussdb/data/db1
vi postgresql.conf

输入“:60”找到对应位置,然后输入“i”切换到 INSERT 模式,将 listen_addresses 的 值修改成为*,修改后按下“ESC”键,退出 INSERT 模式,输入“:wq”后回车保存。

修改完成后重启数据库生效(-D后面的数据库默认路径,需要根据实际情况进行修改)
gs_ctl restart -D
/gaussdb/data/db1/

//DBtest.java
//演示基于JDBC开发的主要步骤,会涉及创建数据库、创建表、插入数据等。
import
java.sql.Connection;
import
java.sql.DriverManager;
import java.sql.PreparedStatement;
import
java.sql.SQLException;
import
java.sql.Statement;
import
java.sql.CallableStatement;
public class DBTest {
//创建数据库连接。
public static Connection GetConnection(String username, String passwd) {
String driver = "org.postgresql.Driver";
String sourceURL = "jdbc:postgresql://ip:端口/postgres";
Connection conn = null;
try {
//加载数据库驱动。
Class.forName(driver).newInstance();
} catch (Exception e) {
e.printStackTrace();
return null;
}
try {
//创建数据库连接。
conn = DriverManager.getConnection(sourceURL,
username, passwd);
System.out.println("Connection succeed!");
} catch (Exception e) {
e.printStackTrace();
return null;
}
return conn;
};
//执行普通SQL语句,创建customer_t1表。
public static void CreateTable(Connection conn) {
Statement stmt = null;
try {
stmt = conn.createStatement();
//执行普通SQL语句。
int rc = stmt
.executeUpdate("CREATE TABLE customer_t1(c_customer_sk INTEGER,
c_customer_name VARCHAR(32));");
stmt.close();
} catch (SQLException e) {
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e1) {
e1.printStackTrace();
}
}
e.printStackTrace();
}
}
//执行预处理语句,批量插入数据。
public static void BatchInsertData(Connection conn) {
PreparedStatement pst = null;
try {
//生成预处理语句。
pst = conn.prepareStatement("INSERT INTO customer_t1
VALUES (?,?)");
for (int i = 0; i < 3; i++) {
//添加参数。
pst.setInt(1, i);
pst.setString(2, "data " + i);
pst.addBatch();
}
//执行批处理。
pst.executeBatch();
pst.close();
} catch (SQLException e) {
if (pst != null) {
try {
pst.close();
} catch (SQLException e1) {
e1.printStackTrace();
}
}
e.printStackTrace();
}
}
//执行预编译语句,更新数据。
public static void ExecPreparedSQL(Connection conn) {
PreparedStatement pstmt = null;
try {
pstmt = conn
.prepareStatement("UPDATE customer_t1 SET c_customer_name = ? WHERE
c_customer_sk = 1");
pstmt.setString(1, "new Data");
int rowcount = pstmt.executeUpdate();
pstmt.close();
} catch (SQLException e) {
if (pstmt != null) {
try {
pstmt.close();
} catch (SQLException e1) {
e1.printStackTrace();
}
}
e.printStackTrace();
}
}
/**
* 主程序,逐步调用各静态方法。
* @param args
*/
public static void main(String[] args) {
//创建数据库连接。
Connection conn = GetConnection("tester", "Password1234");
//创建表。
CreateTable(conn);
//批插数据。
BatchInsertData(conn);
//执行预编译语句,更新数据。
ExecPreparedSQL(conn);
//关闭数据库连接。
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}


命令行编译,将jdbc驱动的jar包和DBTest.java放在同一个目录下,编译:
javac -cp postgresql.jar dbtest.java

运行:
java -cp .:postgresql.jar dbtest

问题及解决
在安装过程中遇到了很多问题,上面安装过程都有体现,下面进行总结。
i.
VM
VirtualBox使用过程中遇到了很多问题,建议还是使用VMware
ii.
可以安装centos7.9,但一定要修改/etc/redhat-release文件里的为7.6
iii.
在设置数据库密码时,注意对密码长度、大小写的要求,不符合要求无法安装成功
iv.
直接在root用户下运行比较方便
v.
在运行gs_om -t start时不成功,需要检查一下虚拟机的网络,有时候虚拟机就是连接不上网络,网上看了很多办法都没用,此时建议重启。
vi.
在运行gsql -d postgres -p 26000 -r时提示错误failed to connect Unknown:26000,说明数据库还没开启,要先运行gs_om -t start,ps -ef |grep gauss可以查看数据库进程是否关闭
vii.
远程登录不允许使用omm用户!需要创建用户并给他grant




