OceanBase集群部署

我认为学习一个中间件比较好的方式是,先了解它的架构和运行原理,然后动手部署一遍,加深对它的了解,再使用它,最后进行总结和分享

本篇介绍OceanBase部署前提条件和集群部署

1.使用开源免费的社区版,企业版需要付费

社区版目前最新是V4.2.1_CE_BP3,它们之间的差异请查看此链接:https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000507492

2.OceanBase下载地址

https://www.oceanbase.com/softwarecenter
https://mirrors.aliyun.com/oceanbase/community/stable/el/7/x86_64/?spm=a2c6h.25603864.0.0.34a0130dfVJgW5

3.软硬件环境满足以下要求:
项目描述
系统内核 Linux 3.10.0 版本及以上,如:CentOS7.X Ubuntu 20.X
CPU最低要求 2 核,推荐 4 核及以上。
内存最低要求 8 GB,推荐设置在 16 GB 至 1024 GB 范围内。
磁盘类型建议使用 SSD 存储。
磁盘存储空间最低要求 19 GB。
文件系统EXT4 戓 XFS,当数据超过 16T 时,使用 XFS。
all-in-one 安装包all-in-one 安装包需选择 V4.1.0 及以上版本。
4.部署方式
  • 使用 OBD 部署 OceanBase 集群 (本篇使用OBD)
  • 使用 OCP 部署 OceanBase 集群
  • 使用 Docker 镜像的方式部署 OceanBase 集群
  • 在 Kubernetes 环境中使用 ob-operator 部署 OceanBase 集群

介绍下部署工具软件:

OBD 全称为 OceanBase Deployer,是 OceanBase 集群安装部署工具,通过命令行部署或白屏web界面部署的方式,将复杂配置流程标准化,降低集群部署难度,该软件包61M,适合中小型团队,OBD文档:https://www.oceanbase.com/docs/community-obd-cn-10000000002049469

OCP 全称为 OceanBase Cloud Platform云平台,是一款以 OceanBase 数据库为核心的企业级数据库管理平台。使用 OCP,可以一键安装、升级、扩容、卸载 OceanBase 数据库集群,创建和管理运维任务,监控集群的运行状态,并查看告警,该软件包ocp-all-in-one-4.2.1有1.1GB,适合有运维能力的大型团队,OCP文档:https://www.oceanbase.com/docs/ocp

OCP Express是OCP的精剪版,是基于 Web 的 OceanBase 4.x 管理工具,它集成在 OceanBase 数据库集群中,可以以极小的资源消耗部署在任意一台数据库节点上,文档:https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000508228,https://www.oceanbase.com/docs/community-obd-cn-10000000001690027

5.规划部署方案

根据业务量和高可用要求规划部署方案,有同城三机房三副本、三地五中心五副本

咱们学习使用,选择同城三机房三副本,需要准备三台服务器,每个机房一台服务器,我在Mac上用VMware创建了3台Centos7.4虚拟机,规划如下:

服务器IP配置zone
db1192.168.113.1612C 13G 100Gzone1
db2192.168.113.1622C 10G 100Gzone2
db3192.168.113.1632C 10G 100Gzone3

在这里插入图片描述

db1需安装 OBD 软件,配置高一点,OBD用于管理 OceanBase 集群,存储 OceanBase 集群安装包和集群配置信息

因OceanBase集群的服务器都是对等的,所以后续扩容时,每次增加服务器的数量都是zone数量乘以服务器数量,如:3个zone每个加一台 = 3台

6.部署前配置
查看操作系统信息:cat /etc/redhat-release
查看内核信息:uname -r
查看内存:free -g
查看磁盘:df -h
查看网卡:ifconfig
6.1.服务器之间需配置无密码SSH登录
1.查看机器上密钥是否存在:ls ~/.ssh/id_rsa.pub

2.不存在,则生成 SSH 公钥和私钥:ssh-keygen -t rsa

3.将公钥复制到目标机器的 authorized_keys 文件中:ssh-copy-id -i ~/.ssh/id_rsa.pub <user>@<server_ip>

tips:每台服务器都生成密钥并复制到另外其他服务器上

6.2.配置时钟源

OceanBase 集群需要保证集群内各机器的时间同步,否则集群无法启动,服务在运行时也会出现异常,集群允许的时钟偏差不能超过 2s。当超过 2s 时,会出现无主情况

