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 等)监控新节点的系统资源使用情况