外观
OceanBase 集群部署
集群部署架构
单可用区部署
- 架构特点:所有节点部署在同一个可用区内
- 适用场景:开发测试环境、小规模生产环境
- 优点:部署简单、网络延迟低
- 缺点:可用区故障会导致整个集群不可用
多可用区部署
- 架构特点:节点分布在多个可用区内
- 适用场景:中大规模生产环境
- 优点:可用区级故障不影响集群可用性
- 缺点:部署复杂度增加、跨可用区网络延迟
跨地域部署
- 架构特点:节点分布在多个地域
- 适用场景:全球业务、灾备需求
- 优点:地域级故障不影响集群可用性
- 缺点:部署复杂度高、跨地域网络延迟大
集群部署方法
使用 OBD 部署
1. 安装 OBD
bash
# 安装 OBD
pip install oceanbase-deploy
# 验证 OBD 安装
obd --version2. 准备部署配置文件
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: password3. 部署集群
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
EOF2. 安装 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.sh3. 启动 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;验证集群功能
创建租户:
sqlCREATE 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';创建表和插入数据:
sqlCREATE 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;验证数据同步:
sql-- 在其他节点查询数据 SELECT * FROM test_db.test_table;
集群部署最佳实践
硬件配置建议
- CPU:建议使用 16 核以上的 CPU
- 内存:建议使用 64GB 以上的内存
- 磁盘:建议使用 SSD 磁盘,单盘容量 1TB 以上
- 网络:建议使用 10G 以上的网络带宽
- 节点数量:建议部署 3 个以上节点
网络配置建议
- 网络拓扑:尽量减少网络跳数,优化网络延迟
- 网络隔离:将 OceanBase 集群部署在独立的网络段
- 网络监控:部署网络监控,及时发现网络问题
- 带宽预留:为 OceanBase 集群预留足够的网络带宽
存储配置建议
- 磁盘分区:将数据目录和日志目录部署在不同的磁盘上
- 文件系统:建议使用 EXT4 或 XFS 文件系统
- 磁盘调度器:建议使用 noop 或 deadline 磁盘调度器
- IO 调度:优化磁盘 IO 调度,提高存储性能
部署流程建议
- 环境准备:充分准备硬件环境、网络环境和软件环境
- 规划设计:根据业务需求规划集群架构和资源配置
- 测试验证:在测试环境验证部署流程和配置
- 分批部署:生产环境建议分批部署,降低风险
- 监控告警:部署完成后,配置监控告警系统
- 文档记录:详细记录部署过程和配置信息
常见问题(FAQ)
Q1: OBD 部署失败怎么办?
A1: OBD 部署失败时,可以尝试以下操作:
- 查看 OBD 日志,分析失败原因
- 检查部署配置文件是否正确
- 检查节点间网络连通性
- 检查节点资源是否充足
- 检查操作系统参数是否符合要求
- 重新执行部署命令,添加 --debug 参数查看详细日志
bash
# 查看 OBD 日志
obd cluster display cluster.yaml --detail
# 重新部署并查看详细日志
obd cluster deploy cluster.yaml -c --debugQ2: 集群部署后节点无法启动怎么办?
A2: 节点无法启动时,可以尝试以下操作:
- 查看 Observer 日志,分析失败原因
- 检查节点资源是否充足
- 检查配置参数是否正确
- 检查节点间网络连通性
- 尝试重启节点
bash
# 查看 Observer 日志
tail -f /home/admin/oceanbase/log/observer.log
# 重启节点
pkill -9 observer && cd /home/admin/oceanbase && bin/observer ...Q3: 如何扩容集群?
A3: 可以通过以下步骤扩容集群:
- 准备新节点,配置环境
- 在 OBD 配置文件中添加新节点信息
- 执行扩容命令
- 验证扩容结果
bash
# 修改配置文件,添加新节点
# 执行扩容命令
obd cluster expand cluster.yaml
# 验证扩容结果
obd cluster display cluster.yamlQ4: 如何缩容集群?
A4: 可以通过以下步骤缩容集群:
- 确保要缩容的节点上没有主副本
- 执行缩容命令
- 验证缩容结果
bash
# 执行缩容命令
obd cluster shrink cluster.yaml -S server4
# 验证缩容结果
obd cluster display cluster.yamlQ5: 如何升级集群版本?
A5: 可以通过以下步骤升级集群版本:
- 备份集群数据
- 下载新版本的 OceanBase 安装包
- 执行升级命令
- 验证升级结果
bash
# 执行升级命令
obd cluster upgrade cluster.yaml -v 4.1.0
# 验证升级结果
obd cluster display cluster.yaml