当前位置: 首页 > news >正文

【容器化】Oceanbase镜像构建及使用

通过该篇文章可以在国产X86-64或ARM架构上构建商业版oceanbase,只需要替换pkg安装包即可。下面截图主要以国产X86-64安装为例,作为操作截图:

镜像构建目录说明

在这里插入图片描述

pkg:用来存放安装包及脚本,抛出rpm其他是脚步,这些rpm包可以下载不同系统架构的包,构建镜像时该目录只需要保留对应架构包就行。

在这里插入图片描述

镜像文件说明

Dockerfile

FROM kylin-server-10-sp2-x86:b09
MAINTAINER weltestADD pkg /mnt/software/pkgENV OB_HOME_PATH=/home/admin/oceanbaseEXPOSE 2881 2882 RUN cd /mnt/software/pkg && yum clean all && yum makecache \&& yum install libaio net-tools -y && bash installDB && rm -rf /mnt && chmod 755 -R /home/admin/oceanbase/init/InitDB && chmod 755 -R /home/admin/oceanbase/sh/*WORKDIR /home/admin/oceanbaseCMD ["/bin/bash","-c","/home/admin/oceanbase/init/InitDB"]

这里未提供yum的repo文件,如果内网构建这里需要把RUN替换为如下内容:

RUN cd /mnt/software/pkg && rm -rf /etc/yum.repos.d/* && mv nexus-kylin-V10SP2.repo /etc/yum.repos.d/ && yum clean all && yum makecache \&& yum install libaio net-tools -y && bash installDB && rm -rf /mnt && chmod 755 -R /home/admin/oceanbase/init/InitDB && chmod 755 -R /home/admin/oceanbase/sh/*

installDB

Dockerfile中的bash installDB执行脚步内容如下:

#!/bin/bash
set -e
CWD=$(cd `dirname $0`;pwd)
cd "${CWD}"
source /mnt/software/pkg/_envecho "create data dirs..."
mkdir -p $OB_DATA_PATH/{1,log1}
echo "install ob cluster ..."
rpm -ivh /mnt/software/pkg/*.rpm --nodepsecho "Init ob dir..."
mkdir -p $OB_DATA_PATH/1/$OB_CLUSTER_NAME/{etc3,sort_dir,sstable,slog}
mkdir -p $OB_DATA_PATH/log1/$OB_CLUSTER_NAME/{clog,etc2,ilog,oob_clog} 
mkdir -p $OB_HOME_PATH/store/$OB_CLUSTER_NAME
for t in {etc3,sort_dir,sstable,slog};do ln -s $OB_DATA_PATH/1/$OB_CLUSTER_NAME/$t $OB_HOME_PATH/store/$OB_CLUSTER_NAME/$t; done
for t in {clog,etc2,ilog,oob_clog};do ln -s $OB_DATA_PATH/log1/$OB_CLUSTER_NAME/$t $OB_HOME_PATH/store/$OB_CLUSTER_NAME/$t; donemkdir -p $OB_HOME_PATH/{sh,init} 
mv /mnt/software/pkg/StartOB $OB_HOME_PATH/sh
mv /mnt/software/pkg/StopOB $OB_HOME_PATH/sh
mv /mnt/software/pkg/_env $OB_HOME_PATH/sh
mv /mnt/software/pkg/InitDB $OB_HOME_PATH/init
mv /mnt/software/pkg/ob-init.sql $OB_HOME_PATH/init
echo "install Oceanbase success!"

该脚步主要用于安装包安装及oceanbase目录创建及脚步添加。

InitDB

Dockerfile中的/home/admin/oceanbase/init/InitDB执行脚步内容如下:

#!/bin/bash
source /home/admin/oceanbase/sh/_env
set -e
CWD=$(cd `dirname $0`;pwd)
echo "Current dir: ${CWD}"echo "update BOOTSTRAP config..."
sed -i "s|@HOSTIP@:@OB_RPC_PORT@|${HOST_IP}:${OB_RPC_PORT}|g" $OB_HOME_PATH/init/ob-init.sqlcd ${OB_HOME_PATH}CMD="${OB_HOME_PATH}/bin/observer -i eth0 -P ${OB_RPC_PORT} -p ${OB_DB_PORT} -z zone1 -d ${OB_HOME_PATH}/store/${OB_CLUSTER_NAME} -r '${HOST_IP}:2882:2881' -c 10001 -n ${OB_CLUSTER_NAME} -o \"system_memory=${SYSTEM_MEMORY},datafile_size=${DATAFILE_SIZE},config_additional_dir=${OB_DATA_PATH}/1/${OB_CLUSTER_NAME}/etc3;${OB_DATA_PATH}/log1/${OB_CLUSTER_NAME}/etc2\""echo "Command is: ${CMD}"
${CMD}
if [ $? -eq 0 ]; thenecho "boot success!"sleep 30sCMD="obclient -h${HOST_IP} -uroot@${OB_TENANT_NAME} -A -P${OB_DB_PORT} < ${OB_HOME_PATH}/init/ob-init.sql"echo "Init BOOTSTRAP Command is: ${CMD}"obclient -h${HOST_IP} -uroot@${OB_TENANT_NAME} -A -P${OB_DB_PORT} < $OB_HOME_PATH/init/ob-init.sqlecho "Init BOOTSTRAP success!"elseecho "boot failed!"echo "Please check the log file ${OB_HOME_PATH}/log/observer.log"
fi

该脚本主要用于启动并初始化oceanbase集群。改脚步中的ob-init.sql内容如下:

SET SESSION ob_query_timeout=1000000000;
ALTER SYSTEM BOOTSTRAP ZONE 'zone1' SERVER '@HOSTIP@:@OB_RPC_PORT@';

StartOB

StartOB脚步内容如下:

#!/bin/bash
source /home/admin/oceanbase/sh/_env
set -e
CWD=$(cd `dirname $0`;pwd)
cd "${CWD}"
cd ${OB_HOME_PATH}CMD="${OB_HOME_PATH}/bin/observer -i eth0 -P ${OB_RPC_PORT} -p ${OB_DB_PORT} -z zone1 -d ${OB_HOME_PATH}/store/${OB_CLUSTER_NAME} -r '${HOST_IP}:2882:2881' -c 10001 -n ${OB_CLUSTER_NAME} -o \"system_memory=${SYSTEM_MEMORY},datafile_size=${DATAFILE_SIZE},config_additional_dir=${OB_DATA_PATH}/1/${OB_CLUSTER_NAME}/etc3;${OB_DATA_PATH}/log1/${OB_CLUSTER_NAME}/etc2\""echo "Command is: ${CMD}"
svrs=`ps -ef | grep 'observer' | grep -v 'grep observer' | wc -l`
if [  $svrs -gt 0 ]thenecho -e "\e[31;1;5mServers are running now!\e[0m\n"echo -e "\e[32;1mPlease stop servers and try again!\e[0m\n"exit 5
else ${CMD}if [ $? -eq 0 ]; thendatesleep 60sdateecho "boot success!"elseecho "boot failed!"echo "Please check the log file ${OB_HOME_PATH}/log/observer.log"
fi
fi

改脚步用于启动oceanbase集群服务。

StopOB

StopOB脚步内容如下:

#!/bin/bashsvrs=`ps -ef | grep 'observer' | grep -v 'grep observer' | wc -l`
if [  $svrs -gt 0 ]thenkill -9 $(ps -ef | grep 'observer' | grep -v 'grep observer' | awk '{ print $2 }')echo -e "\e[31;1;5m Kill observer is Finished!\e[0m\n"
fi

该脚步主要用于关闭Oceanbase集群服务。

_env

installDB、InitDB脚本中的_env内容如下:

OB_HOME_PATH="/home/admin/oceanbase"
OB_DATA_PATH="/data"
OB_DB_PORT="2881"
OB_RPC_PORT="2882"
OB_CLUSTER_NAME="obcluster"
OB_TENANT_NAME="sys"
HOST_IP="$(ifconfig | grep cast | awk '{print $2}')"
SYSTEM_MEMORY="5G"
DATAFILE_SIZE="2G"

该脚本主要用于环境配置,用来设置oceabase的初始配置值。

镜像构建

进入到构建目录下,执行构建命令:

docker build -t oceanbase:3.2.4.1 .

使用docker-compose编排容器

version: '2'
services:  oceanbase:container_name: oceanbaseimage: oceanbase:3.2.4.1user: roothostname: oceanbaseports: - "12881:2881"- "12882:2882"volumes:#对数据进行固化- "/data/oceanbase:/home/admin/oceanbase/data"   command:- /bin/sh- -c- |sh /home/admin/oceanbase/init/InitDB#创建资源单元obclient -h127.0.0.1 -uroot@sys -A -P2881 -e "CREATE RESOURCE UNIT unit1 MAX_CPU 1, MAX_MEMORY '1G', MAX_IOPS 128,MAX_DISK_SIZE '10G', MAX_SESSION_NUM 64, MIN_CPU=1, MIN_MEMORY='1G', MIN_IOPS=128"echo "创建资源单元unit1完成!"#调整最小资源池限制为1Gobclient -h127.0.0.1 -uroot@sys -A -P2881 -e "alter system __min_full_resource_pool_memory=1073741824"echo "调整最小资源池限制为1G完成!"#创建资源池obclient -h127.0.0.1 -uroot@sys -A -P2881 -e "CREATE RESOURCE POOL pool1 unit='unit1', unit_num=1, zone_list=('zone1')"echo "创建资源池pool1完成!"#创建oracle租户obclient -h127.0.0.1 -uroot@sys -A -P2881 -e "CREATE TENANT IF NOT EXISTS oracledb charset='utf8mb4', replica_num=1, zone_list=('zone1'), primary_zone='zone1', resource_pool_list=('pool1') SET ob_compatibility_mode='oracle', ob_tcp_invited_nodes='%'"echo "创建oracle租户oracledb完成!"#连接oracle模式创建用户WELTESTobclient -h127.0.0.1 -usys@oracledb -A -P2881 -e "create user WELTEST identified by WELTEST"echo "oracle模式创建用户WELTEST完成!"#给用户赋权obclient -h127.0.0.1 -usys@oracledb -A -P2881 -e "GRANT ALL PRIVILEGES TO WELTEST"echo "给用户赋权完成!"/bin/shtty: truestdin_open: true

该文件主要是使用启动oceanbase集群、创建资源池、创建oracle租户并给用户赋权。

相关文章:

【容器化】Oceanbase镜像构建及使用

通过该篇文章可以在国产X86-64或ARM架构上构建商业版oceanbase&#xff0c;只需要替换pkg安装包即可。下面截图主要以国产X86-64安装为例&#xff0c;作为操作截图&#xff1a; 镜像构建目录说明 pkg:用来存放安装包及脚本&#xff0c;抛出rpm其他是脚步&#xff0c;这些rpm包…...

软考第二章 信息技术发展

本章内容&#xff1a;软件硬件、网络、存储、新技术。 文章目录 2.1 信息技术及其发展2.1.1 计算机硬件2.1.2 计算机网络2.1.3 存储和数据库2.1.4 信息安全 2.2 新一代信息技术2.2.1 物联网2.2.2 云计算2.2.3 大数据2.2.4 区块链2.2.5 人工智能虚拟现实 2.1 信息技术及其发展 …...

【Unity每日一记】向量操作摄像机的移动(向量加减)

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;uni…...

C++初阶之一篇文章教会你queue和priority_queue(理解使用和模拟实现)

queue和priority_queue&#xff08;理解使用和模拟实现&#xff09; 什么是queuequeue的使用1.queue构造函数2.empty()3.size()4.front()5.back();6.push7.emplace8.pop()9.swap queue模拟实现什么是priority_queuepriority_queue的使用1.priority_queue构造函数1.1 模板参数 C…...

性能场景和性能需求指标

目录 一 性能场景 1、基准性能场景 2、容量性能场景 3、稳定性性能场景 4、异常性能场景 二 性能需求指标 1、业务指标 2、技术指标 2.1 时间指标 RT 2.2 容量指标 TPS 2.3 资源利用率 3、指标之间的关系 “TPS”与“响应时间” “用户数”与“TPS”与“压力工具中…...

Python学习 -- 常用函数与实例详解

在Python编程中&#xff0c;数据转换是一项关键任务&#xff0c;它允许我们在不同数据类型之间自由流动&#xff0c;从而提高代码的灵活性和效率。本篇博客将深入探讨常用的数据转换函数&#xff0c;并通过实际案例为你展示如何巧妙地在不同数据类型之间转换。 数据类型转换函…...

MySQL 账号权限

mysql 在安装好后&#xff0c;默认是没有远端管理账号。 一、账号管理 1. 查看账号列表 MySQL用户账号和信息存储在名为 mysql 的数据库中。一般不需要直接访问 mysql 数据库和表&#xff0c;但有时需要直接访问。例如&#xff0c;查看数据库所有用户账号列表时。 USE mysql; …...

[Mongodb 5.0]单机启动

安装完mongodb后&#xff0c;会自动生成下面两个目录(mongod.conf中设定的)&#xff0c;用来存放日志和数据 /var/lib/mongo (数据目录) /var/log/mongodb (日志目录) 要启动一个单机版的mongodb&#xff0c;一般有两种方式&#xff1a; 第一种启动方式&#xff1a;直接使用…...

[HDLBits] Exams/m2014 q4b

Implement the following circuit: module top_module (input clk,input d, input ar, // asynchronous resetoutput q);always(posedge clk or posedge ar) beginif(ar)q<1b0;elseq<d;end endmodule...

数据结构入门:队列

目录 文章目录 前言 1.队列 1.1 队列的概念及结构 1.2 队列的实现 1.2.1 队列的定义 1.2.2队列的初始化 1.2.3 入队 1.2.4 判空 1.2.5 出队 1.2.6 队头队尾数据 1.2.7 队列长度 1.2.8 队列销毁 总结 前言 队列&#xff0c;作为一种重要的数据结构&#xff0c;在计算机科学中扮演…...

面试热题(合并K个升序链表)

给定一个链表数组&#xff0c;每个链表都已经按升序排列。 请将所有链表合并到一个升序链表中&#xff0c;返回合并后的链表。 输入&#xff1a;lists [[1,4,5],[1,3,4],[2,6]] 输出&#xff1a;[1,1,2,3,4,4,5,6] 解释&#xff1a;链表数组如下&#xff1a; [1->4->5,1…...

优化过多if else判断代码

有些判断难免会遇到很多 if else 看起来很头疼 下面是一个优化示例 修改前 if(this.$route.query.deptId){this.queryParams.deptId this.$route.query.deptId}else if (this.$store.state.adaptation.roleSign.includes(fengongsicengji)) {const ancestorsId this.$stor…...

最强自动化测试框架Playwright (27)-跟踪查看器

Playwright Trace Viewer 是一个 GUI 工具&#xff0c;可帮助您在脚本运行后探索记录的 Playwright 跟踪。可以本地打开&#xff0c;也可以在trace.playwright.dev.打开&#xff0c; 录制跟踪文件 使用context.tracing.start进行录制&#xff0c;使用stop方法保存录制文件 b…...

【工作中问题解决实践 十一】Kafka消费者消费堆积且频繁rebalance

最近有点不走运&#xff0c;老是遇到基础服务的问题&#xff0c;还是记着点儿解决方法&#xff0c;以后再遇到快速解决吧&#xff0c;今天遇到这个问题倒不算紧急&#xff0c;但也能通过这个问题熟悉一下Kafka的配置。 问题背景 正在开会的时候突然收到一连串的报警&#xff…...

ChatGpt提示词大全

中文版本 行为 提示词 Linux终端 我希望你能充当一个linux终端。我将输入命令&#xff0c;你会回复终端应该显示什么。我想让你只回复在一个唯一的代码块内的终端输出&#xff0c;而没有别的。不要写一些解释。不要键入命令&#xff0c;除非我指示你这样做。当我需要用英语告…...

利用SimpleDateFormat或者LocalDateTime生成格式为“yyyy-MM-dd HH:mm:ss“的当前时间

java程序&#xff1a; // 利用LocalDateTime生成格式为"yyyy-MM-dd HH:mm:ss"的当前时间 DateTimeFormatter formatter DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); LocalDateTime now LocalDateTime.now(); String time1 now.format(format…...

使用 Postman 批量发送请求的最佳实践

目录 背景 批量发送&#xff1f; 起因 思考 Postman 批量发送接口 创建集合和接口 批量发送接口 资料获取方法 背景 最近写了几个接口&#xff1a; 获取 books 的接口获取 likes 的接口获取 collections 的接口 但是我还是不放心&#xff0c;因为这些接口到底稳不稳…...

Docker一键部署项目,无需登录XShell

文章目录 一键部署项目Docker手动部署SpringBoot项目编写docker部署的脚本文件script.sh 脚本内容 特别注意&#xff01;编写dockerfiledockerfile 文件内容 上传后端服务的jar包到服务器中执行 script 脚本部署后端服务 自动部署SpringBoot项目引入jsch依赖编写jsch工具类执行…...

GIt Squash 多个提交压缩提交

假设你有一个名为 feature 的分支&#xff0c;它包含三个提交&#xff08;A, B, C&#xff09;&#xff0c;并且你想将这三个提交压缩成一个。下面是如何做到这一点的。 首先&#xff0c;找出你要开始压缩的那个最早提交的哈希值。在这个例子中&#xff0c;我们假设 A 是最早的…...

【数据结构】栈与队列

1 栈 1.1 栈的概念及结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。栈中的数据元素遵守后进先出 LIFO (Last In First Out) 的原则。 压栈&#xff1a;栈…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机&#xff1a;Ubuntu 20.04.6 LTSHost&#xff1a;ARM32位交叉编译器&#xff1a;arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

R语言AI模型部署方案:精准离线运行详解

R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

服务器硬防的应用场景都有哪些?

服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式&#xff0c;避免服务器受到各种恶意攻击和网络威胁&#xff0c;那么&#xff0c;服务器硬防通常都会应用在哪些场景当中呢&#xff1f; 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

用docker来安装部署freeswitch记录

今天刚才测试一个callcenter的项目&#xff0c;所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...

C#中的CLR属性、依赖属性与附加属性

CLR属性的主要特征 封装性&#xff1a; 隐藏字段的实现细节 提供对字段的受控访问 访问控制&#xff1a; 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性&#xff1a; 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑&#xff1a; 可以…...