CentOS7.5手动部署
OceanBase 集群
文档控制:
|
序 |
版本号 |
更改人 |
日期 |
备注 |
|
1 |
v1.0 |
岳彩磊 |
2021-12-14 |
|
|
2 |
V1.1 |
岳彩磊 |
2022-01-13 |
|
目录
CentOS7.5手动部署 OceanBase 集群... 1
1.引言
本文档的练习目的掌握 OceanBase 集群的手动部署技能,理解进程的相关目录、集群初始化、OBProxy和 OB 集群关系等。
2. 社区版官网-文档-学习中心-入门教程:如何手动部署 OceanBase 集群
3. 社区版官网-博客-入门实战:如何手动部署 OceanBase 集群
4. 教程视频:【2-4-如何手动部署OceanBase三副本集群.mp4]
2.安装前准备
- 机器信息如下:
|
机器类型 |
Esxi虚拟机 |
|
IP |
192.168.101.66;192.168.101.67;192.168.101.68;192.168.101.69 |
|
网卡名 |
ens160 |
|
OS |
CentOS Linux release 7.5.1804 (Core) |
|
CPU |
16C |
|
内存 |
总内存 16G,可用内存 14G |
|
磁盘1 |
/ 250G |
|
磁盘2 |
/home 342G |
- 机器划分如下:
|
角色 |
机器 |
备注 |
|
OBD |
192.168.101.66 |
中控机,自动化部署软件 |
|
OBSERVER |
192.168.101.67 |
OceanBase 数据库 zone1 |
|
192.168.101.68 |
OceanBase 数据库 zone2 |
|
|
192.168.101.69 |
OceanBase 数据库 zone3 |
|
|
OBPROXY |
192.168.101.66 |
OceanBase 访问反向代理 |
|
OBCLIENT |
192.168.101.66 |
OceanBase 命令行客户端 |
系统版本:

硬盘空间大小:

内存大小:

CPU逻辑核数:

测试环境可关闭防火墙、Selinux和NetworkManager

调整内核参数:
vim /etc/sysctl.conf
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
= 0
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.swappiness
= 0
vm.min_free_kbytes
= 2097152
vm.max_map_count=655360
fs.aio-max-nr=1048576
sysctl -p
使其生效:

调整会话变量:
vi /etc/security/limits.conf
* soft
nofile 655360
* hard
nofile 655360
* soft
nproc 655360
* hard
nproc 655360
* soft
core unlimited
* hard
core unlimited
* soft
stack unlimited
* hard stack unlimited

配置主机名依次为master,node1,node2,node3,将主机名和 ip 解析写到/etc/hosts 文件:

无ntpd服务,使用yum安装chrony服务;

指定192.168.101.66作为集群的时间同步服务器

重启chronyd服务

创建admin用户并配置密码:

将admin用户添加到sudo组中:

生成公钥:

将公钥拷贝到各个节点:

3.部署OceanBase
方法一:
前往官网下载所需的RPM安装包
https://open.oceanbase.com/softwareCenter/community
方法二:
前往阿里云开源镜像站:
https://mirrors.aliyun.com/oceanbase/community/stable/el/7/x86_64/
使用wget直接将RPM安装包下载到目标机中:
wget
https://mirrors.aliyun.com/oceanbase/community/stable/el/7/x86_64/oceanbase-ce-libs-3.1.1-4.el7.x86_64.rpm
wget https://mirrors.aliyun.com/oceanbase/community/stable/el/7/x86_64/oceanbase-ce-3.1.1-4.el7.x86_64.rpm
wget
https://mirrors.aliyun.com/oceanbase/community/stable/el/7/x86_64/obproxy-3.2.0-1.el7.x86_64.rpm
wget
https://mirrors.aliyun.com/oceanbase/community/stable/el/7/x86_64/libobclient-2.0.0-2.el7.x86_64.rpm
wget https://mirrors.aliyun.com/oceanbase/community/stable/el/7/x86_64/obclient-2.0.0-2.el7.x86_64.rpm
mkdir -p /home/admin/oceanbase/store/obdemo
/data/obdemo/{sstable,etc3} /redo/obdemo/{clog,ilog,slog,etc2}
chown -R admin:admin /home/admin/oceanbase/
/data/obdemo/ /redo/obdemo/
for f in {clog,ilog,slog,etc2};do sudo ln -s
/redo/obdemo/$f /home/admin/oceanbase/store/obdemo/$f;done
for f in {sstable,etc3};do sudo ln -s /data/obdemo/$f
/home/admin/oceanbase/store/obdemo/$f;done
sudo chown -R admin:admin /home/admin/oceanbase/ /data/ /redo/
注意:进行软连接时强烈建议使用绝对路径!


