小工具知识网

当前位置: 首页 > 行业知识 > OceanBase社区版手动部署单副本集群及OBProxy

行业知识

OceanBase社区版手动部署单副本集群及OBProxy

2026-11-15 23:08:14 来源:互联网转载

OceanBase社区版手动部署单副本集群及OBProxy

文章目录

  • OceanBase社区版手动部署单副本集群及OBProxy
    • 一、环境准备
    • 二、部署observer
    • 三、集群初始化
    • 四、部署obproxy
    • 五、创建租户、数据库、表
    • 六、避坑指导
    • 七、参考��接

      一、环境准备

      oceanbase社区版部署单副本集群,要求内存不小于10G。本机操作系统为redhat7.9,资源配置为4c16G,磁盘空间100G。

      ()

      新建admin用户

      useradd admin -G wheelecho 'admin:admin' | chpasswd

      设置admin用户环境变量

      ()
      su - adminecho 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/oceanbase/lib' >> ~/.bash_profile. ~/.bash_profile

      创建相关目录

      mkdir -p /home/admin/oceanbase/store/obcluster /data/obcluster/{sstable,etc3} /redo/obcluster/{clog,ilog,slog,etc2}chown -R admin:admin /home/admin /data /redosu - adminfor f in {clog,ilog,slog,etc2}; do ln -s /redo/obcluster/$f ~/oceanbase/store/obcluster/$f ; donefor f in {sstable,etc3}; do ln -s /data/obcluster/$f ~/oceanbase/store/obcluster/$f; done

      配置内核参数

      vi /etc/sysctl.confnet.core.somaxconn = 2048net.core.netdev_max_backlog = 10000net.core.rmem_default = 16777216net.core.wmem_default = 16777216net.core.rmem_max = 16777216net.core.wmem_max = 16777216net.ipv4.ip_local_port_range = 3500 65535net.ipv4.ip_forward = 0net.ipv4.conf.default.rp_filter = 1net.ipv4.conf.default.accept_source_route = 0net.ipv4.tcp_syncookies = 0net.ipv4.tcp_rmem = 4096 87380 16777216net.ipv4.tcp_wmem = 4096 65536 16777216net.ipv4.tcp_max_syn_backlog = 16384net.ipv4.tcp_fin_timeout = 15net.ipv4.tcp_max_syn_backlog = 16384net.ipv4.tcp_tw_reuse = 1net.ipv4.tcp_tw_recycle = 1net.ipv4.tcp_slow_start_after_idle=0vm.swappiness = 0vm.min_free_kbytes = 2097152vm.max_map_count=655360fs.aio-max-nr=1048576
      [root@rac04 software]# sysctl -pnet.core.somaxconn = 2048net.core.netdev_max_backlog = 10000net.core.rmem_default = 16777216net.core.wmem_default = 16777216net.core.rmem_max = 16777216net.core.wmem_max = 16777216net.ipv4.ip_local_port_range = 3500 65535net.ipv4.ip_forward = 0net.ipv4.conf.default.rp_filter = 1net.ipv4.conf.default.accept_source_route = 0net.ipv4.tcp_syncookies = 0net.ipv4.tcp_rmem = 4096 87380 16777216net.ipv4.tcp_wmem = 4096 65536 16777216net.ipv4.tcp_max_syn_backlog = 16384net.ipv4.tcp_fin_timeout = 15net.ipv4.tcp_max_syn_backlog = 16384net.ipv4.tcp_tw_reuse = 1net.ipv4.tcp_tw_recycle = 1net.ipv4.tcp_slow_start_after_idle = 0vm.swappiness = 0vm.min_free_kbytes = 2097152vm.max_map_count = 655360fs.aio-max-nr = 1048576

      配置用户资源限制

      vi /etc/security/limits.confadmin soft nofile 655360admin hard nofile 655360admin soft nproc 655360admin hard nproc 655360admin soft core unlimitedadmin hard core unlimitedadmin soft stack unlimitedadmin hard stack unlimited
      [root@rac04 software]# su - admin上一次登录:四 3月  7 17:21:22 CST 2024pts/0 上[admin@rac04 ~]$ ulimit -acore file size          (blocks, -c) unlimiteddata seg size           (kbytes, -d) unlimitedscheduling priority             (-e) 0file size               (blocks, -f) unlimitedpending signals                 (-i) 63334max locked memory       (kbytes, -l) 64max memory size         (kbytes, -m) unlimitedopen files                      (-n) 655360pipe size            (512 bytes, -p) 8POSIX message queues     (bytes, -q) 819200real-time priority              (-r) 0stack size              (kbytes, -s) unlimitedcpu time               (seconds, -t) unlimitedmax user processes              (-u) 655360virtual memory          (kbytes, -v) unlimitedfile locks                      (-x) unlimited

      禁用防火墙

      systemctl disable firewalld systemctl stop firewalldsystemctl status firewalld

      禁用selinux

      vi /etc/selinux/configSELINUX=disabled
      [root@rac04 software]# setenforce 0

      二、部署observer

      下载ob软件

      wget https://mirrors.aliyun.com/oceanbase/community/stable/el/7/x86_64/libobclient-2.0.0-2.el7.x86_64.rpm  wget https://mirrors.aliyun.com/oceanbase/community/stable/el/7/x86_64/oceanbase-ce-3.1.0-1.el7.x86_64.rpmwget https://mirrors.aliyun.com/oceanbase/community/stable/el/7/x86_64/obclient-2.0.0-1.el7.x86_64.rpm     wget https://mirrors.aliyun.com/oceanbase/community/stable/el/7/x86_64/obproxy-3.1.0-1.el7.x86_64.rpm    wget https://mirrors.aliyun.com/oceanbase/community/stable/el/7/x86_64/oceanbase-ce-libs-3.1.0-1.el7.x86_64.rpm

      安装ob软件包

      rpm -ivh oceanbase-ce-libs-3.1.0-1.el7.x86_64.rpm oceanbase-ce-3.1.0-1.el7.x86_64.rpmrpm -ivh libobclient-2.0.0-2.el7.x86_64.rpm obclient-2.0.0-1.el7.x86_64.rpm

      启动observer

      su - admin# 通常仅在第一次启动时,需要添加启动参数,其他时候启动时,可直接使用 observer 命令启动 observer 进程。cd ~/oceanbase #这一步不能少,因为启动时会生成一些文件在当前目录/home/admin/oceanbase/bin/observer -i ens33 -p 2881 -P 2882 -z zone1 -d /home/admin/oceanbase/store/obcluster -r '11.11.11.14:2882:2881' -c 10001 -n obcluster -l WARN  -o "memory_limit=8G,__min_full_resource_pool_memory=268435456,system_memory=2G,cpu_count=16,datafile_size=4G,config_additional_dir=/data/obcluster/etc3;/redo/obcluster/etc2"/home/admin/oceanbase/bin/observer -i ens33 -p 2881 -P 2882 -z zone1 -d /home/admin/oceanbase/store/obcluster -r 11.11.11.14:2882:2881 -c 10001 -n obcluster -l WARN -o memory_limit=8G,__min_full_resource_pool_memory=268435456,system_memory=2G,cpu_count=16,datafile_size=4G,config_additional_dir=/data/obcluster/etc3;/redo/obcluster/etc2devname: ens33mysql port: 2881rpc port: 2882zone: zone1data_dir: /home/admin/oceanbase/store/obclusterrs list: 11.11.11.14:2882:2881cluster id: 10001appname: obclusterlog level: WARNoptstr: memory_limit=8G,__min_full_resource_pool_memory=268435456,system_memory=2G,cpu_count=16,datafile_size=4G,config_additional_dir=/data/obcluster/etc3;/redo/obcluster/etc2[2024-03-07 18:55:54.082318] ERROR [LIB] pidfile_test (utility.cpp:1153) [76370][0][Y0-0000000000000000] [lt=0] fid file doesn't exist(pidfile="run/observer.pid") BACKTRACE:0x90a107e 0x90008fb 0x24c152f 0x251bb2d 0x90a6215 0x24be1a8 0x2b781995e555 0x24bd4e9

      该报错似乎是内部bug,不用在意。等待一会之后,observer进程会起来。

      参数说明-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 的大小   (一次性初始化)

      检查进程状态

      [admin@rac04 oceanbase]$ ps -ef|grep observeradmin     75358      1 43 18:25 ?        00:02:23 /home/admin/oceanbase/bin/observer -i ens33 -p 2881 -P 2882 -z zone1 -d /home/admin/oceanbase/store/obcluster -r 11.11.11.14:2882:2881 -c 10001 -n obcluster -l WARN -o memory_limit=8G,__min_full_resource_pool_memory=268435456,system_memory=2G,memory_chunk_cache_size=128M,cpu_count=16,net_thread_count=4,datafile_size=2G,stack_size=1536K,config_additional_dir=/data/obcluster/etc3;/redo/obcluster/etc2#检查端口,如果监听到了 2881 与 2882 端口,则说明进程启动成功。netstat -ntlp|grep observertcp        0      0 0.0.0.0:2881            0.0.0.0:*               LISTEN      75358/observer      tcp        0      0 0.0.0.0:2882            0.0.0.0:*               LISTEN      75358/observer    

      三、集群初始化

      登录集群时,不要加上@租户名,否则报错。

      [admin@rac04 etc2]$ obclient -h11.11.11.14 -P2881 -uroot@sys -p -c -AEnter password: ERROR 8001 (08004): Server is initializingobclient -h11.11.11.14 -P2881 -uroot -p -c -A
      MySQL [(none)]> set session ob_query_timeout=1000000000;Query OK, 0 rows affected (0.001 sec)MySQL [(none)]> alter system bootstrap ZONE 'zone1' SERVER '11.11.11.14:2882';Query OK, 0 rows affected (10.725 sec)

      bootstrap之后,就可以登录sys租户了。

      obclient -h11.11.11.14 -P2881 -uroot@sys -p -c -A-- 验证集群初始化成功。MySQL [(none)]> show databases;+--------------------+| Database           |+--------------------+| oceanbase          || information_schema || mysql              || SYS                || LBACSYS            || ORAAUDITOR         || test               |+--------------------+7 rows in set (0.002 sec)-- 修改sys租户root密码MySQL [(none)]> alter user root identified by 'root';Query OK, 0 rows affected (0.015 sec)

      四、部署obproxy

      安装obproxy包

      rpm -ivh obproxy-3.1.0-1.el7.x86_64.rpm

      创建proxyro用户

      MySQL [(none)]> grant select on oceanbase.* to proxyro identified by 'root';Query OK, 0 rows affected (0.028 sec)

      启动obproxy

      #后面再次启动 OBProxy 进程时就不需要指定参数。因为参数已经写到参数文件里。su - admincd /home/admin/obproxy-3.1.0 #这一步不能少,因为启动时会生成一些文件在当前目录/home/admin/obproxy-3.1.0/bin/obproxy -r "127.0.0.1:2881" -p 2883 -o "enable_strict_kernel_release=false,enable_cluster_checkout=false,enable_metadb_used=false" -c obcluster/home/admin/obproxy-3.1.0/bin/obproxy -r 127.0.0.1:2881 -p 2883 -o enable_strict_kernel_release=false,enable_cluster_checkout=false,enable_metadb_used=false -c obclusterrs list: 127.0.0.1:2881listen port: 2883optstr: enable_strict_kernel_release=false,enable_cluster_checkout=false,enable_metadb_used=falsecluster_name: obcluster

      连接obproxy配置密码

      -- 初始密码为空obclient -h 127.0.0.1 -u root@proxysys -P 2883 -pMySQL [(none)]> alter proxyconfig set observer_sys_password ='root';Query OK, 0 rows affected (0.001 sec)

      测试proxy

      [admin@rac04 ~]$ obclient -h127.0.0.1 -P2883 -uroot@sys#obcluster -p -c -A -DoceanbaseEnter password: Welcome to the OceanBase.  Commands end with ; or \g.Your MySQL connection id is 6Server version: 5.6.25 OceanBase 3.1.0 (r-) (Built May 30 2021 11:21:29)Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.MySQL [oceanbase]> 

      五、创建租户、数据库、表

      检查资源状况

      select zone,concat(svr_ip, ':', svr_port) observer,cpu_capacity,cpu_total,cpu_assigned,cpu_assigned_percent,mem_capacity/1024/1024,mem_total/1024/1024,mem_assigned/1024/1024,mem_assigned_percent,disk_total/1024/1024,disk_assigned/1024/1024,disk_assigned_percent,unit_Num,round('load', 2) 'load',round('cpu_weight', 2) 'cpu_weight',round('memory_weight', 2) 'mem_weight',leader_countfrom __all_virtual_server_statorder by zone, svr_ip\G*************************** 1. row ***************************                   zone: zone1               observer: 11.11.11.14:2882           cpu_capacity: 14              cpu_total: 14           cpu_assigned: 2.5   cpu_assigned_percent: 17 mem_capacity/1024/1024: 6144.00000000    mem_total/1024/1024: 6144.00000000 mem_assigned/1024/1024: 1536.00000000   mem_assigned_percent: 25   disk_total/1024/1024: 4096.00000000disk_assigned/1024/1024: 4096.00000000  disk_assigned_percent: 100               unit_Num: 1                   load: 0.00             cpu_weight: 0.00             mem_weight: 0.00           leader_count: 11891 row in set, 3 warnings (0.008 sec)

      剩余资源足够。

      创建资源单元

      CREATE resource unit u1 max_cpu=1, min_cpu=1, max_memory='1G',min_memory='1G', max_iops=10000,min_iops=1000, max_session_num=1000000, max_disk_size='5G';

      创建资源池

      create resource pool pool1 unit='u1', unit_num=1, zone_list=('zone1') ;

      创建mysql类型业务租户,允许所有连接,关闭回收站

      create tenant yw charset='utf8mb4',zone_list=('zone1'),resource_pool_list=('pool1'),comment='业务租户1' set ob_compatibility_mode=mysql,ob_tcp_invited_nodes='%',recyclebin = off;

      检查

      MySQL [oceanbase]> select * from __all_tenant where tenant_name='yw'\G*************************** 1. row ***************************                 gmt_create: 2024-03-07 19:33:18.124137               gmt_modified: 2024-03-07 19:33:18.124137                  tenant_id: 1001                tenant_name: yw                replica_num: -1                  zone_list: zone1               primary_zone: RANDOM                     locked: 0             collation_type: 0                       info: 业务租户1                  read_only: 0      rewrite_merge_version: 0                   locality: FULL{1}@zone1        logonly_replica_num: 0          previous_locality:      storage_format_version: 0storage_format_work_version: 0      default_tablegroup_id: -1         compatibility_mode: 0           drop_tenant_time: -1                     status: TENANT_STATUS_NORMAL              in_recyclebin: 01 row in set (0.004 sec)

      连接业务租户yw

       obclient -h127.0.0.1 -P2881 -uroot@yw -p -c -A -Doceanbase
      -- 修改yw租户root密码MySQL [oceanbase]> alter user root identified by 'root';Query OK, 0 rows affected (0.015 sec)
      -- 创建业务数据库MySQL [oceanbase]> create database ywdb charset='utf8mb4' read write;Query OK, 1 row affected (0.013 sec)-- 创建表MySQL [oceanbase]> use ywdbDatabase changedMySQL [ywdb]> create table t1(name char(20));Query OK, 0 rows affected (0.064 sec)MySQL [ywdb]> create table t3(id int(10),t3name char(20)) partition by hash(id) partitions 5;Query OK, 0 rows affected (0.041 sec)MySQL [ywdb]> show tables;+----------------+| Tables_in_ywdb |+----------------+| t1             || t3             |+----------------+2 rows in set (0.011 sec)

      六、避坑指导

      1. 启动observer进程之前,需要cd 到/home/admin/oceanbase目录下,再调用bin/observer命令启动。
      2. 启动observer进程之后,会报错fid file doesn't exist(pidfile="run/observer.pid,只要检查observer进程以及2881,2882端口正常,就可以忽略该错误。
      3. 在集群尚未bootstrap之前,不能连接sys租户,即-uroot@sys这种方式,只能使用-uroot不加租户和集群的方式连接。否则报错ERROR 8001 (08004): Server is initializing。
      4. 启动obproxy进程之前,需要cd 到/home/admin/obproxy-3.1.0,再调用bin/obproxy。

      七、参考链接

      部署单副本 OceanBase 集群-OceanBase 数据库-OceanBase文档中心-分布式数据库使用文档

      通过命令行部署 OBProxy-OceanBase 数据库-OceanBase文档中心-分布式数据库使用文档

      如何手动部署 OceanBase 集群(单节点)-数据库技术博客-OceanBase分布式数据库

      2.11 (高级)如何手动部署 OceanBase 集群-DBA 入门教程-OceanBase文档中心-分布式数据库使用文档

      停止或启动 OBServer-OceanBase 数据库-OceanBase文档中心-分布式数据库使用文档

上一篇:手动服务器密码在哪里设置?

下一篇:云服务器怎么安装nvm?