实验目录:
(必选)手动部署一个 OB 单副本集群,包括一个 OBProxy 节点。
(必选)创建一个业务租户、一个业务数据库,以及一些表等。
(可选)如果单台服务器内存有32G,或者有三台服务器,改为部署一个 OB 三副本集群,包括一个 OBProxy 节点。
(可选)如果有三台服务器并且服务器内存有 32 G,可以单服务器内启动 2 个节点,实现 1-1-1 扩容到 2-2-2 。
服务器基础配置
以下以单机模拟部署3副本集群为例
系统配置
关闭防火墙和SELinux
关闭透明大页:echo never > /sys/kernel/mm/transparent_hugepage/enabled
# 修改/etc/security/limits.conf
root soft nofile 655350
root hard nofile 655350
* soft nofile 655350
* hard nofile 655350
* soft stack unlimited
* hard stack unlimited
* soft nproc 655360
* hard nproc 655360
* soft core unlimited
* hard core unlimited
# 不便重启的环境修改root用户ulimit值
echo "ulimit -n 655350" >> /etc/profile
source /etc/profile
# 修改/etc/sysctl.conf
# for oceanbase
## 修改内核异步 I/O 限制
fs.aio-max-nr=1048576
## 网络优化
net.core.somaxconn = 2048
net.core.netdev_max_backlog = 10000
net.core.rmem_default = 16777216
net.core.wmem_default = 16777216
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.ip_local_port_range = 3500 65535
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_slow_start_after_idle=0
vm.overcommit_memory=0
vm.swappiness = 0
vm.min_free_kbytes = 2097152
fs.file-max = 6573688
# 修改进程可以拥有的虚拟内存区域数量
vm.max_map_count = 655360
# 此处为 OceanBase 数据库的 data 目录
kernel.core_pattern = /data/core-%e-%p-%t
# sysctl -p --使配置生效
java环境
Java:部署 OCP Express 的机器上需先安装配置 Java 环境,目前仅支持 JDK1.8 版本。详细操作可参考:https://www.oceanbase.com/docs/community-obd-cn-10000000001690696
中控机软件安装
需要登录网站:https://www.ocean
base.com/softwarecenter
下载这3个安装包:oceanbase-ce、oceanbase-ce-libs、obproxy-ce
实验机器是ARM架构的,下载了arm版安装包。
# all-in-one
wget https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/download-center/opensource/oceanbase-all-in-one/7/aarch64/oceanbase-all-in-one-4.2.2.0-100010012024022719.el7.aarch64.tar.gz
# 也可单独下载rpm包
wget https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/download-center/opensource/observer/v4.2.2_CE_HF1/oceanbase-ce-4.2.2.0-100010012024022719.el7.aarch64.rpm
wget https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/download-center/opensource/observer/v4.2.2_CE_HF1/oceanbase-ce-libs-4.2.2.0-100010012024022719.el7.aarch64.rpm
wget https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/download-center/opensource/obproxy/v4.2.3_CE/obproxy-ce-4.2.3.0-3.el7.aarch64.rpm
tar zxvf oceanbase-all-in-one-4.2.2.0-100010012024022719.el7.aarch64.tar.gz
cd oceanbase-all-in-one/bin
./install.sh
# 终端输出显示如下:
#########################################################################################
Install Finished
=========================================================================================
Setup Environment: source ~/.oceanbase-all-in-one/bin/env.sh
Quick Start: obd demo
Use Web Service to install: obd web
Use Web Service to upgrade: obd web upgrade
More Details: obd -h
=========================================================================================
source ~/.oceanbase-all-in-one/bin/env.sh
集群部署
cd ~/.oceanbase-all-in-one/obd/usr/obd/example/
编辑部署文件:default-components.yaml
## Only need to configure when remote login is required
user:
username: root
password: XXX
# key_file: your ssh-key file path if need
port: 22
oceanbase-ce:
servers:
- name: server1
ip: 192.168.111.111
- name: server2
ip: 192.168.111.111
- name: server3
ip: 192.168.111.111
global:
devname: enp125s0f0
# 单个observer的最大内存使用限制(实验环境单机多实例部署,所以调小了)
# 但不能过小,否则后续启动报错 [ERROR] OBD-2009: when production_mode is True, memory_limit can not be less then 16.0G, Please set production_mode to false
memory_limit: 16G
# system_memory需要合理配置
# 否则后续启动报错 [ERROR] OBD-2010: system_memory too large. system_memory must be less than memory_limit/memory_limit_percentage(默认80%)., `system_memory` should be less than 0.75 * memory_limit/memory_limit_percentage.
system_memory: 10G
datafile_size: 192G
log_disk_size: 192G
enable_syslog_wf: false
enable_syslog_recycle: true
max_syslog_file_count: 0
appname: obcluster
ocp_meta_tenant: # The config for ocp express meta tenant
tenant_name: ocp
max_cpu: 1
memory_size: 1G
log_disk_size: 7680M
server1:
mysql_port: 1881
rpc_port: 1882
obshell_port: 1886
home_path: /data/observer-server-1881
data_dir: /data/observer-data-1881
redo_dir: /data/observer-redo-1881
zone: zone1
server2:
mysql_port: 2881
rpc_port: 2882
obshell_port: 2886
home_path: /data/observer-server-2881
data_dir: /data/observer-data-2881
redo_dir: /data/observer-redo-2881
zone: zone2
server3:
mysql_port: 3881
rpc_port: 3882
obshell_port: 3886
home_path: /data/observer-server-3881
data_dir: /data/observer-data-3881
redo_dir: /data/observer-redo-3881
zone: zone3
obproxy-ce:
depends:
- oceanbase-ce
servers:
- 192.168.111.111
global:
listen_port: 2883
prometheus_listen_port: 2884
home_path: /data/obproxy
enable_cluster_checkout: false
skip_proxy_sys_private_check: true
enable_strict_kernel_release: false
obagent:
depends:
- oceanbase-ce
servers:
- name: server2
ip: 192.168.111.111
global:
home_path: /data/obagent
monagent_http_port: 28088
mgragent_http_port: 28089
ocp-express:
depends:
- oceanbase-ce
- obproxy-ce
- obagent
servers:
- 192.168.111.111
global:
home_path: /data/ocp-express
log_dir: /data/ocp-express-log
memory_size: 1G
logging_file_total_size_cap: 10G
部署:obd cluster deploy obtest -c default-components.yaml
启动:obd cluster start obtest
启动过程中,如果有报错,如下修改配置:
obd cluster edit-config obtest
obd cluster reload obtest
部署参考文档:
https:
//www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000508275
https://open.oceanbase.com/blog/8600152
测试用例
登录验证
查看自动生成的随机密码:obd cluster edit-config obtest
[root@Node1 example]# obclient -h10.1.200.54 -P2883 -uroot -p -Doceanbase -A
Enter password:
Welcome to the OceanBase. Commands end with ; or \g.
Your OceanBase connection id is 2
Server version: OceanBase_CE 4.2.2.0 (r100010012024022719-c984fe7cb7a4cef85a40323a0d073f0c9b7b8235) (Built Feb 27 2024 19:21:00)
Copyright (c) 2000, 2018, OceanBase and/or its affiliates. All rights reserved.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
root@mysqldb 10:47: [oceanbase]>
创建业务租户
# 查看默认租户
root@mysqldb 10:48: [oceanbase]> select tenant_id,tenant_name,primary_zone from __all_tenant;
+-----------+-------------+--------------+
| tenant_id | tenant_name | primary_zone |
+-----------+-------------+--------------+
| 1 | sys | RANDOM |
+-----------+-------------+--------------+
1 row in set (0.007 sec)
# 创建新的资源规格UNIT1
root@mysqldb 10:54: [oceanbase]> CREATE RESOURCE UNIT UNIT1 MAX_CPU=2,MIN_CPU=2,MEMORY_SIZE='2G',LOG_DISK_SIZE='2G';
Query OK, 0 rows affected (0.028 sec)
# 以UNIT1的资源规格创建资源池pool1(由于是单节点集群环境,所以ZONE_LIST=('zone1');假设为3节点集群,则ZONE_LIST=('zone1','zone2','zone3')。)
root@mysqldb 10:54: [oceanbase]> CREATE RESOURCE POOL pool1 UNIT='UNIT1',UNIT_NUM=1,ZONE_LIST=('zone1');
Query OK, 0 rows affected (0.018 sec)
# 创建租户tenant1(分配pool1)
root@mysqldb 10:54: [oceanbase]> CREATE TENANT tenant1 CHARSET='utf8mb4', ZONE_LIST=('zone1'), PRIMARY_ZONE='zone1', RESOURCE_POOL_LIST=('pool1') SET ob_tcp_invited_nodes='%',ob_compatibility_mode='mysql';
Query OK, 0 rows affected (25.480 sec)
# 查看已有租户
root@mysqldb 10:55: [oceanbase]> select tenant_id,tenant_name,primary_zone from __all_tenant;
+-----------+-------------+--------------+
| tenant_id | tenant_name | primary_zone |
+-----------+-------------+--------------+
| 1 | sys | RANDOM |
| 1001 | META$1002 | zone1 |
| 1002 | tenant1 | zone1 |
+-----------+-------------+--------------+
3 rows in set (0.001 sec)
root@mysqldb 10:55: [oceanbase]>
创建业务库表
root@mysqldb 10:58: [oceanbase]> create database dev;
Query OK, 1 row affected (0.061 sec)
root@mysqldb 10:58: [oceanbase]> use dev
Database changed
root@mysqldb 10:58: [dev]> create table test_tbl(id int,data varchar(50));
Query OK, 0 rows affected (0.100 sec)
root@mysqldb 10:58: [dev]> insert into test_tbl values(1,'qwe');
Query OK, 1 row affected (0.011 sec)
root@mysqldb 10:58: [dev]> insert into test_tbl values(2,'asd');
Query OK, 1 row affected (0.002 sec)
root@mysqldb 10:58: [dev]> insert into test_tbl values(3,'zxc');
Query OK, 1 row affected (0.002 sec)
root@mysqldb 10:59: [dev]> select * from test_tbl;
+------+------+
| id | data |
+------+------+
| 1 | qwe |
| 2 | asd |
| 3 | zxc |
+------+------+
3 rows in set (0.006 sec)
root@mysqldb 10:59: [dev]>