Skip to content

OceanBase 节点添加 ​

前提条件 ​

1. 集群状态检查 ​

在添加节点之前,需要确保集群处于健康状态:

sql
-- 检查集群状态
SELECT * FROM oceanbase.__all_cluster;

-- 检查 Zone 状态
SELECT * FROM oceanbase.__all_zone;

-- 检查所有节点状态
SELECT * FROM oceanbase.__all_server;

-- 检查集群负载
SELECT * FROM oceanbase.__all_virtual_server_stat;

2. 新节点环境准备 ​

新节点需要满足以下条件:

  • 硬件配置:与现有节点配置一致或更高
  • 操作系统:与现有节点相同的操作系统版本
  • 依赖软件:已安装 OceanBase 依赖软件
  • 网络配置:与现有节点在同一网络,可互相通信
  • 存储配置:已配置好数据目录和日志目录
  • 用户权限:已创建 oceanbase 用户,权限与现有节点一致

3. 网络和安全配置 ​

  • 网络连通性:确保新节点与现有节点之间网络连通
  • 防火墙配置:开放必要端口(2881、2882 等)
  • SELinux 配置:已关闭 SELinux 或配置正确的 SELinux 策略
  • 时区配置:与现有节点时区一致

使用 OBD 添加节点 ​

1. 更新 OBD 配置文件 ​

编辑现有的 OBD 配置文件,添加新节点信息:

yaml
user: root
oceanbase-ce:
  servers:
    - 192.168.1.101  # 现有节点 1
    - 192.168.1.102  # 现有节点 2
    - 192.168.1.103  # 新添加节点
  global:
    home_path: /home/oceanbase
    data_dir: /data/oceanbase
    log_dir: /data/oceanbase/log
    devname: eth0
    mysql_port: 2881
    rpc_port: 2882
    zone_count: 1
    observer_count: 3
    cluster_id: 1
    memory_limit: 16G
    system_memory: 8G
    stack_size: 512K
    cpu_count: 16
    cache_wash_threshold: 1G
    __min_full_resource_pool_memory: 268435456
    workers_per_cpu_quota: 10
    schema_history_expire_time: 1d
    root_password: 'root@123'
    proxyro_password: 'proxyro@123'
  192.168.1.103:
    # 新节点特有配置(可选)
    home_path: /home/oceanbase
    data_dir: /data/oceanbase
    log_dir: /data/oceanbase/log

2. 部署新节点 ​

使用 OBD 部署新节点:

bash
# 部署新节点
obd cluster deploy <cluster-name> -c <config-file> -s 192.168.1.103

# 启动新节点
obd cluster start <cluster-name> -s 192.168.1.103

3. 验证新节点 ​

bash
# 查看集群状态
obd cluster display <cluster-name>

# 查看节点状态
obd cluster status <cluster-name> -s 192.168.1.103

4. 分配资源 ​

为新节点分配资源:

sql
-- 创建资源单元
CREATE RESOURCE UNIT new_unit_config
MAX_CPU=4,
MEMORY_SIZE='4G',
MAX_IOPS=10000,
MIN_IOPS=1000,
IOPS_WEIGHT=2,
LOG_DISK_SIZE='20G';

-- 创建资源池
CREATE RESOURCE POOL new_resource_pool
UNIT='new_unit_config',
UNIT_NUM=1,
ZONE_LIST=('zone1');

-- 将资源池分配给租户
ALTER TENANT test_tenant RESOURCE_POOL_LIST ADD ('new_resource_pool');

使用 OCP 添加节点 ​

1. 登录 OCP 控制台 ​

  1. 打开浏览器,访问 OCP 控制台 URL
  2. 输入用户名和密码登录
  3. 在左侧导航栏中选择 "集群管理"

2. 选择集群 ​

  1. 在集群列表中选择要添加节点的集群
  2. 点击 "节点管理" 标签页
  3. 点击 "添加节点" 按钮

