openEuler系统通过shell脚本安装openGauss 5.0.0企业版

news2024/9/8 10:25:39

上次提到的开机自启动的配置,获得了LD的称赞,然而LD的要求,都是“既得陇复望蜀”的,他又期望我们能实现openGauss安装的“自动化”,于是尝试了下用shell脚本部署,附件中的脚本实测有效,openEuler 20.03 LTS通过shell脚本建议操作部署openGauss 5.0.0企业版成功。

说明:除了安装openGauss的shell脚本外,还需要准备两个配置文件,一个是openGauss集群的配置文件:cluster_config.xml;另外一个是openeuler的repo文件,yum源需要用到。这两个并非安装脚本内容,因此不多做介绍。安装过程和手工安装基本类似,因此下面简单描述下脚本执行的过程,供参考和指正!

1. 执行前首先创建好安装包存放的路径,下载好安装包,并且把安装的shell脚本,以及cluster_config文件,以及openeuler的repo文件,都copy到系统中的某个文件夹下,如:/opt/software/opengaussshellinstall。当然也可以通过wget下载安装包,朋友们感兴趣可以自己调整脚本。

 其中的...zhaofeng.tar文件为安装成功后需要restore的备份数据。

2. 注意安装脚本copy后可能会没有执行权限,需要执行chmod +x shell test.sh(脚本文件名),修改权限。

3. 脚本通过变量读取安装包所在的位置,因此执行命令时需要附上安装包所在的路径:

./bin/shell test.sh /opt/software/opengaussshellinstall

4. 脚本大致分为下面几部分:

4.1 检查并修改python版本;

4.2 安装三方依赖件expect, libaio等,包括脚本中用到的tar以及net-tools;

4.3 修改performance.conf文件(本步可选);

4.4 修改profile文件,增加openGauss相关的环境变量;

4.5 创建openGauss安装路径,copy安装包,cluster配置文件等到openGauss安装路径,默认为/opt/software/opengauss,可根据需要修改脚本,也可以做成变量,感兴趣可以自行调整;

4.6 修改cluster文件,替换本机ip地址及hostname,替换app, log等路径;

4.7 解压安装包;

4.8 preinstall

4.9 install

4.10 修改postgresql.conf和pg_hba.conf文件,使数据库可以被远程连接;

4.11 创建数据库,创建用户,restore之前备份的数据。

4.12 重启数据库。

如此则整个过程完成。

4.5 创建openGauss安装路径,copy安装包、cluster配置文件等到openGauss安装路径,默认为/opt/software/opengauss,可根据需要修改脚本,也可以做成变量,感兴趣可以自行调整;

4.6 修改clusterconfig.xml文件,替换本机ip地址及hostname,替换app, log等路径;

4.7 解压安装包,脚本中解压安装包和修改xml文件放在一个方法中了,注意解压完后需要对路径重置权限。

4.8 preinstall,预安装需要输入omm用户的密码;

4.9 install,安装需要输入数据库的密码;

4.10 修改postgresql.conf和pg_hba.conf文件,使数据库可以被远程连接,此处为了简单起见,添加0.0.0.0/0以及‘*’;

4.11 创建数据库,创建用户,restore之前备份的数据。

4.12 重启数据库。

如此则整个过程完成。

以下为附件内容:

  • cluster_config.txt


    <PARAM name="gaussdbLogPath" value="/var/log/omm" />
    <PARAM name="tmpMppdbPath" value="/opt/huawei/tmp"/>
    <PARAM name="gaussdbToolPath" value="/opt/huawei/install/om" />
    <PARAM name="corePath" value="/opt/huawei/corefile"/>
    <PARAM name="backIp1s" value="opengausshostip"/>
  </CLUSTER>
  <DEVICELIST>
    <DEVICE sn="opengausshostname">
      <PARAM name="name" value="opengausshostname"/>
      <PARAM name="azName" value="AZ1"/>
      <PARAM name="azPriority" value="1"/>

      <PARAM name="backIp1" value="opengausshostip"/>
      <PARAM name="sshIp1" value="opengausshostip"/>
      <!-- dn -->
      <PARAM name="dataNum" value="1"/>
      <PARAM name="dataPortBase" value="26100"/>
      <PARAM name="dataNode1" value="/opt/huawei/install/data/dn"/>
      <PARAM name="dataNode1_syncNum" value="0"/>
    </DEVICE>
  </DEVICELIST>
