作者简介:胡晶玉,数据库工程师。
前言:
学习一个数据库产品,一定是从安装开始的。通过安装,了解安装环境,安装步骤,目录结构,可以快速的对产品有个基本印象。所以这个手动部署的练习非常有意义。
实验环境:
笔记本电脑 Windows 11
Vmware Workstation 16.1.2
虚机 CentOS Linux release 7.2.1511 (Core),
分配 8C,13G,20G硬盘
IP: 192.168.137.106
使用笔记本虚拟机进行测试很容易出错,OB默认对资源的需求很高,出错还不能准确报出。所以使用虚拟机远比在服务器上安装难度大。但是在解决问题的过程中可以加深对产品的了解。
服务器环境准备
内核参数修改
通过修改配置文件。
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
关闭防火墙和SELinux
systemctl disable firewalld systemctl stop firewalld systemctl status firewalld
vi /etc/selinux/config # This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=disabled
单机环境,省略了配置时间同步。
配置安装用户
useradd admin echo 'admin:adminPWD123' |chpasswd usermod admin -G wheel
环境准备好了之后,重启一下服务器,确保配置生效。并且以admin用户登录。
安装软件
软件下载:
https://open.oceanbase.com/softwareCenter/community
为了安装顺利,下载下面全部的软件,并选择了最新的版本。
安装完成后,使用tree命令查看目录结构,默认安装在admin的home目录。
创建集群
创建集群使用的目录
su – root mkdir /data /redo chown admin:admin /data /redo su – admin mkdir -p ~/oceanbase/store/obdemo /data/obdemo/{sstable,etc3} /redo/obdemo/{clog,ilog,slog,etc2} for f in {clog,ilog,slog,etc2}; do ln -s /redo/obdemo/$f ~/oceanbase/store/obdemo/$f ; done for f in {sstable,etc3}; do ln -s /data/obdemo/$f ~/oceanbase/store/obdemo/$f; done
检查一下创建的目录
tree ~/oceanbase/store/ /data/ /redo/
启动observer
bin/observer -i eno16777736 -p 2881 -P 2882 -z zone1 -d ~/oceanbase/store/obdemo -r '192.168.137.106:2882:2881' -c 20211216 -n obdemo -o "memory_limit=8G,cache_wash_threshold=1G,__min_full_resource_pool_memory=268435456,system_memory=2G,memory_chunk_cache_size=128M,cpu_count=4,net_thread_count=4,datafile_size=5G,stack_size=1536K,config_additional_dir=/data/obdemo/etc3;/redo/obdemo/etc2" -d ~/oceanbase/store/obdemo
注意这里的参数-i eno16777736,这是网卡的设备名,-r '192.168.137.106:2882:2881' 这个是这块网卡上面的ip地址。datafile_size=5G是数据文件的大小,根据磁盘空间进行调整。
集群初始化
obclient -h 192.168.137.106 -u root -P 2881 -p -c set session ob_query_timeout=1000000000; alter system bootstrap ZONE 'zone1' server '192.168.137.106:2882';
此命令长时间没有返回。
后来再次执行,报错如下。
原因是该命令仅需要在 OceanBase 数据库初次启动时执行,每个集群仅能执行一次该命令。如果该命令执行失败,不能重新运行该命令,需要重新搭建 OceanBase 数据库集群。
只能重新部署了。
首先删除目录中的文件,然后重复前面的步骤。
期待….
第一次失败我看了日志,没有找到有用的信息。这方面希望OB能够改进。
我猜测可能的原因是内存不足。所以在第二次做的时候把虚拟机的内存调整到13G。
设置密码及创建obproxy用户proxyro:
alter user root identified by 'admin'; grant select on oceanbase.* to proxyro identified by 'obproxy';
记住proxyro用户的密码,后面配置obproxy时候要用到。
启动OBPROXY进程
cd ~/obproxy-3.2.0 bin/obproxy -r "192.168.137.106:2881" -p 2883 -o "enable_strict_kernel_release=false,enable_cluster_checkout=false,enable_metadb_used=false" -c obdemo
然后通过ps –ef |grep proxy以及netstat –ntlp |grep obproxy检查进程是否已经启动,监听是否正常。
这里要吐槽一下ob命令的输出,完全看不出执行成功与否,需要通过查看进程,才能知道命令是否成功了。
通过obproxy连接数据库
obclient -h 192.168.137.106 -uroot@sys#obdemo -P2883 -padmin -c -A oceanbase
报错了。检查环境,发现磁盘满了。删除ob的日志文件 rm –rf /home/admin/oceanbase/log/
重新连接,成功。
创建普通租户及数据库
创建资源池
这里报错了,资源不足是因为虚拟机只分配了4C,系统租户占用了过多,所以无法创建资源池。修改系统租户规格,重新创建成功。
创建租户
连接mysql租户:
obclient -h 127.0.0.1 -P 2881 -uroot@t_mysql
创建数据库,表,插入数据。
create tenant t_mysql resource_pool_list=('min_pool'),primary_zone='RANDOM',charset='utf8' set ob_compatibility_mode='mysql', ob_tcp_invited_nodes='%';
创建数据库,表,用户,插入数据。
总结:
这个实验遇到的主要问题还是笔记本的资源不足,经常会遇到莫名其妙的错误。但同时,通过解决这些问题,使我增加了对产品的了解。总结经验如下:
第一次进行集群初始化出错,命令hang在那里长时间不返回,日志没有明确报错信息。只能重启重新初始化。但是bootstrap命令只能执行一次,所以只能删除集群,重建集群后,再次进行初始化。在第二次初始化时我把虚拟机集群的日志默认是无限制的,一旦有什么错误信息,这个日志增长非常快,会把文件系统撑爆。所以集群启动后要尽快修改日志参数。
alter system set syslog_level='WARN'; alter system set max_syslog_file_count=5; alter system set enable_syslog_recycle='true';
如何有条件还是要使用服务器做测试,笔记本非常容易遇到资源不足的问题。
结束语
OceanBase社区版入门到实战教程直播正在进行中~
快和小伙伴一起进群交流学习吧~
加入直播群方式一:
钉钉群号3255 4020
加入直播群方式二:
扫码下方二维码加入