oceanbase部署--使用OBD自动化部署三节点集群

news2024/12/23 11:17:09
准备步骤:

先将192.168.152.30 现有单节点集群stop,然后克隆两台虚拟机并在workstations重置网卡MAC,配置新主机IP

[admin@oceanbase ~]$ obd cluster list
+----------------------------------------------------------------------+
|                             Cluster List                             |
+-------------+--------------------------------------+-----------------+
| Name        | Configuration Path                   | Status (Cached) |
+-------------+--------------------------------------+-----------------+
| obce-single | /home/admin/.obd/cluster/obce-single | running         |
+-------------+--------------------------------------+-----------------+
[admin@oceanbase ~]$ obd cluster stop obce-single
Get local repositories ok
Search plugins ok
Open ssh connection ok
Stop observer ok
obce-single stopped
[admin@oceanbase ~]$ free -g
              total        used        free      shared  buff/cache   available
Mem:             15           0          13           0           1          11
Swap:             2           0           2

开始部署:

资源列表

IP     192.168.152.30、192.168.152.31、192.168.152.32
网卡名 ens33
OS     rhel80
CPU    4C
内存   总内存 16G,可用内存 11G以上
磁盘1  /dev/sdb 30G(一块也够)
磁盘2  /dev/sdc 30G

机器和角色划分

OBD       192.168.152.30 中控机,自动化部署软件
OBServer  192.168.152.30 OceanBase 数据库 zone1
OBServer  192.168.152.31 OceanBase 数据库 zone2
OBServer  192.168.152.32 OceanBase 数据库 zone3
OBProxy   192.168.152.30 OceanBase 访问反向代理  --若环境资源允许,可以每台observer均部署obproxy
OBClient  192.168.152.30 OceanBase 命令行客户端

配置互信和时钟同步

三台机子均执行如下命令:

ssh-keygen -t rsa
 ssh-copy-id 192.168.152.30
 ssh-copy-id 192.168.152.31
 ssh-copy-id 192.168.152.32
 ssh 192.168.152.30
 ssh 192.168.152.31
 ssh 192.168.152.32
时钟同步配置
服务端:vi /etc/chrony.conf
server 127.0.0.1
allow 192.168.0.0/16
local stratum 10

客户端:vi /etc/chrony.conf
server 192.168.152.30

systemctl enable chronyd.service
systemctl restart chronyd.service
chronyc activity 
[root@obce01 ~]# chronyc sources -v

  .-- Source mode  '^' = server, '=' = peer, '#' = local clock.
 / .- Source state '*' = current best, '+' = combined, '-' = not combined,
| /             'x' = may be in error, '~' = too variable, '?' = unusable.
||                                                 .- xxxx [ yyyy ] +/- zzzz
||      Reachability register (octal) -.           |  xxxx = adjusted offset,
||      Log2(Polling interval) --.      |          |  yyyy = measured offset,
||                                \     |          |  zzzz = estimated error.
||                                 |    |           \
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^* time.neu.edu.cn               1   7   377    85  -1452us[-1502us] +/-   19ms
^- ntp.wdc2.us.leaseweb.net      2   8   377   144  +1276us[+1228us] +/-  247ms
^+ time.neu.edu.cn               1   7   377    27  +2004us[+2004us] +/-   18ms
^+ 139.199.214.202               2   8   377    93  +1098us[+1049us] +/-   56ms
^? localhost                     0   9     0     -     +0ns[   +0ns] +/-    0ns

sudo clockdiff 192.168.152.30

部署三节点 observer 和 obproxy 进程:

下载yaml模板

https://github.com/oceanbase/obdeploy/blob/master/example/mini-distributed-with-obproxy-example.yaml

su - admin
vi /home/admin/obcluster-3zones.yaml

## Only need to configure when remote login is required
user:
    username: admin
    key_file: /home/admin/.ssh/id_rsa.pub 
    port: your ssh port, default 22