1.安装 NTP:yum install ntp ntpdate -y
2.查看服务器的 NTP 连接:ntpq -4p
3.以某台服务器为NTP 服务端服务器
 3.1.以 root 用户登录 NTP 服务端服务器,编辑配置文件:vi /etc/ntp.conf
 3.2.在配置文件中添加以下内容:server <your_ntp_server_ip>
 3.3.重启 NTP 服务端服务:service ntpd restart
 3.4.查看 NTP 服务端服务是否启动成功:ps -ef | grep -i ntpd
 3.5.设置 NTP 服务开机自启动:chkconfig ntpd on
4.开启 NTP 客户端服务
 4.1.用 root 用户登录 OBServer 节点服务器
 4.2.停止 NTP 服务:service ntpd stop
 4.3.同步 NTP 服务端时间:ntpdate 10.10.10.1
 4.4.编辑配置文件:vi /etc/ntp.conf
 4.5.添加以下内容:server <your_ntp_server_ip>
 4.6.启动 NTP 服务:/etc/init.d/ntpd start
 4.7.运行命令验证配置是否成功:ntpstat
   synchronised to NTP server (xxx.xxx.xxx.xxx) at stratum 3
   time correct to within 2 ms
   polling server every 64 s
 4.8.运行命令验证配置是否成功:timedatectl 
   Local time: Thu 2021-04-22 11:02:32 CST
    Universal time: Thu 2021-04-22 03:02:32 UTC
        RTC time: Thu 2021-04-22 11:02:32
       Time zone: Asia/Shanghai (CST, +0800)
     NTP enabled: yes
   NTP synchronized: yes
    RTC in local TZ: yes
      DST active: n/a

此处还需要考虑内网环境,怎么安装ntp

6.3.规划磁盘

OceanBase数据存储在:事务日志盘、数据盘,并建议这两种数据分别存储在不同磁盘上,从而提供IO效率,此处咱们学习就不区分两块磁盘了。

  • 事务日志盘,建议大小为机器内存的4倍,事务日志达到磁盘总量的 80% 时,将触发自动清除,如 /redo。

  • 数据盘,存储基线数据,如 /data。

6.4.配置 limits.conf

OceanBase 数据库的进程涉及的限制包括线程最大栈空间大小(Stack)、最大文件句柄数(Open Files)和 core 文件大小 (Core File Size),如果不配置会在部署启动时报错,每台服务器都配置:

1.编辑文件:vi /etc/security/limits.conf

2.加入以下内容
root soft nofile 655350
root hard nofile 655350
* soft nofile 655350
* hard nofile 655350
* soft stack 20480
* hard stack 20480
* soft nproc 655360
* hard nproc 655360
* soft core unlimited
* hard core unlimited

3.查看配置:ulimit -a
6.5.配置 sysctl.conf

配置网络和内核参数提高 Linux 系统的性能,每台服务器都配置:

1.打开配置:vi /etc/sysctl.conf

2.添加以下内容:
for oceanbase
修改内核异步 I/O 限制
fs.aio-max-nr=1048576

网络优化
net.core.somaxconn = 2048
net.core.netdev_max_backlog = 10000 
net.core.rmem_default = 16777216 
net.core.wmem_default = 16777216 
net.core.rmem_max = 16777216 
net.core.wmem_max = 16777216

net.ipv4.ip_local_port_range = 3500 65535 
net.ipv4.ip_forward = 0 
net.ipv4.conf.default.rp_filter = 1 
net.ipv4.conf.default.accept_source_route = 0 
net.ipv4.tcp_syncookies = 0 
net.ipv4.tcp_rmem = 4096 87380 16777216 
net.ipv4.tcp_wmem = 4096 65536 16777216 
net.ipv4.tcp_max_syn_backlog = 16384 
net.ipv4.tcp_fin_timeout = 15 
net.ipv4.tcp_max_syn_backlog = 16384 
net.ipv4.tcp_tw_reuse = 1 
net.ipv4.tcp_tw_recycle = 1 
net.ipv4.tcp_slow_start_after_idle=0

vm.swappiness = 0
vm.min_free_kbytes = 2097152
修改进程可以拥有的虚拟内存区域数量
vm.max_map_count = 655360

