登录
注册
开源
企业版
高校版
搜索
帮助中心
使用条款
关于我们
开源
企业版
高校版
私有云
模力方舟
登录
注册
代码拉取完成,页面将自动刷新
捐赠
捐赠前请先登录
取消
前往登录
扫描微信二维码支付
取消
支付完成
支付提示
将跳转至支付宝完成支付
确定
取消
Watch
不关注
关注所有动态
仅关注版本发行动态
关注但不提醒动态
4
Star
1
Fork
7
OceanBase
/
blog
代码
Issues
3
Pull Requests
20
Wiki
统计
流水线
服务
JavaDoc
PHPDoc
质量分析
Jenkins for Gitee
腾讯云托管
腾讯云 Serverless
悬镜安全
阿里云 SAE
Codeblitz
SBOM
我知道了,不再自动展开
22
从入门到实战 CentOS7 手动部暑三节点 OceanBase 社区版
开启的
shunwah:chris-probd
OceanBase:master
shunwah
创建于 2022-06-18 15:35
克隆/下载
HTTPS
SSH
复制
下载 Email Patch
下载 Diff 文件
当您学习完使用 OBD 自动化部署 OceanBase 集群的方法原理后,就可以再去测试手动部署一套 OceanBase 集群。如果 OBD 的功能不满足您的需求时,您可以自己写程序脚本做 OceanBase 集群的部署,或者在集群出异常的时候,能够手动做一些应急处理。 作者:马顺华 从事运维管理工作多年,目前就职于某科技有限公司,熟悉运维自动化、OceanBase部署运维、MySQL 运维以及各种云平台技术和产品。并已获得OceanBase认证OBCA、OBCP证书。 前言 OBDeploy 简称 OBD 是 OceanBase 集群部署的工具,当机器资源和环境都初始化正确后,通过一些简单的命令就能非常快速的完成 OceanBase 部署。但是对于初学者来讲,就会比较困惑,OBDeploy 到底执行了哪些操作?具体操作步骤有哪些?虽然部署成功了,但是可能对于细节还是一头雾水。如果部署失败了,也不知道为什么报错,排障的过程比较麻烦。所以我们本节测试,我将尝试脱离 OBDeploy,手动去部署 OceanBase 集群,这样就可以了解一下具体的安装细节。新手觉得难的主要原因在于还不太了解OB的步骤原理,所以你想快速了解OB,可以在脱离 OBDeploy 的情况下,手动部署 OceanBase。实际过程并不复杂,很容易掌握,也有实际意义。  部署准备 OceanBase 是一个分布式集群产品,在生产环境至少是三台机器。学习环境可以部署单机版本。OceanBase 的部署跟传统数据库的部署有很多共同的地方,对操作系统硬件、软件设置、文件系统等实践建议。 OceanBase是一个集群数据库,至少要三个节点。通常三个节点是要在三台机器上。本文介绍手动部署 OceanBase 集群三节点的方法,使用该方法需要通过中控机直接远程登录到 OceanBase 节点上部署启动 OBServer 进程,并在中控机上部署 OBProxy 进程。 部署资源要求 OceanBase 数据库运行的时候会对主机资源有一些要求,主要是 CPU、内存和磁盘空间。安装 OceanBase 的目的不一样,对资源的要求也不一样。  注意:上面性能测试环境和生产环境的资源要求是建议。在社区版后续版本,会进一步降低对内存的要求。 OceanBase 对操作系统也有一些要求,目前支持下面这些系统: Redhat / CentOS 7.x/8.x SUSE / OpenSUSE 15.x Anlios 7.x/8.x Debian 9.x Ubuntu 20.x 测试环镜资源信息 机器类型 主机配置 备注 OS Centos 7.4 中控机 /OBD CPU:8C 内存:16G 目标机器 /OBserver CPU:8C 内存:32G 系统盘 / dev/vda 100G LVS分区、文件系统:EXT4 数据盘 /data dev/vdb 200G GPT分区、文件系统:xfs 事务日志盘 /redo dev/vdc 100G GPT分区、文件系统:xfs 资源规划 角色 机器IP 备注 OBD 172.20.2.131 中控机 OBserver 172.20.2.120 {2881,2882}, {3881,3882} zone1 172.20.2.121 {2881,2882}, {3881,3882} zone2 172.20.2.122 {2881,2882}, {3881,3882} zone3 OBproxy 172.20.2.131 {2883,2884} 反向代理 OBclient 172.20.2.131 OB命令行客户端 目录规划: 软件包默认安装目录是 : /home/admin/oceanbase 目录结构如下: 目录路径(相对于工作目录) 备注 etc、etc2、etc3 配置文件所在目录。 log 运行日志目录。 run 运行输出目录,输出 pid 文件。 store 数据(包括日志)所在总目录。 store/clog commit log 所在目录。 store/ilog ilog 所在目录。 store/slog slog 所在目录。 store/sstable 数据文件 block file 所在目录。 一、学习如何使用 OBD 自动化部署多节点集群 1、OceanBase 社区版教程入门指引 链接:https://open.oceanbase.com/blog/10900159?currentPage=undefined  2、官方文档学习 链接:https://open.oceanbase.com/docs/tutorials-cn/V1.0.0/10000000000012303  3、官方视频学习 为您介绍手动部署 OceanBase 三副本集群 链接:https://open.oceanbase.com/docs/videoCenter/4700023  4、官方书籍学习 数据库博大精深,需要系统学习数据库理论知识,如果你想从零开始学习数据库,不用先学习Mysql和Oracle,这本书直接带你从零开始学习数据库,你会发现再学习Mysql和Oracle等数据库时,已经自通Mysql和Oracle数据库啦。 推荐学习 OceanBase 开源社区的《OceanBase原生分布式数据库实战教程》实体书,OceanBase原生分布式数据库实战教程**电子书在 OceanBase 社区版博客和阿里云**都有发布。这本与开源社区用户共创的书籍共八章,从 OceanBase 数据库概述开始,到安装部署,到使用,到迁移、再到运维、测试、性能诊断,最后是 OceanBase 生态工具的使用,可以带你全面掌握 OceanBase 实战使用技能! 1)电子文档 链接: https://open.oceanbase.com/docs/tutorials-cn/V1.0.0/10000000000012249  2)电子书 链接:https://developer.aliyun.com/ebook/7541  3)实体书  二、磁盘文件系统划分 (所有目标节点都要设置) 1、查看原磁盘df -Th 2、查看待增加磁盘fdisk-l 3、磁盘划分(GPT)分区 使用 parted 技术对 /dev/vdb 进行划分。GPT分区大小请根据实际磁盘大小调整参数。需要登录到每个节点上手动初始化。 yum -y install gdisk cloud-utils-growpart parted e2fsprogs [root@CAIP120 ~]# parted /dev/sdb 将设备转换成GPT分区格式。 (parted) mklabel gpt #划分一个主分区,并设置分区的开始位置和结束位置 #使用全部空间创建一个主分区(请根据实际创建)。通常于前面留出1M的空余空间。 (parted) mkpart primary 1 100% #检查分区是否对齐(如有多个分区,均需检查),此处显示“1 aligned”表示已对齐。 (parted) align-check optimal 1 #查看分区表 (parted) print #退出 (parted) quit 4、查看分区 此时使用fdisk -l应能查看到分区/dev/sdb1(根据实际显示分区名)。 [root@CAIP120 ~]# fdisk -l #格式化文件系统(请使用实际的分区名和文件系统类型) mkfs.xfs /dev/sdb1 --xfs分区格式化 mkfs.ext4 /dev/sdb1 --ext4分区格式化 #创建挂载点目录 [root@CAIP120 /]# mkdir data #使用blkid查看UUID [root@CAIP120 ~]# blkid #备份/etc/fstab,并新增加UUID vim /etc/fstab #使用`mount -a`验证fstab配置是否正确。 [root@CAIP120 ~]# mount -a 5、挂载磁盘 重复上面操作、同上、依次挂载好对应磁盘和目录 (/data、/redo、) mkdir -p /data (/dev/sdb) mkdir -p /redo (/dev/sdc) 6、检查磁盘 检查划分好的磁盘df -h #检查 三、配置安装用户 OceanBase 本质上是一个软件,可以运行在任意用户下。OceanBase 软件包默认解压目录是在 /home/admin/ 下,生产环境默认也是安装在用户 admin 下。社区版的软件 RPM 包也是这个特点,支持部署在任意用户的任意目录下。 根据官方介绍,建议安装部署在普通用户下,此次测试均以用户 admin 为例。 注意 为 admin 用户赋与 sudo 权限不是必须的,只是为了某些时候方便操作。您可以结合企业安全规范决定是否执行。 1、创建admin用户并设置密码 (所有目标节点都要设置): [root@CAIP120 /]# useradd -U admin -d /home/admin -s /bin/bash && echo "Sixlens2881" |passwd --stdin admin 2、更改目录属主属组权限 (所有目标节点都要设置): [root@CAIP120 /]# chown -R admin.admin /data && chown -R admin.admin /redo && chown -R admin.admin /home/admin 注意:先创建admin用户,后mount挂载/home/admin/ocaeabase 否则创建用户提示家目录存在 3、用户 admin 授予 sudo 权限配置 (所有目标节点都要设置) [root@CAIP120 /]# vim /etc/sudoers ##Allow root to run any commands anywhere admin ALL=(ALL) ALL 注意:sudoers拒绝所有用户读写,root用户也无权限,需增加权限后更改 #chmod u+w /etc/sudoers 四、初始化服务器环境 OceanBase 数据库是单进程软件,需要访问网络,需要打开多个文件以及开启很多 TCP 连接,所以需要修改内核参数和用户会话设置。 注意 您如果在独立服务器上部署 OBProxy,也需按本文要求初始化服务器环境。 1、配置 SSH 免密登录 如果您是完全手动部署 OceanBase 集群,登录到相应节点上安装相关软件包,并启动 observer 或 obproxy 进程,则不需要配置 SSH 免密登录。 如果您是使用自动化技术部署 OceanBase 集群,所有的命令通过中控机向 OceanBase 集群节点发出。则需要配置中控机中 OBD 运行的用户到 OceanBase 集群节点中 OBServer 安装的用户的 SSH 免密登录。 此次测试为手动部署 OceanBase 集群,不需要配置 SSH 免密登录 2、配置时间同步服务 OceanBase 数据库是分布式数据库产品,是一个集群软件,对各个节点之间的时间同步性有要求。技术上要求所有节点之间的时间误差需控制在 50ms 以内。实际生产环境中为了稳定性和性能考虑,建议时间误差控制在 10ms 以内。 (中控节点作为时间服务器,以root身份配置): 1)判断是否使用 ntpd 同步时间 [root@CAIP131 ~]# systemctl status ntpd Unit ntpd.service could not be found. #未安装 出现上述提示,表示没有使用 ntpd,需要安装 chrony 服务 2)安装 chrony 配置时间同步服务 CentOS 或 RedHat 7.x 版本推荐使用 chrony 服务做时间源 #yum remove ntp -y #yum -y 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 3)配置时间同步服务器 chrony 服务守护进程名为 chronyd,chronyc 是用来监控 chronyd 性能和配置参数的命令行工具。chrony 的主配置文件为 /etc/chrony.conf。配置方法如下: [root@CAIP131 ~]# vim /etc/chrony.conf 4)配置时间同步服务器开机自启 [root@CAIP131 /]# systemctl start chronyd && systemctl enable chronyd && systemctl status chronyd #设置开机自启 5)客户端配置 (所有目标节点) [root@CAIP120 /]# echo "* * * * * /sbin/ntpdate -u 172.20.2.131 2>&1 1>>/tmp/ntpdate.log" >> /var/spool/cron/root [root@CAIP121 /]# echo "* * * * * /sbin/ntpdate -u 172.20.2.131 2>&1 1>>/tmp/ntpdate.log" >> /var/spool/cron/root [root@CAIP121 /]# echo "* * * * * /sbin/ntpdate -u 172.20.2.131 2>&1 1>>/tmp/ntpdate.log" >> /var/spool/cron/root 6)中控机检查时间同步 (中控机执行) [root@CAIP131 /]# for i in 120 121 122 ;do clockdiff 172.20.2.$i;done 检查和目标节点时间误差常用命令是: clockdiff 7)客户端检查时间同步 客户端检查时间同步(所有目标节点) [root@CAIP120 /]# clockdiff 172.20.2.131 #目标机到中控机之间时间同步检查 [root@CAIP121 /]# clockdiff 172.20.2.131 #目标机到中控机之间时间同步检查 [root@CAIP122 /]# clockdiff 172.20.2.131 #目标机到中控机之间时间同步检查 如果有机子clockdiff报错,使用tsandaddr #ping -T tsandaddr 172.20.2.131 [admin@CAIP120 oceanbase]$ ping -T tsandaddr 172.20.2.131 -c 2 3、修改会话变量设置 (所有目标节点) 您可以通过配置 limits.conf 修改会话限制。OceanBase 数据库的进程涉及的限制包括:线程最大栈空间大小(Stack)、最大文件句柄数(Open Files)和 core 文件大小(Core File Size)。 您可以使用以下两种方法修改资源限制: 通过启动时在会话级别修改。如:ulimit -c unlimited,通过此方法修改只影响当前会话。如果会话断开之后重连,则又会是默认配置。 通过配置文件 /etc/security/limits.conf 在全局级别修改。 注意 修改后,已经登录的会话需要退出后重新登录才生效。 全局修改配置limits.conf(所有目标节点)最大文件句柄数设置为 655350,Core 文件大小设置为 unlimited 。 [root@CAIP120 /]# vim /etc/security/limits.conf 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,查看配置是否生效: [root@CAIP120 /]# ulimit -a 4、内核参数修改 修改(所有目标节点)配置文件 /etc/sysctl.conf [root@CAIP120 /]# vim /etc/sysctl.conf 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 加载配置,使配置生效 [root@CAIP120 /]# sysctl -p 5、关闭防火墙和 SELinux 不同操作系统的防火墙设置可能会有不同,本次是以 CentOS 7 系统为例进行测试。(所有目标节点都要设置) 1)查看防火墙状态 [root@CAIP120 /]# systemctl status firewalld 2)关闭防火墙 如果是 inactive 那就不用管。如果是 active,那就永久关闭 [root@CAIP120 /]# systemctl stop firewalld [root@CAIP120 /]# systemctl disable firewalld [root@CAIP120 /]# systemctl status firewalld 3)关闭 SELinux 修改 SELinux 配置文件中的 SELINUX 选项。 [root@CAIP120 /]# vim /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 配置文件修改后只会重启主机后生效,还需要使用下面命令立即生效。 [root@CAIP120 /]# setenforce 0 6、安装相关工具软件 未安装工具后面相关命令无法执行(所有目标节点都要设置) [root@CAIP120 /]# yum install epel-release -y [root@CAIP120 /]# yum install -y net-tools lrzsz tree htop dstat sysvinit-tools 查看 OBSERVER 进程特点 yum -y install sysvinit-tools ps -ef|grep observer 查看进程监听端口 yum install -y net-tools netstat -ntlp 查看 OceanBase 工作目录结构 yum -y install tree tree /root/ob tree /root/obce/ 四、安装 OceanBase 软件包 OceanBase 本质上是一个单进程的软件,可执行文件名叫 observer 。可以通过 RPM 包安装,也可以通过源码直接编译安装。手动部署,需要安装 OceanBase 的 OBSERVER 软件 。本次手动测试是通过 RPM 包方式安装。 1、新建soft软件包临时目录 (所有目标机器切换admin用户) [root@CAIP120 /]# su - admin [admin@CAIP120 ~]$ mkdir ~/soft [root@CAIP121 /]# su - admin [admin@CAIP121 ~]$ mkdir ~/soft [root@CAIP122 /]# su - admin [admin@CAIP122 ~]$ mkdir ~/soft 2、初始化数据目录 这一步只用于第一次部署时执行。如果是重复部署,目录已经创建的情况下,不需要再执行这一步。 手动部署时,OceanBase 节点上的相关目录都需要手动创建。 (所有目标机器)创建OceanBase目录,配置软连接: [admin@CAIP121 ~]$ mkdir -p ~/oceanbase/store/obdemo /data/obdemo/{sstable,etc3} /redo/obdemo/{clog,ilog,slog,etc2} [admin@CAIP121 ~]$ for f in {clog,ilog,slog,etc2}; do ln -s /redo/obdemo/$f ~/oceanbase/store/obdemo/$f ; done [admin@CAIP121 ~]$ for f in {sstable,etc3}; do ln -s /data/obdemo/$f ~/oceanbase/store/obdemo/$f; done 3、OceanBase 软件包下载: 注意:版本号后期会变,以实际版本为主。 1)OB阿里云RPM包下载地址 https://mirrors.aliyun.com/oceanbase/community/stable/el/7/x86_64/  2)安装 OceanBase 软件包 手动部署,需要安装 OceanBase 的 OBSERVER 软件 。(所有目标机器)准备好 OceanBase 的 RPM 包,安装oceanbase-ce oceanbase-ce-libs libobclient obclient ivh一键安装软件包 注意:本次测试的安装包可能不是最新版本,建议下载最新的安装包,详细信息请参考OB官方网站。 [admin@CAIP120 soft]$ sudo rpm -ivh *.rpm # rpm -ivh libobclient-2.0.0-2.el7.x86_64.rpm rpm -ivh oceanbase-ce-libs-3.1.1-4.el7.x86_64.rpm rpm -ivh oceanbase-ce-3.1.1-4.el7.x86_64.rpm rpm -ivh obproxy-3.2.0-1.el7.x86_64.rpm rpm -ivh obclient-2.0.0-2.el7.x86_64.rpm 3)查询已安装RPM包 (所有目标机器) [admin@CAIP121 soft]$ rpm -qa |grep oceanbase-ce-libs-3.1.1-4.el7 [admin@CAIP121 soft]$ rpm -qa |grep libobclient-2.0.0-2.el7 [admin@CAIP121 soft]$ rpm -qa |grep obclient-2.0.0-2.el7 [admin@CAIP121 soft]$ rpm -qa |grep oceanbase-ce-3.1.1-4.el7 [admin@CAIP121 soft]$ rpm -qa |grep obproxy-3.2.0-1.el7 sudo rpm -e --nodeps 软件包默认安装目录是 : /home/admin/oceanbase 4)检查目录结构,目录结构如下: (所有目标机器) [admin@CAIP120 ~]$ tree ~/oceanbase/store/ /data/ /redo/ /home/admin/oceanbase/store/ └── obdemo ├── clog -> /redo/obdemo/clog ├── etc2 -> /redo/obdemo/etc2 ├── etc3 -> /data/obdemo/etc3 ├── ilog -> /redo/obdemo/ilog ├── slog -> /redo/obdemo/slog └── sstable -> /data/obdemo/sstable /data/ ├── nfs └── obdemo ├── etc3 └── sstable /redo/ └── obdemo ├── clog ├── etc2 ├── ilog └── slog 16 directories, 0 files 提示:您也可以对 RPM 包直接解压到指定目录,就不用安装到默认目录。 (可选)清理目录和数据 第一次部署不需要执行这步。 如果后面安装部署失败,必需要清空目录和数据重新部署,否刚还会报错。 kill -9 `pidof observer` /bin/rm -rf ~/oceanbase/store/obdemo/*/* 五、启动 OBSERVER 每个机器的启动参数大部分一样,只有少数不一样,需要特别留意。 1、启动三节点OBSERVER 1)启动第一台服务器172.20.2.120 (zone1) echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/oceanbase/lib' >> ~/.bash_profile . ~/.bash_profile #将 OceanBase 数据库的 lib 加到环境变量 LD_LIBRARY_PATH 中 cd ~/oceanbase && bin/observer -i ens192 -p 2881 -P 2882 -z zone1 -d ~/oceanbase/store/obdemo -r '172.20.2.120:2882:2881;172.20.2.121:2882:2881;172.20.2.122:2882:2881' -c 20220217 -n obdemo -o "memory_limit=20G,cache_wash_threshold=8G,__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" 2)启动第二台服务器172.20.2.121 (zone2) echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/oceanbase/lib' >> ~/.bash_profile . ~/.bash_profile #将 OceanBase 数据库的 lib 加到环境变量 LD_LIBRARY_PATH 中 cd ~/oceanbase && bin/observer -i ens192 -p 2881 -P 2882 -z zone2 -d ~/oceanbase/store/obdemo -r '172.20.2.120:2882:2881;172.20.2.121:2882:2881;172.20.2.122:2882:2881' -c 20220217 -n obdemo -o "memory_limit=20G,cache_wash_threshold=8G,__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" 3)启动第三台服务器172.20.2.122 (zone3) echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/oceanbase/lib' >> ~/.bash_profile . ~/.bash_profile #将 OceanBase 数据库的 lib 加到环境变量 LD_LIBRARY_PATH 中 cd ~/oceanbase && bin/observer -i ens192 -p 2881 -P 2882 -z zone3 -d ~/oceanbase/store/obdemo -r '172.20.2.120:2882:2881;172.20.2.121:2882:2881;172.20.2.122:2882:2881' -c 20220217 -n obdemo -o "memory_limit=20G,cache_wash_threshold=8G,__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" 配置填写正确,服务启动应该不会有什么问题。 如果三个节点机型都一致,那么启动参数里只有一个参数不一样,就是 -z指定该节点是哪个 zone 。三个 zone 的三个节点初始化为一个三副本集群。后面 -o 参数不是必须的。这里主要是测试机器内存不足,所以需要指定一些影响内存的参数。如果您机器内存足够(如大于64G),则可以不需要 -o 参数部分。 4)验证服务是否启动: [admin@CAIP121 oceanbase]$ ps aux |grep obs [admin@CAIP121 oceanbase]$ pidof observer 进程 observer 第一次启动时,需要通过参数 -p 指定连接端口,通过参数 -P 指定节点 RPC 通信端口。默认是 -p 2881 -P 2882。进程启动成功后,几秒就可以运行到监听环节。 2、集群自举(初始化) 当 OceanBase 集群三个节点都正常启动,并且监听正常时,中控机连接到任一节点(通过 2881 端口直连),进行自举(bootstrap 集群初始化)操作。 初始密码是空 1)连接 OceanBase 集群 有一种无缝使用MySQL的感觉,因为OceanBase的连接信息跟MySQL连接的协议就是兼容mysql的。这么做是考虑到MySQL的普及性让更多人和应用能接受OceanBase。跟传统MySQL 不一样的地方是 OBSERVER 连接端口是 2881 , 连接用户名是 :root@sys ,密码是前面 OBD 配置文件ex里指定的。 [admin@CAIP131 ~]$ obclient -h 172.20.2.120 -u root -P 2881 -p -c -A 2)执行初始化操作 MySQL [(none)]> set session ob_query_timeout=1000000000; alter system bootstrap ZONE 'zone1' SERVER '172.20.2.120:2882', ZONE 'zone2' SERVER '172.20.2.121:2882', ZONE 'zone3' SERVER '172.20.2.122:2882' ; 通常来说,只要严格按照前面步骤设置目录结构和权限、启动参数,集群自举都能成功。如果不成功,常见原因如下: 集群节点之间时间同步延时超过 50ms 。 集群节点之间网络延时超过 100ms 。 集群节点上 OBSERVER 相关目录结构不对或者目录权限不对。 集群节点上进程 observer 启动参数写的不对。注意隐含参数的名字(如__min_full_resource_pool_memory )、参数 -d 的目录是否正确、参数 -z 跟 IP 的对应关系、 参数中多了空格或分隔符错误(有的是 , ,有的是;)。 集群节点可用内存低于进程 observer 启动参数 memory_limit 值。 3、登录测试 1)连接 OceanBase 集群: bootstrap集群初始化成功后可以用root@sys系统租户连入 [admin@CAIP131 ~]$ obclient -h 172.20.2.121 -u root@sys -P 2881 -p -c -A 2)检查数据库 是不是有一种无缝使用MySQL的感觉 MySQL [(none)]> show databases; +--------------------+ | Database | +--------------------+ | oceanbase | | information_schema | | mysql | | SYS | | LBACSYS | | ORAAUDITOR | | test | +--------------------+ 7 rows in set (0.005 sec) MySQL [(none)]> 4、设置集群管理员(root@sys)密码 1)设置集群密码 集群管理员root@sys的密码默认是空的,这里需要给root@sys租户设置一个密码。 MySQL [(none)]> alter user root identified by 'ob2881'; Query OK, 0 rows affected (0.033 sec) 2)测试连接 通过 obclient 探索 OceanBase MySQL 租户,使用root@sys登陆数据库。 [admin@CAIP131 ~]$ obclient -h 172.20.2.120 -uroot@sys -P 2881 -p -c -A oceanBase 3)查看集群状态: 通过视图查看 OBServer 状态 如果返回结果为 active,说明 OBServer 处于正常运行状态。 如果返回结果为 inactive,说明 OBServer 处于下线状态。 如果返回结果为 deleting,说明 OBServer 处于正在被删除状态。 MySQL [oceanBase]> select * from __all_server; 5、创建proxyr用户 在OceanBase 集群上创建proxyr用户OBPROXY 用户名(proxyro)密码默认OBPROXY 连接 OceanBase 集群使用用户 proxyro 。这个用户不存在,需要提前创建: MySQL [oceanBase]> grant select on oceanbase.* to proxyro identified by 'ob2881'; Query OK, 0 rows affected (0.064 sec) 六、安装 OBPROXY 软件包 手动部署社区版 OceanBase ,还需要手动安装 OceanBase 的 OBPROXY 软件 。理论上obproxy可以安装在任何机器上。如安装在observer上,或者独立的机器上,或者应用服务器上。并且obproxy由于只做路由功能,非常轻量,无状态,支持安装多个obproxy。安装多个obproxy的时候,可以再前面再通过负载均衡机制做一个vip,肩负起 obproxy的高可用和负载均衡作用。这样就不怕某个obproxy挂掉或者压力过大了。 1、官网下载 OBPROXY 软件包 https://open.oceanbase.com/softwareCenter/community  手动部署,需要安装 OceanBase 的 OBPROXY 软件 。(如已经安装忽略此步骤) 部署obproxy到(中控机): [admin@CAIP131 ~]$ sudo rpm -ivh obproxy-3.2.0-1.el7.x86_64.rpm 目前社区版的 OBPROXY 安装后的文件还是很简单的,后面可能会微调。 2、启动 OBPROXY 启动 OBPROXY 进程也推荐在软件安装目录,进程 pbproxy 会在该目录下生成目录 etc 保存 OBPROXY 的运行参数,以及目录 log 保存运行日志。第一次启动obproxy的时候,也需要指定一些参数。如rootservice 列表。以及指定监听端口(2883,也可以写别的任意端口,不跟已有端口冲突即可) 1)手动启动 OBPROXY [admin@CAIP131 ~]$ cd ~/obproxy-3.2.0 && bin/obproxy -r "172.20.2.120:2881;172.20.2.121:2881;172.20.2.122:2881" -p 2883 -o "enable_strict_kernel_release=false,enable_cluster_checkout=false,enable_metadb_used=false" -c obdemo 启动-c 指定的集群名obdemo和OBserver的集群名保持一致才能启动 2)检查 OBPROXY 监听 进程 obproxy 默认会监听2个端口:2883 和 2884 。 [admin@CAIP131 ~] ps -ef|grep obproxy [admin@CAIP131 ~] netstat -ntlp |grep obproxy 3、修改 OBPROXY 密码 1)登录 OBPROXY [admin@CAIP131 obproxy-3.2.0]$ obclient -h 172.20.2.131 -u root@proxysys -P 2883 -p Enter password: Welcome to the OceanBase. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.6.25 Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MySQL [(none)]> 可以看出 跟连接mysql很像,区别在于 user的格式。登录用户名:root@proxysys, 端口:2883 ,初始密码:空。 2)修改 OBPROXY 管理密码 修改 OBPROXY 用户密码是通过修改参数的方式,命令是:alter proxyconfig set。 MySQL [(none)]> show proxyconfig like '%sys_password%'; #测试 proxyro 连通性 +------------------------+-------+--------------------------------+-------------+---------------+ | name | value | info | need_reboot | visible_level | +------------------------+-------+--------------------------------+-------------+---------------+ | observer_sys_password1 | | password for observer sys user | false | SYS | | observer_sys_password | | password for observer sys user | false | SYS | | obproxy_sys_password | | password for obproxy sys user | false | SYS | +------------------------+-------+--------------------------------+-------------+---------------+ 3 rows in set (0.001 sec) MySQL [(none)]> alter proxyconfig set obproxy_sys_password = 'ob2881'; Query OK, 0 rows affected (0.003 sec) 3)测试OBPROXY 管理密码连接 [admin@CAIP131 obproxy-3.2.0]$ obclient -h 172.20.2.131 -u root@proxysys -P 2883 -p Enter password: Welcome to the OceanBase. Commands end with ; or \g. Your MySQL connection id is 3 Server version: 5.6.25 Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MySQL [(none)]> 4)修改 OBPROXY 连接 OceanBase 集群用户 proxyro 的密码。 这样 OBPROXY 才能跟 OceanBase 集群正常连接。这个密码就是前面 OceanBase 集群初始化后创建的用户 proxyro 的密码 MySQL [(none)]> alter proxyconfig set observer_sys_password = 'ob2881'; Query OK, 0 rows affected (0.003 sec) 4、测试 OBPROXY 连接 通过 OBPROXY 连接 OceanBase , 如果能查看所有会话,则说明 OBPROXY 部署成功 [admin@CAIP131 obproxy-3.2.0]$ obclient -h172.20.2.131 -uroot@sys#obdemo -P2883 -p -c -A oceanbase Enter password: Welcome to the OceanBase. Commands end with ; or \g. Your MySQL connection id is 4 Server version: 5.6.25 OceanBase 3.1.1 (r4-8c615943cbd25a6f7b8bdfd8677a13a21709a05e) (Built Oct 21 2021 10:33:14) Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MySQL [oceanbase]> 查看租户会话 MySQL [oceanbase]> show processlist; MySQL [oceanbase]> show full processlist; 七、创建资源池和租户 OceanBase 数据库面向多租户设计。 在一个大集群中,您可以创建很多租户,不同的部门使用不同的租户。租户和租户之间资源已经进行了隔离,保障了相互之间访问不受影响,类似于数据库中的实例。(sys租户执行) 1、查询资源总计 1)查询系统资源总计资源 MySQL [oceanbase]> SELECT svr_ip,svr_port, cpu_total, mem_total/1024/1024/1024, disk_total/1024/1024/1024, zone FROM __all_virtual_server_stat; +--------------+----------+-----------+--------------------------+---------------------------+-------+ | svr_ip | svr_port | cpu_total | mem_total/1024/1024/1024 | disk_total/1024/1024/1024 | zone | +--------------+----------+-----------+--------------------------+---------------------------+-------+ | 172.20.2.120 | 2882 | 14 | 17.000000000000 | 50.000000000000 | zone1 | | 172.20.2.121 | 2882 | 14 | 17.000000000000 | 50.000000000000 | zone2 | | 172.20.2.122 | 2882 | 14 | 17.000000000000 | 50.000000000000 | zone3 | +--------------+----------+-----------+--------------------------+---------------------------+-------+ 3 rows in set (0.004 sec) 2)查询租户已分配资源 MySQL [oceanbase]> 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; +----------------+----------------------------------+ | sum(c.max_cpu) | sum(c.max_memory)/1024/1024/1024 | +----------------+----------------------------------+ | 5 | 5.099999999627 | +----------------+----------------------------------+ 1 row in set (0.038 sec) 注意:资源池cpu共14c/17g/50G 租户已用 5c/5G 新建租户最大可用为不能超过可用资源池(超分会报错) OceanBase 数据库默认会自动创建 sys 租户,sys 租户负责一部分 OceanBase 数据库的管理工作,并且能够访问系统元数据表,sys 自动预留了一定的资源。 2、创建资源单元 在创建租户前,需要先确定租户的资源单元配置和资源使用范围。租户使用的资源被限制在资源单元的范围内,如果当前存在的资源单元配置无法满足新租户的需要,可以新建资源单元配置。 1)创建资源单元(unitob) MySQL [oceanbase]> CREATE RESOURCE UNIT unitob max_cpu = 6, max_memory = '8G', min_memory = '8G', max_iops = 100000, min_iops = 100000, max_session_num = 30000, max_disk_size = '50G'; Query OK, 0 rows affected (0.070 sec) 2)查看新创建的资源单元 MySQL [oceanbase]> SELECT unit_config_id,name,max_cpu,min_cpu,max_memory,min_memory,max_disk_size FROM __all_unit_config; +----------------+-----------------+---------+---------+------------+------------+---------------+ | unit_config_id | name | max_cpu | min_cpu | max_memory | min_memory | max_disk_size | +----------------+-----------------+---------+---------+------------+------------+---------------+ | 1 | sys_unit_config | 5 | 2.5 | 5476083302 | 4563402752 | 53687091200 | | 1001 | unitob | 6 | 6 | 8589934592 | 8589934592 | 53687091200 | +----------------+-----------------+---------+---------+------------+------------+---------------+ 2 rows in set (0.012 sec) 3、创建资源池(poolob) 在使用 SQL 语句创建资源池前,请确认已创建了待使用的资源单元配置 MySQL [oceanbase]> CREATE RESOURCE POOL poolob UNIT = 'unitob', UNIT_NUM = 1,ZONE_LIST = ('zone1', 'zone2', 'zone3'); Query OK, 0 rows affected (0.027 sec) 参数 UNIT_NUM 表示在集群的一个 Zone 里面包含的资源单元个数。该值小于等于一个 Zone 中的 OBServer 的个数。 参数 ZONE_LIST 表示资源池的 Zone 列表,显示该资源池的资源在哪些 Zone 中被使用。 4、创建租户 OceanBase 社区版数据库仅支持一种租户: MySQL 租户。只有 root 用户连接到 sys 租户(root@sys)才能执行 CREATE TENANT 命令去创建租户。新建租户后默认密码为空,需修改租户密码,以保证数据安全。 1)创建租户(tenantob) 租户就是实例,创建租户也是瞬间完成,需要关联到某个资源池。 使用 root 账号登陆到 sys 租户中,使用 MySQL 或 OBClient 访问 OceanBase 数据库: MySQL [oceanbase]> create tenant tenantob resource_pool_list=('poolob'), 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='%'; 2)查看租户 创建租户后,您可以通过查询 tenant 相关视图来确认租户是否创建成功。 MySQL [oceanbase]> select tenant_id,tenant_name,primary_zone from __all_tenant; +-----------+-------------+-------------------+ | tenant_id | tenant_name | primary_zone | +-----------+-------------+-------------------+ | 1 | sys | zone1;zone2,zone3 | | 1001 | tenantob | RANDOM | +-----------+-------------+-------------------+ 2 rows in set (0.008 sec) 八、创建用户 首次使用新租户连接 OceanBase 数据库时,您必须使用 root 用户。成功连接后,您可以创建新用户连接 OceanBase 数据库。数据库在运行过程中,往往需要创建不同的用户,并为用户赋予相应的权限,一般被授予 CREATE USER 权限的用户可以创建用户。由于 CREATE USER 权限较大,默认仅集群管理员和租户管理员拥有此系统权限,其他用户如果需要创建用户,则需要被授予 CREATE USER 权限。 1、连接租户 1)登录新创建的tenantsixlens租户 (默认租户密码为空): [admin@CAIP131 obproxy-3.2.0]$ obclient -h172.20.2.131 -uroot@tenantob#obdemo -P2883 -c -A oceanbase Welcome to the OceanBase. Commands end with ; or \g. Your MySQL connection id is 7 Server version: 5.6.25 OceanBase 3.1.1 (r4-8c615943cbd25a6f7b8bdfd8677a13a21709a05e) (Built Oct 21 2021 10:33:14) Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MySQL [oceanbase]> 2)创建用户并设置密码(userob) MySQL [oceanbase]> CREATE USER 'userob' IDENTIFIED BY 'ob2881'; Query OK, 0 rows affected (0.036 sec) 3)查看创建成功的用户 MySQL [oceanbase]> SELECT user FROM mysql.user; +------------+ | user | +------------+ | root | | ORAAUDITOR | | userob | +------------+ 3 rows in set (0.032 sec) 2、授权用户 OceanBase 数据库社区版(MySQL模式)普通租户下的用户只能拥有该租户下对象的访问权限,权限设计与 MySQL 数据库兼容。由于普通用户主要进行数据库对象的访问和操作,故必须拥有本租户对应数据库对象的访问和操作权限。普通用户通常由具有租户管理员权限的用户创建并赋权。 1)授权用户 MySQL [oceanbase]> GRANT ALL PRIVILEGES ON *.* TO userob WITH GRANT OPTION; Query OK, 0 rows affected (0.040 sec) 2)查看用户授权 通过 SHOW GRANTS 语句查看某个用户被授予的权限。 MySQL [oceanbase]> show grants for userob; +-----------------------------------------------------------+ | Grants for userob@% | +-----------------------------------------------------------+ | GRANT ALL PRIVILEGES ON *.* TO 'userob' WITH GRANT OPTION | +-----------------------------------------------------------+ 1 row in set (0.020 sec) 3)租户登录测试: [admin@CAIP131 obproxy-3.2.0]$ obclient -h172.20.2.131 -uuserob@tenantob#obdemo -p -P2883 -c -A oceanbase Enter password: Welcome to the OceanBase. Commands end with ; or \g. Your MySQL connection id is 8 Server version: 5.6.25 OceanBase 3.1.1 (r4-8c615943cbd25a6f7b8bdfd8677a13a21709a05e) (Built Oct 21 2021 10:33:14) Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. 3、连接白名单设置 租户白名单指的是该租户允许登录的客户端列表。(否则只能127.0.0.1登录) 1)sys租户登录 [admin@CAIP131 obproxy-3.2.0]$ obclient -h172.20.2.131 -uroot@sys#obdemo -P2883 -p -c -A oceanbase Enter password: Welcome to the OceanBase. Commands end with ; or \g. Your MySQL connection id is 9 Server version: 5.6.25 OceanBase 3.1.1 (r4-8c615943cbd25a6f7b8bdfd8677a13a21709a05e) (Built Oct 21 2021 10:33:14) Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. 2)租户白名单设置(tenantob) MySQL [oceanbase]> ALTER TENANT tenantob SET VARIABLES ob_tcp_invited_nodes='%'; Query OK, 0 rows affected (0.005 sec) 九、创建业务数据库 设置好白名单后,再来创建业务数据库 本节主要介绍 MySQL 模式中数据库的创建语句及操作方法。 1、使用租户新用户登录OB集群: [admin@CAIP131 obproxy-3.2.0]$ obclient -h172.20.2.131 -uuserob@tenantob#obdemo -p -P2883 -c -A oceanbase Enter password: Welcome to the OceanBase. Commands end with ; or \g. Your MySQL connection id is 10 Server version: 5.6.25 OceanBase 3.1.1 (r4-8c615943cbd25a6f7b8bdfd8677a13a21709a05e) (Built Oct 21 2021 10:33:14) Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. 2、创建测试表: MySQL [oceanbase]> create database obtest; Query OK, 1 row affected (0.047 sec) MySQL [oceanbase]> use obtest; Database changed MySQL [obtest]> CREATE TABLE obtest (id int,name varchar(20)); Query OK, 0 rows affected (0.175 sec) MySQL [obtest]> insert into obtest(id,name) values(20220217,"obdemo"); Query OK, 1 row affected (0.049 sec) MySQL [obtest]> show tables; +------------------+ | Tables_in_obtest | +------------------+ | obtest | +------------------+ 1 row in set (0.024 sec) MySQL [obtest]> select * from obtest; +----------+--------+ | id | name | +----------+--------+ | 20220217 | obdemo | +----------+--------+ 1 row in set (0.008 sec) 十、寻求帮助 1、官方社区问答板块寻求帮助 OB开源团队老师和同学非常乐于跟用户交流OB技术。你可以在OceanBase 社区问答板块提问、分享、查找之前别人遇到过的问题?在寻求帮助的过程中, 也不断的锻炼自己, 让自己的知识越来越丰富。 问答链接:https://ask.oceanbase.com/  2、官方钉钉群寻求帮助 OB开源团队老师和同学非常乐于跟用户交流OB技术。加入钉钉社群,提问、分享、查找之前别人遇到过的问题? 在寻求帮助的过程中, 也不断的锻炼自己, 让自己的知识越来越丰富。 钉钉群号 33254054  结语: 使用OBD自动化安装部署社区版 OceanBase 后,再手动部署 OceanBase 集群,整体还是有些难度的。不过已经有自动部署经验了,再手动部署时细心一点多检查各种参数再执行。最后,将所有存在的问题记录,并且在OB官网找出解决建议,参照建议解决问题,并再次运行环境检查。OB官方网站文档中心提供了比较详细的资料,按照文档提示正确设置即可。但是在实验环境中安装还是会遇到各种问题,大家如果有机会可以自己搭建起来,对于理解OB的架构有些帮助。 有一种无缝使用MySQL的感觉,因为OceanBase的连接信息跟MySQL连接的协议就是兼容mysql的。这么做是考虑到MySQL的普及性让更多人和应用能接受OceanBase。 OceanBase关于MySQL的兼容性,业务可以最大程度的使用两者的特性功能,总体来说和测试文档来看,还是有不少的期待。 OceanBase集群搭建好后默认有个系统租户sys。sys租户的root用户是集群里最大权限可以定义资源规格、创建资源池、OBServer的扩容和缩容相关操作等等。 如果部署遇到报错,找你看得懂的ERROR日志。或者根据错误号到官网问答区查看别人发布过的问题,参考是如何解决的,可以参照建议解决问题,或在钉钉群提问。总会找到有用的线索,并再次运行环境检查。 不管是官方文档部署还是网络方法部署,只是测试。在测试OB之前至少得先确保熟悉原理,在根据实际环境部署。
此 Pull Request 需要贡献者签署贡献者协议后方可合并。
此 Pull Request 需要通过一些审核项
类型
指派人员
状态
审查
oceanbase-admin
进行中
(0/1人)
测试
oceanbase-admin
进行中
(0/1人)
此 Pull Request 暂不能合并,一些审核尚未通过
怎样手动合并此 Pull Request
git checkout master
git pull https://gitee.com/shunwah/blog.git chris-probd
git push origin master
评论
0
提交
2
文件
2
检查
代码问题
0
批量操作
展开设置
折叠设置
审查
Code Owner
审查人员
桑酒
YY7567
oceanbase-admin
oceanbase-admin
未设置
最少人数
1
测试
桑酒
YY7567
oceanbase-admin
oceanbase-admin
未设置
最少人数
1
优先级
不指定
严重
主要
次要
不重要
标签
标签管理
一年一度OceanBase技术征文
关联 Issue
未关联
Pull Request 合并后将关闭上述关联 Issue
里程碑
未关联里程碑
合并选项
合并后删除提交分支
提交分支为默认分支,无法删除
合并后关闭提到的 Issue
接受 Pull Request 时使用扁平化(Squash)合并
勾选此选项后,将建议使用 Squash Merge 方式合并以精简提交历史记录
参与者
(1)
1
https://gitee.com/oceanbase/blog.git
git@gitee.com:oceanbase/blog.git
oceanbase
blog
blog
点此查找更多帮助
搜索帮助
Git 命令在线学习
如何在 Gitee 导入 GitHub 仓库
Git 仓库基础操作
企业版和社区版功能对比
SSH 公钥设置
如何处理代码冲突
仓库体积过大,如何减小?
如何找回被删除的仓库数据
Gitee 产品配额说明
GitHub仓库快速导入Gitee及同步更新
什么是 Release(发行版)
将 PHP 项目自动发布到 packagist.org
评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册