暂无图片
暂无图片
10
暂无图片
暂无图片
暂无图片

部署单副本OceannBase集群

OceanBase 2022-12-01
642

OceanBase 也支持单副本部署,并且单副本 OceanBase 集群还可以扩容(增加节点),所以也称为集群。OceanBase 是单进程软件,只需要安装 oceanbase-xxx.rpm 包和 obproxy-xxx.rpm 包。本节主要介绍通过使用 RPM 包安装单副本 OceanBase 集群。

前提条件

在安装 OceanBase 数据库之前,需要确认以下信息:

  • OBServer 服务器已完成相关配置。详细信息,请参见 部署前准备 中 服务器配置 章节。

  • 部署环境已完成相关配置。详细信息,请参见 命令行部署 中 部署环境配置 下的章节。

操作步骤

安装目录和软件

  1. 安装 OceanBase 数据库 RPM 包。

    其中 $rpm_dir 表示存放 RPM 包的目录,$rpm_name 表示 RPM 包的名称。

    [root@xxx /]# cd $rpm_dir
    [root@xxx $rpm_dir]# rpm -ivh $rpm_name
    

    说明

    OceanBase 数据库软件会安装在目录 /home/admin/oceanbase 下。

    示例如下:

    [root@xxx admin]# rpm -ivh oceanbase-*-20220418212020.el7.x86_64.rpm
    Preparing...                          ################################# [100%]
    Updating / installing...
       1:oceanbase-*-20220418212020.################################# [100%]
    
  2. 清理 OceanBase 目录 (第一次部署不用)。

    当要清理之前的 OceanBase 环境,或者 OceanBase 安装部署过程中出现问题导致环境变乱或者产生文件影响下一次安装时,选择直接清理旧的 OceanBase 目录。其中 $cluster_name 为集群名。

    [root@xxx admin]# su - admin
    -bash-4.2$ kill -9 `pidof observer` 
    -bash-4.2$ rm -rf /data/1/$cluster_name 
    -bash-4.2$ rm -rf /data/log1/$cluster_name 
    -bash-4.2$ rm -rf /home/admin/oceanbase/store/$cluster_name /home/admin/oceanbase/log/* /home/admin/oceanbase/etc/*config*
    -bash-4.2$ ps -ef|grep observer
    

    示例如下:

    [root@xxx admin]# su - admin
    -bash-4.2$ kill -9 `pidof observer` 
    -bash-4.2$ rm -rf /data/1/obdemo 
    -bash-4.2$ rm -rf /data/log1/obdemo 
    -bash-4.2$ rm -rf /home/admin/oceanbase/store/obdemo /home/admin/oceanbase/log/* /home/admin/oceanbase/etc/*config*
    -bash-4.2$ ps -ef|grep observer
    
  3. 初始化 OceanBase 目录。

    OceanBase 的数据目录通常建议在独立的磁盘上,然后通过软链接方式链接到软件 Home 目录下面。其中 $cluster_name 为集群名。

    [root@xxx admin]# su - admin
    -bash-4.2$ mkdir -p /data/1/$cluster_name/{etc3,sort_dir,sstable,slog} 
    -bash-4.2$ mkdir -p /data/log1/$cluster_name/{clog,etc2,ilog,oob_clog} 
    -bash-4.2$ mkdir -p /home/admin/oceanbase/store/$cluster_name
    -bash-4.2$ for t in {etc3,sort_dir,sstable,slog};do ln -s /data/1/$cluster_name/$t /home/admin/oceanbase/store/$cluster_name/$t; done
    -bash-4.2$ for t in {clog,etc2,ilog,oob_clog};do ln -s /data/log1/$cluster_name/$t /home/admin/oceanbase/store/$cluster_name/$t; done
    

    示例如下:

    [root@xxx admin]# su - admin
    -bash-4.2$ mkdir -p /data/1/obdemo/{etc3,sort_dir,sstable,slog} 
    -bash-4.2$ mkdir -p /data/log1/obdemo/{clog,etc2,ilog,oob_clog} 
    -bash-4.2$ mkdir -p /home/admin/oceanbase/store/obdemo
    -bash-4.2$ for t in {etc3,sort_dir,sstable,slog};do ln -s /data/1/obdemo/$t /home/admin/oceanbase/store/obdemo/$t; done
    -bash-4.2$ for t in {clog,etc2,ilog,oob_clog};do ln -s /data/log1/obdemo/$t /home/admin/oceanbase/store/obdemo/$t; done
    

    说明

    obdemo 是以集群名称创建的目录,可自定义,在启动进程时会用到。

    检查结果:

    -bash-4.2$ cd /home/admin/oceanbase
    -bash-4.2$ tree store/
    store/
    `-- obdemo
     |-- clog -> /data/log1/obdemo/clog
     |-- etc2 -> /data/log1/obdemo/etc2
     |-- etc3 -> /data/1/obdemo/etc3
     |-- ilog -> /data/log1/obdemo/ilog
     |-- oob_clog -> /data/log1/obdemo/oob_clog
     |-- slog -> /data/1/obdemo/slog
     |-- sort_dir -> /data/1/obdemo/sort_dir
     `-- sstable -> /data/1/obdemo/sstable
    
    9 directories, 0 files
    
  4. 测试 I/O 能力(可选)。

    测试数据盘 I/O 能力,生成性能报告文件放在 /home/admin/oceanbase/etc 目录下。observer 启动时会读取这个文件进而自动设置内部一些跟 I/O 有关的参数。

    示例如下:

    -bash-4.2$ time /home/admin/oceanbase/bin/ob_admin io_bench -c /home/admin/oceanbase/etc -d /data/1/obdemo user:root succ to open, filename=ob_admin.log, fd=3, wf_fd=2
    ...
    ...
    real    0m0.331s
    user    0m0.100s
    sys     0m0.262s
    
  5. 安装 OceanBase 客户端。

    OceanBase 实例兼容 Oracle 或 MySQL,如果是 Oracle 租户,Java 程序连接需要使用 OceanBase 提供的 Java 驱动文件(oceanbase-client-*.jar )。如果要在命令行下访问 Oracle 租户,还需要安装客户端 OBClient。

    OBClient 是 OceanBase 命令行客户端,可以访问 OceanBase 的 MySQL 租户和 ORACLE 租户。

    示例如下:

    -bash-4.2$ rpm -ivh obclient-1.2.6-20210510164331.el7.alios7.x86_64.rpm
    
    ##核查是否安装成功##
    -bash-4.2$ which obclient 
    /usr/bin/obclient
    

初始化 OceanBase 集群

说明

示例 IP 做了脱敏处理,这不是安装需求。在部署时应根据自己机器真实 IP 填写。

  1. 启动 observer 进程。

    示例如下:

    [root@xxx admin]# su - admin
    -bash-4.2$ cd /home/admin/oceanbase && /home/admin/oceanbase/bin/observer -i eth0 -P 2882 -p 2881 -z zone1 -d /home/admin/oceanbase/store/obdemo -r '10.10.10.1:2882:2881' -c 10001 -n obdemo -o "system_memory=30G,datafile_size=500G,config_additional_dir=/data/1/obdemo/etc3;/data/log1/obdemo/etc2"
    devname: eth0
    rpc port: 2882
    mysql port: 2881
    zone: zone1
    data_dir: /home/admin/oceanbase/store/obdemo
    rs list: 10.10.10.1:2882:2881
    cluster id: 10001
    appname: obdemo
    optstr: system_memory=30G,datafile_size=500G,config_additional_dir=/data/1/obdemo/etc3;/data/log1/obdemo/etc2
    

    参数解释:

    参数说明
    -i指定网卡名,可通过 ifconfig 命令查看。
    -p指定服务端口号,一般指定为 2881
    -P指定 RPC 端口号,一般指定为 2882
    -n指定集群名称。可自定义,不同集群名称不要重复即可。
    -z指定启动的 observer 进程所属的 Zone。
    -d指定集群主目录,除集群名字 obdemo 外,其他不要变动。
    -c指定集群 ID。为一组数字,可以自定义,不同集群不要重复即可。
    -l指定日志级别。
    -r指定 RS 列表,格式是 ip:2882:2881 ,分号分割,表示 RootService 信息。三台机器参数一致。
    -o指定集群启动参数,需要根据实际情况设置。system_memory 指定 OceanBase 内部保留内存,默认是 30G ,机器内存比较少的情况下把这个调小,影响就是可能在性能测试时有内存不足问题。 datafile_size 指定 OceanBase 数据文件 sstable 的大小(一次性初始化),根据 /data/1/ 可用空间评估,建议不少于 100G,同时又保留一些剩余空间。如果 /data/1 跟 /data/log1 本身就是一个文件系统(共用一个盘),那么务必保证留给 /data/log1 的空间大小是内存的 2-4 倍。config_additional_dir 指定参数文件的冗余目录。

    可通过 netstat -ntlp 命令查看 observer 进程是否启动成功。如果监听到了 2881 与 2882 端口,则说明进程启动成功。

    示例如下:

    -bash-4.2$ netstat -ntlp
    (Not all processes could be identified, non-owned process info
     will not be shown, you would have to be root to see it all.)
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
    tcp        0      0 0.0.0.0:62888           0.0.0.0:*               LISTEN      -
    tcp        0      0 0.0.0.0:62889           0.0.0.0:*               LISTEN      -
    tcp        0      0 127.0.0.1:9001          0.0.0.0:*               LISTEN      -
    tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -
    tcp        0      0 0.0.0.0:63000           0.0.0.0:*               LISTEN      -
    tcp        0      0 0.0.0.0:2881            0.0.0.0:*               LISTEN      79697/observer
    tcp        0      0 0.0.0.0:2882            0.0.0.0:*               LISTEN      79697/observer
    
  2. 集群 bootstrap 操作。

    通过 obclient 命令连接已启动的 observer 进程,密码为空。

    [root@xxx admin]# obclient -h127.1 -uroot@sys -P2881 -p
    Enter password:
    
    obclient> SET SESSION ob_query_timeout=1000000000;
    Query OK, 0 rows affected
    
    obclient> ALTER SYSTEM BOOTSTRAP ZONE 'zone1' SERVER '10.10.10.1:2882';
    Query OK, 0 rows affected
    

    注意

    如果这一步失败报错了,其原因很可能是 observer 进程启动参数有不对、observer 相关目录权限不对、日志目录空间不足一定比例(跟数据目录合用了大目录,空间被数据目录占用了)节点内存资源不足等等。请先排查这些问题点后,然后清理 OceanBase 目录从头开始(请参见 清理 OceanBase 目录(第一次不用) )。

  3. 验证集群初始化成功。

    进行 bootstrap 后,执行 SHOW DATABASES; 命令,能看到数据库列表里有 oceanbase 即可。

    obclient> SHOW DATABASES;
    +--------------------+
    | Database           |
    +--------------------+
    | oceanbase          |
    | information_schema |
    | mysql              |
    | SYS                |
    | LBACSYS            |
    | ORAAUDITOR         |
    | test               |
    +--------------------+
    7 rows in set
    
  4. 修改密码。

    sys 租户的 root 用户密码默认为空,初始化成功后请修改密码。

    obclient> ALTER USER root IDENTIFIED BY '**1***';
    Query OK, 0 rows affected
    

初始化集群参数(可选)

OceanBase 集群支持通过参数去调整集群的行为。参数修改通常是及时生效,并持久化到参数文件中( /home/admin/oceanbase/etc/observer.config.bin)。这个参数文件是 binary 类型文件,直接查看会有乱码,使用 strings 命令查看可正常显示。

示例如下:

[root@xxx /]# cd /home/admin/oceanbase/etc
[root@xxx etc]# strings observer.config.bin|grep rootservice
rootservice_list=10.10.10.1:2882:2881

或者在集群里使用 SHOW PARAMETERS LIKE '%rootservice_list%'\G 命令直接查看参数。

示例如下:

obclient> SHOW PARAMETERS LIKE '%rootservice_list%'\G
*************************** 1. row ***************************
      zone: zone1
  svr_type: observer
    svr_ip: 10.10.10.1
  svr_port: 2882
      name: rootservice_list
 data_type: NULL
     value: 10.10.10.1:2882:2881
      info: a list of servers against which election candidate is checked for validation
   section: OBSERVER
     scope: CLUSTER
    source: DEFAULT
edit_level: DYNAMIC_EFFECTIVE
1 row in set

如果 /home/admin 目录空间很紧张,则设置开启回收系统日志的功能。

-bash-4.2$ obclient -h127.1 -uroot@sys -P2881 -p
Enter password:

-- observer log 自清理设置
obclient> ALTER SYSTEM SET enable_syslog_recycle=True;
Query OK, 0 rows affected

obclient> ALTER SYSTEM SET max_syslog_file_count=10;
Query OK, 0 rows affected

obclient> SHOW PARAMETERS WHERE NAME IN ('enable_syslog_recycle', 'max_syslog_file_count')\G

*************************** 1. row ***************************
      zone: zone1
  svr_type: observer
    svr_ip: 10.10.10.1
  svr_port: 2882
      name: enable_syslog_recycle
 data_type: NULL
     value: False
      info: specifies whether log file recycling is turned on. Value: True:turned on; False: turned off
   section: OBSERVER
     scope: CLUSTER
    source: DEFAULT
edit_level: DYNAMIC_EFFECTIVE
*************************** 2. row ***************************
      zone: zone1
  svr_type: observer
    svr_ip: 10.10.10.1
  svr_port: 2882
      name: max_syslog_file_count
 data_type: NULL
     value: 0
      info: specifies the maximum number of the log files that can co-exist before the log file recycling kicks in. Each log file can occupy at most 256MB disk space. When this value is set to 0, no log file will be removed. Range: [0, +∞) in integer
   section: OBSERVER
     scope: CLUSTER
    source: DEFAULT
edit_level: DYNAMIC_EFFECTIVE
2 rows in set
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论