【简介】

OBDeploy是OceanBase集群部署的工具,可以通过简单的几行命令,就能快速的进行OceanBase部署。但对于初学者来讲,可能会比较困惑,Deploy到底做了哪些事情?里面的具体步骤有哪些?虽然部署会成功,可能对于细节还是一头雾水。万一部署失败,排障的过程就会非常麻烦,所以我们尝试脱离OBDeploy,进行手工部署OceanBase集群,以了解一下具体的安装细节。

另外一方面,用OBDeploy部署,有一些莫名其妙的限制。比如目录是动态MD5生成,安装包是在/home/admin目录下,等等。这些限制对于标准化部署,可能不是那么标准。所以,脱离OBDeploy,部署OCeanbase,也有实际意义。

【场景选择】

OceanBase部署的场景很多,有单机,本机,群集,是否带OBProxy等等。在OBDeploy中,example目录下,有一些示例模板。

模板名称 说明
distributed-example.yaml 服务器内存>50G, 多节点部署
distributed-with-obproxy-example.yaml 服务器内存>50G,多节点部署,并且部署obproxy
local-example.yaml 服务器内存>50G, 本机单节点部署,只有一个zone
mini-distributed-example.yaml 服务器内存小,多节点部署。
mini-distributed-with-obproxy-example.yaml 服务器内存小,多节点部署。并且部署obproxy
mini-local-example.yaml 服务器内存小,本机单节点部署,只有一个zone
mini-single-example.yaml 服务器内存小,远程单节点部署,只有一个zone
mini-single-with-obproxy-example.yaml 服务器内存小,单节点部署,单zone,且部署obproxy
single-example.yaml 服务器内存>50G, 单节点部署,只有一个zone
single-with-obproxy-example.yaml 服务器内存>50G, 单节点部署,单zone, 有obproxy

这里,我们选择mini-distributed-example.yaml这个模板。Mini指的是我们服务器内存小,测试用途。实际规格是20C 256G,distributed指的是三节点部署。我们跳过obproxy的安装,因此选用该模板。 我们用RPM包的方式进行安装。

准备如下四台服务器:

SERVERA 	10.10.10.8	[中控机,可以用虚拟机,用于从外网下载RPM包,以及OBDEPLOY工具]
SERVERB 10.10.10.139
SERVERC 10.10.10.135
SERVERD 10.10.10.133

PS:SERVERB, SERVERC, SERVERD需要用物理机。虚拟机会在群集创建的步骤,非常容易超时,导致搭建失败

【环境准备】

1.在所有服务器上,创建用户obuser

sudo useradd obuser;  sudo passwd obuser

2.切换到obuser账号,创建SSH

ssh-keygen –t RSA

3.把obuser账号加入到sudoer中

sudo visudo

4.在中控机器上,.ssh目录下,复制key:

ssh-copy-id obuser@10.10.10.111
ssh-copy-id obuser@10.10.10.131
ssh-copy-id obuser@10.10.10.138

5.在中控机上,wget下载:

http://mirrors.aliyun.com/oceanbase/community/stable/el/7/x86_64/

这里选择的版本是当前的版本,如果有最新的,应该选择最新的版本:

libobclient-2.0.0-2.el7.x86_64.rpm
obclient-2.0.0-2.el7.x86_64.rpm
ob-deploy-1.0.2-2.el7.x86_64.rpm
obproxy-3.1.0-1.el7.x86_64.rpm
oceanbase-ce-3.1.0-2.el7.x86_64.rpm
oceanbase-ce-libs-3.1.0-2.el7.x86_64.rpm
oceanbase-ce-sql-parser-3.1.0-2.el7.x86_64.rpm

并把该下载的文件,传递到SERVERB, SERVERC, SERVERD上。

scp *.rpm obuser@10.10.10.111:~
scp *.rpm obuser@10.10.10.131:~
scp *.rpm obuser@10.10.10.138:~

【服务器准备】

1)在每台工作机上,修改环境变量:

sudo sed -i '$a vm.max_map_count=655360\nfs.aio-max-nr=1048576' /etc/sysctl.conf
sudo sed -i '$a* soft nofile 655350\n* hard nofile 655350\n* soft nproc 655360\n* hard nproc 655360' /etc/security/limits.d/20-nproc.conf
sudo sed -i '$a* soft nofile 655350\n* hard nofile 655350\n* soft nproc 655360\n* hard nproc 655360\n* hard core unlimited\n* soft core unlimited\n* hard stack 10240\n* soft stack 10240\n* hard cpu unlimited\n* soft cpu unlimited' /etc/security/limits.conf

并重启使得生效。

2)在每台工作机上,安装ocenabase:

sudo yum install oceanbase-ce-libs-3.1.0-2.el7.x86_64.rpm
sudo yum install oceanbase-ce-3.1.0-2.el7.x86_64.rpm

安装程序会把oceanbase安装到 /home/admin/oceanbase目录下。该目录并非是我们所期望的,所以做如下调整:

cd /home/obuser
sudo mv /home/admin/oceanbase .
sudo chown –R obuser:obuser /home/obuser/oceanbase

