登录
注册
开源
企业版
高校版
搜索
帮助中心
使用条款
关于我们
开源
企业版
高校版
私有云
Gitee AI
NEW
我知道了
查看详情
登录
注册
1月18日,北京,聊聊2025如何加入技术开发?
代码拉取完成,页面将自动刷新
捐赠
捐赠前请先登录
取消
前往登录
扫描微信二维码支付
取消
支付完成
支付提示
将跳转至支付宝完成支付
确定
取消
Watch
不关注
关注所有动态
仅关注版本发行动态
关注但不提醒动态
4
Star
1
Fork
7
OceanBase
/
blog
代码
Issues
3
Pull Requests
20
Wiki
统计
流水线
服务
Gitee Pages
JavaDoc
PHPDoc
质量分析
Jenkins for Gitee
腾讯云托管
腾讯云 Serverless
悬镜安全
阿里云 SAE
Codeblitz
我知道了,不再自动展开
更新失败,请稍后重试!
Issues
/
详情
移除标识
内容风险标识
本任务被
标识为内容中包含有代码安全 Bug 、隐私泄露等敏感信息,仓库外成员不可访问
#一年一度 OceanBase 技术征文 安装部署+OBD生产环境部署 OceanBase 数据库
待办的
#I5ERL5
黑岩
创建于
2022-06-29 21:07
<h1>OBD生产环境部署 OceanBase 数据库</h1> ![image-20220601112908744](OBD生产环境部署 OceanBase 数据库.assets/image-20220601112908744.png) **文档内容根据官方文档进行补充修改面来。** ## 环境准备 **软件:** OceanBase Deploy: 1.3.3 OceanBase Server:3.1.3 OceanBase Proxy:3.2.3-2 **硬件环境:** | **主机** | **主机名** | **IP****地址** | Zone | 安装服务 | CPU/MEM/DISK | | --------- | ---------- | --------------- | ----- | ----------------- | ------------ | | OBD/OCP* | ocp-srv01 | 192.168.184.100 | -- | OBD/OCP* | 16C/64G/200G | | observer1 | obs-01 | 192.168.184.101 | zone1 | OBS/OBP/KeepAlive | 8C/64G/700G | | observer2 | obs-02 | 192.168.184.102 | zone2 | OBS/OBP/KeepAlive | 8C/64G/700G | | observer3 | obs-03 | 192.168.184.103 | zone3 | OBS/OBP/KeepAlive | 8C/64G/700G | | observer4 | obs-04 | 192.168.184.104 | zone1 | OBS/OBP/KeepAlive | 8C/64G/700G | | observer5 | obs-05 | 192.168.184.105 | zone2 | OBS/OBP/KeepAlive | 8C/64G/700G | | observer6 | obs-06 | 192.168.184.106 | zone3 | OBS/OBP/KeepAlive | 8C/64G/700G | OCP*这里暂时不部署 ![image-20220601111348128](OBD生产环境部署 OceanBase 数据库.assets/image-20220601111348128.png) ## 名词解释 - 中控机器 存储 OceanBase 数据库安装包和集群配置信息的机器。 - 目标机器 安装 OceanBase 数据库的机器。 - OBD OceanBase Deployer,OceanBase 开源软件的安装部署工具,简称为 OBD。 - ODP OceanBase Database Proxy,OceanBase 高性能反向代理服务器,简称为 ODP。 ## 一、前提条件 在连接 OceanBase 数据库之前,请您确认以下信息: - 您的机器满足软硬件要求。详细信息,参考 [资源准备](https://open.oceanbase.com/docs/observer-cn/4.installation-and-deployment/3.resource-preparation.md)。 - 您拥有 root 账户权限。如无特殊说明,均使用 root 操作。 - 生产环境下,确保您已完成以下操作: - 您已经查看资源。更多信息,参考 [查看资源](https://open.oceanbase.com/docs/observer-cn/4.installation-and-deployment/4.view-resources-optional.md)。 - 您已经设置无密码 SSH 登录。更多信息,参考 [设置无密码 SSH 登录](https://open.oceanbase.com/docs/observer-cn/4.installation-and-deployment/5.use-ssh-to-log-on-without-a-password-optional.md)。 - 您已经配置时钟源。更多信息,参考 [配置时钟源](https://open.oceanbase.com/docs/observer-cn/4.installation-and-deployment/6.configure-the-clock-source-optional.md)。 - 您已经规划磁盘。更多信息,参考 [规划磁盘](https://open.oceanbase.com/docs/observer-cn/4.installation-and-deployment/7.plan-disks-optional.md)。 - 您已经配置 limits.conf。更多信息,参考 [配置 limits.conf](https://open.oceanbase.com/docs/observer-cn/4.installation-and-deployment/8.configure-limits-conf-optional.md)。 - 您已经配置 sysctl.conf。更多信息,参考 [配置 sysctl.conf](https://open.oceanbase.com/docs/observer-cn/4.installation-and-deployment/9.configure-sysctl-conf-optional.md)。 - 您已经关闭防火墙和 SELinux。更多信息,参考 [关闭防火墙和 SELinux](https://open.oceanbase.com/docs/observer-cn/4.installation-and-deployment/10.disable-the-firewall-and-selinux-optional.md)。 - 你已经创建用户。更多信息,参考 [创建用户](https://open.oceanbase.com/docs/observer-cn/4.installation-and-deployment/11.create-a-user-optional.md)。 ### 1. **设置hosts** 如果有内部DNS,可以使用DNS解析,可跳过相关操作 ~~~shell 192.168.184.100 ocs-srv01 192.168.184.101 obs-01 192.168.184.102 obs-02 192.168.184.103 obs-03 192.168.184.104 obs-04 192.168.184.105 obs-05 192.168.184.106 obs-06 ~~~ ### 2. **设置无密码 SSH 登录** 为root设置ssh免密登录, ~~~shell ssh-keygen for i in `seq -w 01 06` ; do ssh-copy-id obs-$i; done ~~~ ```shell #当出现-bash: ssh-copy-id: command not found #执行以下命令 curl -L https://raw.githubusercontent.com/beautifulcode/ssh-copy-id-for-OSX/master/install.sh | sh #输入本地安装软件的密码, 看到 Installed ssh-copy-id into /usr/local/bin. 的输出信息就表示安装成功了。 ``` ### 3. **复制hosts文件** ~~~shell for i in `seq -w 01 06` ; do scp /etc/hosts root@obs-$i:/etc ; done ~~~ ### 4. **设置时钟同步** ~~~shell yum install chrony -y systemctl enable chronyd systemctl start chronyd for i in `seq -w 01 06`; \ do \ ssh root@obs-$i "yum install chrony -y;systemctl enable chronyd;systemctl start chronyd"; \ done ~~~ ### 5. **配置 limits.conf** ~~~shell #修改中控机配置参数 cat >> /etc/security/limits.conf << EOF ######################################## 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 ######################################## EOF #其它节点参数与中控机相同,传给其它节点 for i in `seq -w 01 06`; \ do \ scp /etc/security/limits.conf root@obs-${i}:/etc/security/; \ done ~~~ ### 6. **配置sysctl.conf参数** ~~~shell #修改中控机配置参数 cat >> /etc/sysctl.conf << EOF ############################################### # for oceanbase ## 修改内核异步 I/O 限制 fs.aio-max-nr=3145728 ## 网络优化 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 # 此处为 OceanBase 数据库的 data 目录 kernel.core_pattern = /data/core-%e-%p-%t ############################################### EOF sysctl -p ~~~ 其中,`kernel.core_pattern` 中的 `/data` 为 OceanBase 数据库的 `data` 目录 ~~~shell #传给其它节点 for i in `seq -w 01 06`; \ do \ scp /etc/sysctl.conf root@obs-${i}:/etc/; \ done for i in `seq -w 01 06`; \ do \ ssh root@obs-${i} "sysctl -p "; \ done ~~~ 关于数据库参数优化,其中还有一个numa的,这个对数据库的性能影响也比较大,这里暂时先不管它。 ### 7. **关闭防火墙和 SELinux** ~~~shell #防火墙修改 systemctl disable firewalld systemctl stop firewalld systemctl status firewalld for i in `seq -w 01 06`; \ do \ ssh root@obs-${i} "systemctl disable firewalld ;systemctl stop firewalld "; \ done ## SELinux修改 setenforce 0 sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config for i in `seq -w 01 06`; \ do \ ssh root@obs-${i} "sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config"; \ done for i in `seq -w 01 06`; \ do \ ssh root@obs-${i} "setenforce 0"; \ done ~~~ ### 8. **创建普通用户帐号** ~~~shell #如系统无admin用户,请先创建 useradd -U admin -d /home/admin -s /bin/bash groupadd admin usermod -G admin admin for i in `seq -w 01 06`; \ do \ ssh root@obs-${i} "useradd -U admin -d /home/admin -s /bin/bash ;groupadd admin ;usermod -G admin admin; echo "*****" | passwd --stdin admin ;" done #允放admin可以无密码sudo cat > /etc/sudoers.d/admin << EOF admin ALL=(ALL) NOPASSWD: ALL EOF for i in `seq -w 01 06`; \ do \ scp /etc/sudoers.d/admin root@obs-${i}:/etc/sudoers.d ; \ done ~~~ ### 9.为普通用户设置ssh免密登录 如果要以普通用户身份进行数据库系统的部署,需要为这个普通用户也配置ssh免密登录 ~~~shell su - admin ssh-keygen for i in `seq -w 01 06`; \ do \ ssh-copy-id obs-$i; \ done ~~~ ### 10.创建数据目录 生产环境建议数据不同功能目录挂载独立分区(建议oceanbase和redo为挂载不同分区),这里条件限制,直接使用/data目录。 ~~~shell sudo mkdir -p /data/oceanbase sudo mkdir -p /data/redo sudo chown admin:admin /data/oceanbase -R sudo chown admin:admin /data/redo -R sudo chown admin:admin /home/admin -R for i in `seq -w 01 06`; \ do \ sudo ssh obs-$i "mkdir -p /data" sudo scp -r /data/oceanbase obs-$i:/data sudo scp -r /data/redo obs-$i:/data sudo ssh obs-$i "chown admin:admin /data/oceanbase -R" sudo ssh obs-$i "chown admin:admin /data/redo -R" sudo ssh obs-$i "chown admin:admin /home/admin -R" done ~~~ ## 二、部署模式 这里采用三副本部署模式,共使用7台机器。其中: - 使用一台作为中控机,部署 ODP。 - 使用6台机器部署 OceanBase 集群,分为3个zone,每个zone 2台机器,即2-2-2 部署模式。 **说明** - 在生产环境下,推荐将 ODP 和应用部署在一台机器上,以节省应用访问 ODP 的时间。 在本例中,为了更方便使用,将 ODP 单独部署。 - 部署 ODP 的机器使用的配置可以和部署 OceanBase 数据库的机器配置不一致。部署 ODP 需要 4C/16G ~ 8C/64G 。 ### 1. 配置oceanbase仓库源 如您的机器可以访问公网,并能够添加三方 YUM 软件源,您可以执行以下命令,使用 OceanBase 的官方软件源安装 OBD: ```shell yum install -y yum-utils yum-config-manager --add-repo https://mirrors.aliyun.com/oceanbase/OceanBase.repo #批量配置各个节点 for i in `seq -w 01 06`; \ do \ ssh root@obs-${i} "yum install -y yum-utils ; yum-config-manager --add-repo https://mirrors.aliyun.com/oceanbase/OceanBase.repo" ; \ done ``` **注意** 只有 Anolis、CentOS 和 RedHat 操作系统支持此操作。 在您执行了 `obd cluster deploy` 命令之后,OBD 将检查您的目标机器是否有 OceanBase 数据库安装包。如果没有安装包,OBD 将自动从 yum 源获取。 如果您的机器不能访问公网,您可以从 OceanBase 官网下载安装包。详细信息,参考 [安装包下载说明](https://open.oceanbase.com/docs/observer-cn/4.installation-and-deployment/2.download-installation-packages.md)。 ### 2.安装OBD软件 ~~~shell yum install -y ob-deploy ~~~ **说明:** 您只需要在中控机器上安装 OBD。 ### 3. 安装 OBLibs **说明** 您需要在每台目标机器上安装 OBLibs。 执行以下命令,在线安装 OBLibs: ```shell yum install -y oceanbase-ce-libs #批量安装各个节点 for i in `seq -w 01 06`; \ do \ ssh root@obs-${i} "yum install -y oceanbase-ce-libs" ; \ done ``` ### 4. 安装 OBClient同mysql client **注意**:只需要在中控机器上安装 OBClient。 您必须首先下载 OBClient 的依赖包 LibOBClient。详细信息,参考 [安装包下载说明](https://open.oceanbase.com/docs/observer-cn/4.installation-and-deployment/2.download-installation-packages.md)。 执行以下命令,在线安装 OBLibs: ```shell yum install -y libobclient yum install -y obclient yum install -y mariadb ``` ### 5. 安装 OceanBase 数据库和 ODP 安装 OceanBase 数据库和 ODP之前,为了数据安全,建议您切换到非 root 用户。如果离线安装 OceanBase 数据库和 ODP,从 OceanBase 官网下载 OceanBase 数据库、OBLibs 和 ODP。详细信息,参考 [安装包下载说明](https://open.oceanbase.com/docs/observer-cn/4.installation-and-deployment/2.download-installation-packages.md)。下载完成后,将 OceanBase 数据库和 ODP 复制到您的中控机器上。如果在线安装,跳过步骤 1~3。本次配置为在线安装,不需要执行1-3的操作。 跳转至上述安装包的下载目录,按照以下步骤安装 OceanBase 数据库和 ODP: #### 5.1 删除远程仓库 ```shell rm -fr ~/.obd/mirror/remote/*.repo ``` 离线安装时,您需要删除远程仓库。 **注意** 如果您是在线安装,并且您的操作系统是 Anolis、CentOS 或 RedHat,跳过此步骤。 #### 5.2 将安装包添加至本地镜像 ```shell obd mirror clone *.rpm ``` #### 5.3 查看镜像列表 ```shell obd mirror list local ``` #### 5.4 下载配置文件 从 GitHub 上下载对应的配置文件。根据您的实际情况选择相应的配置文件: * 如果您采用单机安装,即中控机器和目标机器不是同一台机器,且目标机器只有一台,请下载 [单机安装配置文件](https://github.com/oceanbase/obdeploy/blob/master/example/autodeploy/single-example.yaml)。 如果您采用分布式安装,即中控机器和目标机器不是同一台机器,且目标机器有多台,请下载 [分布式安装配置文件](https://github.com/oceanbase/obdeploy/blob/master/example/autodeploy/distributed-with-obproxy-example.yaml)。 示例采用自动部署配置文件。自动部署将根据简易配置和目标机器资源生成最大规格配置并启动 OceanBase 数据库。非自动部署 OceanBase 数据库,参考 [OBD 文档](https://github.com/oceanbase/obdeploy/blob/master/README-CN.md#使用-obd-启动-oceanbase-数据库集群)。OceanBase 数据库详细参数介绍,参考 [OceanBase 数据库参数](https://github.com/oceanbase/obdeploy/blob/master/plugins/oceanbase/3.1.0/parameter.yaml)。 根据场景,下载分布式安装配置文件并进行修改 **以admin 用户操作** ~~~shell su - admin #网络不好的情况,请根据(https://github.com/oceanbase/obdeploy/blob/master/example/autodeploy/distributed-with-obproxy-example.yaml手动下载 wget https://raw.githubusercontent.com/oceanbase/obdeploy/master/example/distributed-example.yaml -O ob-hwadee.yaml #或者 curl -O https://raw.githubusercontent.com/oceanbase/obdeploy/master/example/distributed-example.yaml mv distributed-with-obproxy-example.yaml ob-hwadee.yaml ~~~ #### 5.5 修改配置文件 **用户修改** 以部署分布式 OceanBase 数据库和 ODP 为例,按照以下步骤修改配置文件: * 修改用户名和密码 ```yaml ## Only need to configure when remote login is required user: username: admin #password: #key_file: your ssh-key file path if need #port: your ssh port, default 22 #timeout: ssh connection timeout (second), default 30 ``` **ocenabase-ce相关参数修改** 修改每台机器的 IP、`home_path`、`data_dir` 和 `redo_dir` ```yaml oceanbase-ce: servers: - name: server-1 # Please don't use hostname, only IP can be supported ip: 192.168.184.101 - name: server-2 ip: 192.168.184.102 - name: server-3 ip: 192.168.184.103 - name: server-4 ip: 192.168.184.104 - name: server-5 ip: 192.168.184.105 - name: server-6 ip: 192.168.184.106 global: # OceanBase数据库默认工作路径,oceanbase-ce-libs包安装后,会在/home/admin/oceanbase/lib # 目录下放置一些库文件 home_path: /home/admin/oceanbase/observer # OceanBase数据存放目录,默认为$home_path/store data_dir: /data/oceanbase # OceanBase clog, ilog, and slog存放目录 redo_dir: /data/ocenabase/redo # 网卡 devname: ens192 # OceanBase External 端口,集群启动后不要修改它 mysql_port: 2881 # OceanBase Internal 端口,集群启动后不要修改它 rpc_port: 2882 # OceanBase 最大可用内存 memory_limit: 0 # OceanBase 最大可用内存--总内存的百分比,当memory_limit为0时才生效 memory_limit_percentage: 80 # 系统保留内存,部署时会自动根据服务器情况计算,默认值为30G system_memory: 4G # 数据文件的大小,不设置时,部署时会自动根据服务器资源情况计算 datafile_size: 0 # 数据文件点磁盘分区百分比,当datafile_size为0时有效 datafile_disk_percentage: 90 # 日志相关配置参数 syslog_level: INFO enable_syslog_wf: false enable_syslog_recycle: true max_syslog_file_count: 4 # 集群名称 appname: obcluster root_password: **** proxyro_password: **** server-1: zone: zone1 server-2: zone: zone2 server-3: zone: zone3 server-4: zone: zone1 server-5: zone: zone2 server-6: zone: zone3 ``` **说明** 您必须根据您的真实配置修改这些参数。 OBProxy 参数配置 ~~~yaml obproxy-ce: depends: - oceanbase-ce servers: - 192.168.184.101 - 192.168.184.102 - 192.168.184.103 - 192.168.184.104 - 192.168.184.105 - 192.168.184.106 # Set dependent components for the component. # When the associated configurations are not done, OBD will automatically get the these configurations from the dependent components. depends: - oceanbase-ce global: listen_port: 2883 # External port. The default value is 2883. prometheus_listen_port: 2884 # The Prometheus port. The default value is 2884. home_path: /home/admin/obproxy # oceanbase root server list # format: ip:mysql_port;ip:mysql_port rs_list: 192.168.184.101:2881;192.168.184.102:2881;192.168.184.103:2881;192.168.184.104:2881;192.168.184.105:2881;192.168.184.106:2881 enable_cluster_checkout: false # observer cluster name, consistent with oceanbase-ce's appname cluster_name: obcluster obproxy_sys_password: hwadee # obproxy sys user password, can be empty observer_sys_password: hwadee # proxyro user pasword, consistent with oceanbase-ce's proxyro_password, can be empty ~~~ [本地配置文件参考:](OBD生产环境部署 OceanBase 数据库.assets/ob-hwadee.yaml) ## 三、部署 OceanBase 集群 **以admin 用户操作** 按照以下步骤部署 OceanBase 集群: ### 1. 部署 OceanBae 集群 ```shell su - admin obd cluster autodeploy hwadee_cluster -c ob-hwadee.yaml ``` 在线安装,会自动从网络下载并安装oceanbase-ce,如果redo目录与数据目录在同一个分区上,会有警告,建议将其单独存放一个分区。 ### 2. 查看 OceanBae 集群 ```shell [admin@ocp-srv01 ~]$ obd cluster list +----------------------------------------------------------------------------+ | Cluster List | +----------------+-----------------------------------------+-----------------+ | Name | Configuration Path | Status (Cached) | +----------------+-----------------------------------------+-----------------+ | hwadee_cluster | /home/admin/.obd/cluster/hwadee_cluster | running | +----------------+-----------------------------------------+-----------------+ ``` ### 3.修改集群配置(可选) OceanBase 数据库有数百个配置项,有些配置是耦合的,在您熟悉 OceanBase 数据库之前,不建议您修改示例配件文件中的配置。此处示例用来说明如何修改配置,并使之生效。 ```shell # 使用 edit-config 命令进入编辑模式,修改集群配置 obd cluster edit-config obtest # 修改 sys_bkgd_migration_retry_num 为 5 # 注意 sys_bkgd_migration_retry_num 值最小为 3 # 保存并退出后,OBD 会告知您如何使得此次改动生效 # 此配置项仅需要 reload 即可生效 obd cluster reload obtest ``` **注意:** 有些参数要是不能随意修改的,修改后可能会要求重新部署,此时原来数据会丢换,请谨慎操作。 ### 4.安装 MySQL 开发包(可选) 如果需要运行 Sysbench 或者 TPCH 等程序, 您需要安装 MySQL 开发包。 在 CentOS、RedHat 或 Anolis 系统上,执行以下命令安装 MySQL 开发包: ```shell yum install mariadb -y #如果已安装,可跳过 yum install mariadb-libs -y yum install mariadb-devel -y ``` ### 5.连接 OceanBase 数据库 运行以下命令,使用 OBClient 客户端连接 OceanBase 数据库: ```shell obclient -h<observer_ip> -P<observer_port> -uroot@sys -p obclient -h<obproxy_ip> -P<obproxy_port> -uroot@sys -p ``` observer_port 默认为2881,obproxy默认为2883,用户以"用户名@租户"方式提供,如不写租户名称,一般默认为sys租户。 ~~~shell [admin@OCP-SRV01 ~]$ obclient -h 192.168.184.101 -P 2881 -uroot -p Welcome to the OceanBase. Commands end with ; or \g. Your MySQL connection id is 3221498069 Server version: 5.7.25 OceanBase 3.1.3 (r10100032022041510-a09d3134c10665f03fd56d7f8bdd413b2b771977) (Built Apr 15 2022 02:16:22) Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MySQL [(none)]> ~~~ 可以分别连接下obs-01到obs-06,看正是否都可以下正常访问。 因为oceanbase是一个分布式数据库,所以一般用客户端直接连接obproxy服务器,不用关心后端真实的oceanbase server。 (注意obproxy 使用的端口号为2883) ~~~shell [admin@OCP-SRV01 ~]$ obclient -h 192.168.184.101 -P 2883 -uroot Welcome to the OceanBase. Commands end with ; or \g. Your MySQL connection id is 6 Server version: 5.6.25 OceanBase 3.1.3 (r10100032022041510-a09d3134c10665f03fd56d7f8bdd413b2b771977) (Built Apr 15 2022 02:16:22) Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MySQL [(none)]> ~~~ 同样用mysql客户端也可以连接到数据库 ~~~shell [admin@OCP-SRV01 ~]$ mysql -h 192.168.184.101 -P 2883 -uroot Welcome to the MariaDB monitor. Commands end with ; or \g. Your MySQL connection id is 7 Server version: 5.6.25 OceanBase 3.1.3 (r10100032022041510-a09d3134c10665f03fd56d7f8bdd413b2b771977) (Built Apr 15 2022 02:16:22) Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MySQL [(none)]> ~~~ 一般使用mysql客户端连接数据库时,是使用数据库的租户进行连接。 ### 6.创建普通租户 要使用 OceanBase 数据库,您需要创建普通租户。您的业务数据必须在普通租户下运行。 您可以使用以下方法创建普通租户: **使用 OBD 创建普通租户** ```shell obd cluster tenant create ${cluster_name} -n ${tenant_name} ``` ~~~shell [admin@OCP-SRV01 ~]$ obd cluster tenant create hwadee_cluster -n hwadee Get local repositories and plugins ok Open ssh connection ok Connect to observer ok Create tenant hwadee ok ~~~ **查看租户信息** ~~~shell MySQL [(none)]> use oceanbase; MySQL [oceanbase]> select * from gv$tenant \G *************************** 1. row *************************** tenant_id: 1 tenant_name: sys zone_list: zone1 primary_zone: zone1 collation_type: 0 info: system tenant read_only: 0 locality: FULL{1}@zone1 *************************** 2. row *************************** tenant_id: 1001 tenant_name: hwadee zone_list: zone1 primary_zone: RANDOM collation_type: 0 info: read_only: 0 locality: FULL{1}@zone1 2 rows in set (0.002 sec) MySQL [oceanbase]> ~~~ **删除租户** ~~~shell [admin@OCP-SRV01 ~]$ obd cluster tenant drop hwadee_cluster -n hwadee Get local repositories and plugins ok Open ssh connection ok Connect to observer ok Drop tenant hwadee ok ~~~ ### 7.安装keepalived 实现obproxy高可用 有两种模型可参考,本例使用较为简单的第一种模型 ![image-20220527132212943](OBD生产环境部署 OceanBase 数据库.assets/image-20220527132212943.png) ![image-20220527132232206](OBD生产环境部署 OceanBase 数据库.assets/image-20220527132232206.png) obproxy是一个无状态的分布式反向代理程序,虽然 可以使用集群中任一个IP进行连接,如果某一个代理挂掉,则不能再使用此IP进行连接。整个过程用户连接的IP需要用户自己进行选择判断 。 一般情况可,可以使用一个负载均衡设备转发到obproxy代理集群IP,用户只需连接负载均衡设备的IP即可。 这里使用软件的keepalived实现主备高可用(暂时没有实现负载均衡功能)。 ~~~shell #批量安装各个节点 for i in `seq -w 01 06`; \ do \ ssh root@obs-${i} "yum install -y keepalived" ; \ done ~~~ /etc/keepalived.conf ~~~shell ! Configuration File for keepalived global_defs { script_user root enable_script_security notification_email { xufuqiang@hwadee.com } notification_email_from xufuqiang@hwadee.com smtp_server mail.hwadee.com smtp_connect_timeout 30 router_id oceanbase_obproxy } vrrp_script chk_obproxy_port { script "/etc/keepalived/check_obproxy.sh" interval 2 weight -10 } vrrp_instance obproxy { state Master interface ens192 virtual_router_id 8 !nopreempt preempt_delay 2 priority 100 advert_int 1 authentication { auth_type PASS auth_pass oceanbase } virtual_ipaddress { 192.168.184.110/24 dev ens192 } track_script { chk_obproxy_port } } ~~~ /etc/keepalived/check_obproxy.sh ~~~shell #!/bin/sh HOSTNAME=`hostname | awk -F "." '{ print $1}'` cnt1=`source ~/.bash_profile;netstat -na \ | grep 0.0.0.0:2883 |grep LISTEN \ | wc -l` cnt2=`echo $cnt1` if [ $cnt2 -gt 0 ]; then exit 0 else exit 1 fi ~~~ 在01--06主机中找一台设置为MASTER,优先级设置为109 ~~~shell systemctl restart keepalived ~~~ 测试 ~~~shell obclient -h 192.168.184.110 -P 2883 -uroot -p Enter password: Welcome to the OceanBase. Commands end with ; or \g. Your MySQL connection id is 5192 Server version: 5.6.25 OceanBase 3.1.3 (r10100032022041510-a09d3134c10665f03fd56d7f8bdd413b2b771977) (Built Apr 15 2022 02:16:22) Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MySQL [(none)]> ~~~ ## 四.集群常规管理操作 ### 1.查看集群 #### 1.1 集群清单查询 ~~~shell obd cluster list ~~~ #### 1.2 集群详细信息查询 ~~~shell [admin@OCP-SRV01 ~]$ obd cluster display hwadee_cluster Get local repositories and plugins ok Open ssh connection ok Cluster status check ok Connect to observer ok Wait for observer init ok +------------------------------------------------+ | observer | +--------------+---------+------+-------+--------+ | ip | version | port | zone | status | +--------------+---------+------+-------+--------+ | 192.168.4.81 | 3.1.3 | 2881 | zone1 | active | | 192.168.4.82 | 3.1.3 | 2881 | zone2 | active | | 192.168.4.83 | 3.1.3 | 2881 | zone3 | active | +--------------+---------+------+-------+--------+ Connect to obproxy ok +------------------------------------------------+ | obproxy | +--------------+------+-----------------+--------+ | ip | port | prometheus_port | status | +--------------+------+-----------------+--------+ | 192.168.4.80 | 2883 | 2884 | active | +--------------+------+-----------------+--------+ +--------------------------------------------------+ | obagent | +--------------+-------------+------------+--------+ | ip | server_port | pprof_port | status | +--------------+-------------+------------+--------+ | 192.168.4.81 | 8088 | 8089 | active | | 192.168.4.82 | 8088 | 8089 | active | | 192.168.4.83 | 8088 | 8089 | active | +--------------+-------------+------------+--------+ [admin@OCP-SRV01 ~]$ ~~~ ### 2.停止集群 `obd cluster stop hwadee_cluster` ~~~shell [admin@OCP-SRV01 ~]$ obd cluster stop hwadee_cluster Get local repositories and plugins ok Open ssh connection ok Stop observer ok Stop obproxy ok Stop obagent ok hwadee_cluster stopped [admin@OCP-SRV01 ~]$ ~~~ ### 3. 启动集群 `obd cluster start hwadee_cluster` ~~~shell [admin@OCP-SRV01 ~]$ obd cluster start hwadee_cluster Get local repositories and plugins ok Open ssh connection ok Load cluster param plugin ok Check before start observer ok Check before start obproxy ok Check before start obagent ok Start observer ok observer program health check ok Connect to observer ok Wait for observer init ok +------------------------------------------------+ | observer | +--------------+---------+------+-------+--------+ | ip | version | port | zone | status | +--------------+---------+------+-------+--------+ | 192.168.4.81 | 3.1.3 | 2881 | zone1 | active | | 192.168.4.82 | 3.1.3 | 2881 | zone2 | active | | 192.168.4.83 | 3.1.3 | 2881 | zone3 | active | +--------------+---------+------+-------+--------+ Start obproxy ok obproxy program health check ok Connect to obproxy ok Initialize cluster +------------------------------------------------+ | obproxy | +--------------+------+-----------------+--------+ | ip | port | prometheus_port | status | +--------------+------+-----------------+--------+ | 192.168.4.80 | 2883 | 2884 | active | +--------------+------+-----------------+--------+ Start obagent ok obagent program health check ok +--------------------------------------------------+ | obagent | +--------------+-------------+------------+--------+ | ip | server_port | pprof_port | status | +--------------+-------------+------------+--------+ | 192.168.4.81 | 8088 | 8089 | active | | 192.168.4.82 | 8088 | 8089 | active | | 192.168.4.83 | 8088 | 8089 | active | +--------------+-------------+------------+--------+ hwadee_cluster running [admin@OCP-SRV01 ~]$ ~~~
<h1>OBD生产环境部署 OceanBase 数据库</h1> ![image-20220601112908744](OBD生产环境部署 OceanBase 数据库.assets/image-20220601112908744.png) **文档内容根据官方文档进行补充修改面来。** ## 环境准备 **软件:** OceanBase Deploy: 1.3.3 OceanBase Server:3.1.3 OceanBase Proxy:3.2.3-2 **硬件环境:** | **主机** | **主机名** | **IP****地址** | Zone | 安装服务 | CPU/MEM/DISK | | --------- | ---------- | --------------- | ----- | ----------------- | ------------ | | OBD/OCP* | ocp-srv01 | 192.168.184.100 | -- | OBD/OCP* | 16C/64G/200G | | observer1 | obs-01 | 192.168.184.101 | zone1 | OBS/OBP/KeepAlive | 8C/64G/700G | | observer2 | obs-02 | 192.168.184.102 | zone2 | OBS/OBP/KeepAlive | 8C/64G/700G | | observer3 | obs-03 | 192.168.184.103 | zone3 | OBS/OBP/KeepAlive | 8C/64G/700G | | observer4 | obs-04 | 192.168.184.104 | zone1 | OBS/OBP/KeepAlive | 8C/64G/700G | | observer5 | obs-05 | 192.168.184.105 | zone2 | OBS/OBP/KeepAlive | 8C/64G/700G | | observer6 | obs-06 | 192.168.184.106 | zone3 | OBS/OBP/KeepAlive | 8C/64G/700G | OCP*这里暂时不部署 ![image-20220601111348128](OBD生产环境部署 OceanBase 数据库.assets/image-20220601111348128.png) ## 名词解释 - 中控机器 存储 OceanBase 数据库安装包和集群配置信息的机器。 - 目标机器 安装 OceanBase 数据库的机器。 - OBD OceanBase Deployer,OceanBase 开源软件的安装部署工具,简称为 OBD。 - ODP OceanBase Database Proxy,OceanBase 高性能反向代理服务器,简称为 ODP。 ## 一、前提条件 在连接 OceanBase 数据库之前,请您确认以下信息: - 您的机器满足软硬件要求。详细信息,参考 [资源准备](https://open.oceanbase.com/docs/observer-cn/4.installation-and-deployment/3.resource-preparation.md)。 - 您拥有 root 账户权限。如无特殊说明,均使用 root 操作。 - 生产环境下,确保您已完成以下操作: - 您已经查看资源。更多信息,参考 [查看资源](https://open.oceanbase.com/docs/observer-cn/4.installation-and-deployment/4.view-resources-optional.md)。 - 您已经设置无密码 SSH 登录。更多信息,参考 [设置无密码 SSH 登录](https://open.oceanbase.com/docs/observer-cn/4.installation-and-deployment/5.use-ssh-to-log-on-without-a-password-optional.md)。 - 您已经配置时钟源。更多信息,参考 [配置时钟源](https://open.oceanbase.com/docs/observer-cn/4.installation-and-deployment/6.configure-the-clock-source-optional.md)。 - 您已经规划磁盘。更多信息,参考 [规划磁盘](https://open.oceanbase.com/docs/observer-cn/4.installation-and-deployment/7.plan-disks-optional.md)。 - 您已经配置 limits.conf。更多信息,参考 [配置 limits.conf](https://open.oceanbase.com/docs/observer-cn/4.installation-and-deployment/8.configure-limits-conf-optional.md)。 - 您已经配置 sysctl.conf。更多信息,参考 [配置 sysctl.conf](https://open.oceanbase.com/docs/observer-cn/4.installation-and-deployment/9.configure-sysctl-conf-optional.md)。 - 您已经关闭防火墙和 SELinux。更多信息,参考 [关闭防火墙和 SELinux](https://open.oceanbase.com/docs/observer-cn/4.installation-and-deployment/10.disable-the-firewall-and-selinux-optional.md)。 - 你已经创建用户。更多信息,参考 [创建用户](https://open.oceanbase.com/docs/observer-cn/4.installation-and-deployment/11.create-a-user-optional.md)。 ### 1. **设置hosts** 如果有内部DNS,可以使用DNS解析,可跳过相关操作 ~~~shell 192.168.184.100 ocs-srv01 192.168.184.101 obs-01 192.168.184.102 obs-02 192.168.184.103 obs-03 192.168.184.104 obs-04 192.168.184.105 obs-05 192.168.184.106 obs-06 ~~~ ### 2. **设置无密码 SSH 登录** 为root设置ssh免密登录, ~~~shell ssh-keygen for i in `seq -w 01 06` ; do ssh-copy-id obs-$i; done ~~~ ```shell #当出现-bash: ssh-copy-id: command not found #执行以下命令 curl -L https://raw.githubusercontent.com/beautifulcode/ssh-copy-id-for-OSX/master/install.sh | sh #输入本地安装软件的密码, 看到 Installed ssh-copy-id into /usr/local/bin. 的输出信息就表示安装成功了。 ``` ### 3. **复制hosts文件** ~~~shell for i in `seq -w 01 06` ; do scp /etc/hosts root@obs-$i:/etc ; done ~~~ ### 4. **设置时钟同步** ~~~shell yum install chrony -y systemctl enable chronyd systemctl start chronyd for i in `seq -w 01 06`; \ do \ ssh root@obs-$i "yum install chrony -y;systemctl enable chronyd;systemctl start chronyd"; \ done ~~~ ### 5. **配置 limits.conf** ~~~shell #修改中控机配置参数 cat >> /etc/security/limits.conf << EOF ######################################## 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 ######################################## EOF #其它节点参数与中控机相同,传给其它节点 for i in `seq -w 01 06`; \ do \ scp /etc/security/limits.conf root@obs-${i}:/etc/security/; \ done ~~~ ### 6. **配置sysctl.conf参数** ~~~shell #修改中控机配置参数 cat >> /etc/sysctl.conf << EOF ############################################### # for oceanbase ## 修改内核异步 I/O 限制 fs.aio-max-nr=3145728 ## 网络优化 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 # 此处为 OceanBase 数据库的 data 目录 kernel.core_pattern = /data/core-%e-%p-%t ############################################### EOF sysctl -p ~~~ 其中,`kernel.core_pattern` 中的 `/data` 为 OceanBase 数据库的 `data` 目录 ~~~shell #传给其它节点 for i in `seq -w 01 06`; \ do \ scp /etc/sysctl.conf root@obs-${i}:/etc/; \ done for i in `seq -w 01 06`; \ do \ ssh root@obs-${i} "sysctl -p "; \ done ~~~ 关于数据库参数优化,其中还有一个numa的,这个对数据库的性能影响也比较大,这里暂时先不管它。 ### 7. **关闭防火墙和 SELinux** ~~~shell #防火墙修改 systemctl disable firewalld systemctl stop firewalld systemctl status firewalld for i in `seq -w 01 06`; \ do \ ssh root@obs-${i} "systemctl disable firewalld ;systemctl stop firewalld "; \ done ## SELinux修改 setenforce 0 sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config for i in `seq -w 01 06`; \ do \ ssh root@obs-${i} "sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config"; \ done for i in `seq -w 01 06`; \ do \ ssh root@obs-${i} "setenforce 0"; \ done ~~~ ### 8. **创建普通用户帐号** ~~~shell #如系统无admin用户,请先创建 useradd -U admin -d /home/admin -s /bin/bash groupadd admin usermod -G admin admin for i in `seq -w 01 06`; \ do \ ssh root@obs-${i} "useradd -U admin -d /home/admin -s /bin/bash ;groupadd admin ;usermod -G admin admin; echo "*****" | passwd --stdin admin ;" done #允放admin可以无密码sudo cat > /etc/sudoers.d/admin << EOF admin ALL=(ALL) NOPASSWD: ALL EOF for i in `seq -w 01 06`; \ do \ scp /etc/sudoers.d/admin root@obs-${i}:/etc/sudoers.d ; \ done ~~~ ### 9.为普通用户设置ssh免密登录 如果要以普通用户身份进行数据库系统的部署,需要为这个普通用户也配置ssh免密登录 ~~~shell su - admin ssh-keygen for i in `seq -w 01 06`; \ do \ ssh-copy-id obs-$i; \ done ~~~ ### 10.创建数据目录 生产环境建议数据不同功能目录挂载独立分区(建议oceanbase和redo为挂载不同分区),这里条件限制,直接使用/data目录。 ~~~shell sudo mkdir -p /data/oceanbase sudo mkdir -p /data/redo sudo chown admin:admin /data/oceanbase -R sudo chown admin:admin /data/redo -R sudo chown admin:admin /home/admin -R for i in `seq -w 01 06`; \ do \ sudo ssh obs-$i "mkdir -p /data" sudo scp -r /data/oceanbase obs-$i:/data sudo scp -r /data/redo obs-$i:/data sudo ssh obs-$i "chown admin:admin /data/oceanbase -R" sudo ssh obs-$i "chown admin:admin /data/redo -R" sudo ssh obs-$i "chown admin:admin /home/admin -R" done ~~~ ## 二、部署模式 这里采用三副本部署模式,共使用7台机器。其中: - 使用一台作为中控机,部署 ODP。 - 使用6台机器部署 OceanBase 集群,分为3个zone,每个zone 2台机器,即2-2-2 部署模式。 **说明** - 在生产环境下,推荐将 ODP 和应用部署在一台机器上,以节省应用访问 ODP 的时间。 在本例中,为了更方便使用,将 ODP 单独部署。 - 部署 ODP 的机器使用的配置可以和部署 OceanBase 数据库的机器配置不一致。部署 ODP 需要 4C/16G ~ 8C/64G 。 ### 1. 配置oceanbase仓库源 如您的机器可以访问公网,并能够添加三方 YUM 软件源,您可以执行以下命令,使用 OceanBase 的官方软件源安装 OBD: ```shell yum install -y yum-utils yum-config-manager --add-repo https://mirrors.aliyun.com/oceanbase/OceanBase.repo #批量配置各个节点 for i in `seq -w 01 06`; \ do \ ssh root@obs-${i} "yum install -y yum-utils ; yum-config-manager --add-repo https://mirrors.aliyun.com/oceanbase/OceanBase.repo" ; \ done ``` **注意** 只有 Anolis、CentOS 和 RedHat 操作系统支持此操作。 在您执行了 `obd cluster deploy` 命令之后,OBD 将检查您的目标机器是否有 OceanBase 数据库安装包。如果没有安装包,OBD 将自动从 yum 源获取。 如果您的机器不能访问公网,您可以从 OceanBase 官网下载安装包。详细信息,参考 [安装包下载说明](https://open.oceanbase.com/docs/observer-cn/4.installation-and-deployment/2.download-installation-packages.md)。 ### 2.安装OBD软件 ~~~shell yum install -y ob-deploy ~~~ **说明:** 您只需要在中控机器上安装 OBD。 ### 3. 安装 OBLibs **说明** 您需要在每台目标机器上安装 OBLibs。 执行以下命令,在线安装 OBLibs: ```shell yum install -y oceanbase-ce-libs #批量安装各个节点 for i in `seq -w 01 06`; \ do \ ssh root@obs-${i} "yum install -y oceanbase-ce-libs" ; \ done ``` ### 4. 安装 OBClient同mysql client **注意**:只需要在中控机器上安装 OBClient。 您必须首先下载 OBClient 的依赖包 LibOBClient。详细信息,参考 [安装包下载说明](https://open.oceanbase.com/docs/observer-cn/4.installation-and-deployment/2.download-installation-packages.md)。 执行以下命令,在线安装 OBLibs: ```shell yum install -y libobclient yum install -y obclient yum install -y mariadb ``` ### 5. 安装 OceanBase 数据库和 ODP 安装 OceanBase 数据库和 ODP之前,为了数据安全,建议您切换到非 root 用户。如果离线安装 OceanBase 数据库和 ODP,从 OceanBase 官网下载 OceanBase 数据库、OBLibs 和 ODP。详细信息,参考 [安装包下载说明](https://open.oceanbase.com/docs/observer-cn/4.installation-and-deployment/2.download-installation-packages.md)。下载完成后,将 OceanBase 数据库和 ODP 复制到您的中控机器上。如果在线安装,跳过步骤 1~3。本次配置为在线安装,不需要执行1-3的操作。 跳转至上述安装包的下载目录,按照以下步骤安装 OceanBase 数据库和 ODP: #### 5.1 删除远程仓库 ```shell rm -fr ~/.obd/mirror/remote/*.repo ``` 离线安装时,您需要删除远程仓库。 **注意** 如果您是在线安装,并且您的操作系统是 Anolis、CentOS 或 RedHat,跳过此步骤。 #### 5.2 将安装包添加至本地镜像 ```shell obd mirror clone *.rpm ``` #### 5.3 查看镜像列表 ```shell obd mirror list local ``` #### 5.4 下载配置文件 从 GitHub 上下载对应的配置文件。根据您的实际情况选择相应的配置文件: * 如果您采用单机安装,即中控机器和目标机器不是同一台机器,且目标机器只有一台,请下载 [单机安装配置文件](https://github.com/oceanbase/obdeploy/blob/master/example/autodeploy/single-example.yaml)。 如果您采用分布式安装,即中控机器和目标机器不是同一台机器,且目标机器有多台,请下载 [分布式安装配置文件](https://github.com/oceanbase/obdeploy/blob/master/example/autodeploy/distributed-with-obproxy-example.yaml)。 示例采用自动部署配置文件。自动部署将根据简易配置和目标机器资源生成最大规格配置并启动 OceanBase 数据库。非自动部署 OceanBase 数据库,参考 [OBD 文档](https://github.com/oceanbase/obdeploy/blob/master/README-CN.md#使用-obd-启动-oceanbase-数据库集群)。OceanBase 数据库详细参数介绍,参考 [OceanBase 数据库参数](https://github.com/oceanbase/obdeploy/blob/master/plugins/oceanbase/3.1.0/parameter.yaml)。 根据场景,下载分布式安装配置文件并进行修改 **以admin 用户操作** ~~~shell su - admin #网络不好的情况,请根据(https://github.com/oceanbase/obdeploy/blob/master/example/autodeploy/distributed-with-obproxy-example.yaml手动下载 wget https://raw.githubusercontent.com/oceanbase/obdeploy/master/example/distributed-example.yaml -O ob-hwadee.yaml #或者 curl -O https://raw.githubusercontent.com/oceanbase/obdeploy/master/example/distributed-example.yaml mv distributed-with-obproxy-example.yaml ob-hwadee.yaml ~~~ #### 5.5 修改配置文件 **用户修改** 以部署分布式 OceanBase 数据库和 ODP 为例,按照以下步骤修改配置文件: * 修改用户名和密码 ```yaml ## Only need to configure when remote login is required user: username: admin #password: #key_file: your ssh-key file path if need #port: your ssh port, default 22 #timeout: ssh connection timeout (second), default 30 ``` **ocenabase-ce相关参数修改** 修改每台机器的 IP、`home_path`、`data_dir` 和 `redo_dir` ```yaml oceanbase-ce: servers: - name: server-1 # Please don't use hostname, only IP can be supported ip: 192.168.184.101 - name: server-2 ip: 192.168.184.102 - name: server-3 ip: 192.168.184.103 - name: server-4 ip: 192.168.184.104 - name: server-5 ip: 192.168.184.105 - name: server-6 ip: 192.168.184.106 global: # OceanBase数据库默认工作路径,oceanbase-ce-libs包安装后,会在/home/admin/oceanbase/lib # 目录下放置一些库文件 home_path: /home/admin/oceanbase/observer # OceanBase数据存放目录,默认为$home_path/store data_dir: /data/oceanbase # OceanBase clog, ilog, and slog存放目录 redo_dir: /data/ocenabase/redo # 网卡 devname: ens192 # OceanBase External 端口,集群启动后不要修改它 mysql_port: 2881 # OceanBase Internal 端口,集群启动后不要修改它 rpc_port: 2882 # OceanBase 最大可用内存 memory_limit: 0 # OceanBase 最大可用内存--总内存的百分比,当memory_limit为0时才生效 memory_limit_percentage: 80 # 系统保留内存,部署时会自动根据服务器情况计算,默认值为30G system_memory: 4G # 数据文件的大小,不设置时,部署时会自动根据服务器资源情况计算 datafile_size: 0 # 数据文件点磁盘分区百分比,当datafile_size为0时有效 datafile_disk_percentage: 90 # 日志相关配置参数 syslog_level: INFO enable_syslog_wf: false enable_syslog_recycle: true max_syslog_file_count: 4 # 集群名称 appname: obcluster root_password: **** proxyro_password: **** server-1: zone: zone1 server-2: zone: zone2 server-3: zone: zone3 server-4: zone: zone1 server-5: zone: zone2 server-6: zone: zone3 ``` **说明** 您必须根据您的真实配置修改这些参数。 OBProxy 参数配置 ~~~yaml obproxy-ce: depends: - oceanbase-ce servers: - 192.168.184.101 - 192.168.184.102 - 192.168.184.103 - 192.168.184.104 - 192.168.184.105 - 192.168.184.106 # Set dependent components for the component. # When the associated configurations are not done, OBD will automatically get the these configurations from the dependent components. depends: - oceanbase-ce global: listen_port: 2883 # External port. The default value is 2883. prometheus_listen_port: 2884 # The Prometheus port. The default value is 2884. home_path: /home/admin/obproxy # oceanbase root server list # format: ip:mysql_port;ip:mysql_port rs_list: 192.168.184.101:2881;192.168.184.102:2881;192.168.184.103:2881;192.168.184.104:2881;192.168.184.105:2881;192.168.184.106:2881 enable_cluster_checkout: false # observer cluster name, consistent with oceanbase-ce's appname cluster_name: obcluster obproxy_sys_password: hwadee # obproxy sys user password, can be empty observer_sys_password: hwadee # proxyro user pasword, consistent with oceanbase-ce's proxyro_password, can be empty ~~~ [本地配置文件参考:](OBD生产环境部署 OceanBase 数据库.assets/ob-hwadee.yaml) ## 三、部署 OceanBase 集群 **以admin 用户操作** 按照以下步骤部署 OceanBase 集群: ### 1. 部署 OceanBae 集群 ```shell su - admin obd cluster autodeploy hwadee_cluster -c ob-hwadee.yaml ``` 在线安装,会自动从网络下载并安装oceanbase-ce,如果redo目录与数据目录在同一个分区上,会有警告,建议将其单独存放一个分区。 ### 2. 查看 OceanBae 集群 ```shell [admin@ocp-srv01 ~]$ obd cluster list +----------------------------------------------------------------------------+ | Cluster List | +----------------+-----------------------------------------+-----------------+ | Name | Configuration Path | Status (Cached) | +----------------+-----------------------------------------+-----------------+ | hwadee_cluster | /home/admin/.obd/cluster/hwadee_cluster | running | +----------------+-----------------------------------------+-----------------+ ``` ### 3.修改集群配置(可选) OceanBase 数据库有数百个配置项,有些配置是耦合的,在您熟悉 OceanBase 数据库之前,不建议您修改示例配件文件中的配置。此处示例用来说明如何修改配置,并使之生效。 ```shell # 使用 edit-config 命令进入编辑模式,修改集群配置 obd cluster edit-config obtest # 修改 sys_bkgd_migration_retry_num 为 5 # 注意 sys_bkgd_migration_retry_num 值最小为 3 # 保存并退出后,OBD 会告知您如何使得此次改动生效 # 此配置项仅需要 reload 即可生效 obd cluster reload obtest ``` **注意:** 有些参数要是不能随意修改的,修改后可能会要求重新部署,此时原来数据会丢换,请谨慎操作。 ### 4.安装 MySQL 开发包(可选) 如果需要运行 Sysbench 或者 TPCH 等程序, 您需要安装 MySQL 开发包。 在 CentOS、RedHat 或 Anolis 系统上,执行以下命令安装 MySQL 开发包: ```shell yum install mariadb -y #如果已安装,可跳过 yum install mariadb-libs -y yum install mariadb-devel -y ``` ### 5.连接 OceanBase 数据库 运行以下命令,使用 OBClient 客户端连接 OceanBase 数据库: ```shell obclient -h<observer_ip> -P<observer_port> -uroot@sys -p obclient -h<obproxy_ip> -P<obproxy_port> -uroot@sys -p ``` observer_port 默认为2881,obproxy默认为2883,用户以"用户名@租户"方式提供,如不写租户名称,一般默认为sys租户。 ~~~shell [admin@OCP-SRV01 ~]$ obclient -h 192.168.184.101 -P 2881 -uroot -p Welcome to the OceanBase. Commands end with ; or \g. Your MySQL connection id is 3221498069 Server version: 5.7.25 OceanBase 3.1.3 (r10100032022041510-a09d3134c10665f03fd56d7f8bdd413b2b771977) (Built Apr 15 2022 02:16:22) Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MySQL [(none)]> ~~~ 可以分别连接下obs-01到obs-06,看正是否都可以下正常访问。 因为oceanbase是一个分布式数据库,所以一般用客户端直接连接obproxy服务器,不用关心后端真实的oceanbase server。 (注意obproxy 使用的端口号为2883) ~~~shell [admin@OCP-SRV01 ~]$ obclient -h 192.168.184.101 -P 2883 -uroot Welcome to the OceanBase. Commands end with ; or \g. Your MySQL connection id is 6 Server version: 5.6.25 OceanBase 3.1.3 (r10100032022041510-a09d3134c10665f03fd56d7f8bdd413b2b771977) (Built Apr 15 2022 02:16:22) Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MySQL [(none)]> ~~~ 同样用mysql客户端也可以连接到数据库 ~~~shell [admin@OCP-SRV01 ~]$ mysql -h 192.168.184.101 -P 2883 -uroot Welcome to the MariaDB monitor. Commands end with ; or \g. Your MySQL connection id is 7 Server version: 5.6.25 OceanBase 3.1.3 (r10100032022041510-a09d3134c10665f03fd56d7f8bdd413b2b771977) (Built Apr 15 2022 02:16:22) Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MySQL [(none)]> ~~~ 一般使用mysql客户端连接数据库时,是使用数据库的租户进行连接。 ### 6.创建普通租户 要使用 OceanBase 数据库,您需要创建普通租户。您的业务数据必须在普通租户下运行。 您可以使用以下方法创建普通租户: **使用 OBD 创建普通租户** ```shell obd cluster tenant create ${cluster_name} -n ${tenant_name} ``` ~~~shell [admin@OCP-SRV01 ~]$ obd cluster tenant create hwadee_cluster -n hwadee Get local repositories and plugins ok Open ssh connection ok Connect to observer ok Create tenant hwadee ok ~~~ **查看租户信息** ~~~shell MySQL [(none)]> use oceanbase; MySQL [oceanbase]> select * from gv$tenant \G *************************** 1. row *************************** tenant_id: 1 tenant_name: sys zone_list: zone1 primary_zone: zone1 collation_type: 0 info: system tenant read_only: 0 locality: FULL{1}@zone1 *************************** 2. row *************************** tenant_id: 1001 tenant_name: hwadee zone_list: zone1 primary_zone: RANDOM collation_type: 0 info: read_only: 0 locality: FULL{1}@zone1 2 rows in set (0.002 sec) MySQL [oceanbase]> ~~~ **删除租户** ~~~shell [admin@OCP-SRV01 ~]$ obd cluster tenant drop hwadee_cluster -n hwadee Get local repositories and plugins ok Open ssh connection ok Connect to observer ok Drop tenant hwadee ok ~~~ ### 7.安装keepalived 实现obproxy高可用 有两种模型可参考,本例使用较为简单的第一种模型 ![image-20220527132212943](OBD生产环境部署 OceanBase 数据库.assets/image-20220527132212943.png) ![image-20220527132232206](OBD生产环境部署 OceanBase 数据库.assets/image-20220527132232206.png) obproxy是一个无状态的分布式反向代理程序,虽然 可以使用集群中任一个IP进行连接,如果某一个代理挂掉,则不能再使用此IP进行连接。整个过程用户连接的IP需要用户自己进行选择判断 。 一般情况可,可以使用一个负载均衡设备转发到obproxy代理集群IP,用户只需连接负载均衡设备的IP即可。 这里使用软件的keepalived实现主备高可用(暂时没有实现负载均衡功能)。 ~~~shell #批量安装各个节点 for i in `seq -w 01 06`; \ do \ ssh root@obs-${i} "yum install -y keepalived" ; \ done ~~~ /etc/keepalived.conf ~~~shell ! Configuration File for keepalived global_defs { script_user root enable_script_security notification_email { xufuqiang@hwadee.com } notification_email_from xufuqiang@hwadee.com smtp_server mail.hwadee.com smtp_connect_timeout 30 router_id oceanbase_obproxy } vrrp_script chk_obproxy_port { script "/etc/keepalived/check_obproxy.sh" interval 2 weight -10 } vrrp_instance obproxy { state Master interface ens192 virtual_router_id 8 !nopreempt preempt_delay 2 priority 100 advert_int 1 authentication { auth_type PASS auth_pass oceanbase } virtual_ipaddress { 192.168.184.110/24 dev ens192 } track_script { chk_obproxy_port } } ~~~ /etc/keepalived/check_obproxy.sh ~~~shell #!/bin/sh HOSTNAME=`hostname | awk -F "." '{ print $1}'` cnt1=`source ~/.bash_profile;netstat -na \ | grep 0.0.0.0:2883 |grep LISTEN \ | wc -l` cnt2=`echo $cnt1` if [ $cnt2 -gt 0 ]; then exit 0 else exit 1 fi ~~~ 在01--06主机中找一台设置为MASTER,优先级设置为109 ~~~shell systemctl restart keepalived ~~~ 测试 ~~~shell obclient -h 192.168.184.110 -P 2883 -uroot -p Enter password: Welcome to the OceanBase. Commands end with ; or \g. Your MySQL connection id is 5192 Server version: 5.6.25 OceanBase 3.1.3 (r10100032022041510-a09d3134c10665f03fd56d7f8bdd413b2b771977) (Built Apr 15 2022 02:16:22) Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MySQL [(none)]> ~~~ ## 四.集群常规管理操作 ### 1.查看集群 #### 1.1 集群清单查询 ~~~shell obd cluster list ~~~ #### 1.2 集群详细信息查询 ~~~shell [admin@OCP-SRV01 ~]$ obd cluster display hwadee_cluster Get local repositories and plugins ok Open ssh connection ok Cluster status check ok Connect to observer ok Wait for observer init ok +------------------------------------------------+ | observer | +--------------+---------+------+-------+--------+ | ip | version | port | zone | status | +--------------+---------+------+-------+--------+ | 192.168.4.81 | 3.1.3 | 2881 | zone1 | active | | 192.168.4.82 | 3.1.3 | 2881 | zone2 | active | | 192.168.4.83 | 3.1.3 | 2881 | zone3 | active | +--------------+---------+------+-------+--------+ Connect to obproxy ok +------------------------------------------------+ | obproxy | +--------------+------+-----------------+--------+ | ip | port | prometheus_port | status | +--------------+------+-----------------+--------+ | 192.168.4.80 | 2883 | 2884 | active | +--------------+------+-----------------+--------+ +--------------------------------------------------+ | obagent | +--------------+-------------+------------+--------+ | ip | server_port | pprof_port | status | +--------------+-------------+------------+--------+ | 192.168.4.81 | 8088 | 8089 | active | | 192.168.4.82 | 8088 | 8089 | active | | 192.168.4.83 | 8088 | 8089 | active | +--------------+-------------+------------+--------+ [admin@OCP-SRV01 ~]$ ~~~ ### 2.停止集群 `obd cluster stop hwadee_cluster` ~~~shell [admin@OCP-SRV01 ~]$ obd cluster stop hwadee_cluster Get local repositories and plugins ok Open ssh connection ok Stop observer ok Stop obproxy ok Stop obagent ok hwadee_cluster stopped [admin@OCP-SRV01 ~]$ ~~~ ### 3. 启动集群 `obd cluster start hwadee_cluster` ~~~shell [admin@OCP-SRV01 ~]$ obd cluster start hwadee_cluster Get local repositories and plugins ok Open ssh connection ok Load cluster param plugin ok Check before start observer ok Check before start obproxy ok Check before start obagent ok Start observer ok observer program health check ok Connect to observer ok Wait for observer init ok +------------------------------------------------+ | observer | +--------------+---------+------+-------+--------+ | ip | version | port | zone | status | +--------------+---------+------+-------+--------+ | 192.168.4.81 | 3.1.3 | 2881 | zone1 | active | | 192.168.4.82 | 3.1.3 | 2881 | zone2 | active | | 192.168.4.83 | 3.1.3 | 2881 | zone3 | active | +--------------+---------+------+-------+--------+ Start obproxy ok obproxy program health check ok Connect to obproxy ok Initialize cluster +------------------------------------------------+ | obproxy | +--------------+------+-----------------+--------+ | ip | port | prometheus_port | status | +--------------+------+-----------------+--------+ | 192.168.4.80 | 2883 | 2884 | active | +--------------+------+-----------------+--------+ Start obagent ok obagent program health check ok +--------------------------------------------------+ | obagent | +--------------+-------------+------------+--------+ | ip | server_port | pprof_port | status | +--------------+-------------+------------+--------+ | 192.168.4.81 | 8088 | 8089 | active | | 192.168.4.82 | 8088 | 8089 | active | | 192.168.4.83 | 8088 | 8089 | active | +--------------+-------------+------------+--------+ hwadee_cluster running [admin@OCP-SRV01 ~]$ ~~~
评论 (
0
)
黑岩
创建了
任务
登录
后才可以发表评论
状态
待办的
待办的
进行中
已完成
已关闭
负责人
未设置
标签
未设置
标签管理
里程碑
未关联里程碑
未关联里程碑
Pull Requests
未关联
未关联
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
未关联
未关联
master
开始日期   -   截止日期
-
置顶选项
不置顶
置顶等级:高
置顶等级:中
置顶等级:低
优先级
不指定
严重
主要
次要
不重要
参与者(1)
1
https://gitee.com/oceanbase/blog.git
[email protected]
:oceanbase/blog.git
oceanbase
blog
blog
点此查找更多帮助
搜索帮助
Git 命令在线学习
如何在 Gitee 导入 GitHub 仓库
Git 仓库基础操作
企业版和社区版功能对比
SSH 公钥设置
如何处理代码冲突
仓库体积过大,如何减小?
如何找回被删除的仓库数据
Gitee 产品配额说明
GitHub仓库快速导入Gitee及同步更新
什么是 Release(发行版)
将 PHP 项目自动发布到 packagist.org
评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册