六棱镜实践:OceanBase 手工部署文档

2024年 5月 7日 20.2k 0

作者简介:

白云龙,六棱镜运维负责人

负责六棱镜业务平台、政务云及项目环境部署维护相关技术支撑工作、多年系统

运维架构及数据库维护经验、专注开源领域。

准备环境

操作系统:centos7.4

中控机1台:用于安装OBD及Obproxy  配置:8c/32G   IP地址:172.20.2.119

目标机器3台:用于部署Observer    配置:10c/48G  IP地址:172.20.2.116-118

磁盘规划:

系统盘:100G  --LVS分区   文件系统:EXT4

数据盘: /data 5T  --GPT分区   文件系统:xfs

事务日志盘: /redo 800G (一般设置为内存的4倍)  --GPT分区  文件系统:xfs

数据库的二进制文件和运行日志: /home/admin/oceanbase 200G  --GPT分区  文件系统:xfs

六棱镜实践:OceanBase 手工部署文档-1

基础配置

创建admin用户并设置密码(所有节点都要设置):

#useradd -U admin -d /home/admin -s /bin/bash && echo "SixlensPwd123" |passwd --stdin admin

更改目录权限:

#chown -R admin.admin /data && chown -R admin.admin /redo && chown -R admin.admin /home/admin

Note:先创建admin用户,后mount挂载/home/admin/ocaeabase 否则创建用户提示家目录存在

配置sudo权限:

#vim /etc/sudoers
admin  ALL=(ALL)    ALL

Note:sudoers拒绝所有用户读写,root用户也无权限,需增加权限后更改 #chmod u+w /etc/sudoers

SSH免密登录(admin用户登录):

$ ssh-keygen -t rsa  --在中控机119执行
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ mkdir ~/.ssh --3 Observer个节点建立隐藏ssh目录
$ scp ~/.ssh/authorized_keys admin@172.20.2.116-118:~/.ssh/authorized_keys --复制到目标机
$ chmod 700 .ssh  --目标机执行
$ chmod 600 authorized_keys  --目标机执行

Note:root用户配置免密可直接登录,普通用户需更改目录和文件权限,否则无法登陆

$ for i in 116 117 118;do ssh 172.20.2.$i date;done --中控机执行免密连接测试

六棱镜实践:OceanBase 手工部署文档-2

时间服务器配置(中控节点作为时间服务器,以root身份配置):

# yum remove ntp -y
# yum install chrony
# vim /etc/chrony.conf
server ntp1.aliyun.com iburst
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
logdir /var/log/chrony
allow all
stratumweight 0
local stratum 10
# systemctl start chronyd && systemctl enable chronyd && systemctl status chronyd

六棱镜实践:OceanBase 手工部署文档-3

客户端配置(所有目标节点):

# echo "* * * * * /sbin/ntpdate -u 172.20.2.119 2>&1 1>>/tmp/ntpdate.log" >> /var/spool/cron/root
# for i in 116 117 118 ;do clockdiff 172.20.2.$i;done

六棱镜实践:OceanBase 手工部署文档-4

# ping -T tsandaddr 172.20.2.116  --如果有机子clockdiff报错,使用tsandaddr

配置limits.conf(所有目标节点):

# cat /etc/security/limits.conf |grep ^[^#]
root soft nofile 655350
root hard nofile 655350
* soft nofile 655350
* hard nofile 655350
* soft stack 20480
* hard stack 20480
* soft nproc 655360
* hard nproc 655360
* soft core unlimited
* hard core unlimited

退出当前会话,重新登录。执行 # ulimit -a,查看配置是否生效:

配置sysctl.conf

# cat /etc/sysctl.conf |grep ^[^#] 
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 = 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
kernel.core_pattern = /data/core-%e-%p-%t   -- OceanBase 数据库的 data 目录
# sysctl –p   --加载配置,使配置生效

目录规划:

/home/admin/oceanbase   --obs部署启动目录   RPM包自动创建
/home/admin/oceanbase/ob  obs数据总目录  手动创建
/data/ob  --obs数据文件实际目录   手动创建连接至数据总目录
/redo/{clog,slog,ilog}  --事务日志实际目录   手动创建连接至数据总目录
/home/admin/oceanbase/etc  --配置文件 启动时在启动目录自动创建
/home/admin/oceanbase/log   --运行日志目录 启动时在启动目录自动创建

六棱镜实践:OceanBase 手工部署文档-5

配置软连接:

$ cd /home/admin/oceanbase/ob
$ ln -sv /data/ob sstable    --只能是sstable,其他名字部署会失败
$ ln -sv /redo/clog clog
$ ln -sv /redo/ilog ilog
$ ln -sv /redo/slog slog

安装部署(切换admin用户):

$ mkdir ~/soft

软件包下载:  

for i in obproxy-3.2.0-1.el7.x86_64.rpm oceanbase-ce-3.1.1-4.el7.x86_64.rpm oceanbase-ce-libs-3.1.1-4.el7.x86_64.rpm libobclient-2.0.0-2.el7.x86_64.rpm obclient-2.0.0-2.el7.x86_64.rpm;do wget https://mirrors.aliyun.com/oceanbase/community/stable/el/7/x86_64/$i;done

六棱镜实践:OceanBase 手工部署文档-6

目标机安装oceanbase-ce oceanbase-ce-libs  libobclient  obclient

$ sudo rpm -ivh *.rpm  --安装软件包

六棱镜实践:OceanBase 手工部署文档-7

六棱镜实践:OceanBase 手工部署文档-8

六棱镜实践:OceanBase 手工部署文档-9

六棱镜实践:OceanBase 手工部署文档-10

目录机构:

六棱镜实践:OceanBase 手工部署文档-11

$ echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/oceanbase/lib' >> ~/.bash_profile
116:
cd ~/oceanbase && bin/observer -i ens192 -p 2881 -P 2882 -z zone1 -d ~/oceanbase/ob -r '172.20.2.116:2882:2881;172.20.2.117:2882:2881;172.20.2.118:2882:2881' -c 20211203 -n obdemo -o "memory_limit=40G,system_memory=16G,datafile_size=500G"
117:
cd ~/oceanbase && bin/observer -i ens192 -p 2881 -P 2882 -z zone2 -d ~/oceanbase/ob -r '172.20.2.116:2882:2881;172.20.2.117:2882:2881;172.20.2.118:2882:2881' -c 20211203 -n obdemo -o "memory_limit=40G,system_memory=16G,datafile_size=500G"
118:
cd ~/oceanbase && bin/observer -i ens192 -p 2881 -P 2882 -z zone3 -d ~/oceanbase/ob -r '172.20.2.116:2882:2881;172.20.2.117:2882:2881;172.20.2.118:2882:2881' -c 20211203 -n obdemo -o "memory_limit=40G,system_memory=16G,datafile_size=500G"

验证服务是否启动:

$ ps aux |grep obs
$ pidof observer

六棱镜实践:OceanBase 手工部署文档-12

Note:目标节点配置比较搞,没有输出太多的参数

memory_limit=40G    --设置节点总内存的90%
system_memory=16G    --system_memory大概是memory_limt * 0.4
datafile_size=500G   --分配磁盘大小

当 OceanBase 集群三个节点都正常启动,并且监听正常时,连接到任一节点(通过 2881 端口直连),进行自举(bootstrap 集群初始化)操作。 初始密码是空

$ obclient -h 172.20.2.116 -u root -P 2881 -p -c –A   
set session ob_query_timeout=1000000000; alter system bootstrap ZONE 'zone1' SERVER '172.20.2.116:2882', ZONE 'zone2' SERVER '172.20.2.117:2882', ZONE 'zone3' SERVER '172.20.2.118:2882';

六棱镜实践:OceanBase 手工部署文档-13

$ obclient -h 172.20.2.116 -u root@sys -P 2881 -p -c –A   -- bootstrap集群初始化成功后可以用系统租户连入

六棱镜实践:OceanBase 手工部署文档-14