</ROOT>

  • openGauss.sh

#!/bin/bash

gauss_home=$1


echo "------$gauss_home -----------"
if [ ! -d $gauss_home ]; then
    echo -e "\033[31m   请输入安装路径     \033[0m"
    exit
fi

python_version=`python -V 2>&1|awk '{print $2}'|awk -F '.' '{print $1}'`

function PythonVersionChange() {
    echo " ======= python version : ${python_version} ======== "
    if [ $python_version -eq 2 ]; then
        echo -e "\e[32m ======== change python version  ======== \e[0m"
        cd /usr/bin
        mv python python.bak
        ln -s python3 /usr/bin/python
        now_pyhton_version=`python -V 2>&1|awk '{print $2}'|awk -F '.' '{print $1}'`
        echo -e "\e[32m ======== now python version $now_pyhton_version ======== \e[0m"
    fi
}

echo -e "\e[37m ======== install  3rd software(s)  ======== \e[0m"
echo "-------copy yum repo-------"
cp /opt/software/openEulerOS.repo /etc/yum.repos.d/
echo "-------install nettools & tar -------"
yum -y install tar
yum -y install net-tools
echo "-------install nettools & tar completed-------"
echo "-------install 3rd software(s)-------"
yum install libaio* -y
yum install -y bzip2 bzip2-devel curl libaio libaio-devel readline-devel
yum -y install expect

echo -e "\e[37m ======== install 3rd software(s) completed ======== \e[0m"

function PerformanceChange() {
    echo -e "\e[37m ======== sed performance  ======== \e[0m"
    sed -i "s/sysctl -w vm\.min_free_kbytes=112640/#sysctl -w vm\.min_free_kbytes=112640/" /etc/profile.d/performance.sh
    echo -e "\e[37m ======== sed performance completed  ======== \e[0m"
}

function ProfileChange() {
    echo "-------ProfileChange-------"
    echo "export packagePath=/opt/software/openGauss" >> /etc/profile
    echo 'export LD_LIBRARY_PATH=/opt/software/openGauss/script/gspylib/clib:$dddd' >> /etc/profile
    echo "-------ProfileChange completed-------"
}

ip_add=`ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"`
arrar=(`echo $ip_add | tr '\n' ' '`)
ip=${arrar[0]}

echo " ip is : $ip "

if [ ! -d /opt/software/openGauss ]; then
    mkdir -p /opt/software/openGauss
    chmod 755 -R /opt/software/openGauss
    cp /opt/software/openGauss-5.0.0-openEuler-64bit-all.tar.gz /opt/software/openGauss/
fi

chmod 755 -R /opt/software

host_name=`hostname`
#appPath=$gauss_home/openGauss/app

appPath=/opt/gaussdb/app

echo "host name is -------------------: $host_name"

data_node=/openGauss/data/db1

function CompressGauss() {
    cp /opt/software/clusterconfig.xml /opt/software/openGauss -R
   # app_path=$gauss_home/openGauss/app
    log_path=/var/log/gaussdb
   # core_path=$gauss_home/software/openGauss/corefile
   # tool_path=$gauss_home/software/openGauss/huawei/wisequery
    core_path=/opt/opengauss/corefile
    tool_path=/opt/huawei/wisequery
    echo "host name is -------------------: $appPath"
    sed -i "s/opengausshostip/$ip/g" /opt/software/openGauss/clusterconfig.xml
    sed -i "s/opengausshostname/$host_name/g" /opt/software/openGauss/clusterconfig.xml
    sed -i "s#gauss_db_app_path#$appPath#g" /opt/software/openGauss/clusterconfig.xml
    sed -i "s#gauss_db_Log_Path#$log_path#g" /opt/software/openGauss/clusterconfig.xml
    echo " -------------------: $tool_path"
    sed -i "s#gauss_db_Tool_Path#$tool_path#g" /opt/software/openGauss/clusterconfig.xml
    sed -i "s#core_Path#$core_path#g" /opt/software/openGauss/clusterconfig.xml
    sed -i "s#data_node#$data_node#g" /opt/software/openGauss/clusterconfig.xml
    cd /opt/software/openGauss
    tar -zxvf openGauss-5.0.0-openEuler-64bit-all.tar.gz
    tar zxvf openGauss-5.0.0-openEuler-64bit-om.tar.gz
    chmod -R 755 /opt/software
}

