作者简介:
白云龙,六棱镜运维负责人
负责六棱镜业务平台、政务云及项目环境部署维护相关技术支撑工作、多年系统
运维架构及数据库维护经验、专注开源领域。
准备环境
操作系统: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
基础配置
创建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 --中控机执行免密连接测试
时间服务器配置(中控节点作为时间服务器,以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
客户端配置(所有目标节点):
# 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
# 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 --运行日志目录 启动时在启动目录自动创建
配置软连接:
$ 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-ce oceanbase-ce-libs libobclient obclient
$ sudo rpm -ivh *.rpm --安装软件包
目录机构:
$ 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
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';
$ obclient -h 172.20.2.116 -u root@sys -P 2881 -p -c –A -- bootstrap集群初始化成功后可以用系统租户连入
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;
部署obproxy(中控机):
$ rpm -ivh obproxy-3.2.0-1.el7.x86_64.rpm
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
中控机安装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
创建业务租户、业务数据库、测试表:
查询系统资源总计资源
SELECT svr_ip,svr_port, cpu_total, mem_total/1024/1024/1024, disk_total/1024/1024/1024, zone FROM __all_virtual_server_stat;
查询租户已分配资源:
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;
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;
创建资源池:
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;
登录新租户:
$ obclient -h172.20.2.119 -uroot@tenantsixlens#obdemo -P2883 -c -A oceanbase
创建用户:
MySQL [oceanbase]> CREATE USER 'usersixlens' IDENTIFIED BY '123#abc';
--查看创建成功的用户
MySQL [oceanbase]> SELECT user FROM mysql.user;
用户授权
MySQL [oceanbase]> grant all on *.* to 'usersixlens' WITH GRANT OPTION;
查看授权:
MySQL [oceanbase]> show grants for usersixlens;
连接白名单设置(否则只能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
测试:
MySQL [(none)]> create database sixlens; MySQL [sixlens]> CREATE TABLE sixlens (id int,name varchar(20)); MySQL [sixlens]> insert into sixlens(id,name) values(88,"六棱镜");
#########################################################
集群扩容
目前集群规模为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
目录结构如图:
配置模块环境变量(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截图,其他节点都一样的
使用sys系统租户查看所有节点是否正常:
select svr_ip,status,with_rootserver,usec_to_time(start_service_time),usec_to_time(stop_time) from __all_server;
Note:第二次加入的3个obs新节点集群ID和集群名字要与前面的保持一致“”-n obdemo 、-c 20211203 “” 否则节点服务正常启动,但不能加入现有集群,提示集群ID不一致,不能加入现有集群。如果服务已启动需要清空相关目录文件重新启动新observer节点,操作如下:
$ ps aux |grep obs --查找需要关闭的observer服务并kill掉
$ 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” 但启动和加入现有集群也没报错***********实际需要都保持一致*******。 )
配置文件:
参考文献:
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