此处为 OceanBase 数据库的 data 目录
kernel.core_pattern = /data/core-%e-%p-%t

3.加载配置,使配置生效:sysctl -p
6.6.关闭防火墙和 SELinux
systemctl disable firewalld 
systemctl stop firewalld
systemctl status firewalld
vi /etc/selinux/config
SELINUX=disabled

setenforce 0
6.7.创建用户

如果是用root帐号部署的,此处可忽略,但真实的环境可能不会给root帐号,那么就需要创建用户,并让帐号有某些目录的权限。

1.创建账户 admin
useradd -U admin -d /home/admin -s /bin/bash
mkdir -p /home/admin
chown -R admin:admin /home/admin

2.为账户 admin 设置密码
passwd admin

3.为账户 admin 设置 sudo 权限
vim /etc/sudoers
添加如下内容:
Same thing without a password
%wheel      ALL=(ALL)       NOPASSWD: ALL
admin       ALL=(ALL)       NOPASSWD: ALL

4.修改OceanBase集群相关文件所属用户,假设/data、/redo、/home/admin为真实挂载目录
chown -R admin:admin /data
chown -R admin:admin /redo
chown -R admin:admin /home/admin
6.8.配置JDK 1.8

OCP Express使用到了jdk,因为它是一个java web服务,下面多配置了一个java_bin,是因为OCP Express可视化部署页面中用到的就是java_bin

vi /etc/profile

export JAVA_HOME=/mnt/software/jdk1.8.0_251
export java_bin=/mnt/software/jdk1.8.0_251/bin
export PATH=$PATH:${JAVA_HOME}/bin

建议以上配置在目标服务器上都配一遍

7.部署

下载好 all-in-one 安装包,包含了安装所需的所有软件和依赖,并将其上传到中控机器目录下,解压并安装

tar -xzf oceanbase-all-in-one-*.tar.gz
cd oceanbase-all-in-one/bin/
./install.sh
source ~/.oceanbase-all-in-one/bin/env.sh

上面的命令只是在中控机上安装好了OBD,同时在中控机上安装了一个本地镜像仓库,并把all-in-one中的所有软件上传到镜像仓库,OBD部署时,会把镜像仓库中用到的安装包分发到各个服务器上进行部署安装

7.1.单机部署

1.1输入 obd demo,就会创建一个最小规格的OceanBase,shell终端会输出连接信息,使用obclient连接即可

1.2通过docker快速部署体验

docker pull oceanbase/oceanbase-ce
#MINI_MODE=1是最小规格,等于0是最大规格部署
docker run -p 2881:2881 --name obstandalone -e MINI_MODE=1 -d oceanbase/oceanbase-ce
docker logs obstandalone | tail -1 ,如果返回boot success!,此步骤要等待好几分钟,因为下载的文件比较大

单机部署不建议生产环境使用

7.5.集群部署

集群部署有OBD、OCP、命令行等方式,下面介绍OBD web页面可视化部署OceanBase集群。

安装 all-in-one后,通过下面命令启动一个web页面,通过web页面可视化方式部署集群,原理是把可视化配置的参数内容生成到一个配置文件里面,最后通过配置文件启动集群

obd web -p 8680
start OBD WEB in 0.0.0.0:8680
please open http://192.168.113.161:8680

访问http://192.168.113.161:8680

在这里插入图片描述

页面顶部有5个步骤:部署配置 、节点配置、集群配置、预检查、部署。

  • 部署配置 界面修改 集群名称 并勾选待部署组件,也可不做修改,使用默认配置(默认部署所有组件)。单击 下一步 进入 节点配置 页面

在这里插入图片描述

  • 节点配置 页面输入节点 IP 和用户密码,单击 下一步 进入 集群配置 页面

按上面服务器规划,有zone1、zone2、zone3,每个zone有一台服务器,192.168.113.161、192.168.113.162、192.168.113.163,选择zone1为RootServer节点

在这里插入图片描述

我是用root用户部署的,输入root和密码

  • 集群配置 页面配置集群的部署模式、密码、目录、端口以及更多配置,您也可不做修改,使用默认配置。单击 下一步 进入 预检查 页面
    在这里插入图片描述

  • 预检查 页面查看配置信息,无误后单击 预检查 进行检查。若预检查报错,您可根据页面建议选择 自动修复 或者单击 了解更多方案 跳转至错误码文档,参考文档自行修改。所有报错修改后,可单击 重新检查 再次进行预检查。