function preinstall() {
    chmod -R 755 /opt/software
    cd /opt/software/openGauss/script
    echo "----- pre install start  $(pwd)--------"
    #python gs_preinstall -U omm -G dbgrp -X /opt/software/openGauss/clusterconfig.xml
    echo -e "yes\n1qazQAZ\n1qazQAZ\n" | python gs_preinstall -U omm -G dbgrp -X /opt/software/openGauss/clusterconfig.xml
    sleep 2
}

function install() {
    echo "-------install openGauss-------"
    chmod -R 755 /opt/software/openGauss/script/
    #$gauss_home/swanlink-cloud-aiot/bin/password_input.sh
su - omm <<EOF
    cd /opt/software/openGauss/script
    echo " current : "
    gs_install -X /opt/software/openGauss/clusterconfig.xml --gsinit-parameter="--encoding=UTF8" --dn-guc="max_process_memory=4GB" --dn-guc="shared_buffers=256MB" --dn-guc="bulk_write_ring_size=256MB" --dn-guc="cstore_buffers=16MB"
exit;
EOF
}

function connectdb() {
    systemctl start firewalld.service
    firewall-cmd --zone=public --add-port=26000/tcp --permanent
    firewall-cmd --reload
    sed -i "s/listen_addresses.*/listen_addresses = '*'/" $data_node/postgresql.conf
    sed -i "s#.*$ip.*#host    all    all    0.0.0.0/0    sha256#" $data_node/pg_hba.conf
}

function createUserAndImportData() {
    su - omm <<EOF
       gsql -d postgres -p 26000 -r <<DB
          create user testuser identified by "!!$@#$ad1123";
          grant all privileges to testuser;
          create user clouduser identified by "!!$@#$ad1123";
          grant all privileges to clduser;
          create database clddb;
DB
EOF
    echo "connect"
}

function restoreData() {
    cp /opt/software/zhaofeng.tar /home/omm/
    chown omm:dbgrp /home/omm/zhaofeng.tar
    data_path=$gauss_home/package/DatabaseBackup.sql
    su - omm <<EOF
    gs_restore /home/omm/zhaofeng.tar -p 26000 -d clddb
EOF
}

function restartGSDB() {
    su - omm <<EOF
    gs_om -t restart
EOF
}

PythonVersionChange
ProfileChange
PerformanceChange
CompressGauss
preinstall
install
connectdb
createUserAndImportData
restoreData
restartGSDB
  • openEulerOS.repo.txt


[openEuler-source]
name=openEuler-source
baseurl=https://repo.huaweicloud.com/openeuler/openEuler-20.03-LTS/source/
enabled=1
gpgcheck=1
gpgkey=https://repo.huaweicloud.com/openeuler/openEuler-20.03-LTS/source/RPM-GPG-KEY-openEuler

[openEuler-os]
name=openEuler-os
baseurl=https://repo.huaweicloud.com/openeuler/openEuler-20.03-LTS/OS/x86_64/
enabled=1
gpgcheck=1
gpgkey=https://repo.huaweicloud.com/openeuler/openEuler-20.03-LTS/OS/x86_64/RPM-GPG-KEY-openEuler

[openEuler-everything]
name=openEuler-everything
baseurl=https://repo.huaweicloud.com/openeuler/openEuler-20.03-LTS/everything/x86_64/
enabled=1
gpgcheck=1
gpgkey=https://repo.huaweicloud.com/openeuler/openEuler-20.03-LTS/everything/x86_64/RPM-GPG-KEY-openEuler

[openEuler-EPOL]
name=openEuler-epol
baseurl=https://repo.huaweicloud.com/openeuler/openEuler-20.03-LTS/EPOL/x86_64/
enabled=1
gpgcheck=0

本文作者

本文内容来自于数据库领域资深技术专家赵锋老师,希望我们的文章正好能解决你的问题。

欢迎技术交流~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1703049.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

