DBLOG
» WTF
Toggle navigation
DBLOG
主页
OCM
1、概览
2、数据导入导出
3、GaussDB(DWS)数据库管理
4、数据库调优与开发实践
5、湖仓一体
6、开发应用
7、集群管理
8、巡检和维运维
About Me
归档
标签
1、基本运维动作
无
2025-05-22 15:09:09
0
0
0
admin
# 常用运维命令 ## 常用运维命令 - 查看集群状态 查询集群状态或单个主机的状态使用以下命令: ``` 运维命令: cm_ctlquery -Cv ``` ### 参数说明: - `-v`:显示集群详细状态。 - `-C`:按主备关系成对显示集群状态,需与`-v`参数一起使用。 - `-d`:显示实例数据目录,需与`-v`和`-C`参数一起使用。 - `-x`:显示集群所有异常实例,需与`-v`和`-C`参数一起使用。 - `-p`:显示集群所有 CN、DN 端口,但不包含从备、CCN,需与`-v`和`-C`参数一起使用。 集群可能的状态包括: - **Normal**:表示集群可用,主备关系正常。 - **Degraded**:表示集群可用,但数据没有冗余备份。 - **Unavailable**:表示集群不可用。 - **Catchup**:表示集群的 DN 备实例正在追赶主实例的日志信息。 --- ## 常用运维命令 - 主备均衡 切换集群主备实例,实现 AZ 之间的相互切换。 ``` 运维命令: cm_ctlswitchover -a ``` ### 参数说明: - `-a`:重置节点状态为初始配置状态。 - `-q`:快速切换,适用于主备从集群部署模式,需确保无主备追赶后进行切换。 - `-D`:指定实例数据目录。 - `-n`:指定节点。 --- ## 常用运维命令 - 启停实例 (1) ### 注意事项: - **适用场景**:主机发生故障状态异常,需要停止所有实例;或单台服务器/硬盘故障,需要停止对应的实例进行检修更换等。 - **前提条件**: - 停止节点/实例后,需要保证集群内至少有一个正常的 CN 节点、CM Server 节点、GTM 节点。 - 涉及 CN 节点/实例时,若没有负载均衡,需要将业务迁移至其他 CN。 - 若集群磁盘水位处于 75%以上,停止节点/实例后需重点关注磁盘水位变化。 - 停止实例前,需要检查集群状态,确保对应实例状态正常,无 catchup。 - 停止实例前,连接集群执行 checkpoint。 ``` gsql postgresql://:$port/postgres?application_name='OM' -c 'checkpoint;' ``` - `$port` 替换为 CN 的端口号。 --- ## 常用运维命令 - 启停实例 (2) 启停集群服务、单个主机上的所有实例或单独启停某个实例进程。 ``` cm_ctlstart | stop [-mi] -- '-mi' 强制集群退出 cm_ctlstart | stop [-mi] -n $node_id cm_ctlstart | stop [-mi] -n $node_id -D $datapath ``` ### 参数说明: - `-m`:指定停止模式,仅 stop 操作可指定,模式有: - `smart`:等待用户业务结束后,集群退出。 - `fast`:不等待用户业务结束,集群退出。 - `immediate`:不等待用户业务结束,强制集群退出。 - `-D`:指定实例数据目录。 - `-n`:指定节点。 --- ## 常用运维命令 - 修复节点 (1) ### 修复前提 - **适用场景**:DN 状态异常、CN 处于 deleted 或 down 状态。 - **前提条件**: - 集群安装成功,且处于已启动状态。 - DN 环只能损坏一个实例。 - 集群内 CM Server、CM Agent、GTM、Coordinator 至少存在一个正常实例。 - GTM 故障时,另一 GTM 必须处于最高可用模式。 ### 注意事项: - 正常节点执行修复操作。 - 修复涉及 CN 时,需保障被修复的 CN 没有 DDL 业务。  --- ## 常用运维命令 - 修复节点 (2) 将发生故障的主机(实例)替换为正常主机(实例)。 ### 命令: ``` 配置实例、主机: gs_replace -t config -h HOSTNAME 启动实例、主机: gs_replace -t start -h HOSTNAME ```  --- # 常用运维 SQL ## 常用运维 SQL - 活跃作业语句查询 (1) ### 使用场景: 查询此时在数据库运行的作业信息,用于确定当前作业运行的 SQL、耗时、运行状态、排队状态和等待状态等信息。 ### 常用字段说明: - `query_start`:开始当前活跃查询的时间。 - `waiting`:如果后端当前正等待锁则为 true。 - `enqueue`:语句当前排队状态。 - `state`:后端当前总体状态。 - `query`:此后端的最新查询。 --- ## 常用运维 SQL - 活跃作业语句查询 (2) ### SQL 语句: ```sql SELECT coorname, datname, usename, query_start, now()-query_start AS runtime, query_id, substr(query, 1, 100) AS query, state, waiting, enqueue FROM pgxc_stat_activity WHERE state <> 'idle' AND usename <> 'Ruby' -- 线下环境使用 'omm' 过滤 ORDER BY runtime DESC LIMIT 100 ```  --- ## 常用运维 SQL - 作业等待查询 (1) ### 使用场景: 查询此时在数据库运行作业的等待信息,以确定当前作业在各个 DN 实例等待事件和阻塞状态。 ### 常用字段说明: - `query_id`:查询 ID,用来唯一确定一个 SQL 语句。 - `waiting`:当前线程的等待状态。 --- ## 常用运维 SQL - 作业等待查询 (2) ### SQL 语句: ```sql -- 查询单个 query 的等待状态: SELECT * FROM pgxc_thread_wait_status WHERE query_id='217580157462413766'; -- 查询整个数据库的等待状态: SELECT wait_status, count(*) FROM pgxc_thread_wait_status GROUP BY wait_status ORDER BY 2 DESC; ```  --- ## 常用运维 SQL - 锁等待查询 (1) ### 使用场景: 查询此时在数据库运行的作业中等锁的信息,包括等锁的语句、用户和持有锁的语句、用户。 ### 常用字段说明: - `locktype`:被锁定对象的类型。 - `nodename`:被锁定对象的节点的名称。 - `queryid`:申请锁的线程的最新查询语句。 --- ## 常用运维 SQL - 锁等待查询 (2) ### SQL 语句: ```sql SELECT locktype, nodename, dbname, nspname, relname, partname, page, tuple, transactionid, username, gxid, xactstart, queryid, substr(query, 1, 150), pid, mode, granted FROM pgxc_lock_conflicts ORDER BY nodename, dbname, locktype, nspname, relname, partname LIMIT 100; ```  --- ## 常用运维 SQL - 单表倾斜 ### 方法一: ```sql SELECT * FROM table_skewness('public.test'); ``` ### 方法二: ```sql SELECT * FROM table_distribution('public.test'); ``` --- ## 常用运维 SQL - 全库查倾斜表 ### SQL 语句: ```sql SELECT schemaname, tablename, nodename, single_node_size, total_size, CASE WHEN total_size = 0 THEN 0 ELSE single_node_size / total_size * 100 END::numeric(6, 2) AS skewratio FROM ( SELECT schemaname, tablename, nodename, SUM(dnsize) OVER(PARTITION BY schemaname, tablename, nodename) AS single_node_size, SUM(dnsize) OVER(PARTITION BY schemaname, tablename) AS total_size FROM table_distribution() ) WHERE skewratio > 10 AND total_size > 10 * 1024 * 1024 * 1024::bigint ORDER BY 1, 2, 3, 6 DESC; ``` --- ## 常用运维 SQL - 判断需要 analyze 的表 (1) ### SQL 语句: ```sql SELECT n.nspname, c.relname, o.* FROM pg_class c INNER JOIN pg_object o ON c.oid = o.object_oid INNER JOIN pg_namespace n ON c.relnamespace = n.oid WHERE o.object_type = 'r' AND o.last_analyze_time IS NULL; ```  --- ## 常用运维 SQL - 判断需要 analyze 的表 (2) ### SQL 语句: ```sql SELECT n.nspname, c.relname, a.n_tup_ins, c.reltuples, (a.n_tup_ins / c.reltuples)::NUMERIC(100, 3) AS insert_ratio, (a.n_tup_upd / c.reltuples)::NUMERIC(100, 3) AS update_cratio, (a.n_tup_del / c.reltuples)::NUMERIC(100, 3) AS delete_ratio FROM pg_class c INNER JOIN pgxc_get_stat_all_tables a ON a.relid = c.oid INNER JOIN pg_namespace n ON n.oid = c.relnamespace WHERE relid > 16384 AND c.reltuples != 0 AND (insert_ratio >= 1.2 OR update_cratio > 0.2 OR delete_ratio > 0.2) ORDER BY n_tup_ins DESC; ```  ### 需要固化到业务中的场景: - 每次 truncate 表后执行 insert 数据的场景。 - 每天插入新数据后且业务立即只查询刚插入的数据场景。 --- ## 常用运维 SQL - 脏页回收 (1) ### 判断哪些表需要脏页回收 ```sql SELECT pg_stat_get_live_tuples(c.oid), pg_stat_get_dead_tuples(c.oid), pg_stat_get_last_vacuum_time(c.oid) FROM pg_class c WHERE c.oid = 'public.test'::regclass; ```  --- ## 常用运维 SQL - 脏页回收 (2) ### 整库业务表脏页率统计 ```sql SELECT * FROM pgxc_get_stat_all_tables WHERE schemaname NOT IN ('pg_catalog','pg_toast') AND n_dead_tup > 10000 AND dirty_page_rate > 0.3 ORDER BY dirty_page_rate DESC, n_dead_tup DESC; ```  --- ## 常用运维 SQL - 脏页回收 (3) ### 使用方法: 1. 登录需要统计的数据库,执行上面的 SQL 语句,找到需要进行清理的表。 2. 执行 SQL 命令: ```sql VACUUM FULL ANALYZE 业务表; ``` 例如: ```sql VACUUM FULL ANALYZE test; ``` ### 调优建议: 当脏页率 > 30% 或脏数据行数 > 1w 时,对表做脏页回收。  --- ## 常用运维 SQL – 内存使用 (1) ### 使用场景: 查询当前数据库节点的内存使用情况,单位 MB。 ### 字段说明: - `nodename`:节点名称。 - `memorytype`:内存类型。 - `max_process_memory`:实例所占用的内存大小。 - `process_used_memory`:进程所使用的内存大小。 --- ## 常用运维 SQL – 内存使用 (2) ### SQL 语句: ```sql SELECT * FROM pv_total_memory_detail; ``` --- ## 常用运维 SQL - 单表倾斜 (1) ### 通过查看表数据在各个 DN 的分布情况判断是否存在数据倾斜。 ### 方法一: ```sql SELECT * FROM table_skewness('public.test'); ``` ### 方法二: ```sql SELECT * FROM table_distribution('public.test'); ``` --- ## 常用运维 SQL - 单表倾斜 (2) ### 倾斜表重分布处理的操作步骤如下: 1. 创建一张新的表,并选取合适的分布列,判断一列是否可以作为分布列: ```sql SELECT attr, COUNT(*) FROM schema.table GROUP BY attr; ``` 2. 将数据从旧表导入至新表: ```sql INSERT INTO new_table SELECT * FROM old_table; ``` 3. 删除旧表: ```sql DROP TABLE old_table; ``` 4. 将新表重命名为旧表: ```sql ALTER TABLE new_table RENAME TO old_table; ``` --- # 运维日志 ## 运维日志 – 数据库日志 数据库日志记录了 GaussDB(DWS) 数据库服务端启动、运行或停止时出现的问题,用户可以通过运行日志快速分析问题原因。 ### 日志路径及备注: - **coordinator**: `$GAUSSLOG/pg_log/cn_xxxx` - 实例运行日志。 - **datanode**: `$GAUSSLOG/pg_log/dn_xxxx` - **gtm**: `$GAUSSLOG/pg_log/gtm` - **cm_agent**: `$GAUSSLOG/cm/cm_agent` - 集群管理组件的运行日志。 - **cm_server**: `$GAUSSLOG/cm/cm_server` - **om_monitor**: `$GAUSSLOG/cm/om_monitor` - **gs_scheduler**: `$GAUSSLOG/om/gs_scheduler*.log` - 调度器运行日志。 - **cm_ctl**: `$GAUSSLOG/bin/cm_ctl[gs_guc]` - gs_ctl、gs_guc 工具的操作日志。 --- ## 运维日志 – 管控面日志 (HCS/HC) ### 登录管控面 CDK 集群 Master 节点 1. 登录 ManageOne 运维面 OC,选择该 Region 的 Service OM。 2. 进入计算资源 -> 虚拟机,搜索 EICommon,找到 EICommon-Region-Master-01 机器的地址。 3. 使用 SSH 登录 opsadmin 用户到该机器,并切换到 root。 ### 日志路径及备注: - **controller**: `/opt/cloud/3rdComponent/tomcat/logs` - **event**: `/opt/cloud/dbsevent/logs` - **insight**: `/opt/cloud/insight/logs` - **monitor**: `/opt/cloud/monitor/logs` --- ## 运维日志 – 操作系统日志 操作系统日志记录系统运行状态和异常情况,用于故障排除和性能分析。 ### 日志路径及备注: - **messages**: `/var/log/messages*` - 核心系统日志文件。 - **secure**: `/var/log/secure*` - 安全相关消息日志。 - **audit.log**: `/var/log/audit` - 操作系统审计日志。 --- # 产品形态架构 ## 产品形态架构 GaussDB(DWS) 数据库的主要部署方式包括线下物理机部署 (ESL) 和云化部署 (HCS),运维操作的关键点如下: | 关键点 | 线下物理机部署 | 云化部署 | |--------------|-----------------------------------|-----------------------------| | 操作系统 | 操作系统厂商提供与安装,客户购买该 OS 及服务 | 华为提供完整的 DWS 软件镜像(包含欧拉操作系统) | | 集群安装 | 需手动安装 FusionInsight Manager 软件;上传 DWS 安装包并执行安装 | 部署 HCS 云平台,并一键式自动化安装 DWS 云服务 | | 服务器管理 | 缺少统一服务器硬件监控管理平台 | 在华为云 ManageOne 统一监控与管理集群服务器 | | 运维管理 | FusionInsight Manager 仅能管理本集群 | 在华为云 ManageOne 界面统一运维,支持多集群管理 | | 监控功能 | 监控指标较少(共 91 项) | 监控告警指标更多(共 465 项),配置更灵活 | --- ## 产品形态架构 - 线下部署 (1) GaussDB(DWS) ESL 版本使用 FusionInsight Manager 管理平台提供集群状态监控、告警管理等功能。 ### 监控指标: - 数据库级别:CPU、内存、物理读写与 IO 等资源的消耗趋势。 - 节点级别:主机级别的 CPU、内存 ## 产品形态架构 - 线下部署 (2) 登录节点执行运维命令均需要在“omm”用户下执行,并且需要 source 环境变量。 ```bash su - omm source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile ``` --- ## 产品形态架构 - 云化部署 (1) GaussDB(DWS) HCS 形态完成集群创建后,即可在集群管理页面看到创建的集群信息,选择集群操作选项中的监控面板功能,查看监控信息。 ### 监控内容: - **节点级别监控**:CPU、IO、磁盘使用率、内存、网络等。 - **集群概览**:集群状态、整体资源消耗率、实例状态。 - **实时查询**:活跃会话数、活跃应用数、活跃查询数。  --- ## 产品形态架构 - 云化部署 (2) ### 登录数据库节点 登录 OC 页面选择 Service OM,点击虚拟机。在虚拟机页面搜索关键词 EICommon,获取的虚拟机 IP 即为 CDK master 节点 IP。 使用 `op_cdk_sso` 用户登录 cloudscope 页面;点击运维服务 -> autodeploy-cdk。 --- ## 产品形态架构 - 云化部署 (3) 进入服务管理 -> 服务查询: 1. 选择对应的 region。 2. 选择 ei-dbs-xxx(ei 开头),选择 dws。 在虚拟机页面搜索关键词 EICommon,获取的虚拟机 IP 即为 CDK master 节点 IP。 使用 `op_cdk_sso` 用户登录 cloudscope 页面;点击运维服务 -> autodeploy-cdk。 获取 controller 的 MySQL 数据库连接信息(`db.url`、`db.username`、`db.password`),在页面进入升级,搜索 db。 --- ## 产品形态架构 - 云化部署 (4) ### 登录 CDK master 节点,执行如下命令进入 dws-maintain 容器。 ```bash kubectl get pod -n dws-maintain # 查有两个容器,是负载集群,都可以登录 kubectl exec -ti {pod name} bash -n dws-maintain # pod 为查询的容器名 cd opsTool # cd 到脚本目录下 ``` 执行以下命令,解密 DWS 密码。 ```bash java -jar AESTool.jar 2 { dbPasswordEncrypt } ``` --- ## 产品形态架构 - 云化部署 (5) ### 执行 connectTool.sh 脚本登录节点。 ```bash sh connectTool.sh -u{user} -drms-h{db ip} -p7306 -n {instance name} –tStandalone ``` - `-u`:用户名对应 `db.username`。 - `-d`:数据库对应 `db.url` 中“jdbc:mariadb://@IP:7306/rms?autoReconnect=true”红色部分。 - `-h`:连接 IP 对应 `db.url` 中“jdbc:mariadb://@IP:7306/rms?autoReconnect=true”红色部分。 - `-p`:端口对应 `db.url` 中“jdbc:mariadb://@IP:7306/rms?autoReconnect=true”红色部分。 - `-n`:实例名称对应 MySQL 库中 `rds_instance.name`。 
上一篇:
1、各种架构
下一篇:
1、湖仓融合介绍
0
赞
1 人读过
新浪微博
微信
腾讯微博
QQ空间
人人网