Skip to content

OceanBase 集群部署

集群部署架构

单可用区部署

  1. 架构特点:所有节点部署在同一个可用区内
  2. 适用场景:开发测试环境、小规模生产环境
  3. 优点:部署简单、网络延迟低
  4. 缺点:可用区故障会导致整个集群不可用

多可用区部署

  1. 架构特点:节点分布在多个可用区内
  2. 适用场景:中大规模生产环境
  3. 优点:可用区级故障不影响集群可用性
  4. 缺点:部署复杂度增加、跨可用区网络延迟

跨地域部署

  1. 架构特点:节点分布在多个地域
  2. 适用场景:全球业务、灾备需求
  3. 优点:地域级故障不影响集群可用性
  4. 缺点:部署复杂度高、跨地域网络延迟大

集群部署方法

使用 OBD 部署

1. 安装 OBD

bash
# 安装 OBD
pip install oceanbase-deploy

# 验证 OBD 安装
obd --version

2. 准备部署配置文件

yaml
# cluster.yaml
user: admin
oceanbase-ce:
  servers:
    - name: server1
      ip: 192.168.1.10
    - name: server2
      ip: 192.168.1.11
    - name: server3
      ip: 192.168.1.12
  global:
    home_path: /home/admin/oceanbase
    devname: eth0
    cluster_id: 1
    mysql_port: 2881
    rpc_port: 2882
    zone_list: zone1,zone2,zone3
    observer_sys_password: password
    root_password: password
  server1:
    zone: zone1
  server2:
    zone: zone2
  server3:
    zone: zone3

obproxy-ce:
  servers:
    - 192.168.1.10
    - 192.168.1.11
    - 192.168.1.12
  global:
    home_path: /home/admin/obproxy
    oceanbase_root_server_list: 192.168.1.10:2882:1;192.168.1.11:2882:2;192.168.1.12:2882:3
    oceanbase_cluster_name: obcluster
    listen_port: 2883
    obproxy_sys_password: password
    proxyro_password: password

3. 部署集群

bash
# 检查部署配置
obd cluster check cluster.yaml --mode precheck

# 部署集群
obd cluster deploy cluster.yaml -c

# 启动集群
obd cluster start cluster.yaml

# 查看集群状态
obd cluster display cluster.yaml

手动部署

1. 环境准备

bash
# 配置系统参数
cat > /etc/sysctl.d/ob.conf <<EOF
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.core_pattern = /home/core-%e-%p-%t
kernel.sem = 250 32000 100 128
kernel.shmall = 134217728
kernel.shmmax = 68719476736
kernel.shmmni = 4096
net.core.netdev_max_backlog = 10000
net.core.rmem_default = 16777216
net.core.rmem_max = 16777216
net.core.somaxconn = 20480
net.core.wmem_default = 16777216
net.core.wmem_max = 16777216
net.ipv4.ip_local_port_range = 3500 65535
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_max_syn_backlog = 20480
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_wmem = 4096 16384 16777216
vm.swappiness = 0
EOF

# 生效系统参数
sysctl -p /etc/sysctl.d/ob.conf

# 配置资源限制
cat > /etc/security/limits.d/ob.conf <<EOF
* soft nofile 655360
* hard nofile 655360
* soft stack 20480
* hard stack 20480
* soft nproc 655360
* hard nproc 655360
* soft core unlimited
* hard core unlimited
EOF

2. 安装 OceanBase 软件

bash
# 下载 OceanBase 安装包
wget https://mirrors.aliyun.com/oceanbase/community/stable/el/7/x86_64/oceanbase-ce-4.1.0.0-1.el7.x86_64.rpm

# 安装 OceanBase
rpm -ivh oceanbase-ce-4.1.0.0-1.el7.x86_64.rpm

# 初始化 OceanBase 环境
/home/admin/oceanbase/bin/init.sh

3. 启动 Observer 进程

bash
# 启动第一个节点(RootServer)
cd /home/admin/oceanbase && bin/observer \
  -i eth0 \
  -p 2881 \
  -P 2882 \
  -z zone1 \
  -d /home/admin/oceanbase/store \
  -r "192.168.1.10:2882:2881" \
  -c 1001 \
  -n obcluster \
  -o "memory_limit=8G,system_memory=4G,datafile_size=100G,log_disk_size=200G,max_connections=10000,devname=eth0"

# 启动第二个节点
cd /home/admin/oceanbase && bin/observer \
  -i eth0 \
  -p 2881 \
  -P 2882 \
  -z zone2 \
  -d /home/admin/oceanbase/store \
  -r "192.168.1.10:2882:2881" \
  -c 1001 \
  -n obcluster \
  -o "memory_limit=8G,system_memory=4G,datafile_size=100G,log_disk_size=200G,max_connections=10000,devname=eth0"

# 启动第三个节点
cd /home/admin/oceanbase && bin/observer \
  -i eth0 \
  -p 2881 \
  -P 2882 \
  -z zone3 \
  -d /home/admin/oceanbase/store \
  -r "192.168.1.10:2882:2881" \
  -c 1001 \
  -n obcluster \
  -o "memory_limit=8G,system_memory=4G,datafile_size=100G,log_disk_size=200G,max_connections=10000,devname=eth0"

