> 文档中心 > 猿创征文|OceanBase社区版集群部署

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


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

文章目录

  • 前言
    • 📣 1.部署环境
    • 📣 2.服务器配置
    • 📣 3.软件下载
    • 📣 4.配置安装用户
    • 📣 5.安装软件
    • 📣 6.创建运行目录
    • 📣 7.配置环境变量
    • 📣 8.启动OB进程
    • 📣 9 初始化集群
    • 📣 10.配置obproxy
    • 📣 11.登录ob数据库并创建租户

前言

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


📣 1.部署环境

1.操作系统:[root@jeames ~]# cat /etc/redhat-releaseCentOS Linux release 7.3.1611 (Core) 2.内存要求:系统内存至少12G[root@jeames ~]# free -mtotal used free      shared  buff/cache   availableMem:   15870  86614296   20  70814642Swap:   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 shmtmpfs/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 firewalldsystemctl disable firewalld systemctl stop firewalldsystemctl status firewalld##关闭 SELinuxvi /etc/selinux/config确保:SELINUX=disabled[root@jeames ~]# setenforce 0setenforce: SELinux is disabled

📣 2.服务器配置

1.修改配置文件vi /etc/sysctl.confnet.core.somaxconn = 2048net.core.netdev_max_backlog = 10000net.core.rmem_default = 16777216net.core.wmem_default = 16777216net.core.rmem_max = 16777216net.core.wmem_max = 16777216net.ipv4.ip_local_port_range = 3500 65535net.ipv4.ip_forward = 0net.ipv4.conf.default.rp_filter = 1net.ipv4.conf.default.accept_source_route = 0net.ipv4.tcp_syncookies = 0net.ipv4.tcp_rmem = 4096 87380 16777216net.ipv4.tcp_wmem = 4096 65536 16777216net.ipv4.tcp_max_syn_backlog = 16384net.ipv4.tcp_fin_timeout = 15net.ipv4.tcp_max_syn_backlog = 16384net.ipv4.tcp_tw_reuse = 1net.ipv4.tcp_tw_recycle = 1net.ipv4.tcp_slow_start_after_idle=0vm.swappiness = 0vm.min_free_kbytes = 2097152vm.max_map_count=655360fs.aio-max-nr=1048576##让配置生效[root@jeames ~]# sysctl -p2.修改会话变量设置通过配置 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 -acore file size   (blocks, -c) 0data seg size    (kbytes, -d) unlimitedscheduling priority      (-e) 0file size (blocks, -f) unlimitedpending signals   (-i) 63407max locked memory(kbytes, -l) 64max memory size  (kbytes, -m) unlimitedopen files (-n) 1024pipe size     (512 bytes, -p) 8POSIX message queues     (bytes, -q) 819200real-time priority(-r) 0stack size(kbytes, -s) 8192cpu time (seconds, -t) unlimitedmax user processes(-u) 63407virtual memory   (kbytes, -v) unlimitedfile locks (-x) unlimited3.同步服务OceanBase 是分布式数据库产品,是一个集群软件,对各个节点之间的时间同步性有要求。技术上要求所有节点之间的时间误差控制在 50ms 以内。实际生产环境为了稳定性和性能考虑,建议时间误差控制在 10ms 以内。通常只要节点配置时间同步服务器跟公网时间保持同步即可。CentOS 或 RedHat 7.x 版本推荐使用 chrony 服务做时间源。Chrony 是 NTP(Network Time Protocol,网络时间协议,服务器时间同步的一种协议)的另一种实现,与 ntpd 不同,它可以更快且更准确地同步系统时钟,最大程度的减少时间和频率误差。判断是否使用 ntpd同步时间[root@jeames ~]# systemctl status ntpdUnit ntpd.service could not be found.如果提示上面这个信息,表示没有使用 ntpd,那就继续。 如果提示有 ntpd 服务,就卸载 ntpd 软件。安装 chrony服务这里采用 YUM 安装方法。您也可以下载相应的 RPM 包安装。[root@jeames ~]# yum -y install chrony[root@jeames ~]# rpm -qa | grep chronychrony-3.4-1.el7.x86_64chrony 服务守护进程名是 chronyd,chronyc 是用来监控 chronyd 性能和配置参数的命令行工具。 chrony 的主配置文件: /etc/chrony.conf ,配置方法如下:# 如果是测试环境,没有时间同步服务器,那就选取一台配置为时间同步服务器。# 如果选中的是本机,则配置如下 serverserver 127.127.1.0cat >> /etc/chrony.conf << "EOF"server 192.168.1.54# 指定一台主机、子网,或者网络以允许或拒绝NTP连接到扮演时钟服务器的机器allow 192.168.0.0/16# 即使没有同步到时间源,也要服务时间local stratum 10EOF查看时间同步活动chronyc activity查看时间服务器chronyc sources查看同步状态chronyc sources -v校准时间服务器:chronyc tracking

📣 3.软件下载

1.软件下载##OceanBase 数据库专用的代理服务器obproxy-3.2.0-1.el7.x86_64.rpmoceanbase-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' | chpasswd2.给予admin用户sudo root权限方法:admin 加到用户组 wheel 里。[root@jeames ~]# usermod admin -G wheel[root@jeames ~]# id adminuid=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.rpmPreparing...     ################################# [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.rpmPreparing...     ################################# [100%]Updating / installing...   1:oceanbase-ce-3.1.4-10000092022071################################# [100%]   [root@jeames ~]# rpm -ivh obproxy-3.2.0-1.el7.x86_64.rpmwarning: obproxy-3.2.0-1.el7.x86_64.rpm: Header V4 RSA/SHA1 Signature, key ID e9b4a7aa: NOKEYPreparing...     ################################# [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/observer{01,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/observertcp 0      0 0.0.0.0:2881     0.0.0.0:* LISTEN      2079/observertcp 0      0 0.0.0.0:2882     0.0.0.0:* LISTEN      2079/observertcp 0      0 0.0.0.0:3881     0.0.0.0:* LISTEN      2134/observer     

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

📣 9 初始化集群

# 默认空密码[admin@jeames ~]$ mysql -h192.168.1.54 -uroot -P2881 -p -c -AEnter password: Welcome to the MySQL monitor.  Commands end with ; or \g.Your MySQL connection id is 3221225472Server 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 itsaffiliates. Other names may be trademarks of their respectiveowners.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;

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

📣 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 -pMySQL [(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 oceanbaseMySQL [oceanbase]> select * from oceanbase.__all_server;

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

1.创建资源单元、资源池、租户mysql -uroot@sys -pjem -h192.168.1.54 -P2883MySQL [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 -P2883MySQL [(none)]> show databases;+--------------------+| Database    |+--------------------+| oceanbase   || information_schema || mysql|| test |+--------------------+MySQL [test]> create database jemdb charset utf8mb4;

在这里插入图片描述