一.简介
OceanBase社区版是开源的分布式国产数据库,兼容 MySQL ,具有原生分布式架构,支持金融级高可用、透明水平扩展、分布式事务、多租户和语法兼容等企业级特性。目前社区版最新版本为V4.3.2,支持X86和ARM架构。OceanBase 数据库支持单机、机房、城市级别的高可用和容灾,可以进行单机房、双机房“主-备”、两地三中心“主-备”、两地三中心三副本、三地五中心五副本部署等。
二.集群部署前准备
0.资源规划
数据库及相关组件可部署在Alibaba Cloud Linux 2、CentOS 7、RedHat 7、Ubuntu 16.X、Debian 9.X操作系统安装,本次使用centos7.6操作系统,安装操作系统资源信息如下:
资源 4C 16G 100G+500G+100G+100G | centos7.6 | 192.168.77.171 | OBServer 节点1 /Proxy |
资源 4C 16G 100G+500G+100G+100G | centos7.6 | 192.168.77.172 | OBServer 节点2 /Proxy |
资源 4C 16G 100G+500G+100G+100G | centos7.6 | 192.168.77.173 | OBServer 节点3 /Proxy |
资源 4C 16G 100G+500G+100G+100G | centos7.6 | 192.168.77.174 | OBD/OCP Express |
192.168.77.171-173为OBServer 节点,同时部署代理Proxy;
192.168.77.174为中控机,集群自动化部署节点,同时部署OCP。
目录规划:
/data 为数据盘,大小为500G。
/redo 存放 redo 日志,大小为100G。
/home/admin/oceanbase 存放OceanBase数据库的二进制文件和运行日志,大小为100G。
1.部署前准备(所有节点执行)
#配置hosts
cat >>/etc/hosts<<'EOF'
192.168.77.171 oceanbaseserver1
192.168.77.172 oceanbaseserver2
192.168.77.173 oceanbaseserver3
192.168.77.174 oceanbaseocpobd
EOF
#配置阿里云yum源或本地yum源安装依赖
cd /etc/yum.repos.d/
gzip CentOS-*
sudo curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
#本地yum源
#使用系统镜像包 配置yum源
mount /dev/cdrom /mnt
cd /etc/yum.repos.d/
gzip CentOS-*
cat >centos.repo<<'EOF'
[centos7]
name=centos7
baseurl=file:///mnt
gpgcheck=0
enable=1
EOF
#安装依赖
yum -y install expect mariadb mariadb-devel python-devel openssl-devel gcc gcc-gfortran gcc-c++
yum -y install python-setuptools bc et-tools mtr chrony bind-utils libaio tree
#关闭内存大页
sed -i '/^GRUB_CMDLINE_LINUX/d' /etc/default/grub
cat >> /etc/default/grub<<'EOF'
GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet transparent_hugepage=never elevator=deadline"
EOF
grub2-mkconfig -o /etc/grub2.cfg
#设置时区
timedatectl set-timezone Asia/Shanghai
#配置时间同步服务NTP或chrond
#中控机本身作为服务端,仅中控机配置
yum -y install chrony
systemctl start chronyd
systemctl enable chronyd
cp /etc/chrony.conf /etc/chrony.conf.bak
cat >>/etc/chrony.conf<<'EOF'
server 127.0.0.1
allow 192.168.77.0/24
local stratum 10
EOF
######除中控机其他主机执行########
yum -y install chrony
systemctl start chronyd
systemctl enable chronyd
cp /etc/chrony.conf /etc/chrony.conf.bak
cat >>/etc/chrony.conf<<'EOF'
server 192.168.77.174
allow 192.168.77.0/24
local stratum 10
EOF
#磁盘准备
pvcreate /dev/sdb /dev/sdc /dev/sdd
vgcreate datavg /dev/sdb
vgcreate redovg /dev/sdc
vgcreate adminvg /dev/sdd
lvcreate -n datalv -L 500000M datavg
lvcreate -n redolv -L 100000M redovg
lvcreate -n adminlv -L 100000M adminvg
mkfs.xfs /dev/datavg/datalv
mkfs.xfs /dev/redovg/redolv
mkfs.xfs /dev/adminvg/adminlv
cat >>/etc/fstab<<'EOF'
/dev/datavg/datalv /data xfs defaults 0 0
/dev/redovg/redolv /redo xfs defaults 0 0
/dev/adminvg/adminlv /home/admin xfs defaults 0 0
EOF
mkdir -p /data
mkdir -p /redo
mkdir -p /home/admin
mount -a
#IO调度算法
#sas盘deadline;ssd盘NOOP
echo 'deadline' > /sys/block/sdb/queue/scheduler
echo 'deadline' > /sys/block/sdc/queue/scheduler
echo 'deadline' > /sys/block/sdd/queue/scheduler
#配置资源限制
cat >>/etc/security/limits.conf<<'EOF'
root soft nofile 655350
root hard nofile 655350
* soft nofile 655350
* hard nofile 655350
* soft stack unlimited
* hard stack unlimited
* soft nproc 655360
* hard nproc 655360
* soft core unlimited
* hard core unlimited
EOF
echo "* - nproc 65535" > /etc/security/limits.d/90-nproc.conf
#系统检查出,补充在这里了
echo -e "* soft nproc 120000\n* hard nproc 120000" >> /etc/security/limits.d/nproc.conf
#内核参数优化
cat >>/etc/sysctl.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_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.tcp_syncookies = 1
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_tw_recycle = 1
net.ipv4.tcp_slow_start_after_idle=0
vm.swappiness = 0
vm.min_free_kbytes = 2097152
vm.overcommit_memory = 0
fs.file-max = 6573688
# 修改进程可以拥有的虚拟内存区域数量
vm.max_map_count = 655360
# 此处为 OceanBase 数据库的 data 目录
kernel.core_pattern = /data/core-%e-%p-%t
EOF
sysctl -p
#关闭防火墙和SELINUX
systemctl disable firewalld
systemctl stop firewalld
sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config
setenforce 0
#创建用户和目录并授权
useradd -U admin -d /home/admin -s /bin/bash
mkdir -p /home/admin
chown -R admin:admin /home/admin
echo 123456 | passwd --stdin admin
#出现-bash-4.2$可执行
cp /etc/skel/.bash* /home/admin
#配置sudoer
cat >>/etc/sudoers<<'EOF'
admin ALL=(ALL) NOPASSWD: ALL
EOF
#目录授权
chown -R admin:admin /data
chown -R admin:admin /redo
chown -R admin:admin /home/admin
#ssh免密登录设置,中控机上执行
#必须将脚本前两行的 SERVERS 列表和 PASSWORD 替换成您自己的实际机器列表和密码
su - admin
cd /home/admin
cat >admin_ssh.sh<<'EOF'
#!/usr/bin/bash
SERVERS=("admin@192.168.77.171" "admin@192.168.77.172" "admin@192.168.77.173" "admin@192.168.77.174")
PASSWORD="123456"
keygen() {
sudo yum -y install expect
expect -c "
spawn ssh-keygen -t rsa
expect {
*(~/.ssh/id_rsa):* { send -- \r;exp_continue}
*(y/n)* { send -- y\r;exp_continue}
*Enter* { send -- \r;exp_continue}
*(y/n)* { send -- y\r;exp_continue}
*Enter* { send -- \r;exp_continue}
eof {exit 0}
}
expect eof
"
}
copy(){
expect -c "
set timeout -1
spawn ssh-copy-id $1
expect {
*(yes/no)* { send -- yes\r; exp_continue }
*password:* { send -- $PASSWORD\r; exp_continue}
eof {exit 0}
}
expect eof
"
}
ssh_copy_id_to_all(){
keygen ;
for host in ${SERVERS[@]}
do
copy $host
done
}
ssh_copy_id_to_all
EOF
#执行脚本,实现admin用户免密登录
sh admin_ssh.sh
#设置multi-user模式
systemctl set-default multi-user.target
#配置amdin环境变量
su - admin
cat >> ~/.bash_profile<<'EOF'
export LANG=en_US.UTF8
EOF
三.通过图形化界面部署集群
前提条件:部署OCP Express 组件需先安装配置 Java 环境,目前仅支持 JDK1.8 版本。
#验证
su - admin
ssh admin@192.168.77.174 'java -version'
1.安装并配置obd
#obd安装有多种方式:
使用RPM包安装(在线或离线);
使用all-in-one包安装(在线或离线);
OceanBase 从 V4.0.0 开始提供统一的安装包 all-in-one package。
all-in-one安装包一次性完成 obd、OceanBase 数据库、ODP、OBAgent、Grafana、Prometheus 和 OCP Express(自 V4.1.0 起支持)的安装。
#通过all-in-one安装obd
su - admin
cd /home/admin
#上传all-in-one安装包
rz oceanbase-all-in-one-4.2.4.0-100000082024070810.el7.x86_64.tar.gz
#解压后安装
tar xf oceanbase-all-in-one-4.2.4.0-100000082024070810.el7.x86_64.tar.gz
cd oceanbase-all-in-one/bin
./install.sh
#安装完成提示
Install Finished
=========================================================================================
Setup Environment: source ~/.oceanbase-all-in-one/bin/env.sh
Quick Start: obd demo
Use Web Service to install: obd web
Use Web Service to upgrade: obd web upgrade
More Details: obd -h
#设置环境变量
source ~/.oceanbase-all-in-one/bin/env.sh
#配置obd
#因为是离线,所以禁止远程仓库,不然会联网下载
su - admin
obd mirror disable remote
#将all-in-one里面的安装包clone到本地仓库
cd oceanbase-all-in-one/rpms
obd mirror clone *.rpm
#查看本地仓库的安装包列表
obd mirror list local
2.通过odb白屏部署OceanBase集群(中控机192.168.77.174上操作)的操作步骤
启动白屏界面
#admin用户前台启动web界面,默认端口8680,IP为内网地址,非公网地址
obd web
#提示please open http://192.168.77.174:8680
浏览器访问http://192.168.77.174:8680
选中文---开启部署之旅---OceanBase及配套工具---确定
部署配置:自定义集群名称,选版本选组件。
节点配置:界面可以配置数据库和组件节点,部署用户以及软件安装路径。
集群配置:界面可对集群进行配置,包括系统租户的管理员用户(root@sys)密码、数据和日志目录、数据库及各组件的端口和参数配置等。
预检查:
根据页面建议选择 自动修复 或者单击 了解更多方案 跳转至错误码文档,参考文档自行修改。
#一键复制的内容
[
{
"component": "oceanbase-ce",
"access_url": "192.168.77.171:2881",
"user": "root",
"password": "D6&mj..!E}",
"connect_url": "obclient -h192.168.77.171 -P2881 -uroot -p'D6&mj..!E}' -Doceanbase -A"
},
{
"component": "obproxy-ce",
"access_url": "192.168.77.171:2883",
"user": "root@proxysys",
"password": "qr8EN1Dt1j",
"connect_url": "obclient -h192.168.77.171 -P2883 -uroot@proxysys -p'qr8EN1Dt1j' -Doceanbase -A \n"
},
{
"component": "ocp-express",
"access_url": "192.168.77.174:8180",
"user": "admin",
"password": "..7zK9fN",
"connect_url": "http://192.168.77.174:8180"
}
]
OCP Express 的登录界面。 http://192.168.77.174:8180 admin/..7zK9fN
部署成功后可复制显示的连接串,在黑屏界面执行连接 OceanBase 数据库。
#中控机上连接数据库服务器
obd tool command alioceanbase log -c oceanbase-ce -s 192.168.77.171
obd tool command alioceanbase log -c oceanbase-ce -s 192.168.77.172
obd tool command alioceanbase log -c oceanbase-ce -s 192.168.77.173
#中控机上连接数据库
obclient -h192.168.77.171 -P2881 -uroot -p'D6&mj..!E}' -Doceanbase -A
select version();
select user,host from mysql.user;
3.管理部署后的集群
#中控机上操作
#查看集群列表
obd cluster list
#查看集群状态,以部署名为 alioceanbase 为例
obd cluster display alioceanbase
#停止运行中的集群,以部署名为 alioceanbase 为例
obd cluster stop alioceanbase
#销毁已部署的集群,以部署名为 alioceanbase 为例
obd cluster destroy alioceanbase