3. 配置新节点信息 ​

  1. 节点信息:

    • 节点 IP:输入新节点的 IP 地址
    • 节点名称:为新节点指定名称
    • Zone:选择要添加到的 Zone
    • 角色:选择节点角色(Observer)
  2. 部署配置:

    • 安装目录:指定 OceanBase 安装目录
    • 数据目录:指定数据文件存储目录
    • 日志目录:指定日志文件存储目录
    • 集群 ID:与现有集群 ID 保持一致
    • 内存限制:根据节点配置设置
    • CPU 数量:根据节点配置设置
  3. 网络配置:

    • MySQL 端口:2881
    • RPC 端口:2882
    • 设备名:指定网络设备名称
  4. 密码配置:

    • root 密码:设置 root 用户密码
    • proxyro 密码:设置 proxyro 用户密码

4. 开始添加节点 ​

  1. 点击 "下一步",确认配置信息
  2. 点击 "提交",开始添加节点
  3. 等待添加过程完成

5. 验证新节点 ​

  1. 在 "节点管理" 页面查看新节点状态
  2. 检查新节点的资源使用情况
  3. 运行测试查询,验证新节点是否正常工作

手动添加节点 ​

1. 准备新节点 ​

在新节点上安装 OceanBase 软件:

bash
# 安装 OceanBase 依赖
 yum install -y yum-utils device-mapper-persistent-data lvm2 gcc gcc-c++ make openssl-devel zlib-devel libaio-devel libevent-devel libxml2-devel libtool

# 下载 OceanBase 安装包
yum-config-manager --add-repo https://mirrors.aliyun.com/oceanbase/OceanBase.repo
yum install -y oceanbase-ce

# 创建必要目录
mkdir -p /home/oceanbase/{bin,conf,log}
mkdir -p /data/oceanbase
mkdir -p /log/oceanbase

# 创建配置文件
cat > /home/oceanbase/conf/observer.conf << EOF
appname=observer
cluster_id=1
zone=zone1
tier_id=0
role=observer
devname=eth0
mysql_port=2881
rpc_port=2882
home_path=/home/oceanbase
data_dir=/data/oceanbase
log_dir=/home/oceanbase/log
memory_limit=16G
system_memory=8G
cpu_count=16
stack_size=512K
workers_per_cpu_quota=10
cache_wash_threshold=1G
__min_full_resource_pool_memory=268435456
schema_history_expire_time=1d
root_password=root@123
proxyro_password=proxyro@123
EOF

2. 启动新节点 ​

bash
# 启动 Observer 进程
/home/oceanbase/bin/observer -c /home/oceanbase/conf/observer.conf &

3. 注册新节点 ​

在现有节点上注册新节点:

sql
-- 查看集群 ID
SELECT cluster_id FROM oceanbase.__all_cluster;

-- 注册新节点
ALTER SYSTEM ADD SERVER '192.168.1.103:2882' ZONE 'zone1';

4. 分配资源 ​

为新节点分配资源:

sql
-- 创建资源单元
CREATE RESOURCE UNIT new_unit_config
MAX_CPU=4,
MEMORY_SIZE='4G',
MAX_IOPS=10000,
MIN_IOPS=1000,
IOPS_WEIGHT=2,
LOG_DISK_SIZE='20G';

-- 创建资源池
CREATE RESOURCE POOL new_resource_pool
UNIT='new_unit_config',
UNIT_NUM=1,
ZONE_LIST=('zone1');

-- 将资源池分配给租户
ALTER TENANT test_tenant RESOURCE_POOL_LIST ADD ('new_resource_pool');

数据迁移 ​

1. 监控数据迁移进度 ​

sql
-- 查看副本迁移状态
SELECT * FROM oceanbase.__all_virtual_partition_migration_status;

-- 查看副本分布情况
SELECT svr_ip, count(*) as partition_count FROM oceanbase.__all_virtual_partition_info GROUP BY svr_ip;

-- 查看迁移任务
SELECT * FROM oceanbase.__all_virtual_root_service_event_history WHERE event LIKE '%migrate%' ORDER BY gmt_create DESC;