自动修复一般修复不了,要根据错误信息手动处理,我遇到的是机器资源不够,ulimit太小,jdk未配置正确

在这里插入图片描述

  • 预检查通过后,单击 部署 开始 OceanBase 集群的部署。部署成功会输出各个组件的连接方式,可复制进行访问

在这里插入图片描述

出现此界面就代表OceanBase部署成功了,各个组件的配置信息非常重要,建议保存后再关闭此页面

OBProxy -> OceanBase 数据库代理(OceanBase Database Proxy,简称ODP),OceanBase 数据库用户的数据会以多副本的形式存放在各个 OBServer 节点上,ODP 接收用户发出的 SQL 请求,并将 SQL 请求转发至最佳目标 OBServer 节点,最后将执行结果返回给用户,有了ODP代理,当后端OBServer宕机、扩缩容时,OBProxy会屏蔽掉无效或下线的OBServer,对客户端透明。

  • 单击 完成,结束部署流程(一定要保存好各个组件的帐号、密码和连接字符串)

使用 OBClient 客户端连接 OceanBase 数据库,也可以使用mysql或Navicat去连接。

通过 ODP 代理访问数据库,以 ODP 所在节点为192.168.113.161 为例
obclient -h192.168.113.161 -P2883 -uroot@sys -p -Doceanbase -A

使用Navicat连接OBProxy

在这里插入图片描述

在这里插入图片描述

我用OceanBase的root用户,在sys系统租户下,创建了一个demo的数据库,创建一张表tb1,新增了两条数据

此处只做演示,官方推荐创建自定义租户,在业务租户下创建数据库和表,租户就是一个数据库实例,有自己的cpu-内存资源、用户和权限,租户间数据和硬件资源是隔离的。

登录 OCP Express web界面管理集群,可查看集群的健康状态,CPU、内存等资源使用情况,SQL执行次数,执行时间,报错等信息

地址是:http://192.168.113.161:8180/admin ,帐号和密码在上面的部署页面有

在这里插入图片描述

在这里插入图片描述

使用OBD web页面可视化方式部署集群看上去比较简单,但原理是把可视化配置的参数生成到一个配置文件里面,并通过命令行形式使用该配置文件启动集群

在中控机161服务器的家目录: ll -al,可以看到一个 .obd 目录
在这里插入图片描述

进入.obd/cluster/myoceanbase/ ,里面有个config.yaml文件,这就是obd web可视化页面配置后生成的配置文件,部署启动时就用到了该文件

在这里插入图片描述

cat config.yaml ,里面内容如下:

user:
  username: root
  password: 123456
  port: 22
