暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

手动部署一套 OceanBase 集群

SQL学习者 2023-07-23
194

前期准备

软硬件资源要求

资源需求

  • 每个 observer 进程需要至少10G内存容量,2个监听端口(默认是 2881 和 2882 )以及至少10G的数据目录
  • obproxy OceanBase 的反向代理进程,可以独立部署在应用服务器,独立的机器或者OceanBase 的机器上。生产环境建议至少部署两个obproxy
  • 默认使用admin用户管理OceanBase

操作系统选型

OceanBase 社区版支持的操作系统包括:

  • CentOS :推荐7.2 以后版本。
  • Debian :推荐 9.8, 10.9 版本。
  • openSUSE :推荐 15.2 版本。
  • OpenAnolis:推荐 8.2 版本。
  • SUSE : 推荐 15.2 版本。
  • Ubuntu:推荐 16.04 、18.04、20.04 等版本

安装介质

社区版地址

  1. 官网下载
  2. GitHub 下载
  3. 阿里云 Yum 源

软件介质清单

官网上RPM包清单:

动图封面

共6个rpm包,下载后上传至安装主机soft目录。

  • OBD: OceanBase Database Deployer社区版部署工具
  • oceanbase-ce: OceanBase数据库社区版
  • OceanBase libs: oceanbase运行时所依赖的部分三方动态库
  • Obproxy : oceanbase数据库专用的代理服务器
  • OBClient:obclient交互式和批量处理查询工具
  • LibOBClient:obclient的依赖包

yum源上rpm包信息

  • 操作系统 安装包下载地址
  • Anlios 7、CentOS 7、RedHat 7、Ubuntu 20.X、Debian 9.X el7 下载地址
  • Anlios 8、CentOS 8、RedHat 8、Debian 10 el8 下载地址
  • el7系列

下载软件

从官网上获取rpm包

在浏览器中打开 https://open.oceanbase.com/softwareCenter/community 地址并获取对应软件包即可

从yum源获取rpm包

yum install -y yum-utils

yum-config-manager --add-repo https://mirrors.aliyun.com/oceanbase/OceanBase.repo

# 创建一个目录用于下载

mkdir soft

cat > rpm_list <<EOF

oceanbase-ce-3.1.0-3.el7.x86_64.rpm

oceanbase-ce-libs-3.1.0-3.el7.x86_64.rpm

obproxy-3.1.0-1.el7.x86_64.rpm

obclient-2.0.0-2.el7.x86_64.rpm

ob-deploy-1.1.0-1.el7.x86_64.rpm

libobclient-2.0.0-2.el7.x86_64.rpm

oceanbase-ce-sql-parser-3.1.0-3.el7.x86_64.rpm

EOF

wget -B https://mirrors.aliyun.com/oceanbase/community/stable/el/7/x86_64/ -i rpm_list -P soft

# or

yum install obclient libobclient obproxy oceanbase-ce oceanbase-ce-libs ob-deploy --downloadonly --downloaddir=soft

动图封面

实施过程

环境架构规划

操作系统层环境配置

以下操作如无特别说明,均以root管理员账号进行配置所有节点。

关闭 selinux

#临时关闭

setenforce 0

# 检查

getenforce

#开机不启动selinux,需重启OS生效。已临时关闭,本次不需要重启生效。

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

#查看配置已生效

grep '^SELINUX=' /etc/selinux/config

关闭防火墙服务(firewalld)

#关闭防火墙

systemctl stop firewalld

#开机禁用自启动防火墙并立刻关闭服务

systemctl disable --now firewalld

# 检查服务状态

systemctl status firewalld

修改主机名(可选)

#修改主机名为oceanbase,当前已生效,退出会话,再登录后显示新主机名

hostnamectl set-hostname oceanbase

# 检查确认

hostnamectl

配置hosts

#主机名解析添加主机信息

cat >> /etc/hosts << EOF

192.168.10.182 oceanbase

EOF

#查看主机名信息

cat /etc/hosts

添加普通用户

oceanbase安装和维护均由普通用户(ober)操作。[OBD工具部署的OB集群默认运行在admin用户]

#添加用户

groupadd -g 1000 ober

useradd -u 1000 -g ober -m -d /ups/app/oceanbase -c "OceanBase Owner" ober