alter user root identified by 'sixlens123';  --设置系统租户sys密码
$ obclient -h 172.20.2.116 -u root@sys -P 2881 -psixlens123 -c –A oceanBase

OBPROXY 用户(proxyro)密码默认OBPROXY 连接 OceanBase 集群使用用户 proxyro 。这个用户不存在,需要创建

grant select on oceanbase.* to proxyro identified by 'psixlens123';

查看集群状态:

select * from __all_server;

六棱镜实践:OceanBase 手工部署文档-15

部署obproxy(中控机):

$ rpm -ivh obproxy-3.2.0-1.el7.x86_64.rpm

六棱镜实践:OceanBase 手工部署文档-16

cd ~/obproxy-3.2.0 && bin/obproxy -r "172.20.2.116:2881;172.20.2.117:2881;172.20.2.118:2881" -p 2883 -o "enable_strict_kernel_release=false,enable_cluster_checkout=false,enable_metadb_used=false" -c obdemo

六棱镜实践:OceanBase 手工部署文档-17

中控机安装obclient,方便测试连接:

$ rpm -ivh libobclient-2.0.0-2.el7.x86_64.rpm obclient-2.0.0-2.el7.x86_64.rpm
$ obclient -h 172.20.2.119 -u root@proxysys -P 2883 –p   --默认obp密码为空

修改 OBPROXY 用户密码

alter proxyconfig set obproxy_sys_password = 'sixlens123';
$ obclient -h 172.20.2.119 -u root@proxysys -P 2883 -psixlens123

修改 OBPROXY 连接 OceanBase 集群用户 proxyro 的密码。这样 OBPROXY 才能跟 OceanBase 集群正常连接。这个密码就是前面 OceanBase 集群初始化后创建的用户 proxyro 的密码

alter proxyconfig set observer_sys_password = 'sixlens123';

退出,通过 OBPROXY 连接 OceanBase 集群看看, 如果能查看所有会话,则说明 OBPROXY 部署成功

$ obclient -h172.20.2.119 -uroot@sys#obdemo -P2883 -psixlens123 -c -A oceanbase

六棱镜实践:OceanBase 手工部署文档-18

创建业务租户、业务数据库、测试表:

查询系统资源总计资源

SELECT svr_ip,svr_port, cpu_total, mem_total/1024/1024/1024, disk_total/1024/1024/1024, zone FROM __all_virtual_server_stat;

六棱镜实践:OceanBase 手工部署文档-19

查询租户已分配资源:

SELECT sum(c.max_cpu), sum(c.max_memory)/1024/1024/1024 FROM __all_resource_pool as a, __all_unit_config AS c WHERE a.unit_config_id=c.unit_config_id;

六棱镜实践:OceanBase 手工部署文档-20

Note:资源池cpu共8c/24g/500G  租户已用 5c/7G  新建租户最大可用为 2c/17g(超分会报错)

创建资源单元(2c/10g/200G):

CREATE RESOURCE UNIT unitsixlens max_cpu = 2, max_memory = '10G',  min_memory = '10G',  max_iops = 10000, min_iops = 10000, max_session_num = 30000, max_disk_size = '200G';

查看新创建的资源单元:

SELECT unit_config_id,name,max_cpu,min_cpu,max_memory,min_memory,max_disk_size FROM __all_unit_config;

六棱镜实践:OceanBase 手工部署文档-21

创建资源池:

CREATE RESOURCE POOL poolsixlens UNIT = 'unitsixlens', UNIT_NUM = 1,ZONE_LIST = ('zone1', 'zone2', 'zone3');

创建租户:

create tenant tenantsixlens resource_pool_list=('poolsixlens'), charset=utf8mb4, replica_num=3, zone_list('zone1', 'zone2', 'zone3'), primary_zone=RANDOM, locality='F@zone1,F@zone2,F@zone3' set variables ob_compatibility_mode='mysql', ob_tcp_invited_nodes='%';

查看创建成功的租户:

MySQL [oceanbase]> select tenant_id,tenant_name,primary_zone from __all_tenant;