集群部署验证

检查集群状态

bash
# 使用 OBD 检查集群状态
obd cluster display cluster.yaml

# 使用 MySQL 客户端连接检查
mysql -h192.168.1.10 -P2881 -uroot -ppassword -D oceanbase

# 检查集群状态
SELECT * FROM oceanbase.GV$OB_CLUSTER_STATUS;

# 检查节点状态
SELECT * FROM oceanbase.GV$OB_SERVERS;

# 检查副本状态
SELECT * FROM oceanbase.GV$OB_REPLICA_STATUS;

验证集群功能

  1. 创建租户

    sql
    CREATE RESOURCE UNIT unit1 MAX_CPU=4, MIN_CPU=4, MEMORY_SIZE='8G', MAX_IOPS=10000, MIN_IOPS=10000;
    CREATE RESOURCE POOL pool1 RESOURCE_UNIT='unit1', UNIT_NUM=1, ZONE_LIST=('zone1','zone2','zone3');
    CREATE TENANT tenant1 RESOURCE_POOL_LIST=('pool1'), PRIMARY_ZONE='zone1,zone2,zone3', LOCALITY='F@zone1,F@zone2,F@zone3';
  2. 创建表和插入数据

    sql
    CREATE DATABASE test_db;
    USE test_db;
    CREATE TABLE test_table (id INT PRIMARY KEY, name VARCHAR(50));
    INSERT INTO test_table VALUES (1, 'test');
    SELECT * FROM test_table;
  3. 验证数据同步

    sql
    -- 在其他节点查询数据
    SELECT * FROM test_db.test_table;

集群部署最佳实践

硬件配置建议

  1. CPU:建议使用 16 核以上的 CPU
  2. 内存:建议使用 64GB 以上的内存
  3. 磁盘:建议使用 SSD 磁盘,单盘容量 1TB 以上
  4. 网络:建议使用 10G 以上的网络带宽
  5. 节点数量:建议部署 3 个以上节点

网络配置建议

  1. 网络拓扑:尽量减少网络跳数,优化网络延迟
  2. 网络隔离:将 OceanBase 集群部署在独立的网络段
  3. 网络监控:部署网络监控,及时发现网络问题
  4. 带宽预留:为 OceanBase 集群预留足够的网络带宽

存储配置建议

  1. 磁盘分区:将数据目录和日志目录部署在不同的磁盘上
  2. 文件系统:建议使用 EXT4 或 XFS 文件系统
  3. 磁盘调度器:建议使用 noop 或 deadline 磁盘调度器
  4. IO 调度:优化磁盘 IO 调度,提高存储性能

部署流程建议

  1. 环境准备:充分准备硬件环境、网络环境和软件环境
  2. 规划设计:根据业务需求规划集群架构和资源配置
  3. 测试验证:在测试环境验证部署流程和配置
  4. 分批部署:生产环境建议分批部署,降低风险
  5. 监控告警:部署完成后,配置监控告警系统
  6. 文档记录:详细记录部署过程和配置信息

常见问题(FAQ)

Q1: OBD 部署失败怎么办?

A1: OBD 部署失败时,可以尝试以下操作:

  1. 查看 OBD 日志,分析失败原因
  2. 检查部署配置文件是否正确
  3. 检查节点间网络连通性
  4. 检查节点资源是否充足
  5. 检查操作系统参数是否符合要求
  6. 重新执行部署命令,添加 --debug 参数查看详细日志
bash
# 查看 OBD 日志
obd cluster display cluster.yaml --detail

# 重新部署并查看详细日志
obd cluster deploy cluster.yaml -c --debug

Q2: 集群部署后节点无法启动怎么办?

A2: 节点无法启动时,可以尝试以下操作:

  1. 查看 Observer 日志,分析失败原因
  2. 检查节点资源是否充足
  3. 检查配置参数是否正确
  4. 检查节点间网络连通性
  5. 尝试重启节点
bash
# 查看 Observer 日志
tail -f /home/admin/oceanbase/log/observer.log

# 重启节点
pkill -9 observer && cd /home/admin/oceanbase && bin/observer ...

Q3: 如何扩容集群?

A3: 可以通过以下步骤扩容集群:

  1. 准备新节点,配置环境
  2. 在 OBD 配置文件中添加新节点信息
  3. 执行扩容命令
  4. 验证扩容结果
bash
# 修改配置文件,添加新节点
# 执行扩容命令
obd cluster expand cluster.yaml

# 验证扩容结果
obd cluster display cluster.yaml

Q4: 如何缩容集群?

A4: 可以通过以下步骤缩容集群:

  1. 确保要缩容的节点上没有主副本
  2. 执行缩容命令
  3. 验证缩容结果
bash
# 执行缩容命令
obd cluster shrink cluster.yaml -S server4

# 验证缩容结果
obd cluster display cluster.yaml

Q5: 如何升级集群版本?

A5: 可以通过以下步骤升级集群版本:

  1. 备份集群数据
  2. 下载新版本的 OceanBase 安装包
  3. 执行升级命令
  4. 验证升级结果
bash
# 执行升级命令
obd cluster upgrade cluster.yaml -v 4.1.0

# 验证升级结果
obd cluster display cluster.yaml