oceanbase-ce:
  servers:
    - name: obce01
      ip: 192.168.152.30
    - name: obce02
      ip: 192.168.152.31
    - name: obce03
      ip: 192.168.152.32
  global:
    devname: ens33
    cluster_id: 2
    memory_limit: 8G # The maximum running memory for an observer
    system_memory: 3G # The reserved system memory. system_memory is reserved for general tenants. The default value is 30G.
    datafile_size: 10G # Size of the data file. 
    log_disk_size: 3G # The size of disk space used by the clog files.
    cpu_count: 16
    production_mode: false
    syslog_level: WARN # System log level. The default value is INFO.
    enable_syslog_wf: false # Print system logs whose levels are higher than WARNING to a separate log file. The default value is true.
    enable_syslog_recycle: true # Enable auto system log recycling or not. The default value is false.
    max_syslog_file_count: 4 
    appname: obcluster-3zones  # observer cluster name, consistent with obproxy's cluster_name
    root_password: 0EI5N08d# root_password: # root user password, can be empty
    proxyro_password: uY7Yf8zx# proxyro_password: # proxyro user pasword, consistent with obproxy's observer_sys_password, can be empty
  obce01:
    mysql_port: 3881 # External port for OceanBase Database. The default value is 2881. DO NOT change this value after the cluster is started.
    rpc_port: 3882 # Internal port for OceanBase Database. The default value is 2882. DO NOT change this value after the cluster is started.
    home_path: /home/admin/oceanbase-ce
    data_dir: /data
    redo_dir: /redo
    zone: zone1
  obce02:
    mysql_port: 3881 
    rpc_port: 3882 
    home_path: /home/admin/oceanbase-ce
    data_dir: /data
    redo_dir: /redo
    zone: zone2
  obce03:
    mysql_port: 3881 
    rpc_port: 3882 
    home_path: /home/admin/oceanbase-ce
    data_dir: /data
    redo_dir: /redo
    zone: zone3
obproxy:
  # Set dependent components for the component.
  # When the associated configurations are not done, OBD will automatically get the these configurations from the dependent components.
  depends: #注意上面那行注释的意思,参数将继承depends所配置的组件
    - oceanbase-ce
  servers:
          - 192.168.152.30
          # - 192.168.152.31  #本人环境资源有限,obproxy只装在obd上
          # - 192.168.152.32
  global:
    listen_port: 3883 # External port. The default value is 2883.
    prometheus_listen_port: 3884 # The Prometheus port. The default value is 2884.
    home_path: /home/admin/obproxy
    rs_list: 192.168.152.30:3881;192.168.152.31:3881;192.168.152.32:3881
    enable_cluster_checkout: false
    cluster_name: obcluster-3zones
    skip_proxy_sys_private_check: true
    enable_strict_kernel_release: false
    obproxy_sys_password: 0MdTv1tm # obproxy sys user password, can be empty. When a depends exists, OBD gets this value from the oceanbase-ce of the depends.
    observer_sys_password: uY7yf8zx # proxyro user pasword, consistent with oceanbase-ce's proxyro_password, can be empty. When a depends exists, OBD gets this value from the oceanbase-ce of the depends.

1)若yaml文件部署报参数错误,请仔细检查参数。每个配置项后面冒号(:)跟后面的值之间必须有个空格 (’ ')。
2)若报密码obproxy_sys_password和observer_sys_password相关报错,配置文件中可以删除该部分配置,待集群创建完成后自行配置即可

OBD 部署集群:

i.复制软件到相应节点,并在各节点安装软件,本环境方案中,各节点为克隆虚拟机,无需安装。
ii.在相应节点创建相关目录。
iii.obd cluster deploy [集群名] -c 集群配置文件

obd cluster deploy obcluster-3zones -c /home/admin/obcluster-3zones.yaml

[ERROR] OBD-1002: Fail to init obce01(192.168.152.30) home path: /home/admin/oceanbase-ce is not empty.
初次安装不会报我这个错

IPS="192.168.152.30 192.168.152.31 192.168.152.32"
for IP in $IPS;do echo $IP; ssh $IP "/bin/rm -rf ~/oceanbase-ce/ /data/ /redo/ ~/obproxy/ "; done

在这里插入图片描述
解决办法:
配置文件中注释掉图中obproxy_sys_password: 0MdTv1tm 和observer_sys_password: uY7yf8zx,待集群创建完成后自行配置即可(后面*连接obproxy集群 部分有介绍)