3. 调整数据迁移速度 ​

sql
-- 查看当前迁移速度设置
SHOW PARAMETERS LIKE '%migration%speed%';

-- 调整迁移速度
ALTER SYSTEM SET migration_cluster_timeout = 3600 SCOPE = BOTH;
ALTER SYSTEM SET migration_concurrency = 10 SCOPE = BOTH;
ALTER SYSTEM SET migration_speed_limit = 100 SCOPE = BOTH;

验证与测试 ​

1. 节点状态验证 ​

sql
-- 检查新节点状态
SELECT * FROM oceanbase.__all_server WHERE svr_ip = '192.168.1.103';

-- 检查新节点资源使用情况
SELECT * FROM oceanbase.__all_virtual_server_stat WHERE svr_ip = '192.168.1.103';

-- 检查新节点负载
SELECT * FROM oceanbase.__all_virtual_sys_resource_mgr WHERE svr_ip = '192.168.1.103';

2. 功能验证 ​

sql
-- 连接新节点
mysql -h192.168.1.103 -P2881 -uroot@sys -p'root@123' -A oceanbase

-- 执行简单查询
SHOW DATABASES;
SELECT * FROM oceanbase.__all_server;

-- 创建测试表并插入数据
CREATE DATABASE test_db;
USE test_db;
CREATE TABLE test_table (id INT PRIMARY KEY, name VARCHAR(50));
INSERT INTO test_table VALUES (1, 'OceanBase');
SELECT * FROM test_table;

3. 性能测试 ​

使用压测工具测试新节点的性能:

bash
# 使用 SysBench 进行性能测试
sysbench --db-driver=mysql --mysql-host=192.168.1.103 --mysql-port=2881 --mysql-user=root@sys --mysql-password='root@123' --mysql-db=test_db --table_size=1000000 --tables=10 --threads=16 --time=60 --report-interval=10 oltp_read_write run

常见问题处理 ​

1. 节点添加失败 ​

症状:添加节点时提示失败,查看日志发现错误信息。

处理步骤:

  1. 检查新节点的网络连接是否正常
  2. 检查新节点的防火墙是否开放了必要端口
  3. 检查新节点的磁盘空间是否足够
  4. 检查新节点的内存和 CPU 资源是否满足要求
  5. 查看 OceanBase 日志,查找具体错误信息
  6. 根据错误信息进行相应的修复

2. 数据迁移缓慢 ​

症状:添加节点后,数据迁移速度缓慢,影响业务性能。

处理步骤:

  1. 检查集群当前负载,避免在高负载时进行数据迁移
  2. 调整数据迁移速度参数,增加迁移并发数
  3. 检查网络带宽是否充足,避免网络瓶颈
  4. 检查磁盘 I/O 性能,确保磁盘能够承受数据迁移的 I/O 压力
  5. 考虑在业务低峰期进行数据迁移

3. 新节点状态异常 ​

症状:新节点添加后,状态显示为 INACTIVE 或其他异常状态。

处理步骤:

  1. 检查新节点的 Observer 进程是否正常运行
  2. 查看新节点的日志,查找错误信息
  3. 检查新节点与其他节点的网络连接
  4. 检查新节点的资源使用情况,是否存在资源不足
  5. 尝试重启新节点的 Observer 进程
  6. 如果问题仍然存在,考虑移除并重新添加节点

4. 资源分配失败 ​

症状:为新节点分配资源时提示失败。

处理步骤:

  1. 检查资源单元配置是否合理,是否超过节点实际资源
  2. 检查资源池配置是否正确,Zone 列表是否包含新节点所在的 Zone
  3. 检查租户状态是否正常
  4. 查看集群日志,查找具体错误信息
  5. 根据错误信息进行相应的修复

最佳实践 ​

1. 节点添加时机 ​

  • 业务低峰期:选择业务低峰期添加节点,减少对业务的影响
  • 集群健康状态:确保集群处于健康状态,避免在集群异常时添加节点
  • 资源充足:确保新节点有足够的资源(CPU、内存、磁盘)
  • 网络稳定:确保网络环境稳定,避免在网络波动时添加节点

