脱离OBDeploy工具,手工部署OceanBase方法
【简介】
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方法的更多相关文章
- 手工部署Sqlserver CLR程序集
原文 手工部署Sqlserver CLR程序集 以前一直用VS部署Sqlserver CLR程序集简单省事,现在服务器部署在内网了,必须手动更新部署Sqlserver CLR程序集. 开始以为A ...
- Intellij IDEA 4种配置热部署的方法【转】【补】
热加载 热加载可以使代码修改后无须重启服务器,就可以加载更改的代码.(其实分java和非java代码,本处可以让java代码立即生效且不重启服务) 第1种:修改服务器配置,使得IDEA窗口失去焦点时, ...
- Kubernetes 基于 ubuntu18.04 手工部署 (k8s)
由于工作的需要, 手工部署一个 Kubernetes 环境(k8s).(以前都是云上搞定,拿来用) 习惯把这种工作记录下来,自己备查也和别人分享 网上相关文章很多, 我也参考了很多,这里推荐一个 链接 ...
- Java 使用Redis缓存工具的图文详细方法
开始在 Java 中使用 Redis 前, 我们需要确保已经安装了 redis 服务及 Java redis 驱动,且你的机器上能正常使用 Java. (1)Java的安装配置可以参考我们的 Java ...
- C#脱离Halcon编程开发环境使用方法
在没有安装Halcon开发程序(HDevelop (SSE2))的电脑上面编程,使C#脱离Halcon编程开发环境使用方法,除了按照Halcon与编程环境必须要做的设置步骤外,还需要做如下两个工作: ...
- Java基础知识强化之集合框架笔记33:Arrays工具类中asList()方法的使用
1. Arrays工具类中asList()方法的使用 public static <T> List<T> asList(T... a): 把数组转成集合 注意事项: 虽然可以把 ...
- Linux性能分析工具与图形化方法
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~. 作者:赵坤|腾讯魔王工作室后台开发工程师 在项目开发中,经常会遇到程序启动时间过长.CPU使用率过高等问题,这个时候需要依靠性能分析工具来 ...
- Hutool工具里,POST方法,body中传参的几种调用方法
接口说明: POSTMAN测试: JAVA代码: package com.provy.guard.api; import java.util.HashMap; import java.util.Map ...
- Docker 管理工具 Portainer部署
Docker 管理工具 Portainer部署 一.官网 官网:http://www.portainer.io 演示地址:http://demo.portainer.io 用户名:admin 密码:t ...
随机推荐
- GO学习-(24) Go语言操作Redis
Go语言操作Redis 在项目开发中redis的使用也比较频繁,本文介绍了Go语言中go-redis库的基本使用. Redis介绍 Redis是一个开源的内存数据库,Redis提供了多种不同类型的数据 ...
- Python+Selenium自动化-设置等待三种等待方法
Python+Selenium自动化-设置等待三种等待方法 如果遇到使用ajax加载的网页,页面元素可能不是同时加载出来的,这个时候,就需要我们通过设置一个等待条件,等待页面元素加载完成,避免出现 ...
- Go语言网络通信---tcp群发消息
server package main import ( "fmt" "net" "os" "time" ) func ...
- nvJPEG库
nvJPEG库 GPU加速的JPEG解码器,编码器和代码转换器 nvJPEG库是高性能的GPU加速库,用于解码,编码和转码JPEG格式的图像.nvJPEG2000库用于解码JPEG 2000格式的图像 ...
- AI框架精要:设计思想
AI框架精要:设计思想 本文主要介绍飞桨paddle平台的底层设计思想,可以帮助用户理解飞桨paddle框架的运作过程,以便于在实际业务需求中,更好的完成模型代码编写与调试及飞桨paddle框架的二次 ...
- JavaScript 中精度问题以及解决方案
JavaScript 中的数字按照 IEEE 754 的标准,使用 64 位双精度浮点型来表示.其中符号位 S,指数位 E,尾数位M分别占了 1,11,52 位,并且在 ES5 规范 中指出了指数位E ...
- Centos7拓展磁盘(逻辑增加)
目录 第一步 第二步 第三步 以107.4G的Centos操作系统拓展20G磁盘空间,并将此20G磁盘空间分别分配给/home为例. 第一步 首先查看操作系统分区状况和磁盘占用情况.发现磁盘sda空间 ...
- 网络游戏逆向分析-3-通过发包函数找功能call
网络游戏逆向分析-3-通过发包函数找功能call 网络游戏和单机游戏的分析有相似点,但是区别还是很大的. 网络游戏和单机游戏的区别: 网络游戏是需要和服务器进行交互的,网游中的所有功能几乎都会先发送封 ...
- Jrebel、IDEA的激活与Springloaded使用
又有很长一段时间没写了,这次这篇随笔主要是分享下Jrebel与IDEA的激活方法以及推荐下Jrebel的替代工具Springloaded. 先来说下Jrebel的激活方法吧,之前有同事遇到了Jrebe ...
- 《面试补习》- Java集合知识梳理
一.ArrayList ArrayList 底层数据结构为 动态数组 ,所以我们可以将之称为数组队列. ArrayList 的依赖关系: public class ArrayList<E> ...