使用admin用户进行安装:
su - admin

3.3.1 数据库程序安装
sudo rpm -ivh /data/oceanbase-ce-*

3.3.2 客户端程序安装
sudo rpm -ivh /data/libobclient-2.0.0-2.el7.x86_64.rpm
/data/obclient-2.0.0-2.el7.x86_64.rpm
在192.168.101.67中启动OBSERVER进程:
[admin@node1 ~]$ cd
~/oceanbase && bin/observer -i ens160 -p 2881 -P 2882 -z zone1 -d
~/oceanbase/store/obdemo -r
'192.168.101.67:2882:2881;192.168.101.68:2882:2881;192.168.101.69:2882:2881' -c
20220110 -n obdemo -o
"memory_limit=8G,cache_wash_threshold=1G,__min_full_resource_pool_memory=268435456,system_memory=3G,memory_chunk_cache_size=128M,cpu_count=16,net_thread_count=4,datafile_size=50G,stack_size=1536K,config_additional_dir=/data/obdemo/etc3;/redo/obdemo/etc2"
-d ~/oceanbase/store/obdemo

在192.168.101.68中启动OBSERVER进程:
[admin@node2 ~]$ cd ~/oceanbase
&& bin/observer -i ens160 -p 2881 -P 2882 -z zone2 -d
~/oceanbase/store/obdemo -r
'192.168.101.67:2882:2881;192.168.101.68:2882:2881;192.168.101.69:2882:2881' -c
20220110 -n obdemo -o
"memory_limit=8G,cache_wash_threshold=1G,__min_full_resource_pool_memory=268435456,system_memory=3G,memory_chunk_cache_size=128M,cpu_count=16,net_thread_count=4,datafile_size=50G,stack_size=1536K,config_additional_dir=/data/obdemo/etc3;/redo/obdemo/etc2"
-d ~/oceanbase/store/obdemo

在192.168.101.69中启动OBSERVER进程:
[admin@node3 ~]$ cd
~/oceanbase && bin/observer -i ens160 -p 2881 -P 2882 -z zone3 -d
~/oceanbase/store/obdemo -r
'192.168.101.67:2882:2881;192.168.101.68:2882:2881;192.168.101.69:2882:2881' -c
20220110 -n obdemo -o "memory_limit=8G,cache_wash_threshold=1G,__min_full_resource_pool_memory=268435456,system_memory=3G,memory_chunk_cache_size=128M,cpu_count=16,net_thread_count=4,datafile_size=50G,stack_size=1536K,config_additional_dir=/data/obdemo/etc3;/redo/obdemo/etc2"
-d ~/oceanbase/store/obdemo

ps -ef |grep
observer
netstat -tlnp
|grep observer

1、 初始root密码为空,使用如下命令登录:
obclient -h 192.168.101.67 -uroot -P2881 -p -c -A

修改root密码:
>alter user root identified by ‘root’;

查看数据库出现报错:

解决方法:首先要进行集群自举;执行完这一步才可以:
2、 集群自举
当OceanBase集群三个节点都正常启动,并且监听正常时,连接到任一节点(通过2881端口直连),进行自举(bootstrap集群初始化)操作。
set session ob_query_timeout=1000000000;
alter system bootstrap ZONE 'zone1' SERVER
'192.168.101.67:2882', ZONE 'zone2' SERVER '192.168.101.68:2882', ZONE 'zone3'
SERVER '192.168.101.69:2882';