2. 节点配置建议 ​

  • 配置一致性:新节点的配置应与现有节点保持一致或更高,避免配置差异导致性能不均衡
  • 存储分离:数据目录和日志目录应分离,提高 I/O 性能
  • SSD 存储:推荐使用 SSD 存储,提高数据迁移和查询性能
  • 万兆网卡:推荐使用万兆网卡,提高节点间数据传输速度

3. 数据迁移优化 ​

  • 调整迁移速度:根据集群负载调整数据迁移速度
  • 监控迁移进度:实时监控数据迁移进度,及时发现问题
  • 避免频繁迁移:避免在短时间内频繁添加节点,导致多次数据迁移
  • 优先迁移冷数据:优先迁移访问频率低的数据,减少对业务的影响

4. 验证测试 ​

  • 全面验证:添加节点后,进行全面的验证测试,包括功能测试、性能测试和可靠性测试
  • 监控观察:添加节点后,观察一段时间(如 24 小时),确保集群稳定运行
  • 业务测试:进行业务相关的测试,确保业务不受影响
  • 故障测试:模拟故障场景,测试集群的容错能力

常见问题(FAQ) ​

Q1: 可以添加不同配置的节点吗? ​

A1: 可以添加不同配置的节点,但不推荐。不同配置的节点会导致资源分配不均,影响集群性能。如果必须添加不同配置的节点,建议将其添加到不同的 Zone,并根据节点配置调整资源单元大小。

Q2: 添加节点会影响业务吗? ​

A2: 添加节点过程中,OceanBase 会自动进行数据迁移,可能会对业务产生一定影响,如增加网络流量、占用磁盘 I/O 等。建议在业务低峰期添加节点,并调整数据迁移速度,减少对业务的影响。

Q3: 如何确定添加节点的数量? ​

A3: 确定添加节点的数量需要考虑以下因素:

  • 当前集群的负载情况
  • 业务增长趋势
  • 现有节点的资源使用率
  • 预期的性能提升目标
  • 预算限制

一般来说,当集群的 CPU 使用率超过 70% 或磁盘使用率超过 80% 时,考虑添加节点。

Q4: 可以同时添加多个节点吗? ​

A4: 可以同时添加多个节点,但需要考虑集群的承受能力。同时添加多个节点会增加数据迁移的压力,可能影响集群性能。建议一次添加的节点数量不超过现有节点数量的 50%。

Q5: 添加节点后需要调整负载均衡吗? ​

A5: 不需要手动调整负载均衡。OceanBase 会自动将查询请求路由到负载较低的节点,实现负载均衡。添加节点后,集群会自动调整负载均衡策略。

Q6: 如何回滚节点添加操作? ​

A6: 如果添加节点过程中出现问题,可以通过以下方式回滚:

  1. 如果节点添加尚未完成,直接取消添加操作
  2. 如果节点已添加成功,但存在问题,可以移除该节点
  3. 移除节点前,确保已将该节点上的资源迁移到其他节点

Q7: 添加节点后需要更新 OBProxy 配置吗? ​

A7: 如果使用 OBProxy 访问 OceanBase 集群,添加节点后需要更新 OBProxy 配置,将新节点添加到 OBProxy 的路由列表中。可以通过以下方式更新:

  1. 重启 OBProxy 进程,自动发现新节点
  2. 使用 OBD 或 OCP 更新 OBProxy 配置
  3. 手动更新 OBProxy 配置文件

Q8: 如何监控新节点的性能? ​

A8: 可以通过以下方式监控新节点的性能:

  • 使用 OCP 监控新节点的资源使用情况和性能指标
  • 使用 Prometheus 和 Grafana 监控新节点的性能指标
  • 查看新节点的 OceanBase 日志
  • 使用系统工具(如 top、iostat、netstat 等)监控新节点的系统资源使用情况