初始化并启动集群

obd cluster start obcluster-3zones

如果集群节点内核参数和会话限制参数不符合要求,安装时会给出提示。 这个命令会进行几分钟的 bootstrap。当可用内存不足 8G 或者日志目录剩余可用空间比例不足 5% 的时候,这个bootstrap 是很可能会失败的。

[admin@obce01 ~]$ obd cluster list
+--------------------------------------------------------------------------------+
|                                  Cluster List                                  |
+------------------+-------------------------------------------+-----------------+
| Name             | Configuration Path                        | Status (Cached) |
+------------------+-------------------------------------------+-----------------+
| obce-single      | /home/admin/.obd/cluster/obce-single      | destroyed       |
| obcluster-3zones | /home/admin/.obd/cluster/obcluster-3zones | running         |
+------------------+-------------------------------------------+-----------------+

[admin@obce01 oceanbase-ce]$ obd cluster display obcluster-3zones
Get local repositories and plugins ok
Open ssh connection ok
Cluster status check ok
Connect to observer ok
Wait for observer init ok
+--------------------------------------------------+
|                     observer                     |
+----------------+---------+------+-------+--------+
| ip             | version | port | zone  | status |
+----------------+---------+------+-------+--------+
| 192.168.152.30 | 3.1.0   | 3881 | zone1 | active |
| 192.168.152.31 | 3.1.0   | 3881 | zone2 | active |
| 192.168.152.32 | 3.1.0   | 3881 | zone3 | active |
+----------------+---------+------+-------+--------+
obclient -h192.168.152.30 -P3881 -uroot -p0EI5N08d -Doceanbase -A

Connect to obproxy ok
+--------------------------------------------------+
|                     obproxy                      |
+----------------+------+-----------------+--------+
| ip             | port | prometheus_port | status |
+----------------+------+-----------------+--------+
| 192.168.152.30 | 3883 | 3884            | active |
+----------------+------+-----------------+--------+

检查 OceanBase 集群各个节点信息

i.进程
OceanBase 数据库是单进程软件,进程名为 observer ,可运行以下命令查看这个进程。

IPS="192.168.152.30 192.168.152.31 192.168.152.32"
for ob in $IPS;do echo $ob; ssh $ob "ps -ef | grep observer | grep -v grep "; done
查看observer启动目录
ls -l /proc/进程号/cwd ,与配置文件一致
[admin@obce01 ~]$ cat obcluster-3zones.yaml |grep home
    home_path: /home/admin/oceanbase-ce

2.监听

IPS="192.168.152.30 192.168.152.31 192.168.152.32"
for ob in $IPS;do echo $ob; ssh $ob "netstat -ntlp"; done

3.查看目录结构

tree ~/oceanbase-ce/ /data/ /redo/ ~/obproxy/

使用ob集群

i.直连ob集群、连接obproxy集群以及通过obproxy代理连ob集群的方法

1.直连 OceanBase 集群的内部实例(sys),并查看相关资源
obclient -h192.168.152.30 -P3881 -uroot -p0EI5N08d -Doceanbase -A

select a.zone,concat(a.svr_ip,':',a.svr_port) observer, cpu_total, (cpu_total-cpu_assigned) cpu_free, round(mem_total/1024/1024/1024) mem_total_gb, round((mem_total-mem_assigned)/1024/1024/1024) 
mem_free_gb, usec_to_time(b.last_offline_time) last_offline_time, usec_to_time(b.start_service_time) start_service_time, b.status, usec_to_time(b.stop_time) stop_time, b.build_version
from __all_virtual_server_stat a join __all_server b on (a.svr_ip=b.svr_ip and a.svr_port=b.svr_port)order by a.zone, a.svr_ip;

2.连接obproxy集群

obclient -h 192.168.152.30 -uroot@proxysys -P3883 -p0MdTv1tm

发现报密码相关错误:

原因如下:ymal文件在集群初始化时报错,obproxy的obproxy_sys_password和observer_sys_password被我从ymal文件注释掉了。proxysys 的 root密码为空。
obclient -h 192.168.152.30 -uroot@proxysys -P3883 -p
Enter password:此处直接回车即可
[admin@obce01 ~]$ obclient -h 192.168.152.30 -uroot@proxysys -P3883 -p
Enter password:
此处省略部分显示
MySQL [(none)]> show proxyconfig like '%sys_password%';
+-----------------------+-------+--------------------------------+-------------+---------------+
| name                  | value | info                           | need_reboot | visible_level |
+-----------------------+-------+--------------------------------+-------------+---------------+
| observer_sys_password |       | password for observer sys user | false       | SYS           |     ======================value为空
| obproxy_sys_password  |       | password for obproxy sys user  | false       | SYS           |
+-----------------------+-------+--------------------------------+-------------+---------------+     ======================value为空
2 rows in set (0.006 sec)

MySQL [(none)]> alter  proxyconfig  set obproxy_sys_password="0MdTv1tm";      
Query OK, 0 rows affected (0.007 sec)

MySQL [(none)]> alter  proxyconfig  set observer_sys_password="uY7Yf8zx";                          =====================consistent with oceanbase-ce's proxyro_password
Query OK, 0 rows affected (0.008 sec)

MySQL [(none)]> show proxyconfig like '%sys_password%';
+-----------------------+------------------------------------------+--------------------------------+-------------+---------------+
| name                  | value                                    | info                           | need_reboot | visible_level |
+-----------------------+------------------------------------------+--------------------------------+-------------+---------------+
| observer_sys_password | 34864da3a09bda2d587ac2c9d8e4521981586fc3 | password for observer sys user | false       | SYS           |
| obproxy_sys_password  | 9fe82c02e25ae612ed310ab0ac81c97bd813dd4e | password for obproxy sys user  | false       | SYS           |
+-----------------------+------------------------------------------+--------------------------------+-------------+---------------+
2 rows in set (0.015 sec)

MySQL [(none)]> Bye

带上密码重新尝试连接proxysys的root用户

obclient -h 192.168.152.30 -uroot@proxysys -P3883 -p0MdTv1tm 成功

3.使用obclient通过obproxy连接集群

obclient -h 192.168.152.30 -uroot@sys#obcluster-3zones -P3883 -p0EI5N08d -c -A oceanbase  
此处在通过obproxy登录observer,用户为root,密码为observer的root_password: 0EI5N08d(不是proxyro的password)

ii.简单使用运维命令

查看参数
show parameters like '%_password%';
show parameters like 'memory_limit%';
show parameters where name in ('memory_limit','memory_limit_ percentage');
show parameters like 'config_additional_dir';
修改参数
alter system set syslog_level = 'USER_ERR' server='192.168.152.30:3882';

iii.OceanBase 集群参数文件

show parameters like 'config_additional_dir'

通常 OceanBase 集群每个节点的启动目录下都会有一个目录 etc,保存了该节点进程的参数文件observer.config.bin。
observer.config.bin 是一个 binary 类型的文件,不能直接用 cat命令读取,可使用 strings 命令读取。
该文件也不建议直接修改,可通过上面提到的命令进行修改 alter 。
observer进程默认会读取文件夹 etc 中的参数文件,其他两个目录是参数文件的备份,这个备份路径也是通过参数config_additional_dir 指定的,默认值是同一个启动目录的 etc2 和 etc3。
生产环境建议将 etc设置到其他磁盘,这样会更加安全。

[admin@obce01 etc]$ pwd
/home/admin/oceanbase-ce/etc
[admin@obce01 etc]$ strings observer.config.bin
_enable_oracle_priv_check=True
_max_trx_size=100M
all_server_list=192.168.152.30:3882,192.168.152.31:3882,192.168.152.32:3882
__min_full_resource_pool_memory=268435456
min_observer_version=3.1.0
enable_syslog_recycle=True
enable_syslog_wf=False
max_syslog_file_count=4
syslog_level=WARN
cluster_id=2
cluster=obcluster-3zones
rootservice_list=192.168.152.30:3882:3881;192.168.152.31:3882:3881;192.168.152.32:3882:3881
_partition_balance_strategy=standard
enable_one_phase_commit=False
cpu_count=16
system_memory=3G
memory_limit=8G
zone=zone1
devname=ens33
mysql_port=3881
rpc_port=3882
datafile_size=10G
data_dir=/data

