OceanBase 单机部署
OceanBase 是由蚂蚁集团完全自主研发的国产原生分布式数据库,本文以 x86 架构的 CentOS 7.9 主机作为环境对该数据库的安装部署进行介绍。
准备工作
- 先调整内核参数,否则执行
obd demo会报错[ERROR] OBD-1007:(127.0.0.1) open files must not be less than 20000 (Current value: 1024)
#.配置时区
timedatectl set-timezone Asia/Shanghai
#.优化ulimit,需退出会话并重连
ulimit -n 655350
cat /etc/security/limits.conf | grep nofile | grep 655350 || echo "* - nofile 655350" >> /etc/security/limits.conf
cat /etc/security/limits.conf | grep nproc | grep 655350 || echo "* - nproc 655350" >> /etc/security/limits.conf
cat /etc/security/limits.conf | grep core | grep unlimited || echo "* - core unlimited" >> /etc/security/limits.conf
cat /etc/security/limits.conf | grep stack | grep unlimited || echo "* - stack unlimited" >> /etc/security/limits.conf
cat /etc/security/limits.conf | grep "^*"
#.临时关闭iptables
iptables -F
#.关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
#.关闭selinux
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
setenforce 0
#.优化内核
sed -i '/^fs.aio-max-nr/d' /etc/sysctl.conf
sed -i '/^fs.file-max/d' /etc/sysctl.conf
sed -i '/^vm.max_map_count/d' /etc/sysctl.conf
sed -i '/^fs.nr_open/d' /etc/sysctl.conf
sed -i '/^kernel.shmall/d' /etc/sysctl.conf
sed -i '/^kernel.shmmax/d' /etc/sysctl.conf
sed -i '/^kernel.shmmni/d' /etc/sysctl.conf
sed -i '/^kernel.sem/d' /etc/sysctl.conf
sed -i '/^net.ipv4.ip_local_port_range/d' /etc/sysctl.conf
sed -i '/^net.core.rmem_default/d' /etc/sysctl.conf
sed -i '/^net.core.rmem_max/d' /etc/sysctl.conf
sed -i '/^net.core.wmem_default/d' /etc/sysctl.conf
sed -i '/^net.core.wmem_max/d' /etc/sysctl.conf
echo "fs.aio-max-nr= 1048576" >> /etc/sysctl.conf
echo "fs.file-max= 6815744" >> /etc/sysctl.conf
echo "vm.max_map_count=655360" >> /etc/sysctl.conf
echo "fs.nr_open = 20480000" >> /etc/sysctl.conf
echo "kernel.shmall = 2097152" >> /etc/sysctl.conf
echo "kernel.shmmax = 4294967295" >> /etc/sysctl.conf
echo "kernel.shmmni = 4096" >> /etc/sysctl.conf
echo "kernel.sem = 250 32000 100 128" >> /etc/sysctl.conf
echo "net.ipv4.ip_local_port_range = 9000 65500" >> /etc/sysctl.conf
echo "net.core.rmem_default = 262144" >> /etc/sysctl.conf
echo "net.core.rmem_max = 4194304" >> /etc/sysctl.conf
echo "net.core.wmem_default = 262144" >> /etc/sysctl.conf
echo "net.core.wmem_max = 1048576" >> /etc/sysctl.conf
/sbin/sysctl -p /etc/sysctl.conf > /dev/null 2>&1
- 退出当前会话,打开新的会话,然后确认ulimit
exit
ulimit -a | egrep "(size|files)"
安装部署
安装 all-in-one package 工具包
- 从 OceanBase下载中心 下载并安装 OceanBase 4.3.5_bp2_hf2
注:OceanBase 自 V4.0.0 开始提供统一的安装包 all-in-one package,可一次性安装 OBD、OceanBase、ODP、OBAgent、Grafana、Prometheus
cd /opt/
wget -c https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/download-center/opensource/oceanbase-all-in-one/7/x86_64/oceanbase-all-in-one-4.3.5_bp2_hf2_20250703.el7.x86_64.tar.gz
tar -xzf oceanbase-all-in-one-*.tar.gz
cd oceanbase-all-in-one/bin/
./install.sh
source ~/.oceanbase-all-in-one/bin/env.sh
通过 obd demo 部署demo集群
- 利用 OceanBase 安装部署工具(OceanBase Deployer,简称为 obd)执行 obd demo 命令,以最小规格部署并启动 OceanBase 数据库及相关组件(包括 ODP、OBAgent、Grafana 和 Prometheus),固定部署名为 demo(仅用于简单使用,不应用于生产)
#.启动demo集群
obd demo
#.查看集群清单
obd cluster list
#.执行display会显示指定集群的相关登录方式和密码
obd cluster display demo
#.obd集群启动与停止, 以demo为例
obd cluster start demo
obd cluster stop demo
#.确认端口监听
netstat -lnpt | egrep "(observer|obproxy|grafana|prometheus)"
- 登录测试
#.通过 edit-config 找到默认账号及密码
obd cluster edit-config demo
#.查看登录命令, 会提供登录账号及密码
obd cluster display demo | grep obclient
cat ~/.obd/cluster/demo/config.yaml | grep observer_root_password
#.登录数据库
obclient -h127.0.0.1 -P2881 -uroot@sys -p -Doceanbase -A -e "select version();"
obclient -h127.0.0.1 -P2883 -uroot@sys -p -Doceanbase -A -e "select version();"
#.修改默认密码为 Admin_147
obclient -h127.0.0.1 -P2881 -uroot@sys -p -Doceanbase -A -e "alter user 'root'@'%' identified by 'Admin_147';"
#.登录测试
obclient -h127.0.0.1 -P2881 -uroot@sys -p'Admin_147' -Doceanbase -A -e "select version();"
- 登录如下控制台,修改初始密码,示例本机ip为 192.168.31.101
| web控制台 | url地址 | 初始账密 | 建议账密 |
|---|---|---|---|
| Grafana | http://192.168.31.101:3000 | admin/参考以下几种方式 | admin/Admin_147 |
| Prometheus | http://192.168.31.101:9090 | 无 | 无 |
#.Grafana默认密码, 从 obd cluster display 中获取
obd cluster display demo | grep 3000
#.Grafana默认密码, 从 obd cluster list 返回的配置目录和文件中获取
cat ~/.obd/cluster/demo/config.yaml | grep login_password
#.Grafana默认密码, 从日志中获取
cat ~/.obd/log/obd | grep password | grep 3000
通过 obd cluster autodeploy 部署自定义集群
#.修改参数
ip_addr=127.0.0.1
ob_port_num=2881
ob_cluster_name=sqlfans
ob_cluster_id=3000000001
ob_data_dir=/data
ob_root_pwd=Admin_147
grafana_login_pwd=Admin_147
ob_sys_pwd=Admin_258
ocp_agent_monitor_pwd=Admin_258
#.创建目录
rm -rf ${ob_data_dir}/ob_${ob_port_num}
mkdir -p ${ob_data_dir}/ob_${ob_port_num}/{obproxy-ce,oceanbase-ce,prometheus,obagent,grafana}
curl -sL http://iso.sqlfans.cn/oceanbase/ob_config_standalone.yaml > /tmp/obconfig.yaml
cat /tmp/obconfig.yaml > ${ob_data_dir}/ob_${ob_port_num}/config.yaml
#.替换参数
sed -i "s/127.0.0.1/${ip_addr}/" ${ob_data_dir}/ob_${ob_port_num}/config.yaml
sed -i "s/ob_port_num/${ob_port_num}/" ${ob_data_dir}/ob_${ob_port_num}/config.yaml
sed -i "s/ob_cluster_name/${ob_cluster_name}/" ${ob_data_dir}/ob_${ob_port_num}/config.yaml
sed -i "s/ob_cluster_id/${ob_cluster_id}/" ${ob_data_dir}/ob_${ob_port_num}/config.yaml
sed -i "s:ob_data_dir:${ob_data_dir}/ob_${ob_port_num}:g" ${ob_data_dir}/ob_${ob_port_num}/config.yaml
sed -i "s/ob_root_pwd/${ob_root_pwd}/" ${ob_data_dir}/ob_${ob_port_num}/config.yaml
sed -i "s/grafana_login_pwd/${grafana_login_pwd}/" ${ob_data_dir}/ob_${ob_port_num}/config.yaml
sed -i "s/ob_sys_pwd/${ob_sys_pwd}/" ${ob_data_dir}/ob_${ob_port_num}/config.yaml
sed -i "s/ocp_agent_monitor_pwd/${ocp_agent_monitor_pwd}/" ${ob_data_dir}/ob_${ob_port_num}/config.yaml
#.确认内容
cat ${ob_data_dir}/ob_${ob_port_num}/config.yaml
#.根据配置文件部署自定义集群
#.obd cluster autodeploy -f <集群名> -c <配置文件>
obd cluster autodeploy -f $ob_cluster_name -c ${ob_data_dir}/ob_${ob_port_num}/config.yaml
#.启动自定义集群
obd cluster start $ob_cluster_name
#.确认端口监听
netstat -lnpt | egrep "(observer|obproxy|grafana|prometheus)"
#.登录测试
obclient -h127.0.0.1 -P2881 -uroot@sys -p'Admin_147' -Doceanbase -A -e "select version();"
- 登录Grafana控制台,示例本机ip为 192.168.31.101
#.登录Grafana控制台
地址:http://192.168.31.101:3000
账号:admin
密码:Admin_147
通过 obd web 在线部署集群
- 第1步,执行 obd web 看到如下界面,再通过浏览器访问 http://192.168.31.101:8680 进行在线部署
[root@localhost ~]# obd web
start OBD WEB in 0.0.0.0:8680
please open http://127.0.0.1:8680
- 第2步,打开 OceanBase 部署向导,根据需要选择安装产品或组件管理,示例选择 OceanBase及配套工具
- 第3步,根据提示调整 集群名称、数据库版本、负载类型、可选组件等
- 后续步骤,请参考:通过 obd 图形化界面部署 OceanBase 集群
遇到的问题
- 问题1:执行 obd cluster autodeploy 部署自定义集群的时候,报错 [ERROR] OBD-2003: (127.0.0.1) / not enough disk space. (Avail: 27G, Need: 32G)
- 解决1:将报错的分区扩容
如何清理
- 如何彻底清理
/opt/oceanbase-all-in-one/bin/uninstall.sh
sed -i '/oceanbase/d' ~/.bash_profile
sed -i '/obd/d' ~/.bash_profile
source ~/.bash_profile
rm -rf ~/.obd
rm -rf ~/{grafana,obagent,obproxy-ce,oceanbase-ce,prometheus}

