使用OBD自动部署三节点OceanBase文档
oceanbase部署请查看历史文章
https://www.modb.pro/db/324460 使用OBD自动部署三节点OceanBase文档
https://www.modb.pro/db/328171 OceanBase手动部署三节点OBserver文档
https://www.modb.pro/db/322997 OceanBase 单节点手动部署OB文档
https://www.modb.pro/db/250245 Docker单节点自动化部署OB集群
机器信息
机器类型 | 主机配置 | 备注 |
---|---|---|
OS | Centos 7.4 | |
中控机 /OBD | CPU:8C | 内存:16G |
目标机器 /OBserver | CPU:8C | 内存:32G |
系统盘 / | dev/vda 50G | LVS分区、文件系统:EXT4 |
数据盘 /data | dev/vdb 100G | 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.120 | {2883,2884} 反向代理 |
172.20.2.121 | {2883,2884} 反向代理 | |
172.20.2.122 | {2883,2884} 反向代理 | |
OBAgent | 172.20.2.120 | 监控采集框架 默认端口 8088、8089 |
172.20.2.121 | 监控采集框架 默认端口 8088、8089 | |
172.20.2.122 | 监控采集框架 默认端口 8088、8089 | |
OBclient | 172.20.2.131 | OB命令行客户端 |
安装部署版本
软件名 | 版本 | 备注 |
---|---|---|
ob-deploy | 1.2.1-9.el7.x86_64 | |
libobclient | 2.0.0-2.el7.x86_64 | |
obclient | 2.0.0-2.el7.x86_64 | |
obproxy | 3.2.0-1.el7.x86_64 | |
oceanbase-ce | 3.1.2.el7.x86_64 | |
obagent | 1.1.0.el7.x86_64 |
安装方式:
yum在线OBD自动安装部署OceanBase
目录规划:
软件包默认安装目录是 : /home/admin/oceanbase
目录结构如下:
/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 | 运行日志目录 | 启动时在启动目录自动创建 |
一、磁盘配置
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 #检查
二、配置安装用户
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
Note:先创建admin用户,后mount挂载/home/admin/ocaeabase 否则创建用户提示家目录存在
3、用户 admin
授予 sudo
权限配置:
[root@CAIP120 /]# vim /etc/sudoers
## Allow root to run any commands anywhere
admin ALL=(ALL) ALL
Note:sudoers拒绝所有用户读写,root用户也无权限,需增加权限后更改 #chmod u+w /etc/sudoers
三、初始化服务器环境
1、配置 SSH 免密登录
手动部署 OceanBase 集群,相应节点上安装软件包,并启动 observer
或 obproxy
进程,不需要配置 SSH 免密登录。自动化技术部署 OceanBase 集群,则需要一台中控机,中控机的用户 admin
到 OBSERVER 节点的用户 admin
的免密登录:
- 在中控机生成 RSA 或 DSA 公钥和私钥
$ ssh-keygen -t rsa #在中控机131执行
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ mkdir ~/.ssh #在Observer3个节点建立隐藏ssh目录
$ scp ~/.ssh/authorized_keys admin@172.20.2.120-122:~/.ssh/authorized_keys #中控机复制到目标机器
目标机器授权(所有目标节点)
$ chmod 700 .ssh --目标机器执行
$ chmod 600 .ssh/authorized_keys --目标机器执行
Note:root用户配置免密可直接登录,普通用户需更改目录和文件权限,否则无法登陆
$ for i in 120 121 122;do ssh 172.20.2.$i date;done --中控机执行免密连接测试
2、配置时间同步服务
(中控节点作为时间服务器,以root身份配置):
判断是否使用
ntpd
同步时间。[root@CAIP131 ~]# systemctl status ntpd Unit ntpd.service could not be found. #未安装
安装
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
# systemctl start chronyd && systemctl enable chronyd && systemctl status chronyd #设置开机自启
客户端配置(所有目标节点):
[root@CAIP120 /]# echo "* * * * * /sbin/ntpdate -u 172.20.2.131 2>&1 1>>/tmp/ntpdate.log" >> /var/spool/cron/root
中控机检查时间同步(中控机执行)
# for i in 120 121 122 ;do clockdiff 172.20.2.$i;done
检查和目标节点时间误差常用命令是: clockdiff
客户端检查时间同步(所有目标节点)
[root@CAIP120 /]# clockdiff 172.20.2.131 #目标机到中控机之间时间同步检查
# ping -T tsandaddr 172.20.2.131 --如果有机子clockdiff报错,使用tsandaddr
[admin@CAIP120 oceanbase]$ ping -T tsandaddr 172.20.2.131 -c 2
3、修改会话变量设置
全局修改配置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,查看配置是否生效:
4、内核参数修改
修改配置文件vim /etc/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
[root@CAIP120 /]# sysctl -p #加载配置,使配置生效
5、关闭防火墙和 SELinux
查看防火墙状态
systemctl status firewalld
如果是 inactive
那就不用管。如果是 active
,那就永久关闭
systemctl stop firewalld
systemctl disable firewalld
systemctl status firewalld
关闭 SELinux
修改 SELinux 配置文件中的 SELINUX
选项。
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
配置文件修改后只会重启主机后生效,还需要使用下面命令立即生效。
setenforce 0
6、安装相关工具软件
yum install epel-release -y
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/
四、安装部署
1、OceanBase自动化部署:
[admin@CAIP131 ~]$ sudo yum-config-manager --add-repo https://mirrors.aliyun.com/oceanbase/OceanBase.repo
在线安装OBD(中控节点)
[admin@CAIP131 ~]$ sudo yum install -y yum-utils
[admin@CAIP131 ~]$ sudo yum install -y ob-deploy
[admin@CAIP131 ~]$ sudo yum install -y libobclient
[admin@CAIP131 ~]$ sudo yum install -y obclient
2、编辑 OBD 配置文件
OBD 针对不同的部署场景提供不同的配置文件。这些配置文件示例均放在 OceanBase 开源项目地址中,您可访问链接查看:https://github.com/oceanbase/obdeploy/tree/master/example 。
如果您是部署单节点版本,只需下载其中两个配置文件:
部署三节点
observer
进程:https://github.com/oceanbase/obdeploy/blob/master/example/mini-distributed-example.yaml
部署三节点
observer
和obproxy
进程:https://github.com/oceanbase/obdeploy/blob/master/example/mini-distributed-with-obproxy-example.yaml
oceanbase-ce:
servers:
- name: z1
ip: 172.20.2.120
- name: z2
ip: 172.20.2.121
- name: z3
ip: 172.20.2.122
global:
devname: ens192
memory_limit: 25G
system_memory: 10G
datafile_disk_percentage: 90
syslog_level: INFO
enable_syslog_recycle: true
max_syslog_file_count: 100
memstore_limit_percentage: 55
freeze_trigger_percentage: 40
minor_warm_up_duration_time: 0
cluster_id: 1
appname: ob_cluster
root_password: Pwd123#
z1:
mysql_port: 2881
rpc_port: 2882
home_path: /home/admin/oceanbase/ob
data_dir: /data/ob
clog_dir: /redo/clog
ilog_dir: /redo/ilog
slog_dir: /redo/slog
zone: zone1
enable_syslog_wf: true
cpu_count: 16
z2:
mysql_port: 2881
rpc_port: 2882
home_path: /home/admin/oceanbase/ob
data_dir: /data/ob
clog_dir: /redo/clog
ilog_dir: /redo/ilog
slog_dir: /redo/slog
zone: zone2
enable_syslog_wf: true
cpu_count: 16
z3:
mysql_port: 2881
rpc_port: 2882
home_path: /home/admin/oceanbase/ob
data_dir: /data/ob
clog_dir: /redo/clog
ilog_dir: /redo/ilog
slog_dir: /redo/slog
zone: zone3
enable_syslog_wf: true
cpu_count: 16
obproxy:
servers:
- 172.20.2.120
- 172.20.2.121
- 172.20.2.122
depends:
- oceanbase-ce
global:
listen_port: 2883
prometheus_listen_port: 2884
home_path: /home/admin/obproxy
rs_list: 172.20.2.120:2881;172.20.2.121:2881;172.20.2.122:2881
enable_cluster_checkout: false
cluster_name: ob_cluster
enable_compression_protocol: false
automatic_match_work_thread: True
work_thread_num: 16
net_accept_threads: 2
proxy_mem_limited: 16G
obproxy_sys_password: Pwd123#
obagent:
servers:
- name: z1
ip: 172.20.2.120
- name: z2
ip: 172.20.2.121
- name: z3
ip: 172.20.2.122
depends:
- oceanbase-ce
global:
home_path: /home/admin/oceanbase/obagent
server_port: 8088
pprof_port: 8089
log_level: INFO
log_path: log/monagent.log
crypto_method: plain
log_size: 30
log_expire_day: 7
log_file_count: 10
http_basic_auth_user: admin
http_basic_auth_password: root
pprof_basic_auth_user: admin
pprof_basic_auth_password: root
ob_monitor_status: active
host_monitor_status: active
disable_http_basic_auth: false
disable_pprof_basic_auth: false
3、 部署 OceanBase 集群:
部署 OBserver、OBproxy、OBagent:
[admin@CAIP131 ~]$ obd cluster autodeploy test_obcluster -c config.yaml
查看部署后的运行状态
[admin@CAIP131 ~]$ obd cluster display test_obcluster
4、连接验证:
$ obclient -h172.20.2.120 -uroot@sys#ob_cluster -pPwd123# -P2883 -A -c oceanbase --sys租户
[admin@CAIP131 ~]$ obclient -h172.20.2.120 -uroot@sys#ob_cluster -pPwd123# -P2883 -A -c oceanbase
使用sys系统租户查看所有节点是否正常:
MySQL [oceanbase]> select svr_ip,status,with_rootserver,usec_to_time(start_service_time),usec_to_time(stop_time) from __all_server;
1)、status 表示节点状态。inactive, 表示节点已经掉线或者进程退出了。节点掉线常见原因是节点时钟偏差过大、网络延时过大、clog空间盘满(use大于等于95%)。如果进程刚刚启动,则是进程在跟 rootserver 通信沟通。正常情况下启动几秒就能变 active,异常宕机后的再启动可能需要几十秒变 acitve,最长不超过2分钟。
2)、start_service_time 表示节点开始提供服务时间。如果是默认值 1970-1-1 ,则表示进程还在应用clog、刷新schema等。通常如果要应用的clog不多的时候,这个几秒钟就好了。如果是此前内存中大量数据还没有合并落盘就宕机了,这个恢复时间就长一些,可能会要十几分钟。
3)、stop_service_time 表示停止服务时间。如果是默认值 1970-1-1 ,表示没有停止服务。如果时间大于默认值(在当前时间附近),表示手动发起过 stop server 或 stop zone 命令。则需要手动发起 start server 或者 start zone 命令恢复服务。
4)、只有这三个列都正常了,节点才是正常的,集群才是正常的
5、登录obproxy账户
[admin@CAIP131 ~]$ obclient -h172.20.2.120 -uroot@proxysys -P2883 -pPwd123#
MySQL [(none)]> show processlist;
五、资源池-租户-用户-创建及测试
1、查询系统资源总计资源
SELECT svr_ip,svr_port, cpu_total, mem_total/1024/1024/1024, disk_total/1024/1024/1024, zone FROM __all_virtual_server_stat;
查询租户已分配资源:
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;
Note:资源池cpu共14c/13g/79G 租户已用 5c/4G 新建租户最大可用为 9c/9g(超分会报错)
2、创建2个资源单元(4c/2g/50G):
MySQL [oceanbase]> CREATE RESOURCE UNIT unitcaip max_cpu = 4, max_memory = '2G', min_memory = '2G', max_iops = 100000, min_iops = 100000, max_session_num = 30000, max_disk_size = '50G';
MySQL [oceanbase]> CREATE RESOURCE UNIT unitsixlens max_cpu = 4, max_memory = '2G', min_memory = '2G', max_iops = 100000, min_iops = 100000, max_session_num = 30000, max_disk_size = '50G';
查看新创建的资源单元
MySQL [oceanbase]> SELECT unit_config_id,name,max_cpu,min_cpu,max_memory,min_memory,max_disk_size FROM __all_unit_config;
3、创建2个资源池:
MySQL [oceanbase]> CREATE RESOURCE POOL poolcaip UNIT = 'unitcaip', UNIT_NUM = 1,ZONE_LIST = ('zone1', 'zone2', 'zone3');
MySQL [oceanbase]> CREATE RESOURCE POOL poolsixlens UNIT = 'unitsixlens', UNIT_NUM = 1,ZONE_LIST = ('zone1', 'zone2', 'zone3');
4、创建2个租户:
MySQL [oceanbase]> create tenant tenantcaip resource_pool_list=('poolcaip'), 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]> 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;
5、登录新创建的tenantcaip 租户(默认租户密码为空):
[admin@CAIP131 ~]$ obclient -h172.20.2.120 -uroot@tenantcaip#ob_cluster -P2883 -c -A oceanbase
设置租户tenantcaip 的root密码
MySQL [oceanbase]> alter user root identified by 'Pwd123#';
6、登录新创建的tenantsixlens租户(默认租户密码为空):
[admin@CAIP131 ~]$ obclient -h172.20.2.120 -uroot@tenantsixlens#ob_cluster -P2883 -c -A oceanbase
设置租户tenantsixlens的root密码
MySQL [oceanbase]> alter user root identified by 'Pwd123#';
7、设置租户tenantcaip 的授权
创建用户并设置密码
MySQL [oceanbase]> CREATE USER 'usercaip' IDENTIFIED BY 'Pwd123#';
查看创建成功的用户
MySQL [oceanbase]> SELECT user FROM mysql.user;
授权用户
MySQL [oceanbase]> grant all on *.* to 'usercaip' WITH GRANT OPTION;
查看用户授权
MySQL [oceanbase]> show grants for usercaip;
用于登录测试:
[admin@CAIP131 ~]$ obclient -h172.20.2.120 -uusercaip@tenantcaip#ob_cluster -pPwd123# -P2883 -c -A oceanbase
8、设置租户tenantsixlens 的授权
[admin@CAIP131 ~]$ obclient -h172.20.2.120 -uroot@tenantsixlens#ob_cluster -pPwd123# -P2883 -c -A oceanbase
9、创建用户并设置密码
MySQL [oceanbase]> CREATE USER 'usersixlens' IDENTIFIED BY 'Pwd123#';
查看创建成功的用户
MySQL [oceanbase]> SELECT user FROM mysql.user;
授权用户
MySQL [oceanbase]> GRANT ALL PRIVILEGES ON *.* TO usersixlens WITH GRANT OPTION;
查看用户授权
MySQL [oceanbase]> show grants for usersixlens;
用于登录测试:
[admin@CAIP131 ~]$ obclient -h172.20.2.120 -uusersixlens@tenantsixlens#ob_cluster -pPwd123# -P2883 -c -A oceanbase
10、连接白名单设置(否则只能127登录)sys租户
[admin@CAIP131 ~]$ obclient -h172.20.2.120 -uroot@sys#ob_cluster -pPwd123# -P2883 -A -c oceanbase
tenantsixlens连接白名单设置
MySQL [oceanbase]> ALTER TENANT tenantsixlens SET VARIABLES ob_tcp_invited_nodes='%';
tenantcaip连接白名单设置
MySQL [oceanbase]> ALTER TENANT tenantcaip SET VARIABLES ob_tcp_invited_nodes='%';
11、使用任意一个租户下的用户登录OB集群测试建库建表:
obclient -h172.20.2.120 -uusersixlens@tenantsixlens#ob_cluster -pPwd123# -P2883 -c -A oceanbase