六棱镜实践:OceanBase 手工部署文档-22

登录新租户:

$ obclient -h172.20.2.119 -uroot@tenantsixlens#obdemo -P2883 -c -A oceanbase

六棱镜实践:OceanBase 手工部署文档-23

创建用户:

MySQL [oceanbase]> CREATE USER 'usersixlens' IDENTIFIED BY '123#abc';

--查看创建成功的用户

MySQL [oceanbase]> SELECT user FROM mysql.user;

六棱镜实践:OceanBase 手工部署文档-24

用户授权

MySQL [oceanbase]> grant all on *.* to 'usersixlens' WITH GRANT OPTION;

查看授权:

MySQL [oceanbase]> show grants for usersixlens;

六棱镜实践:OceanBase 手工部署文档-25

连接白名单设置(否则只能127登录)

$ obclient -h172.20.2.119 -uroot@sys#obdemo -P2883 -psixlens123 -c -A oceanbase
ALTER TENANT tenantsixlens SET VARIABLES ob_tcp_invited_nodes='%';     --需要在sys租户下设置

用户身份登录OB集群:

obclient -h172.20.2.119 -uusersixlens@tenantsixlens#obdemo -P2883 -p123#abc -c –A

六棱镜实践:OceanBase 手工部署文档-26

测试:

MySQL [(none)]> create database sixlens;
MySQL [sixlens]> CREATE TABLE sixlens (id int,name varchar(20));
MySQL [sixlens]> insert into sixlens(id,name) values(88,"六棱镜");

六棱镜实践:OceanBase 手工部署文档-27

#########################################################

集群扩容

目前集群规模为1-1-1布局的OceanBase集群,再添加3个节点,扩容到2-2-2。资源有限,就不在开3台服务器了,直接在现有3台服务器上再启动第二个observer进程,监听端口是3881和3882,如果增加3个新节点那么端口无需更改,直接使用2881和2882即可。操作都是一样的

新增节点目录结构如下(3个节点都要配置):

$ mkdir /home/admin/oceanbaseone  --obs2 部署启动目录   解压拷贝RPM
$ mkdir /home/admin/oceanbaseone/ob  --obs2 数据总目录  
$ mkdir /data/obone  --obs2数据文件实际目录   手动创建连接至数据总目录
$ mkdir /redo/redone/{clog,slog,ilog}  --obs2事务日志实际目录   手动创建连接至数据总目录
/home/admin/oceanbase/etc  --配置文件 服务启动时在启动目录自动创建
/home/admin/oceanbase/log   --运行日志目录 服务启动时在启动目录自动创建

创建软连接(3个节点都要配置)::

$ cd /home/admin/oceanbaseone/ob
$ ln -sv /data/obone sstable    --只能是sstable,其他名字部署会失败
$ ln -sv /redo/redone/clog clog
$ ln -sv /redo/redone/ilog ilog
$ ln -sv /redo/redone/slog slog

解压rpm包拷贝至指定目录(oceanbase-ce  oceanbase-ce-libs) 解压后会有个home目录

rpm2cpio oceanbase-ce-3.1.1-4.el7.x86_64.rpm | cpio –div  
$ cd /home/admin/oceanbase   --拷贝 etc 和 bin 目录至指定位置
$ scp -r * admin@172.20.2.116:/home/admin/oceanbaseone
$ scp -r * admin@172.20.2.117:/home/admin/oceanbaseone
$ scp -r * admin@172.20.2.118:/home/admin/oceanbaseone


$ rpm2cpio oceanbase-ce-libs-3.1.1-4.el7.x86_64.rpm | cpio –div
$ cd /home/admin/oceanbase   --拷贝lib目录至指定位置
$ scp -r * admin@172.20.2.116:/home/admin/oceanbaseone
$ scp -r * admin@172.20.2.117:/home/admin/oceanbaseone
$ scp -r * admin@172.20.2.118:/home/admin/oceanbaseone

目录结构如图:

六棱镜实践:OceanBase 手工部署文档-28

配置模块环境变量(3个节点都要配置)::

echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/oceanbaseone/lib' >> ~/.bash_profile

由于开始写文档没有想做扩容,所以资源都分没了,不够启动新节点。实际环境为vmware的虚机,避免麻烦,临时扩容了cpu到20c 、内存到100G来启动新加入observer节点

116:
cd ~/oceanbaseone && bin/observer -i ens192 -p 3881 -P 3882 -z zone1 -d ~/oceanbaseone/ob -r '172.20.2.116:2882:2881;172.20.2.117:2882:2881;172.20.2.118:2882:2881' -c 20211203 -n obdemo -o "memory_limit=35G,system_memory=12G,datafile_size=500G"
117:
cd ~/oceanbaseone && bin/observer -i ens192 -p 3881 -P 3882 -z zone2 -d ~/oceanbaseone/ob -r '172.20.2.116:2882:2881;172.20.2.117:2882:2881;172.20.2.118:2882:2881' -c 20211203 -n obdemo -o "memory_limit=35G,system_memory=12G,datafile_size=500G"
118:
cd ~/oceanbaseone && bin/observer -i ens192 -p 3881 -P 3882 -z zone3 -d ~/oceanbaseone/ob -r '172.20.2.116:2882:2881;172.20.2.117:2882:2881;172.20.2.118:2882:2881' -c 20211203 -n obdemo -o "memory_limit=35G,system_memory=12G,datafile_size=500G"

将新增的3节点加入到OceanBase集群中

alter system add server '172.20.2.116:3882' zone 'zone1';
alter system add server '172.20.2.117:3882' zone 'zone2';
alter system add server '172.20.2.118:3882' zone 'zone3';

117截图,其他节点都一样的

六棱镜实践:OceanBase 手工部署文档-29

使用sys系统租户查看所有节点是否正常:

select svr_ip,status,with_rootserver,usec_to_time(start_service_time),usec_to_time(stop_time) from __all_server;

六棱镜实践:OceanBase 手工部署文档-30

Note:第二次加入的3个obs新节点集群ID和集群名字要与前面的保持一致“”-n obdemo 、-c 20211203 “” 否则节点服务正常启动,但不能加入现有集群,提示集群ID不一致,不能加入现有集群。如果服务已启动需要清空相关目录文件重新启动新observer节点,操作如下:

$ ps aux |grep obs  --查找需要关闭的observer服务并kill

六棱镜实践:OceanBase 手工部署文档-31

$ cd /home/admin/oceanbaseone   --删除服务启动后生成的相关目录
$ rm -rf run log   
$ cd /redo/redone/   --清空clog ilog slog目录生成的相关文件
$ rm -rf clog/*
$ rm -rf ilog/*
$ rm -rf slog/*

重新启动3个节点的observer服务加入集群即可

Note1:集群名字应该是“-n obdemo”,但第二遍又忘记改了还是“obdemone(文档已更新)”,只更改了集群ID“-c 20211203” 但启动和加入现有集群也没报错***********实际需要都保持一致*******。 )

配置文件:

六棱镜实践:OceanBase 手工部署文档-32

六棱镜实践:OceanBase 手工部署文档-33

参考文献:

https://open.oceanbase.com/docs/tutorials/quickstart/V1.0.0/2-11-advanced-how-to-manually-deploy-an-oceanbase-cluster

https://open.oceanbase.com/docs/community/oceanbase-database/V3.1.1/disk-planning

https://blog.csdn.net/obpilot/article/details/103296746  --扩容参考

联系我们

欢迎广大 OceanBase 爱好者、用户和客户随时与我们联系、反馈,方式如下:

社区版官网论坛

社区版项目网站提 Issue

钉钉群:33254054

六棱镜实践:OceanBase 手工部署文档-34

相关文章

pt-kill工具的使用
pt-ioprofile工具包的使用
数据库管理-第216期 Oracle的高可用-01(20240703)
DBMS_REPAIR EXAMPLE SCRIPT WITH PARTITION
数据库事务的四大特性: ACID 
使用BBED修复损坏的SYSTEM文件头

发布评论