【简介】

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. GO学习-(24) Go语言操作Redis

    Go语言操作Redis 在项目开发中redis的使用也比较频繁,本文介绍了Go语言中go-redis库的基本使用. Redis介绍 Redis是一个开源的内存数据库,Redis提供了多种不同类型的数据 ...

  2. Python+Selenium自动化-设置等待三种等待方法

    Python+Selenium自动化-设置等待三种等待方法   如果遇到使用ajax加载的网页,页面元素可能不是同时加载出来的,这个时候,就需要我们通过设置一个等待条件,等待页面元素加载完成,避免出现 ...

  3. Go语言网络通信---tcp群发消息

    server package main import ( "fmt" "net" "os" "time" ) func ...

  4. nvJPEG库

    nvJPEG库 GPU加速的JPEG解码器,编码器和代码转换器 nvJPEG库是高性能的GPU加速库,用于解码,编码和转码JPEG格式的图像.nvJPEG2000库用于解码JPEG 2000格式的图像 ...

  5. AI框架精要:设计思想

    AI框架精要:设计思想 本文主要介绍飞桨paddle平台的底层设计思想,可以帮助用户理解飞桨paddle框架的运作过程,以便于在实际业务需求中,更好的完成模型代码编写与调试及飞桨paddle框架的二次 ...

  6. JavaScript 中精度问题以及解决方案

    JavaScript 中的数字按照 IEEE 754 的标准,使用 64 位双精度浮点型来表示.其中符号位 S,指数位 E,尾数位M分别占了 1,11,52 位,并且在 ES5 规范 中指出了指数位E ...

  7. Centos7拓展磁盘(逻辑增加)

    目录 第一步 第二步 第三步 以107.4G的Centos操作系统拓展20G磁盘空间,并将此20G磁盘空间分别分配给/home为例. 第一步 首先查看操作系统分区状况和磁盘占用情况.发现磁盘sda空间 ...

  8. 网络游戏逆向分析-3-通过发包函数找功能call

    网络游戏逆向分析-3-通过发包函数找功能call 网络游戏和单机游戏的分析有相似点,但是区别还是很大的. 网络游戏和单机游戏的区别: 网络游戏是需要和服务器进行交互的,网游中的所有功能几乎都会先发送封 ...

  9. Jrebel、IDEA的激活与Springloaded使用

    又有很长一段时间没写了,这次这篇随笔主要是分享下Jrebel与IDEA的激活方法以及推荐下Jrebel的替代工具Springloaded. 先来说下Jrebel的激活方法吧,之前有同事遇到了Jrebe ...

  10. 《面试补习》- Java集合知识梳理

    一.ArrayList ArrayList 底层数据结构为 动态数组 ,所以我们可以将之称为数组队列. ArrayList 的依赖关系: public class ArrayList<E> ...