猿创征文|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集群