aws lakeformation跨账号共享数据的两种方式和相关配置

lakeformation授权方式分为 基于tag的授权基于命名资源的授权 先决条件 跨账号共享数据的先决条件&#xff08;命名资源和tag授权都需要&#xff09; 分两种情况 如果账户中没有glue data catalog资源策略&#xff0c;则LakeFormation跨账户授予将照常进行 如果存在glue d…

使用高性能NIO框架netty实现IM集群对聊方案

文章目录 前言技术积累什么是nettynetty如何实现IM如何实现IM集群 实战演示基础配置netty搭建IM集群redis发布订阅 实战测试 前言 在前面的博文中我们分享了原生websoket集群搭建&#xff0c;也用redis 发布订阅实现了集群消息正常有序分发。但是有不少同学希望风向一期netty实…

基于生命周期评价法的农田温室气体排放估算;农田CH4和N2O排放模拟;农田碳库模型和土壤呼吸等

目录 专题一 温室气体排放模拟研究 专题二 农田CH4和N2O排放模拟 专题三 农田碳库模型和土壤呼吸 专题四 基于生命周期评价法的农田温室气体排放估算 专题五-六 基于过程模型的温室气体排放模拟 专题七 案例模拟与疑难解答 更多应用 农业是甲烷&#xff08;CH4&#xff…

List基本使用(C++)

目录 1.list的介绍 2.list的使用 list的构造 list的size() 和 max_size() list遍历操作 list元素修改操作 assign()函数 push_front(),push_back 头插&#xff0c;尾插 pop_front() pop_back 头删尾删 insert()函数 swap()函数 resize()函数 clear()函数 list类数…

yolov10 瑞芯微 rknn 部署 C++代码

yolov10 目标检测rknn的C部署来了。 特别说明&#xff1a;如有侵权告知删除&#xff0c;谢谢。 直接上代码和模型&#xff0c;欢迎参考交流 【完整代码和模型】 1、rknn模型准备 pytorch转onnx&#xff0c;onnx再转rknn模型这一步就不再赘述&#xff0c;请参考上一篇 【yolov1…

TPM之VMK密封

本篇文章主要介绍基于TPM的Bitlocker全盘加密时,VMK密钥的密封(Seal)流程,至于TPM、Bitlocker、密钥保护器、VMK密钥等这些东西是什么,这里不做解释,需要自己脑补一下(╮(╯▽╰)╭)。 首先看看一张结构图(来自网络),了解一下TPM加密的基本框架与流程: 同样,基于…

关于读书,你可能没想到的陷阱、问题和思考

最近经常看到有人问&#xff1a;AI 已经这么发达了&#xff0c;如果以后的 AI 会更智能&#xff0c;那我们还有必要读书吗&#xff1f; 我认为&#xff1a;还是十分有必要的。 为什么呢&#xff1f;因为读书其实不仅仅是为了获取知识&#xff0c;它更重要的一个作用&#xff0c…

数据结构-堆排序问题

需要在数组里面进行排序&#xff0c;我们可以采取堆排序对其解决问题 版本1&#xff1a; 创建一个数组等大的堆&#xff0c;把数组里面的数值输入到堆里面进行堆排序&#xff0c;但是这样的弊端就是&#xff0c;不是顺序排序 版本2&#xff1a; 每次我们取堆顶然后打印&#xf…

3440亿!国家大基金三期正式落地,关注半导体与算力芯片!

重磅消息来了&#xff01; 5月24日&#xff0c;注册规模3,440亿元人民币的“国家集成电路产业投资基金三期股份有限公司”正式成立&#xff0c;这也意味着&#xff0c;传闻已久的**“国家大基金三期”正式落地&#xff01;** 企查查股东信息显示&#xff0c;该公司由财政部、国…

移动云:开发者手中的未来钥匙

《移动云&#xff1a;开发者手中的未来钥匙》 引言一、无缝集成&#xff0c;加速开发进程二、数据智能&#xff0c;洞悉用户心声三、安全合规&#xff0c;护航创新之旅四、成本优化&#xff0c;助力轻装前行总结 引言 在科技日新月异的今天&#xff0c;移动云已成为推动行业变革…

文件夹类型异常成文件:原因解析与恢复策略