使用 OBD 修改 OceanBase 集群参数:

obd cluster edit-config obcluster-3zones
obd cluster reload obcluster-3zones

手动启动observer进程(应急)

进入home_path:/home/admin/oceanbase-ce
cd /home/admin/oceanbase-ce
bin/observer -o "max_syslog_file_count=4,datafile_size=10G"

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C语言学习笔记】:函数和对象

一、本篇要学习的内容和知识结构概览 二、知识点逐条分析 1. 混合型语言 C源文件的文件扩展名为.cpp, 也就是c plus plus的简写, 在该文件里有且只能有一个名为main的主函数, 它作为程序的入口. 因为这个主函数的存在, 所以C被称为混合型语言. 2. C语言当中的注释 第一种: …

[单片机框架][调试功能] 回溯案发现场

程序莫名死机跑飞,不知道问题,那么下面教你回溯错误源 回溯案发现场一、修改HardFault_Handler1. xx.s 在启动文件,找到HardFault_Handler。并修改。2. 定义HardFault_Handler_C函数。(主要是打印信息并存储Flash)3. 根…

javascript测试题

一、填空题 1. JavaScript 有两种引用数据类型 :___数组__、_____对象_ __。2. Javascript 通过___setTimeout______延迟指定时间后,去执行某程序。 3. Javascript 里 String 对象通过____indexOf____方法取第一次出现子字符 串的字符位置。4. Javascrip…

动态规划-背包问题

文章目录一、背包问题1. 背包问题简介2. 背包问题解决方法二、01 背包问题1. 实现思路2. 实现代码三、完全背包问题1. 实现思路2. 实现代码四、多重背包问题(一)1. 实现思路2. 实现代码五、多重背包问题(二)1. 实现思路2. 实现代码…

【C++之容器篇】精华:vector常见函数的接口的熟悉与使用

目录前言一、认识vector1. 介绍2. 成员类型二、默认成员函数(Member functions)1. 构造函数2. 拷贝构造函数vector (const vector& x);3. 析构函数4. 赋值运算符重载函数三、迭代器(Iterators)1. 普通对象的迭代器2. const对象…

4.5.3 ArrayList

文章目录1.特点2. 练习:ArrayList测试3.ArrayList扩容1.特点 存在java.util包中内部是用数组结构存放数据,封装数组的操作,每个对象都有下标内部数组默认的初始容量是10,如果不够会以1.5倍的容量增长查询快,增删数据效率会低 2. 练习:ArrayList测试 package partThree;import…

ROS2机器人编程简述humble-第四章-COMPUTATION GRAPH .2

下图所示,机器人和障碍物直接距离:可以看到如果是单线雷达,这种测距和传感器安装的位置密切相关。chatgpt:ROS2机器人的COMPUTATION GRAPH概念是指,通过构建一个图形结构,将机器人的计算任务分解成一系列的…

蓝桥杯-最长公共子序列(线性dp)

没有白走的路,每一步都算数🎈🎈🎈 题目描述: 已知有两个数组a,b。已知每个数组的长度。要求求出两个数组的最长公共子序列 序列 1 2 3 4 5 序列 2 3 2 1 4 5 子序列:从其中抽掉某个或多个元素而产生的新…

libVLC 视频裁剪

作者: 一去、二三里 个人微信号: iwaleon 微信公众号: 高效程序员 裁剪是指去除图像的外部部分,也就是从图像的左,右,顶部和/或底部移除一些东西。通常在视频中,裁剪是一种通过剪切不需要的部分来改变宽高比的特殊方式。 尤其是在做视频墙时,往往需要处理多个 vlc 实例…

【排序算法】归并排序(Merge Sort)

将两个的有序数列合并成一个有序数列,我们称之为"归并"。归并排序(Merge Sort)就是利用归并思想对数列进行排序。归并排序介绍根据具体的实现,归并排序包括"从上往下"和"从下往上"2种方式。从下往上的归并排序将待排序的数…

