首批通过分布式安全可靠测评,为关键业务系统打造
部署指南
更新时间:2024-12-27 18:01:25
本文档主要介绍 Binlog 服务社区版的部署方法,企业版 OceanBase 数据库的用户请参考 Binlog 服务介绍 中的 产品须知。
前提条件
部署 Binlog 服务前,您需确认如下信息:
MySQL 数据库或 MySQL 模式的 OceanBase 数据库作为元数据库,并且在该数据库中已经创建出用以存储 Binlog 集群元信息的 database。
需要生成 Binlog 日志的 OceanBase 集群已经包含 ODP(也称 OBProxy),并且 OceanBase 数据库和 ODP 的版本均在支持范围内,具体参见 版本发布记录 。
需要生成 Binlog 日志的 OceanBase 集群已配置
obconfig_url,可登录 OceanBase 集群后执行SHOW PARAMETERS LIKE 'obconfig_url';命令查看(value值)。若 OceanBase 集群是通过 OCP 进行安装,OCP 会自动配置
obconfig_url。若 OceanBase 集群通过其他方法安装,查看后未配置
obconfig_url,您需手动配置obconfig_url。如何安装 obconfigserver 并配置obconfig_url可参见官网文档《OceanBase 安装部署工具》中 使用指南/命令行/使用命令行部署 obconfigserver。
部署 Binlog Server 的机器与 ODP、 OceanBase 数据库之间网络互通:
ODP 将使用
binlog_service_ip作为 Binlog Server 的服务地址,请确保 ODP 所在机器能够访问该地址。ODP 需要访问业务租户对应的 Binlog 实例获取当前的 Binlog 信息,请确保 ODP 所在机器能够访问 Binlog 实例所在机器的对应端口。Binlog Server 会从 start_tcp_port 开始预先占用 reserved_ports_num 个端口用于分配给 Binlog 实例,默认值分别为 8100 和 256,可在本地配置文件
conf/conf.json中进行修改。Binlog Server 所在机器需要能够访问 OceanBase 数据库运行实例的 IP、 SQL 端口和 RPC 端口。
操作步骤
执行以下操作需确保当前用户拥有管理员权限。
步骤一:安装程序包
根据所用机器是否可以访问外部网络,分为在线安装和离线安装两种安装方法。
当机器可以访问外部网络时,您可在添加 OceanBase 软件源后直接执行 yum 命令安装 obbinlog,安装后 obbinlog 的安装目录为 /home/ds/oblogproxy。
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/oceanbase/OceanBase.repo
sudo yum install -y obbinlog-ce
说明
YUM 命令默认安装最新版本,您可通过声明版本号安装指定版本,如使用 yum install -y obbinlog-ce-4.0.1 命令安装 obbinlog V4.0.1,推荐安装最新版本。
当机器无法访问外部网络时,您可访问 官网下载中心,搜索 OceanBase Binlog 服务,或访问 阿里云 yum 源,根据实际需要下载系统对应的 obbinlog-ce 程序包,并将其上传到所用机器。该程序包的发版记录见 版本发布记录,建议选用最新版本。
wget https://mirrors.aliyun.com/oceanbase/community/stable/el/7/x86_64/obbinlog-ce-4.0.1-100000162024122511.el7.x86_64.rpm
下载 RPM 包后,您可在安装包所在目录下执行如下命令进行安装,完成后程序的目录为 /home/ds/oblogproxy。
sudo yum install ./obbinlog-ce-4.0.1-100000162024122511.el7.x86_64.rpm
您也可以使用如下命令将程序包安装到指定目录。
sudo rpm -ivh --prefix=/usr/local/oblogproxy ./obbinlog-ce-4.0.1-100000162024122511.el7.x86_64.rpm
步骤二:配置并启动 Binlog Server
我们提供快速部署和自定义配置两种方法配置并启动 Binlog Server,您可根据实际需要选择合适的方法部署 Binlog Server。
为了方便用户配置 Binlog Server,我们在安装目录下提供了部署脚本 env/deploy.sh,使用它可以在默认配置下快速启动 Binlog Server。
步骤一:修改 env/deploy.conf.json
进入程序工作目录,将准备的元数据库信息填入文件 env/deploy.conf.json。
{
"host": "",
"port": 0,
"user": "",
"password": "",
"database": "",
"sys_user": "",
"sys_password": "",
"supervise_start": "",
"init_schema": "",
"node_ip": ""
}
参数说明:
| 配置项 | 描述 |
|---|---|
| host | 元数据库的 IP 地址或域名。 |
| port | 元数据库的 SQL 端口。 |
| user | 元数据库的连接用户名。 |
| password | 元数据库的连接密码。 |
| database | 元数据库中使用的 database 名,需确保配置的 database 在元数据库中已存在,不填时默认为 binlog_cluster。 |
| sys_user | 需要生成 Binlog 文件的 OceanBase 数据库系统租户用户名。
注意该用户名应当是不包含租户名和集群名的 user 名,如 |
| sys_password | sys_user 对应用户的密码。 |
| supervise_start | 控制本节点是否使用 supervisord 启动,不填时默认为 false。
注意当 obbinlog 的安装目录为自定义值时, |
| init_schema | 控制是否初始化元数据库,不填时默认为 true。当启动集群首个节点时应当设置为 true,其他场景下应当设置为 false。 |
| node_ip | 当前节点的 IP,仅支持单个 IPv4 地址,不填时默认取 hostname -i 的返回值。
说明当所用机器存在多个网卡时, |
说明
env/deploy.conf.json 文件中,sys_user 和 sys_password 主要用于对待生成 Binlog 文件的数据库进行鉴权,为可选参数。若未在文件中配置,后续创建 Binlog 任务时需要在命令中指定。
步骤二:启动 Binlog Server 节点
在 obbinlog 安装目录下执行以下命令启动当前 Binlog Server 节点。
sudo sh env/deploy.sh -m deploy -f env/deploy.conf.json
注意
deploy.sh 脚本将会修改 conf/conf.json,该操作不可逆,且不可以重复执行。如果首次执行过后需要修改配置,请直接修改 conf/conf.json。
该 deploy.sh 脚本主要进行了以下操作:
安装依赖项:
jq、libstdc++.so.6、mysql、diff。读取
env/deploy.conf.json文件中的属性,未填写的项置为默认值。当
init_schema值为true时,创建元数据表。将元数据库连接信息写入
conf/conf.json文件,并设置binlog_mode为true。检查
supervise_start值:为
true时调用env/install.sh脚本,该脚本会安装 supervisord 并使用 supervisord 启动程序。不为
true时,根据情况不同有如下两种处理逻辑:若
sys_user和sys_password均不为空,将调用run.sh脚本的 config_sys 函数替换conf/conf.json文件中的ob_sys_username和ob_sys_password,并执行run.sh start启动程序。若
sys_user和sys_password中任一配置项为空,直接执行run.sh start启动程序。
启动完成后,可以通过 MySQL 客户端或 OBClient 进行连接,继续执行相关的命令。
mysql -h127.0.0.1 -P2983
步骤一:安装运行环境依赖
配置 gcc 环境
cd ${deploy_path} sudo cp ./deps/lib/libstdc++.so.6.0.28 /usr/lib64/ cd /usr/lib64 sudo ln -sf libstdc++.so.6.0.28 libstdc++.so.6安装其他依赖工具
sudo yum install -y jq mysql diffutils
步骤二:配置 conf.json
修改 conf/conf.json,配置项详情请参考 配置参数。其中以下配置项必须根据实际情况进行配置:
- binlog_mode:设置为
true。 - database_ip:填写元数据库 IP。
- database_port:填写元数据库端口。
- database_name:填写元数据库 database 名。
- user:连接元数据库所用的用户名。
- password:连接元数据库所用用户对应的密码。
- node_ip:当前节点的 IP。
如果您希望为后续创建 Binlog 任务时使用的账密配置一个默认值,可通过如下命令将系统租户的账密写入配置文件。
sudo ./run.sh config_sys <sys_user> <sys_password>
注意
sys_user 和 sys_password 需设置为待生成 Binlog 文件的 OceanBase 数据库系统租户下的用户名及其密码,并且用户名应当是不包含租户名和集群名的 user 名,如 root。
步骤三:初始化元数据库
在启动首个 Binlog Server 前,需要在元数据库中创建所需的表。请您连接到元数据库中对应的 database 后执行文件 conf/schema.sql 以完成初始化操作,命令如下。
SOURCE conf/schema.sql
关于元数据表的详情情参考 配置参数。
步骤四:启动 Binlog Server 节点
执行以下命令启动服务。
sudo ./run.sh start
启动完成后,可以通过 MySQL 客户端或 OBClient 进行连接,继续执行相关的命令。
mysql -h127.0.0.1 -P2983
(可选)步骤三:添加 Binlog Server 到已有 Binlog 集群
Binlog 服务会将使用同一个元数据库相同 database 的所有 Binlog Server 视为归属于同一个 Binlog 集群,因此,如果您想在一个 Binlog 服务中部署多个 Binlog Server,您只需要使用相同的元数据库配置在不同的物理机上重复上一步 步骤二:配置并启动 Binlog Server 操作即可。
注意
除首次启动 Binlog Server 节点外,部署启动其他 Binlog Server 时均不需要初始化元数据表。
部署完成后,可以通过元数据表 nodes 获取当前的 Binlog Server 节点信息。详情请参考 配置参数 中的 元数据库配置 小节。
步骤四:创建 Binlog 任务
首先,请确认需要创建 Binlog 任务的 OceanBase 租户的相关信息。您可以在连接到该 OceanBase 租户后,执行以下 SQL 获取相关信息。
集群名
SHOW PARAMETERS LIKE 'cluster';输出如下,
value列对应的值demo即为连接到的 OceanBase 服务的集群名:+-------+----------+------------+----------+---------+-----------+-------+---------------------+----------+---------+---------+-------------------+---------------+-----------+ | zone | svr_type | svr_ip | svr_port | name | data_type | value | info | section | scope | source | edit_level | default_value | isdefault | +-------+----------+------------+----------+---------+-----------+-------+---------------------+----------+---------+---------+-------------------+---------------+-----------+ | zone1 | observer | 10.10.10.1 | 2882 | cluster | NULL | demo | Name of the cluster | OBSERVER | CLUSTER | DEFAULT | DYNAMIC_EFFECTIVE | obcluster | 0 | +-------+----------+------------+----------+---------+-----------+-------+---------------------+----------+---------+---------+-------------------+---------------+-----------+租户名。
SHOW TENANT;输出如下,
obmysql即为连接到的 OceanBase 服务的租户名:+---------------------+ | Current_tenant_name | +---------------------+ | obmysql | +---------------------+Config Url。
SHOW PARAMETERS LIKE 'obconfig_url';输出如下,
value列对应的值即为连接到的 OceanBase 服务的 Config Url:+-------+----------+------------+----------+--------------+-----------+----------------------------------------------------------------------------+--------------------------+----------+---------+---------+-------------------+---------------+-----------+ | zone | svr_type | svr_ip | svr_port | name | data_type | value | info | section | scope | source | edit_level | default_value | isdefault | +-------+----------+------------+----------+--------------+-----------+----------------------------------------------------------------------------+--------------------------+----------+---------+---------+-------------------+---------------+-----------+ | zone1 | observer | 10.10.10.1 | 2882 | obconfig_url | NULL | http://10.10.10.1:8080/services?Action=ObRootServiceInfo&ObCluster=demo | URL for OBConfig service | OBSERVER | CLUSTER | DEFAULT | DYNAMIC_EFFECTIVE | | 0 | +-------+----------+------------+----------+--------------+-----------+----------------------------------------------------------------------------+--------------------------+----------+---------+---------+-------------------+---------------+-----------+
上述信息确认完毕后,连接到 Binlog Server,执行 CREATE BINLOG 命令创建该 OceanBase 租户的 Binlog 任务。关于该命令的详细信息,请参见 任务管理 中 创建 Binlog 任务 部分。
示例如下,该命令会为 demo 集群的 obmysql 租户创建 Binlog 任务。命令中的 CLUSTER URL 即为前述的 Config Url。REPLICATE NUM 为 2,因此会为该租户创建两个 Binlog 实例。
CREATE BINLOG FOR TENANT `demo`.`obmysql`
TO USER `root` PASSWORD `********`
WITH CLUSTER URL `http://10.10.10.1:8080/services?Action=ObRootServiceInfo&ObCluster=demo`
, REPLICATE NUM 2;
注意
- 命令中配置的
USER和PASSWORD为系统租户(sys租户)的用户和密码,而非待创建 Binlog 任务的租户(obmysql租户)。若启动 Binlog Server 时已设置系统租户账密,命令中可省去TO USER `root` PASSWORD `********`。 - 目前不支持为 sys 租户创建 Binlog 任务。
创建成功后,可执行 SHOW BINLOG INSTANCES; 获得所有 Binlog 实例状态信息,输出如下。
+------------+------------+-----------+---------------+------+------+--------+-------+---------+---------+---------------+-------------+--------------+-----------------+---------------+-------------+-------------+--------------+---------+------------------------------------------------+----------+
| name | ob_cluster | ob_tenant | ip | port | zone | region | group | running | state | obcdc_running | obcdc_state | service_mode | convert_running | convert_delay | convert_rps | convert_eps | convert_iops | dumpers | version | odp_addr |
+------------+------------+-----------+---------------+------+------+--------+-------+---------+---------+---------------+-------------+--------------+-----------------+---------------+-------------+-------------+--------------+---------+------------------------------------------------+----------+
| bl09vjd9tl | demo | obmysql | 10.10.10.1 | 8100 | | | | Yes | Running | Yes | Running | enabled | Yes | 676 | 1 | 0 | 77 | 0 | 4.0.1-92748c6c59534426d187977b13b61b7cdf4fa200 | NULL |
| wi7emnxpat | demo | obmysql | 10.10.10.1 | 8101 | | | | Yes | Running | Yes | Running | enabled | Yes | 570 | 1 | 0 | 77 | 0 | 4.0.1-92748c6c59534426d187977b13b61b7cdf4fa200 | NULL |
+------------+------------+-----------+---------------+------+------+--------+-------+---------+---------+---------------+-------------+--------------+-----------------+---------------+-------------+-------------+--------------+---------+------------------------------------------------+----------+
上述输出中,running、obcdc_running 和 convert_running 三列分别标识 Binlog 实例主进程、obcdc 进程和 converter 进程的运行状态。三者均为 Yes 时,表示 Binlog 实例运行正常,否则即表示相应组件的运行状态异常,请依据 问题排查手册 中的 日志排查 小节,进入 Binlog 实例的工作目录进行排查。
更多 Binlog 管控命令请参见 管控命令 章节。
步骤五:配置 ODP
注意
如果您需要使用多个 ODP,请在每个 ODP 上均进行以下操作。
通过 ODP 使用 root 用户连接 OceanBase 数据库的 sys 租户,或使用 root@proxysys 用户连接 ODP。
配置 Binlog Server 的 IP 和端口号(默认为
2983)到binlog_service_ip,格式为ip:port。ODP 自 V4.3.1 起支持为binlog_service_ip配置多个 IP,不同的 IP 使用英文分号(;)间隔。ALTER proxyconfig SET binlog_service_ip='10.10.10.1:2983';开启 Binlog 服务。
说明
ODP_CE V4.2.3 及之后版本已经移除
enable_binlog_service配置项,因此如果报错显示该配置项不存在可以忽略。ALTER proxyconfig SET enable_binlog_service='True';(可选)如果希望 Binlog 服务执行
SHOW CREATE TABLE时的返回结果完全兼容 MySQL 语法(即去除 OceanBase 数据库的扩展语法),可执行以下命令。ALTER proxyconfig SET init_sql='set _show_ddl_in_compat_mode = 1;';使用
SHOW PROXYCONFIG LIKE 'config_name'命令验证配置是否正确,如查看binlog_service_ip配置:SHOW PROXYCONFIG LIKE 'binlog_service_ip';输出如下:
+-------------------+--------------------+-------------------------------------------------------------------------------------------------------------------------+-------------+---------------+-------+--------------+ | name | value | info | need_reboot | visible_level | range | config_level | +-------------------+--------------------+-------------------------------------------------------------------------------------------------------------------------+-------------+---------------+-------+--------------+ | binlog_service_ip | 10.10.10.1:2983 | binlog service ip/hostname list, format ip1:sql_port1;hostname2:sql_port2, separate with ';'. prefer to use the forward | false | SYS | | LEVEL_VIP | +-------------------+--------------------+-------------------------------------------------------------------------------------------------------------------------+-------------+---------------+-------+--------------+
步骤六:验证结果
通过 ODP 连接到 Binlog 任务对应的租户,可以通过 SHOW MASTER STATUS; 等命令验证 Binlog 生成状态。更多关于 Binlog 命令的信息请参考 兼容性说明。
示例如下:
使用 ODP 连接到 Binlog 任务对应的租户
obclient -h10.10.10.1 -P2883 -uroot@obmysql -p -Doceanbase -A注意
本节执行的 Binlog 操作命令仅支持通过 ODP 连接租户时执行。
查看 Binlog 文件
SHOW MASTER STATUS;输出如下:
+------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+-------------------+ | mysql-bin.000001 | 155 | | | | +------------------+----------+--------------+------------------+-------------------+查看所有 Binlog 事件
SHOW BINLOG EVENTS;输出如下:
+------------------+------+----------------+-----------+-------------+-----------------------------------+ | Log_name | Pos | Event_type | Server_id | End_log_pos | Info | +------------------+------+----------------+-----------+-------------+-----------------------------------+ | mysql-bin.000001 | 4 | Format_desc | 96754989 | 124 | Server ver: 5.7.38, Binlog ver: 4 | | mysql-bin.000001 | 124 | Previous_gtids | 96754989 | 155 | | +------------------+------+----------------+-----------+-------------+-----------------------------------+进行数据变更操作,验证 Binlog 是否正常运行
CREATE database test1;再次查看 Binlog 文件
SHOW MASTER STATUS;输出如下,Binlog 服务根据操作生成了新的 Binlog 内容:
+------------------+----------+--------------+------------------+----------------------------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+----------------------------------------+ | mysql-bin.000001 | 297 | | | 0f5addad-9be6-11ef-9c9d-00163e0808cc:1 | +------------------+----------+--------------+------------------+----------------------------------------+查看所有 Binlog 事件
SHOW BINLOG EVENTS;输出如下,可以看到有新的 Binlog 事件产生,说明 Binlog 在正常运行:
+------------------+------+----------------+-----------+-------------+-------------------------------------------------------------------+ | Log_name | Pos | Event_type | Server_id | End_log_pos | Info | +------------------+------+----------------+-----------+-------------+-------------------------------------------------------------------+ | mysql-bin.000001 | 4 | Format_desc | 96754989 | 124 | Server ver: 5.7.38, Binlog ver: 4 | | mysql-bin.000001 | 124 | Previous_gtids | 96754989 | 155 | | | mysql-bin.000001 | 155 | Gtid | 96754989 | 220 | SET @@SESSION.GTID_NEXT= '0f5addad-9be6-11ef-9c9d-00163e0808cc:1' | | mysql-bin.000001 | 220 | Query | 96754989 | 297 | use obmysql;CREATE database test1 | +------------------+------+----------------+-----------+-------------+-------------------------------------------------------------------+
相关操作
释放 Binlog 任务
若需要关闭指定租户的所有 Binlog 实例,同时删除已生成的存量 Binlog 文件,您可参照本节步骤释放 Binlog 任务。
登录 Binlog Server
mysql -h127.0.0.1 -P2983127.0.0.1和2983仅为示例 IP 和端口,您需根据实际情况替换为 Binlog Server 的 IP 和端口。释放 Binlog 任务
此处以释放
demo集群中obmysql租户的 Binlog 任务为例。DROP BINLOG FOR TENANT demo.obmysql;查看所有 Binlog 实例状态信息
SHOW BINLOG INSTANCES;查看输出中
ob_cluster和ob_tenant字段对应信息,若不存在demo和obmysql则表示对应租户的 Binlog 任务已经被释放。
停止 Binlog Server
启动 Binlog Server 后,您可在 obbinlog 的安装目录(默认为 /home/ds/oblogproxy)下,执行如下命令停止 Binlog Server:
[admin@test001 oblogproxy]$./run.sh stop
说明
停止 Binlog Server 不影响 Binlog 实例,未被停止的 Binlog 实例仍在运行中。