猿创征文|OceanBase社区版集群部署

Posted IT邦德

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了猿创征文|OceanBase社区版集群部署相关的知识,希望对你有一定的参考价值。

📢📢📢📣📣📣
哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10年DBA工作经验
一位上进心十足的【大数据领域博主】!😜😜😜
中国DBA联盟(ACDU)成员,目前从事DBA及程序编程
擅长主流数据Oracle、mysql、PG 运维开发,备份恢复,安装迁移,性能优化、故障应急处理等。
✨ 如果有对【数据库】感兴趣的【小可爱】,欢迎关注【IT邦德】💞💞💞
❤️❤️❤️感谢各位大可爱小可爱!❤️❤️❤️

文章目录

前言

OceanBase社区版集群部署分享给大家,一起来为国产数据库添砖加瓦

📣 1.部署环境

1.操作系统:
[root@jeames ~]# cat /etc/redhat-release
CentOS Linux release 7.3.1611 (Core) 

2.内存
要求:系统内存至少12G
[root@jeames ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:          15870         866       14296          20         708       14642
Swap:          4095           0        4095

[root@jeames ~]# vi /etc/fstab
[root@jeames ~]# tmpfs/dev/shm tmpfs defaults,size=15G 0 0
[root@jeames ~]# cat /etc/fstab | grep shm
tmpfs/dev/shm tmpfs defaults,size=15G 0 0

[root@jeames ~]# mount -o remount /dev/shm
[root@jeames ~]# 

3.OB运行目录
/data/observer01,observer02,observer03,obproxy


4.关闭防火墙和 SELinux
##查看防火墙状态:
systemctl status firewalld

systemctl disable firewalld 
systemctl stop firewalld
systemctl status firewalld

##关闭 SELinux
vi /etc/selinux/config
确保:SELINUX=disabled
[root@jeames ~]# setenforce 0
setenforce: SELinux is disabled

📣 2.服务器配置

1.修改配置文件

vi /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

##让配置生效
[root@jeames ~]# sysctl -p


2.修改会话变量设置
通过配置 limits.conf 限制修改会话限制。 
OceanBase 数据库的进程涉及的限制包括线程最大栈空间大小(Stack)、最大文件句柄数(Open Files)和 core 文件大小 (Core File Size)

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

查看配置方法。退出当前会话,重新登录。执行以下命令,查看配置是否生效:

[root@jeames ~]# ulimit -a

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 63407
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 63407
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

3.同步服务
OceanBase 是分布式数据库产品,是一个集群软件,对各个节点之间的时间同步性有要求。
技术上要求所有节点之间的时间误差控制在 50ms 以内。实际生产环境为了稳定性和性能考虑,建议时间误差控制在 10ms 以内。
通常只要节点配置时间同步服务器跟公网时间保持同步即可。

CentOS 或 RedHat 7.x 版本推荐使用 chrony 服务做时间源。
Chrony 是 NTP(Network Time Protocol,网络时间协议,服务器时间同步的一种协议)的另一种实现,
与 ntpd 不同,它可以更快且更准确地同步系统时钟,最大程度的减少时间和频率误差。

判断是否使用 ntpd同步时间
[root@jeames ~]# systemctl status ntpd
Unit ntpd.service could not be found.
如果提示上面这个信息,表示没有使用 ntpd,那就继续。 如果提示有 ntpd 服务,就卸载 ntpd 软件。


安装 chrony服务
这里采用 YUM 安装方法。您也可以下载相应的 RPM 包安装。

[root@jeames ~]# yum -y install chrony
[root@jeames ~]# rpm -qa | grep chrony
chrony-3.4-1.el7.x86_64

chrony 服务守护进程名是 chronyd,chronyc 是用来监控 chronyd 性能和配置参数的命令行工具。 
chrony 的主配置文件: /etc/chrony.conf ,配置方法如下:

# 如果是测试环境,没有时间同步服务器,那就选取一台配置为时间同步服务器。
# 如果选中的是本机,则配置如下 server
server 127.127.1.0

cat >> /etc/chrony.conf << "EOF"
server 192.168.1.54
# 指定一台主机、子网,或者网络以允许或拒绝NTP连接到扮演时钟服务器的机器
allow 192.168.0.0/16
# 即使没有同步到时间源,也要服务时间
local stratum 10
EOF


查看时间同步活动
chronyc activity

查看时间服务器
chronyc sources

查看同步状态
chronyc sources -v

校准时间服务器:
chronyc tracking

📣 3.软件下载

1.软件下载
##OceanBase 数据库专用的代理服务器
obproxy-3.2.0-1.el7.x86_64.rpm
oceanbase-ce-3.1.4-10000092022071511.el7.x86_64.rpm
##OceanBase运行时所依赖的部分三方动态库
oceanbase-ce-libs-3.1.4-10000092022071511.el7.x86_64.rpm

📣 4.配置安装用户

创建用户 admin 并授予 sudo 权限

1。新增普通用户 admin
[root@jeames ~]# useradd admin

# 改用户密码
passwd admin

或下面命令指定密码,密码修改为自己的。
echo 'admin:admin' | chpasswd


2.给予admin用户sudo root权限
方法:admin 加到用户组 wheel 里。
[root@jeames ~]# usermod admin -G wheel
[root@jeames ~]# id admin
uid=1001(admin) gid=1001(admin) groups=1001(admin),10(wheel)

📣 5.安装软件

使用root用户执行安装:

[root@jeames ~]# rpm -ivh oceanbase-ce-libs-3.1.4-10000092022071511.el7.x86_64.rpm
Preparing...                          ################################# [100%]
Updating / installing...
   1:oceanbase-ce-libs-3.1.4-100000920################################# [100%]
   
[root@jeames ~]# rpm -ivh oceanbase-ce-3.1.4-10000092022071511.el7.x86_64.rpm
Preparing...                          ################################# [100%]
Updating / installing...
   1:oceanbase-ce-3.1.4-10000092022071################################# [100%]
   
[root@jeames ~]# rpm -ivh obproxy-3.2.0-1.el7.x86_64.rpm
warning: obproxy-3.2.0-1.el7.x86_64.rpm: Header V4 RSA/SHA1 Signature, key ID e9b4a7aa: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:obproxy-3.2.0-1.el7              ################################# [100%]
   
查看安装后的信息:
[root@jeames ~]# rpm -ql oceanbase-ce
/home/admin/oceanbase/bin
/home/admin/oceanbase/bin/import_time_zone_info.py
/home/admin/oceanbase/bin/observer
/home/admin/oceanbase/etc
/home/admin/oceanbase/etc/oceanbase_upgrade_dep.yml
/home/admin/oceanbase/etc/priv_checker.py
/home/admin/oceanbase/etc/timezone_V1.log
/home/admin/oceanbase/etc/upgrade_checker.py
/home/admin/oceanbase/etc/upgrade_cluster_health_checker.py
/home/admin/oceanbase/etc/upgrade_post.py
/home/admin/oceanbase/etc/upgrade_post_checker.py
/home/admin/oceanbase/etc/upgrade_pre.py
/home/admin/oceanbase/etc/upgrade_rolling_post.py
/home/admin/oceanbase/etc/upgrade_rolling_pre.py


[root@jeames ~]# rpm -ql oceanbase-ce-libs
/home/admin/oceanbase/lib
/home/admin/oceanbase/lib/libaio.so
/home/admin/oceanbase/lib/libaio.so.1
/home/admin/oceanbase/lib/libaio.so.1.0.1
/home/admin/oceanbase/lib/libmariadb.so
/home/admin/oceanbase/lib/libmariadb.so.3


[root@jeames ~]# rpm -ql obproxy
/home/admin/obproxy-3.2.0/bin
/home/admin/obproxy-3.2.0/bin/obproxy
/home/admin/obproxy-3.2.0/bin/obproxyd.sh

[root@jeames ~]# chown -R admin:admin /home/admin

📣 6.创建运行目录

[root@jeames ~]# mkdir /data
[root@jeames ~]# chown admin:admin /data

## 切换到admin用户下执行,如果出現提示符不对,执行以下
[root@jeames ~]# cp /etc/skel/.bashrc /home/admin
[root@jeames ~]# cp /etc/skel/.bash_profile /home/admin

## 创建目录
[admin@jeames ~]$ mkdir -p /data/observer01,observer02,obproxy
[admin@jeames ~]$ mkdir -p /data/observer01,02/store/sort_dir,sstable,clog,ilog,slog

📣 7.配置环境变量

[root@jeames ~]# cd /home/admin
[root@jeames admin]# chown -R admin:admin .bash_profile
[root@jeames admin]# chmod +x .bash_profile

##新建.bash_history
[root@jeames admin]# vi .bash_history
[root@jeames admin]# chmod 775 .bash_history


--
[root@jeames ~]# su - admin

[admin@jeames ~]$
cat >> ~/.bash_profile << "EOF"
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/admin/oceanbase/lib/
EOF

[admin@jeames ~]$ echo "export PATH=$PATH:/home/admin/oceanbase/bin:/home/admin/obproxy-3.2.0/bin" >> /home/admin/.bash_profile

##变量生效
[admin@jeames ~]$ source ~/.bash_profile

📣 8.启动OB进程

[admin@jeames ~]$ cd /data/observer01/ && /home/admin/oceanbase/bin/observer -r "192.168.1.54:2882:2881;192.168.1.54:3882:3881;192.168.1.54:4882:4881" -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,sys_bkgd_migration_retry_num=3,minor_freeze_times=10,enable_separate_sys_clog=0,enable_merge_by_turn=False,datafile_size=50G,enable_syslog_recycle=True,max_syslog_file_count=10 -z zone1 -p 2881 -P 2882 -c 20221003 -d /data/observer01/store -i ens33 -l INFO

[admin@jeames ~]$ cd /data/observer02/ && /home/admin/oceanbase/bin/observer -r "192.168.1.54:2882:2881;192.168.1.54:3882:3881;192.168.1.54:4882:4881" -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,sys_bkgd_migration_retry_num=3,minor_freeze_times=10,enable_separate_sys_clog=0,enable_merge_by_turn=False,datafile_size=50G,enable_syslog_recycle=True,max_syslog_file_count=10 -z zone2 -p 3881 -P 3882 -c 20221003 -d /data/observer02/store -i ens33 -l INFO

注意:ens33为本地网卡

1. -d 是指定存放 OB节点的数据文件和日志文件的目录。这个目录下必须存在几个子目录。如果你重装了,把 -d 的目录清空重新创建。
2. -r 是指定OB节点的信息。上面是单节点。后面再看三节点的示例。
3. -o 是指定OB进程启动参数,如果你熟悉OB参数,可以在这里调整。这里的 memory_limit=8G,表示启动一个8G的OB进程。如果你机器实际内存比这个大,可以改大它。内存越大的话,你甚至可以去掉这些内存相关的参数。data_size是数据文件大小,确保可以分配出来并且分配后剩余空间比例不低于10%以及是内存 2 倍以上。
4. -i 是网卡名,跟 -r 后面的IP要对应上。
5. 启动目录改到 /data/observer01下,这样相关的运行日志会在这个目录下。后面还要启动多个节点,每个节点的observer进程运行日志是分开存放的。


#以上命令中指定的参数作用可参考obd自动部署过程yaml文件的说明,
https://gitee.com/oceanbase/obdeploy/tree/master/example

# 查看进程信息
[admin@jeames ~]$ ps -ef |grep observer
[admin@jeames ~]$ netstat -tulnp | grep 88
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp        0      0 0.0.0.0:3882            0.0.0.0:*               LISTEN      2134/observer       
tcp        0      0 0.0.0.0:2881            0.0.0.0:*               LISTEN      2079/observer       
tcp        0      0 0.0.0.0:2882            0.0.0.0:*               LISTEN      2079/observer       
tcp        0      0 0.0.0.0:3881            0.0.0.0:*               LISTEN      2134/observer     

📣 9 初始化集群

# 默认空密码
[admin@jeames ~]$ mysql -h192.168.1.54 -uroot -P2881 -p -c -A
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \\g.
Your MySQL connection id is 3221225472
Server version: 5.7.25 OceanBase 3.1.4 (r10000092022071511-b4bfa011ceaef428782dcb65ae89190c40b78c2f) (Built Jul 15 2022 11:45:14)

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\\h' for help. Type '\\c' to clear the current input statement.

mysql> set session ob_query_timeout=1000000000; 

--单节点集群初始化
mysql> alter system bootstrap ZONE 'zone1' SERVER '192.168.1.54:2882';
Query OK, 0 rows affected (2 min 37.70 sec)

--多节点集群初始化
mysql> alter system bootstrap ZONE 'zone1' SERVER '192.168.1.54:2882',ZONE 'zone2' SERVER '192.168.1.54:3882';
Query OK, 0 rows affected (4 min 7.39 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| oceanbase          |
| information_schema |
| mysql              |
| SYS                |
| LBACSYS            |
| ORAAUDITOR         |
| test               |
+--------------------+
7 rows in set (0.71 sec)


# 修改root密码
mysql> alter user root identified by 'jem';
mysql> create user proxyro identified by 'jem';
mysql> grant select on *.* to proxyro;


mysql> create database jem_db;

📣 10.配置obproxy

obproxy启动后,默认用 root@proxysys 登录,密码为空。需要改密码(通过proxy参数obproxy_sys_password指定)。
obproxy启动后,还需要修改proxyro的密码(通过proxy参数observer_sys_password指定),设置为跟OB集群里创建的proxyro密码一致才能链接那个OB集群。

1.启动obproxy,其中-c 对应集群的名称,和前面的observer的启动参数对应。
[admin@jeames ~]$ cd /data/observer01/ && /home/admin/oceanbase/bin/observer -r 

cd /data/obproxy && /home/admin/oceanbase/bin/obproxy -r "192.168.1.54:2881;192.168.1.54:3881" -p 2883 -o "enable_strict_kernel_release=false,enable_cluster_checkout=false,enable_metadb_used=false" -c 20221003

[admin@jeames ~]$ netstat -ntlp | grep obproxy
[admin@jeames ~]$ ps -ef|grep ob
[admin@jeames ~]$ netstat -ntlp | grep 88

[admin@jeames ~]$ mysql -h192.168.1.54 -uroot@proxysys -P2883 -p
MySQL [(none)]> show proxyconfig like '%sys_password%';
MySQL [(none)]> alter proxyconfig set obproxy_sys_password='jem';
MySQL [(none)]> alter proxyconfig set observer_sys_password='jem';

[admin@jeames ~]$ mysql -h192.168.1.54 -uroot@sys -P2883 -plhr -A oceanbase
MySQL [oceanbase]> select * from oceanbase.__all_server;

📣 11.登录ob数据库并创建租户

1.创建资源单元、资源池、租户
mysql -uroot@sys -pjem -h192.168.1.54 -P2883

MySQL [oceanbase]> CREATE resource unit S4C1G max_cpu=4, min_cpu=4, max_memory='1G', min_memory='1G', max_iops=10000, min_iops=1000, max_session_num=1000000, max_disk_size='1024G'; 

MySQL [oceanbase]> CREATE resource pool my_pool unit = 'S4C1G', unit_num = 1;

MySQL [oceanbase]> create tenant obmysql resource_pool_list=('my_pool'), primary_zone='RANDOM',comment 'mysql tenant/instance', charset='utf8' set ob_tcp_invited_nodes='%', ob_compatibility_mode='mysql';


2.登录obmysql或tenant并创建数据库及表等
C:\\Users\\wangd> mysql -uroot@obmysql -p -h192.168.1.54 -P2883

MySQL [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| oceanbase          |
| information_schema |
| mysql              |
| test               |
+--------------------+

MySQL [test]> create database jemdb charset utf8mb4;

以上是关于猿创征文|OceanBase社区版集群部署的主要内容,如果未能解决你的问题,请参考以下文章

猿创征文 | 国产数据库实战之使用Docker部署TiDB集群

猿创征文 | 国产数据库实战之使用Docker部署TiDB集群

猿创征文|ZooKeeper(伪)集群搭建

猿创征文|破世界纪录的国产数据库 - OceanBase

猿创征文|破世界纪录的国产数据库 - OceanBase

猿创征文|国产数据库新的飞跃