Java常见的六种线程池、线程池-四种拒绝策略总结

点个关注,必回关 一、线程池的四种拒绝策略: CallerRunsPolicy - 当触发拒绝策略,只要线程池没有关闭的话,则使用调用线程直接运行任务。 一般并发比较小,性能要求不高,不允许失败。 但是,由于…

SpringCloud(20):Sentinel原理

1.Sentinel主要功能设计理念 1.1 流量控制 流量控制在网络传输中是一个常用的概念,它用于调整网络包的发送数据。然而,从系统稳定性角度考虑,在处理请求的速度上,也有非常多的讲究。任意时间到来的请求往往是随机不可控的&#…

排序:归并排序

一、归并 li[2,4,5,7,//1,3,6,8]#归并的前提是必须两部分排好序 def merge(li,low,mid,high):ilowjmid1ltmp[]while i<mid and j<high: #只要左右两边都有数if li[i]<li[j]:ltmp.append(li[i])i1else:ltmp.append(li[j])j1#while执行完&#xff0c;肯定有一部分没数…

MDB 5 UI-KIT Bootstrap 5 最新版放送

顶级开源 UI 套件&#xff0c;Bootstrap v5 和 v4 的材料设计&#xff0c;jQuery 版本&#xff0c;数百个优质组件和模板&#xff0c;所有一致的&#xff0c;有据可查的&#xff0c;可靠的超级简单&#xff0c;1分钟安装简单的主题和定制 受到超过 3,000,000 名开发人员和设计师…

工业互联网时代,VR工厂如何实现多媒体营销?

2023开年以来&#xff0c;国内消费复苏脚步逐渐加快&#xff0c;无论是餐饮、旅游还是电影市场人气逐渐旺盛&#xff0c;可以看到消费市场逐渐暖起来。而工业互联网将会是产业数字化的主要抓手&#xff0c;VR工厂是新时期、新形势下&#xff0c;运用“互联网”思维&#xff0c;…

ChatGPT简要解读(三) - ChatGPT发展历程及模型训练机制

&#x1f482; 个人主页: 同学来啦&#x1f91f; 版权: 本文由【同学来啦】原创、在CSDN首发、需要转载请联系博主 &#x1f4ac; 如果文章对你有帮助&#xff0c;欢迎关注、点赞、收藏和订阅专栏哦 文章目录&#x1f423; 一、发展历程&#x1f534; 1、基本概念&#x1f7e0…

Android图形显示流程简介

注&#xff1a;本文缩写说明本文代码都是基于Android S一、概述本文将对从App画出一帧画面到这帧画面是如何到达屏幕并最终被人眼看到的这一过程进行简要分析&#xff0c;并将这其中涉及到的各个流程与其在systrace上的体现对应起来&#xff0c;期望最终能够让读者对Android系统…

Geek Uninstaller:向流氓软件火力全开,超良心的软件彻底卸载工具

写在前面 我们在电脑上安装软件&#xff0c;以及在使用软件的过程中&#xff0c;会产生一些程序文件、注册表项和临时文件等&#xff0c;用来支持软件的正常使用&#xff0c;都是正常现象。 但是&#xff0c;在卸载软件时&#xff0c;很多软件自身的卸载程序很不负责任&#…

内网渗透(十六)之内网信息收集-powershell基础知识

系列文章第一章节之基础知识篇 内网渗透(一)之基础知识-内网渗透介绍和概述 内网渗透(二)之基础知识-工作组介绍 内网渗透(三)之基础知识-域环境的介绍和优点 内网渗透(四)之基础知识-搭建域环境 内网渗透(五)之基础知识-Active Directory活动目录介绍和使用 内网渗透(六)之基…

chatGPT接入个人微信教程(国内可用)

chatGPT最近突然又大火起来了&#xff0c;而且这次不是一般的火&#xff0c;带有浓浓的商业气息火了。各个互联网大厂都开始进军了&#xff0c;感觉要来一场ChatGPT的军备竞赛一样&#xff0c;看看谁先获取国内的地盘。 作为吃瓜群众&#xff0c;我们也能个人使用ChatGPT&…