在数字时代&#xff0c;数据的安全与完整性对于个人和企业都至关重要。然而&#xff0c;有时我们可能会遇到一种令人困惑的情况&#xff1a;原本应该是文件夹的图标&#xff0c;却突然变成了文件的图标&#xff0c;这就是所谓的“文件夹类型成文件”问题。本文将深入探讨这一现…

(原创)从右到左排列RecycleView的数据

问题的提出 当我们写一个Recycleview时&#xff0c;默认的效果大概是这样的&#xff1a; 当然&#xff0c;我们也可以用表格布局管理器GridLayoutManager做成这样&#xff1a; 可以看到&#xff0c;默认的绘制方向是&#xff1a; 从左到右&#xff0c;从上到下 那么问题来了…

香橙派 AIpro综合体验及AI样例运行

香橙派 AIpro综合体验及AI样例运行 环境&#xff1a; 香橙派版本&#xff1a; AIpro(8TOPSINT8) OS : Ubuntu 22.04.3 LTS(GNU/Linux 5.10.0 aarch64) (2024-03-18) 远程服务端1&#xff1a;OpenSSH 8.9p1 远程服务端2&#xff1a;TightVNC Server 1.3.10 远程客户端&#xf…

使用numpy手写一个神经网络

本文主要包含以下内容&#xff1a; 推导神经网络的误差反向传播过程使用numpy编写简单的神经网络&#xff0c;并使用iris数据集和california_housing数据集分别进行分类和回归任务&#xff0c;最终将训练过程可视化。 1. BP算法的推导过程 1.1 导入 前向传播和反向传播的总体…

基于EBAZ4205矿板的图像处理:10gamma变换

基于EBAZ4205矿板的图像处理&#xff1a;10gamma变换 项目全部文件 会上传项目全部文件&#xff0c;如果没传&#xff0c;可以私信催我一下&#xff0c;最近太忙了 先看效果 我的项目中的gamma的变换系数为2.2&#xff0c;是会让图像整体变暗的&#xff0c;看右图说明我的ga…

哪款洗地机好用?洗地机十大排行榜

在智能家电飞速发展的今天&#xff0c;洗地机因其吸拖洗一体化的技术优势&#xff0c;成为越来越多家庭的清洁利器。它不仅能快速清理各种地面污渍&#xff0c;还能轻松处理干湿垃圾&#xff0c;大大提升了日常清洁的效率。可是面对市场上琳琅满目的洗地机品牌和型号&#xff0…

数据持久化第六课-ASP.NET运行机制

数据持久化第六课-ASP.NET运行机制 一.预习笔记 1.动态网页的工作机制通常分为以下几个阶段&#xff1a; 1&#xff09;使用动态Web开发技术编写Web应用程序&#xff0c;并部署到Web服务器。 2&#xff09;客户端通过在浏览器中输入地址&#xff0c;请求动态页面。 3&#…

Swift 初学者交心:在 Array 和 Set 之间我们该如何抉择?

概述 初学 Swift 且头发茂密的小码农们在日常开发中必定会在数组&#xff08;Array&#xff09;和集合&#xff08;Set&#xff09;两种类型之间的选择中“摇摆不定”&#xff0c;这也是人之常情。 Array 和 Set 在某些方面“亲如兄弟”&#xff0c;但实际上它们之间却有着“云…

关于DDos防御...别在听别人瞎扯了.....

前言 无意间刷文章的时候看到一篇文章&#xff0c;写的是遇到ddos&#xff0c;怎么用iptables封IP....... 然后我就百度搜了一下&#xff0c;好多都是这么说的&#xff0c;但是我发现&#xff0c;大多数人只要遭受过长期Ddos的&#xff0c;就不会再信网上的文章 文笔不太好&…

【Qt】深入探索Qt事件处理:从基础到高级自定义:QEvent

文章目录 前言&#xff1a;1. 事件的介绍2. 事件的处理2.1. 示例1&#xff1a; 重写鼠标进入和鼠标离开事件2.2. 示例2&#xff1a;当鼠标点击时&#xff0c;获取对应的坐标值&#xff1b;2.3. 鼠标释放事件2.4. 鼠标双击事件2.5. 鼠标移动事件2.6. 鼠标滚轮的滚动事件 3. 按键…