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

OpenGauss数据库的安装与运行

原创 dai 2021-12-07
1840

实验内容

本实验主要内容为在CentOS 7.9上安装部署openGauss数据库,并进行简单的数据库相关操作。

实验环境说明

组网说明

           本实验环境为虚拟机VMware Workstation Pro + CentOS 7.9 + openGauss 2.1.0。

设备介绍

           我所使用的具体设备:

                                                     设备明细表

设备名称

设备型号

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

而如果数据库关闭了,就需要先执行

gs_om -t start

再执行

  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

数据库使用

安装JDK

(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 说明安装成功:

配置 JAVA_HOME

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

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

执行如下命令打开配置环境变量的文件:

vi /etc/profile

在里面添加以下配置(JAVA_HOME 参数根据前面找到的目录路径设置):

最后执行如下命令让配置生效:

source /etc/profile

下载驱动

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

修改数据库的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

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论