#更改密码

echo "ober" | passwd --stdin ober

#运行oceanbase可运行任何命令,不需要密码

# 配置 sudo 权限

visudo #添加oceanbase一行内容

## Same thing without a password

# %wheel ALL=(ALL) NOPASSWD: ALL

ober ALL=(ALL) NOPASSWD: ALL

配置 SSH 互信(ober)

su - ober

export SSH='ssh -o PasswordAuthentication=no -o StrictHostKeyChecking=no'

ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa

ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa

cat ~/.ssh/*.pub >> ~/.ssh/authorized_keys

scp ~/.ssh/authorized_keys ober@<nodeN>:~/.ssh/authorized_keys

chmod 700 ~/.ssh

chmod 600 ~/.ssh/authorized_keys

# 检查确认

export SSH='ssh -o ConnectTimeout=3 -o ConnectionAttempts=5 -o PasswordAuthentication=no -o StrictHostKeyChecking=no'

for hosts in $(grep -Ev "^#|\-vip|scan" /etc/hosts|awk '{print $NF}'); do

${SSH} ${hosts} date

done

创建软件目录

以root用户安装时,默认安装在/root/observer目录下,这里以oceanbase用户安装在/ob/observer目录下。

集群文件类型

  • 运行日志:在启动目录下的 log 目录里。主要记录进程 observer 的运行日志、选举服务的运行日志和 rootservice 的运行日志。主要读写特点是顺序写。
  • 数据文件:主要是指数据文件 block_file ,一次性初始化大小,后面可以在线扩容,但是不能缩容。主要读写特点是随机读、顺序写。偶尔密集的随机写。
  • 事务日志文件:主要是指事务和 sstable 相关的日志 ,包括 clog、ilog 和 slog 等。主要读写特点是顺序写。

这三类文件尽可能的分散在不同的磁盘上存储。如果物理上只有一块盘,则可以使用 fdisk 或 lvm 划分为多个逻辑盘。

文件系统mount参数

# lvm 分盘

pvcreate /dev/sdb

vgcreate datavg /dev/sdb

lvcreate -L 20G datavg -n lvredo

lvcreate -l 100%FREE datavg -n lvdata

# 格式化文件系统

mkfs.ext4 /dev/obvg/lvdata

mkfs.ext4 /dev/obvg/lvredo

# 修改 mount 参数文件

vim /etc/fstab

/dev/obvg/lvredo /redo ext4 defaults,noatime,nodiratime,nodelalloc,barrier=0 0 0

/dev/obvg/lvdata /data ext4 defaults,noatime,nodiratime,nodelalloc,barrier=0 0 0

# 挂载文件系统

mount -a

查看默认安装路径

rpm -ql oceanbase-ce-3.1.0-3.el7.x86_64

for pkg in $(ls -tr ./*.rpm);do

echo $pkg; rpm -ql $pkg

done

自定义安装目录

# 查看安装目录大小

[root@progs oceanbase]# df -hT /ups

Filesystem Type Size Used Avail Use% Mounted on

/dev/mapper/upsvg-upslv xfs 64G 44G 21G 69% /ups

[root@progs oceanbase]#

# 检查属主、属组

[root@progs oceanbase]# ls -ld /ups/app/oceanbase

drwxr-xr-x 2 ober ober 6 Aug 28 20:39 /ups/app/oceanbase

[root@progs oceanbase]#

cd /ups/app/oceanbase # obs部署启动目录 RPM包自动创建

mkdir -p /ups/app/oceanbase/store/obce # obs数据总目录, obce为集群名称

mkdir -p /data/obce # obs数据文件实际目录

mkdir -p /redo/obce # 事务日志实际目录

chown -R ober:ober /ups/app/oceanbase

chown -R ober:ober /data/obce

chown -R ober:ober /redo/obce

ln -s /ups/app/oceanbase/store/obce/sstable /data/obce/sstable

ln -s /ups/app/oceanbase/store/obce/clog /redo/obce/clog

ln -s /ups/app/oceanbase/store/obce/slog /redo/obce/slog

ln -s /ups/app/oceanbase/store/obce/ilog /redo/obce/ilog

系统内核参数配置

cat > /etc/sysctl.d/98-obce.conf <<-'EOF'

# for oceanbase

## 修改内核异步 I/O 限制

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

vm.max_map_count=655360

# 此处为 OceanBase 数据库的 data 目录

kernel.core_pattern = /data/core-%e-%p-%t

EOF

# 加载配置

sysctl --system

其中,kernel.core_pattern 中的 /data 为 OceanBase 数据库的 data 目录。

调整资源限制

OceanBase 数据库的进程涉及的限制包括线程最大栈空间大小(Stack)、最大文件句柄数(Open Files)和 core 文件大小 (Core File Size)资源

#添加内容

cat >> /etc/security/limits.d/98-ober.conf << EOF

* soft nofile 655350

* hard nofile 655350

* soft stack 20480

* hard stack 20480

* soft nproc 655360

* hard nproc 655360

* soft core unlimited

* hard core unlimited

EOF

#退出当前会话,重新登录,使配置生效。

#检查open files当前值,应为655350,否则后续启动集群会报错

ulimit -n

时间同步

生产环境所有节点间的时间误差建议控制在 10ms 以内。

安装 chrony服务

yum -y install chrony

配置chrony

vi /etc/chrony.conf

# server 后面跟时间同步服务器

# 使用pool.ntp.org 项目中的公共服务器。按 server 配置,理论上您想添加多少时间服务器都可以。

# 或者使用 阿里云的 ntp 服务器

# Please consider joining the pool (http://www.pool.ntp.org/join.html).

server ntp.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst

server ntp.aliyun.com minpoll 4 maxpoll 10 iburst

server ntp1.aliyun.com minpoll 4 maxpoll 10 iburst

server ntp1.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst

server ntp10.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst

# 如果是测试环境,没有时间同步服务器,那就选取一台配置为时间同步服务器。

# 如果选中的是本机,则取消下面 server 注释

#server 127.127.1.0

# 根据实际时间计算出服务器增减时间的比率,然后记录到一个文件中,在系统重启后为系统做出最佳时间补偿调整。

driftfile /var/lib/chrony/drift

# chronyd 根据需求减慢或加速时间调整,

# 在某些情况下系统时钟可能漂移过快,导致时间调整用时过长。

# 该指令强制 chronyd 调整时期,大于某个阀值时步进调整系统时钟。

# 只有在因 chronyd 启动时间超过指定的限制时(可使用负值来禁用限制)没有更多时钟更新时才生效。

makestep 1.0 3

# 将启用一个内核模式,在该模式中,系统时间每11分钟会拷贝到实时时钟(RTC)。

rtcsync

# Enable hardware timestamping on all interfaces that support it.

# 通过使用hwtimestamp指令启用硬件时间戳

#hwtimestamp eth0

#hwtimestamp eth1

#hwtimestamp *

# Increase the minimum number of selectable sources required to adjust

# the system clock.

#minsources 2

# 指定一台主机、子网,或者网络以允许或拒绝NTP连接到扮演时钟服务器的机器

#allow 192.168.0.0/16

#deny 192.168/16

# 即使没有同步到时间源,也要服务时间

local stratum 10

# 指定包含NTP验证密钥的文件。

#keyfile /etc/chrony.keys

# 指定日志文件的目录。

logdir /var/log/chrony

# Select which information is logged.

#log measurements statistics tracking

检查chrony状态信息

# 查看时间同步活动

chronyc activity

# 查看时间服务器

chronyc sources

# 查看同步状态

chronyc sources -v

# 校准时间服务器:

chronyc tracking

# 使用 clockdiff [-o] <host> 命令可以检查本机跟目标机器的时间同步误差

clockdiff 192.168.10.181

如果使用 clockdiff 运行出错时,可以换下面命令判断时间同步误差
ping -T tsandaddr 192.168.10.181 -c 2

节点时间同步误差不应超过 50ms,否则初始化集群会失败

时区设置(可选)

# 查看所有可用时区

timedatectl list-timezones

# 设置当前系统时区

timedatectl set-timezone Asia/Shanghai

# 强制同步下系统时钟

chronyc -a makestep

部署OceanBase集群

安装 obclient 客户端

rpm -ivh libobclient-2.0.0-2.el7.x86_64.rpm obclient-2.0.0-2.el7.x86_64.rpm

部署 observer 服务

安装软件包

# RPM包括是使用cpio格式打包的,因此可以先转成cpio然后解压

cd /ups/app/oceanbase/cluster

rpm2cpio oceanbase-ce-3.1.1-4.el7.x86_64.rpm |cpio -ivd

rpm2cpio oceanbase-ce-libs-3.1.1-4.el7.x86_64.rpm |cpio -ivd

配置环境变量

su - ober

echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/ups/app/oceanbase/lib' >> ~/.bash_profile

echo 'export PATH=/ups/app/oceanbase/bin:$PATH' >> ~/.bash_profile

. ~/.bash_profile

启动observer

192.168.10.201 节点

su - ober

cd /ups/app/oceanbase/cluster && bin/observer -i ens32 -l WARN -p 2881 -P 2882 -z zone1 -r '192.168.10.201:2882:2881;192.168.10.202:2882:2881;192.168.10.203:2882:2881' -c obce -n obce -o "__min_full_resource_pool_memory=268435456,memory_limit=8G,system_memory=4G,stack_size=512K,cpu_count=16,cache_wash_threshold=1G,workers_per_cpu_quota=10,schema_history_expire_time=1d,net_thread_count=4,major_freeze_duty_time=Disable,minor_freeze_times=10,enable_separate_sys_clog=0,enable_merge_by_turn=False,datafile_size=2G,enable_syslog_wf=False,enable_syslog_recycle=True,max_syslog_file_count=6" -d /ups/app/oceanbase/store/obce

192.168.10.202 节点

su - ober

cd /ups/app/oceanbase/cluster && bin/observer -i ens32 -l WARN -p 2881 -P 2882 -z zone2 -r '192.168.10.201:2882:2881;192.168.10.202:2882:2881;192.168.10.203:2882:2881' -c obce -n obce -o "__min_full_resource_pool_memory=268435456,memory_limit=8G,system_memory=4G,stack_size=512K,cpu_count=16,cache_wash_threshold=1G,workers_per_cpu_quota=10,schema_history_expire_time=1d,net_thread_count=4,major_freeze_duty_time=Disable,minor_freeze_times=10,enable_separate_sys_clog=0,enable_merge_by_turn=False,datafile_size=2G,enable_syslog_wf=False,enable_syslog_recycle=True,max_syslog_file_count=6" -d /ups/app/oceanbase/store/obce

192.168.10.203 节点

su - ober

cd /ups/app/oceanbase/cluster && bin/observer -i ens32 -l WARN -p 2881 -P 2882 -z zone3 -r '192.168.10.201:2882:2881;192.168.10.202:2882:2881;192.168.10.203:2882:2881' -c obce -n obce -o "__min_full_resource_pool_memory=268435456,memory_limit=8G,system_memory=4G,stack_size=512K,cpu_count=16,cache_wash_threshold=1G,workers_per_cpu_quota=10,schema_history_expire_time=1d,net_thread_count=4,major_freeze_duty_time=Disable,minor_freeze_times=10,enable_separate_sys_clog=0,enable_merge_by_turn=False,datafile_size=2G,enable_syslog_wf=False,enable_syslog_recycle=True,max_syslog_file_count=6" -d /ups/app/oceanbase/store/obce

检查进程状态

netstat -ntlp|grep -E "2881|2882"

集群初始化

当所有节点的observer进程都启动成功,监听正常时,通过mysql或obclient客户端工具连接任一节点2881端口进行初始化操作

mysql -h 192.168.10.201 -u root -P 2881 -c -A -e "set session ob_query_timeout=1000000000; alter system bootstrap ZONE 'zone1' SERVER '192.168.10.201:2882', ZONE 'zone2' SERVER '192.168.10.202:2882', ZONE 'zone3' SERVER '192.168.10.203:2882' ;"

密码为空

验证

连接到sys的mysql租户并检查

mysql -h 192.168.10.201 -u root@sys#obce -P 2881 -c -A -e "show databases;"

设置密码

  • 集群管理员(root@sys)密码默认集群管理员(root@sys)的密码是空

alter user root identified by 'p#ssw0rd' ;

  • OBPROXY 用户(proxyro)密码默认OBPROXY 连接 OceanBase 集群使用用户 proxyro

grant select on oceanbase.* to proxyro identified by 'p#ssw0rd' ;

部署obproxy

安装软件包

cd /ups/app/oceanbase/obproxy

rpm2cpio obproxy-3.2.0-1.el7.x86_64.rpm |cpio -ivd

启动obproxy

# obce 集群名称

cd /ups/app/oceanbase/obproxy && bin/obproxy -r "192.168.10.201:2881;192.168.10.202:2881;192.168.10.203:2881" -p 2883 -o "enable_strict_kernel_release=false,enable_cluster_checkout=false,skip_proxy_sys_private_check=True,enable_metadb_used=false" -l 2884 -n obce

obproxy [OPTIONS]
-h,–help print this help
-p,–listen_port LPORT obproxy listen port
-l,–promethues_listen_port PLPORT obproxy prometheus listen port
-o,–optstr OPTSTR extra options string
-n,–appname APPNAME application name
-r,–rs_list RS_LIST root server list(format ip:sql_port)
-c,–cluster_name CLUSTER_NAME root server cluster name
-d,–dump_config_sql DSQL dump config sql to file
-e,–execute_config_sql ESQL exectue config sql(create tables, insert initial data)
-N,–nodaemon don’t run in daemon
-V,–version VERSION current obproxy version
-R,–releaseid RELEASEID current obproxy kernel release id
-t,–regression_test TEST_NAME regression test
example:
run without config server:
./bin/obproxy -p6789 -r’ip:port;ip:port’ -n test -o enable_cluster_checkout=false,syslog_level=INFO
OR ./bin/obproxy -p6789 -r’ip:port;ip:port’ -c ‘ob_test’ -n test -o syslog_level=INFO
run with config server:
./bin/obproxy -p6789 -e -n test -o obproxy_config_server_url=‘your config url’,syslog_level=INFO
Non-first start with local config file:
./bin/obproxy
dump config update sql:
./bin/obproxy -d
run regression tests:
./bin/obproxy -p6789 -rip:port -ntest -o obproxy_config_server_url=’’ -t ‘’

检查服务状态

ps -ef|grep obproxy

netstat -ntlp |grep -E "2883|2884"

登录 OBPROXY 修改密码

-- 登录用户名:root@proxysys, 端口:2883 ,初始密码:空

-- mysql -h 192.168.10.201 -u root@proxysys -P 2883

show proxyconfig like '%sys_password%';

-- 修改 OBPROXY 用户密码

alter proxyconfig set obproxy_sys_password = 'p#ssw0rd';

-- 修改 OBPROXY 连接 OceanBase 集群用户 proxyro 的密码, 密码就是前面 OceanBase 集群初始化后创建的用户 proxyro 的密码

alter proxyconfig set observer_sys_password = 'p#ssw0rd' ;

检查确认

通过 OBPROXY 连接 OceanBase 集群

-- mysql -h192.168.10.201 -uroot@sys#obce -P2883 -p -c -A oceanbase

show full processlist;

部署 obagent(待完善)

安装软件包

su - ober

cd /ups/app/oceanbase/obagent

rpm2cpio obagent-1.0.0-1.el7.x86_64.rpm |cpio -ivd

配置环境变量

su - ober

echo 'export PATH=/ups/app/oceanbase/obagent/bin:$PATH' >> ~/.bash_profile

. ~/.bash_profile

编辑配置文件

monagent.yaml

vi conf/monagent.yaml

log:level: WARNfilename: log/monagent.logmaxsize: 30maxage: 3maxbackups: 10localtime: truecompress: true

server:address: 192.168.10.201:8088adminAddress: 192.168.10.201:8089runDir: run

cryptoMethod: plain

cryptoPath: conf/.config_secret.key

modulePath: conf/module_config

propertiesPath: conf/config_properties

启动 obagent 服务

su - ober

/ups/app/oceanbase/obagent/bin/monagent -c conf/monagent.yaml

Usage:
monagent [flags]
Flags:
-c, --config string config file (default “conf/monagent.yaml”)
-h, --help help for monagent
-d, --pipelines_config_dir string monitor pipelines config file dir (default “conf/monagent/pipelines”)

检查确认

ps -ef|grep monagent

netstat -tnlp |grep -E "8088|8089"

curl --user admin:a http://127.0.0.1:8088/metrics/ob/basic

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论