3)库路径处理

下面步骤需要操作一下,如果不处理的话,群集可能会搭建不起来。(虽然服务可以起来)。

sudo mv /home/obuser/oceanbase/lib /home/obuser/oceanbase/libs
ln –sf /home/obuser/oceanbase/libs /home/obuser/oceanbase/lib

在每台机器上, export环境变量LD_LIBRARY_PATH

export LD_LIBRARY_PATH=/home/obuser/oceanbase/lib:$LD_LIBRARY_PATH 

或者可以直接修改.bashrc文件,使得一直生效。

我们可以运行下面命令:

/home/obuser/oceanbase/bin/observer –help 

来验证observer是否能打印帮助信息。

【数据目录准备】

在每台机器上,创建数据目录:

sudo mkdir /data/observer
sudo chown -R obuser:obuser /data/observer mkdir -p /data/observer/admin;
mkdir -p /data/observer/.conf
mkdir -p /data/observer/log;
mkdir -p /data/observer/store; mkdir -p /data/observer/store/sstable
mkdir -p /data/observer/store/clog
mkdir -p /data/observer/store/ilog
mkdir -p /data/observer/store/slog

备注,如果后续群集搭建不成功,需要将整个目录清空。所以需要准备好清理脚本:在重建之前,必须保持目录干净:

sudo kill -9 `pidof observer`
rm -fr /data/observer/log/*
rm -fr /data/observer/run/mysql.sock
rm -fr /data/observer/run/observer.pid
rm -fr /data/observer/store/clog_shm
rm -fr /data/observer/store/ilog_shm
rm -fr /data/observer/store/clog/1
rm -fr /data/observer/store/ilog/1
rm -fr /data/observer/store/slog/1
rm -fr /data/observer/store/sstable/block_file

【启动服务】

我们启动observer的时候,一定要到 /data/observer目录下进行启动。

cd /data/observer   // 要在该目录下启动服务

第一台服务器上,运行如下命令,启动:

/home/obuser/oceanbase/bin/observer -r '10.10.10.111:5022:2883;10.10.10.131:5022:2883;10.10.10.138:5022:2883’ -o datafile_size=16G,memory_limit=8G,system_memory=4G,stack_size=512K,cpu_count=8,cache_wash_threshold=1G,workers_per_cpu_quota=10,schema_history_expire_time=1d,net_thread_count=4,major_freeze_duty_time=Disable,minor_freeze_times=10,enable_separate_sys_clog=0,enable_merge_by_turn=False,datafile_disk_percentage=20,idc='idc1' -z 'zone1' -p 2883 –P5022 -c 11 -d /data/observer/store -i eth0 –n myapp –l ERROR

第二台服务器上,启动如下命令:

/home/obuser/oceanbase/bin/observer -r '10.10.10.111:5022:2883;10.10.10.131:5022:2883;10.10.10.138:5022:2883' -o datafile_size=16G,memory_limit=8G,system_memory=4G,stack_size=512K,cpu_count=8,cache_wash_threshold=1G,workers_per_cpu_quota=10,schema_history_expire_time=1d,net_thread_count=4,major_freeze_duty_time=Disable,minor_freeze_times=10,enable_separate_sys_clog=0,enable_merge_by_turn=False,datafile_disk_percentage=20,idc='idc2' -z 'zone2' -p 2883 –P5022 -c 11 -d /data/observer/store -i eth0 –n myapp –l ERROR

第三台服务器上,启动如下命令:

/home/obuser/oceanbase/bin/observer -r '10.10.10.111:5022:2883;10.10.10.131:5022:2883;10.10.10.138:5022:2883' -o datafile_size=16G,memory_limit=8G,system_memory=4G,stack_size=512K,cpu_count=8,cache_wash_threshold=1G,workers_per_cpu_quota=10,schema_history_expire_time=1d,net_thread_count=4,major_freeze_duty_time=Disable,minor_freeze_times=10,enable_separate_sys_clog=0,enable_merge_by_turn=False,datafile_disk_percentage=20,idc='idc3' -z 'zone3' -p 2883 –P5022 -c 1 -d /data/observer/store -i eth0 –n myapp –l ERROR

服务启动应该不会有什么问题,也很少会报错。

【群集搭建】

群集启动后,我们用如下命令进行登录:

Mysql –h 10.10.10.111 –port 2883 –u root

登录后,执行下面的命令创建群集

alter system bootstrap REGION "sys_region" ZONE "zone1" SERVER "10.10.10.111:5022",REGION "sys_region" ZONE "zone2" SERVER "10.10.10.131:5022",REGION "sys_region" ZONE "zone3" SERVER "10.10.10.138:5022";

这步在物理机上,一般耗时30秒左右。但如果是虚拟机的话,可能部署的时间会更长。系统超时是10分钟。如果部署条件不符合的话,最终的结果也是超时,所以,如果创建集群超过3分钟都还没有完成的话,应该是前面的配置出现问题了。

脱离OBDeploy工具,手工部署OceanBase方法的更多相关文章

  1. 手工部署Sqlserver CLR程序集

    原文 手工部署Sqlserver CLR程序集 以前一直用VS部署Sqlserver CLR程序集简单省事,现在服务器部署在内网了,必须手动更新部署Sqlserver CLR程序集.    开始以为A ...

  2. Intellij IDEA 4种配置热部署的方法【转】【补】

    热加载 热加载可以使代码修改后无须重启服务器,就可以加载更改的代码.(其实分java和非java代码,本处可以让java代码立即生效且不重启服务) 第1种:修改服务器配置,使得IDEA窗口失去焦点时, ...

  3. Kubernetes 基于 ubuntu18.04 手工部署 (k8s)

    由于工作的需要, 手工部署一个 Kubernetes 环境(k8s).(以前都是云上搞定,拿来用) 习惯把这种工作记录下来,自己备查也和别人分享 网上相关文章很多, 我也参考了很多,这里推荐一个 链接 ...

  4. Java 使用Redis缓存工具的图文详细方法

    开始在 Java 中使用 Redis 前, 我们需要确保已经安装了 redis 服务及 Java redis 驱动,且你的机器上能正常使用 Java. (1)Java的安装配置可以参考我们的 Java ...

  5. C#脱离Halcon编程开发环境使用方法

    在没有安装Halcon开发程序(HDevelop (SSE2))的电脑上面编程,使C#脱离Halcon编程开发环境使用方法,除了按照Halcon与编程环境必须要做的设置步骤外,还需要做如下两个工作: ...

  6. Java基础知识强化之集合框架笔记33:Arrays工具类中asList()方法的使用

    1. Arrays工具类中asList()方法的使用 public static <T> List<T> asList(T... a): 把数组转成集合 注意事项: 虽然可以把 ...

  7. Linux性能分析工具与图形化方法

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~. 作者:赵坤|腾讯魔王工作室后台开发工程师 在项目开发中,经常会遇到程序启动时间过长.CPU使用率过高等问题,这个时候需要依靠性能分析工具来 ...

  8. Hutool工具里,POST方法,body中传参的几种调用方法

    接口说明: POSTMAN测试: JAVA代码: package com.provy.guard.api; import java.util.HashMap; import java.util.Map ...

  9. Docker 管理工具 Portainer部署

    Docker 管理工具 Portainer部署 一.官网 官网:http://www.portainer.io 演示地址:http://demo.portainer.io 用户名:admin 密码:t ...

随机推荐

  1. Navicat注册机报错No all pattern found! file already patched

    第一步:先把注册机放入安装目录. (这一步非常关键,先不要打开桌面上安装好的快捷方式!!) 第二步:如果之前下载过,把注册表清理干净 计算机\HKEY_CURRENT_USER\SOFTWARE\Pr ...

  2. C语言编译器开发之旅(一):词法分析扫描器

    本节我们先从一个简易的可以识别四则运算和整数值的词法分析扫描器开始.它实现的功能也很简单,就是读取我们给定的文件,并识别出文件中的token将其输出. 这个简易的扫描器支持的词法元素只有五个: 四个基 ...

  3. Spring Cloud Alibaba(13)---Sleuth概述

    Sleuth概述 前言 在微服务架构中,众多的微服务之间互相调用,如何清晰地记录服务的调用链路是一个需要解决的问题.同时,由于各种原因,跨进程的服务调用失败时,运维人员希望能够通过 查看日志和查看服务 ...

  4. python mixin到底是什么

    python mixin到底是什么 1.什么是Mixin 在面向对象编程中,Mixin是一种类,这种类包含了其他类要使用的方法,但不必充当其他类的父类.其他类是如何获取Mixin中的方法因语言的不同而 ...

  5. Step By Step(Lua模块与包)

    Step By Step(Lua模块与包) 从Lua 5.1开始,我们可以使用require和module函数来获取和创建Lua中的模块.从使用者的角度来看,一个模块就是一个程序库,可以通过requi ...

  6. Action4D:人群和杂物中的在线动作识别:CVPR209论文阅读

    Action4D:人群和杂物中的在线动作识别:CVPR209论文阅读 Action4D: Online Action Recognition in the Crowd and Clutter 论文链接 ...

  7. MegEngine亚线性显存优化

    MegEngine亚线性显存优化 MegEngine经过工程扩展和优化,发展出一套行之有效的加强版亚线性显存优化技术,既可在计算存储资源受限的条件下,轻松训练更深的模型,又可使用更大batch siz ...

  8. Technology Document Guide of TensorRT

    Technology Document Guide of TensorRT Abstract 本示例支持指南概述了GitHub和产品包中包含的所有受支持的TensorRT 7.2.1示例.Tensor ...

  9. Usb-type-C端口实现的挑战与设计方案

    Usb-type-C端口实现的挑战与设计方案 USB Type-C port implementation challenges and design solutions USB from 1.1 t ...

  10. 采用MVC模式创建一个简单的javascript App

    初次翻译,翻译的不好,还请见谅 JavaScript中最好的一部分之一,也可能是最糟糕的. 在HTML文档的头部添加一个开始和结束脚本标记,并在其中引入一些意大利面条式的代码,毫无疑问这是一种过分简单 ...