oceanbase-ce:
  version: 4.2.1.2
  release: 102000042023120514.el7
  package_hash: b2ccb524f200a9ef0fad2cddf59d309ddaa2e3e4
  192.168.113.161:
    zone: zone1
  192.168.113.162:
    zone: zone2
  192.168.113.163:
    zone: zone3
  servers:
  - 192.168.113.161
  - 192.168.113.162
  - 192.168.113.163
  global:
    appname: myoceanbase
    root_password: /aVi*H8(0%FS_YwZ-|dmo&[hjlT7pe@E
    mysql_port: 2881
    rpc_port: 2882
    home_path: /root/myoceanbase/oceanbase
    cluster_id: 1702997757
    ocp_agent_monitor_password: CG6Ks3IBSn
    proxyro_password: UDECAf4jk1
    ocp_meta_password: BBieozeEvM
    enable_syslog_recycle: true
    enable_syslog_wf: false
    max_syslog_file_count: 4
    ocp_meta_tenant_log_disk_size: 6656M
    ocp_meta_tenant_memory_size: 1536M
    memory_limit: 6G
    datafile_size: 2G
    system_memory: 1G
    log_disk_size: 13G
    cpu_count: 16
    production_mode: false
    __min_full_resource_pool_memory: 1073741824
    datafile_maxsize: 8G
    datafile_next: 2G
obproxy-ce:
  version: 4.2.1.0
  package_hash: 0aed4b782120e4248b749f67be3d2cc82cdcb70d
  release: 11.el7
  servers:
  - 192.168.113.161
  global:
    prometheus_listen_port: 2884
    listen_port: 2883
    home_path: /root/myoceanbase/obproxy
    obproxy_sys_password: Zl7nTJ7rYf
    skip_proxy_sys_private_check: true
    enable_strict_kernel_release: false
    enable_cluster_checkout: false
    proxy_mem_limited: 500M
    rs_list: 192.168.113.161:2881;192.168.113.162:2881;192.168.113.163:2881
    observer_sys_password: UDECAf4jk1
    cluster_name: myoceanbase
    observer_root_password: /aVi*H8(0%FS_YwZ-|dmo&[hjlT7pe@E
  depends:
  - oceanbase-ce
obagent:
  version: 4.2.1
  package_hash: c08058fef64b2dc6b5e2f99748fbd76fe872e356
  release: 100000122023103020.el7
  servers:
  - 192.168.113.161
  - 192.168.113.162
  - 192.168.113.163
  global:
    monagent_http_port: 8088
    mgragent_http_port: 8089
    home_path: /root/myoceanbase/obagent
    http_basic_auth_password: rKwS3yRXiO
    ob_monitor_status: active
  depends:
  - oceanbase-ce
ocp-express:
  version: 4.2.1
  package_hash: c69fe1fe0ec0d1a4e14f75468ccda4d0a7ca8d28
  release: 100000222023111619.el7
  servers:
  - 192.168.113.161
  global:
    port: 8180
    home_path: /root/myoceanbase/ocpexpress
    admin_passwd: RQ8k1t(#
    memory_size: 752M
  depends:
  - obagent
  - oceanbase-ce
  - obproxy-ce

tips:这里有个问题,部署时的配置参数,可以通过obclient连接数据库后,使用数据库设置参数命令修改参数后,这个配置文件的参数不会被同步修改,如果重启集群,则在数据库中修改的参数失效了,官方说以后支持同步修改配置。

OBD部署后,可以使用命令行查看集群:obd cluster list

此处的status状态为 stopped,说明集群是停止的,可以使用:obd cluster start myoceanbase 启动集群

查看集群详细信息:obd cluster display myoceanbase

关闭虚拟机时,可以关闭集群:obd cluster stop myoceanbase
如果要修改上面的配置:obd cluster edit-config myoceanbase
刷新配置使其生效:obd cluster reload myoceanbase

查看obd cluster帮助文档:obd cluster --help

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
如果某台机器宕机了货observer进程挂了,可以登录到服务器上,使用命令行,单独启动这个observer,但需要注意,如果该observer下线时间超过默认的3600s (1小时)则会被集群长久下线,如果需要维护服务器则可以先手动修改该参数值的大小,再维护。

cd /home/root/myoceanbase
1.查看observer进程启动的参数:ps -ef|grep observer
2.无参数启动:/home/root/myoceanbase/bin/observer
3.带参数启动:/home/root/myoceanbase/bin/observer -o "max_syslog_file_count=15,datafile_size=100G...........等等"  ,此处的参数是第一步中查看到的
8.卸载集群

在清理集群环境之前,建议先进行数据备份。

  • 8.1.停止和卸载服务,停止旧 observer 进程,并确保它们不再运行。然后卸载数据库软件

    1.查看 observer 进程是否存在:ps -ef|grep observer
    
    2.停止 observer 进程:kill -9 `pidof observer`
    
    3.如果是使用obd部署的,建议使用: obd cluster stop myoceanbase 来停止集群
    
    4.查看已安装的 OceanBase 数据库 RPM 包名称:rpm -qa|grep oceanbase
    
    5.卸载安装的 OceanBase 数据库 RPM 包:sudo rpm -e $rpm_name
    
    6.查看RPM包是否卸载完:rpm -ql $rpm_name
    
  • 8.2.数据库文件清理,删除旧的数据库文件,包括数据文件、日志文件和其他临时文件

    1.删除 observer 进程运行日志盘文件,admin为部署用户,不同部署用户,此处需替换
    sudo rm -rf /home/admin/oceanbase/*
    
    2.删除 observer 进程日志盘文件
    sudo rm -rf /data/log1/*
    
    3.删除 observer 进程数据盘文件
    sudo rm -rf /data/1/*
    

以上卸载步骤,每台服务器都操作一遍

希望以上内容能对你有所帮助,谢谢

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JS-WebAPIS(四)

日期对象&#xff08;常用&#xff09; • 实例化 在代码中发现了 new 关键字时&#xff0c;一般将这个操作称为实例化创建一个时间对象并获取时间 获得当前时间 获得指定时间 • 时间对象方法 使用场景&#xff1a;因为日期对象返回的数据我们不能直接使用&#xff0c;所以…

Yearning存在任意文件读取漏洞

文章目录 前言声明一、Yearning简介二、漏洞描述三、影响版本四、漏洞复现五、修复建议 前言 Yearning MYSQL SQL语句审核平台。提供查询审计&#xff0c;SQL审核&#xff0c;SQL回滚&#xff0c;自定义工作流等多种功能。该平台存在任意文件读取漏洞。 声明 请勿利用文章内的…

ThinkPad T14/T15/P14s/P15s gen2电脑原厂Win10系统镜像 恢复笔记本出厂时预装自带OEM系统

lenovo联想原装出厂Windows10系统&#xff0c;适用型号&#xff1a; ThinkPad T14 Gen 2&#xff0c;ThinPad T15 Gen 2&#xff0c;ThinkPad P14s Gen 2&#xff0c;ThinkPad P15s Gen 2 &#xff08;20W1,20W5,20VY,20W7,20W0,20W4,20VX,20W6&#xff09; 链接&#xff1…

【车载开发系列】Autosar DCM诊断管理模块

【车载开发系列】Autosar DCM诊断管理模块 【车载开发系列】Autosar DCM诊断管理模块 【车载开发系列】Autosar DCM诊断管理模块一. DCM模块概念二. DCM模块与Autosar其他模块关系1&#xff09;Dcm和PduR的交互2&#xff09;Dcm和ComM模块的交互3&#xff09;Dcm和Dem的交互4&a…

职能部门的绩效考核改革,解决方案来了

一、客户背景及现状问题 A酒店是酒店行业的龙头企业&#xff0c;其品牌享有很高的知名度。为了适应市场竞争及发展的需要、充分发挥每个员工的积极性&#xff0c;提高企业的整体业绩&#xff0c;该企业于前几年开始实行严格的绩效考核制度。绩效考核实行之初&#xff0c;管理者…

基于Django的Python应用—学习笔记—功能完善

一、让用户可以输入信息 创建forms.py 创建基于表单的页面的方法几乎与前面创建网页一样&#xff1a;定义一个 URL &#xff0c;编写一个视图函数并编写一个模板。一个主要差别是&#xff0c;需要导入包含表单 的模块forms.py 。 from django import forms from .models impor…

安捷伦E8361A网络分析仪E8361C

安捷伦E8361A网络分析仪 E8361A 是 Agilent 的 67 GHz 网络分析仪。网络分析仪是一种功能强大的仪器&#xff0c;可以以无与伦比的精度测量射频设备的线性特性。许多行业使用网络分析仪来测试设备、测量材料和监控信号的完整性。附加功能&#xff1a; 94 dB 的动态范围和 <…

Odrive 学习系列四:如何使用脚本自动初始化odrive配置

一、背景: 在学习markbase的教程后,发现odrive的初始化配置命令确实有点多。尽管odrive有自动补全: 且可以通过 ctrl + → 来快速补全: 但是对初学者而言,仍旧有比较大的工作量。 而针对于此,我们可以通过powershell脚本的方式来解决这个问题。 二、设计初始化…

Flink实时数仓同步:拉链表实战详解

一、背景 在大数据领域&#xff0c;业务数据通常最初存储在关系型数据库&#xff0c;例如MySQL。然而&#xff0c;为了满足日常分析和报表等需求&#xff0c;大数据平台会采用多种不同的存储方式来容纳这些业务数据。这些存储方式包括离线仓库、实时仓库等&#xff0c;根据不同…

github如果有别人给你的仓库提pull request,该如何验证他的代码并合并

我有一个github仓库&#xff0c;是做抖音直播数据对接的&#xff0c;有很多朋友给我点了star&#xff0c;也有朋友fork了这个仓库&#xff0c;最近接收到一个pull request的请求&#xff0c;他最直播结束的内容作了判断&#xff0c;我该如何在我本地校验它的代码并合并呢&#…

【Linux】03 GCC编译器的使用

一、编译过程 在使用gcc编译程序时&#xff0c;编译过程可以简要划分为4个阶段&#xff1a; 预处理、编译、汇编、链接 1.1 预处理&#xff08;preprocessing&#xff09; 这个阶段主要处理源文件中的#indef、#include和#define预处理命令&#xff1b; 这里主要是把一些include…

Linux 部署

jdk&tomcat安装 1.上传jdk、tomcat安装包 2.解压两个工具包 #解压tomcat tar -zxvf apache-tomcat-8.5.20.tar.gz #解压jdk tar -zxvf jdk-8u151-linux-x64.tar.gz 3.配置并且测试jdk安装 #配置环境变量 vim /etc/profile #java environment export JAVA_HOME/root/soft/…

【手撕C语言 第五集】分支和循环(下)

for循环 我们已经知道了while循环&#xff0c;但是我们为什么还要一个for循环呢&#xff1f; 首先来看看for循环的语法&#xff1a; 表达式1 表达式1为初始化部分&#xff0c;用于初始化循环变量的。 表达式2 表达式2为条件判断部分&#xff0c;用于判断循环时候终止。 表达式…

《仙剑4》、《仙剑6》双“空降”,这一次,网友的评论“真相了!”

“本以为《仙剑1》只是国产仙侠剧的起点&#xff0c;结果却没想到&#xff0c;它却真正意义上成为了巅峰。” 这一次&#xff0c;网友的评论“真相了&#xff01;” 先说《仙剑四》&#xff0c;这部据说耗资3.4亿的大制作&#xff0c;奈何笔者实在看不出它的“含金量”&#x…

2023 IoTDB Summit:湖南大唐先一科技有限公司主任架构师舒畅《IoTDB 在发电领域的应用实践》...

12 月 3 日&#xff0c;2023 IoTDB 用户大会在北京成功举行&#xff0c;收获强烈反响。本次峰会汇集了超 20 位大咖嘉宾带来工业互联网行业、技术、应用方向的精彩议题&#xff0c;多位学术泰斗、企业代表、开发者&#xff0c;深度分享了工业物联网时序数据库 IoTDB 的技术创新…

Deepin_Ubuntu_查看树形目录结构(tree)

Linux系统&#xff08;Deepin、Ubuntu&#xff09;中&#xff0c;可以使用tree命令来查看树形目录结构&#xff0c;下面是一些示例&#xff1a; 查看当前目录的树形结构&#xff1a; tree查看指定目录的树形结构&#xff0c;例如/etc/X11/fonts目录&#xff1a; tree /etc/X…

PSoc62™开发板之i2c通信

实验目的 使用模拟i2c接口读取温湿度气压模块BME280数据 实验准备 PSoc62™开发板温湿度气压模块BME280公母头杜邦线 板载资源 本次实验是通过模拟i2c时序的方式来进行通信&#xff0c;理论上可以有非常多的方式配置i2c引脚&#xff0c;不像硬件i2c那样芯片出厂引脚已经固…

C# Cad2016二次开发选择csv导入信息(七)

//选择csv导入信息 [CommandMethod("setdata")] //本程序在AutoCAD的快捷命令是"DLLLOAD" public void setdata() {Microsoft.Win32.OpenFileDialog dlg new Microsoft.Win32.OpenFileDialog();dlg.DefaultExt ".csv";// Display OpenFileDial…

1.php开发-个人博客项目文章功能显示数据库操作数据接收

&#xff08;2022-day12&#xff09; #知识点 1-php入门&#xff0c;语法&#xff0c;提交 2-mysql 3-HTMLcss ​ 演示案例 博客-文章阅读功能初步实现 实现功能&#xff1a; 前端文章导航&#xff0c;点入内容显示&#xff0c;更改ID显示不同内容 实现步骤&#xff1…

idea 连接docker

idea 连接docker步骤 services --> docker connection --->tcp://192.168.21.128:2375 修改docker配置 vi /usr/lib/systemd/system/docker.service 在ExecStart/usr/bin/dockerd -H fd:// --containerd/run/containerd/containerd.sock 后面加上 -H tcp://0.0.0.0:23…