外观
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/log2. 部署新节点
使用 OBD 部署新节点:
bash
# 部署新节点
obd cluster deploy <cluster-name> -c <config-file> -s 192.168.1.103
# 启动新节点
obd cluster start <cluster-name> -s 192.168.1.1033. 验证新节点
bash
# 查看集群状态
obd cluster display <cluster-name>
# 查看节点状态
obd cluster status <cluster-name> -s 192.168.1.1034. 分配资源
为新节点分配资源:
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 控制台
- 打开浏览器,访问 OCP 控制台 URL
- 输入用户名和密码登录
- 在左侧导航栏中选择 "集群管理"
2. 选择集群
- 在集群列表中选择要添加节点的集群
- 点击 "节点管理" 标签页
- 点击 "添加节点" 按钮
3. 配置新节点信息
节点信息:
- 节点 IP:输入新节点的 IP 地址
- 节点名称:为新节点指定名称
- Zone:选择要添加到的 Zone
- 角色:选择节点角色(Observer)
部署配置:
- 安装目录:指定 OceanBase 安装目录
- 数据目录:指定数据文件存储目录
- 日志目录:指定日志文件存储目录
- 集群 ID:与现有集群 ID 保持一致
- 内存限制:根据节点配置设置
- CPU 数量:根据节点配置设置
网络配置:
- MySQL 端口:2881
- RPC 端口:2882
- 设备名:指定网络设备名称
密码配置:
- root 密码:设置 root 用户密码
- proxyro 密码:设置 proxyro 用户密码
4. 开始添加节点
- 点击 "下一步",确认配置信息
- 点击 "提交",开始添加节点
- 等待添加过程完成
5. 验证新节点
- 在 "节点管理" 页面查看新节点状态
- 检查新节点的资源使用情况
- 运行测试查询,验证新节点是否正常工作
手动添加节点
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
EOF2. 启动新节点
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. 节点添加失败
症状:添加节点时提示失败,查看日志发现错误信息。
处理步骤:
- 检查新节点的网络连接是否正常
- 检查新节点的防火墙是否开放了必要端口
- 检查新节点的磁盘空间是否足够
- 检查新节点的内存和 CPU 资源是否满足要求
- 查看 OceanBase 日志,查找具体错误信息
- 根据错误信息进行相应的修复
2. 数据迁移缓慢
症状:添加节点后,数据迁移速度缓慢,影响业务性能。
处理步骤:
- 检查集群当前负载,避免在高负载时进行数据迁移
- 调整数据迁移速度参数,增加迁移并发数
- 检查网络带宽是否充足,避免网络瓶颈
- 检查磁盘 I/O 性能,确保磁盘能够承受数据迁移的 I/O 压力
- 考虑在业务低峰期进行数据迁移
3. 新节点状态异常
症状:新节点添加后,状态显示为 INACTIVE 或其他异常状态。
处理步骤:
- 检查新节点的 Observer 进程是否正常运行
- 查看新节点的日志,查找错误信息
- 检查新节点与其他节点的网络连接
- 检查新节点的资源使用情况,是否存在资源不足
- 尝试重启新节点的 Observer 进程
- 如果问题仍然存在,考虑移除并重新添加节点
4. 资源分配失败
症状:为新节点分配资源时提示失败。
处理步骤:
- 检查资源单元配置是否合理,是否超过节点实际资源
- 检查资源池配置是否正确,Zone 列表是否包含新节点所在的 Zone
- 检查租户状态是否正常
- 查看集群日志,查找具体错误信息
- 根据错误信息进行相应的修复
最佳实践
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: 如果添加节点过程中出现问题,可以通过以下方式回滚:
- 如果节点添加尚未完成,直接取消添加操作
- 如果节点已添加成功,但存在问题,可以移除该节点
- 移除节点前,确保已将该节点上的资源迁移到其他节点
Q7: 添加节点后需要更新 OBProxy 配置吗?
A7: 如果使用 OBProxy 访问 OceanBase 集群,添加节点后需要更新 OBProxy 配置,将新节点添加到 OBProxy 的路由列表中。可以通过以下方式更新:
- 重启 OBProxy 进程,自动发现新节点
- 使用 OBD 或 OCP 更新 OBProxy 配置
- 手动更新 OBProxy 配置文件
Q8: 如何监控新节点的性能?
A8: 可以通过以下方式监控新节点的性能:
- 使用 OCP 监控新节点的资源使用情况和性能指标
- 使用 Prometheus 和 Grafana 监控新节点的性能指标
- 查看新节点的 OceanBase 日志
- 使用系统工具(如 top、iostat、netstat 等)监控新节点的系统资源使用情况