3、 检查集群状态
>use oceanbase;
>select * from __all_server\G
>select * from __all_zone where name in
(‘region’,’status’,’zone_type’);


1、 社区版官方下载rpm包,使用admin用户安装obproxy
[admin@master opt]$ rpm -ivh obproxy-3.2.0-1.el7.x86_64.rpm
[admin@master ~]$ tree obproxy-3.2.0/
obproxy-3.2.0/
└── bin
├── obproxy
└──
obproxyd.sh
1 directory, 2 files
2、 启动obproxy
[admin@master obproxy-3.2.0]$ cd
~/obproxy-3.2.0/ && bin/obproxy -r "192.168.101.67:2881;192.168.101.68:2881;192.168.101.69:2881"
-p 2883 -o
"enable_strict_kernel_release=false,enable_cluster_checkout=false,enable_metadb_used=false"
-c obdemo
3、 查看端口
>netstat -tlnp |grep obproxy
4、 登录obproxy,初次登录密码为空;

5、 创建proxyro用户并授权
obclient -h 192.168.101.67
-uroot@sys -P2881 -p -c -A
MySQL [(none)]> create user
proxyro;
MySQL [(none)]> grant select on
oceanbase.* to proxyro identified by 'proxyro';
6、 设备obproxy用户密码和访问ob集群的密码
[admin@master ~]$ obclient -h 192.168.101.66
-uroot@proxysys -P2883 -p
MySQL [(none)]> show
proxyconfig like '%sys_password%';
MySQL [(none)]> alter
proxyconfig set obproxy_sys_password = 'obproxy';
MySQL [(none)]> alter
proxyconfig set observer_sys_password = 'observer';

注:同时还需要修改 OBPROXY 连接 OceanBase 集群用户 proxyro 的密码。这样 OBPROXY 才能跟 OceanBase 集群正常连接。这个密码就是前面 OceanBase 集群初始化后创建的用户 proxyro 的密码。
7、 测试通过obproxy访问集群
[admin@master ~]$ obclient -h
192.168.101.66 -uroot@sys#obdemo -P2883 -p -c -A oceanbase
MySQL [oceanbase]> show databases;

1、 使用root账号登录到sys租户中,使用MySQL访问OceanBase数据库:

2、 查询系统资源占用情况:
select
svr_ip,svr_port,cpu_total,mem_total,disk_total,zone from
__all_virtual_server_stat;

3、 查询系统资源分配:
select
sum(c.max_cpu),sum(c.max_memory) from __all_resource_pool as a,
__all_unit_config as c where a.unit_config_id=c.unit_config_id;
4、 创建资源单元:
如果想把剩下的所有资源全部使用掉,CPU 和内存分别为步骤 2 和步骤 3
得到的值, max_cpu值设置为第二步得到的cpu_total
减去第三步得到的sum(c.max_cpu), 在本例中为8;
max_memory和min_memory 设置为第二步的到的mem_total
值 减去 第三步的到的sum(c.max_memory), 在本例中为536870912。

5、 创建资源池:

6、 创建租户:
CREATE TENANT IF
NOT EXISTS test_tenant
charset =
'utf8mb4',
replica_num=3,
zone_list=('zone1','zone2','zone3'),
primary_zone='RANDOM',
resource_pool_list=('pool1');
7、 登录租户之前,运行以下命令修改参数:
8、 使用新的租户登录系统:
obclient -h
127.0.0.1 -P 2883 -u root@test_tenant -p -c -A oceanbase

1、 创建一个数据库:
>obclient -h 127.0.0.1 -P 2883
-u root@test_tenant -p -c -A oceanbase
>create database my_db1;
>show databases;

2、创建业务用户my_user1,并赋权;
>grant all
privileges on my_db1.* to my_user1 identified by '12345678';
>show grants
for my_user1;

3、在数据库my_db1中创建业务表my_tab1;
>use
my_db1;
>create
table tab1 (id int, name varchar(20));
>desc
tab1;
>
insert into tab1 values(1,'King');
>
select * from tab1;





