SQM是云和恩墨自主设计研发的一款SQL质量管控平台,它能自动抓取应用程序执行SQL中的SQL语句,并依据既定的审核规则,分析SQL中的潜在性能风险,使得DBA和应用开发人员能够较早的介入,将性能隐患扼杀于萌芽阶段,确保线上应用的稳定、高效运行。
本文涵盖SQM(SQL质量管控平台)部署的相关流程,供参考。
一、安装redis
cd /usr/local/
mkdir redis
上传安装文件redis-5.0.3.tar.gz 到 文件夹 redis下
tar -xvf redis-5.0.3.tar.gz
cd redis-5.0.3 && make
使用后台进程运行需要修改配置文件redis.conf中的daemonize配置项,将其改为yes
进入/usr/local/redis/7001/,修改redis.conf配置文件的相关配置项
# 修改为后台进程运行
daemonize yes
# 修改redis监听端口
port 7001
# 注释掉bind,这样外部机器可以访问
# bind 127.0.0.1
# 开启持久化
appendonly yes
# 修改持久化地址文件保存目录
dir /usr/local/redis/7001/
# 修改redis客户端登录密码,必须配置密码
requirepass 123456

开放端口 7001, 17001
17001是redis集群总线端口。
redis集群总线端口为:客户端端口+10000
关闭redis命令
pkill -9 redis
启动redis
/usr/local/redis/redis-5.0.3/src/redis-server /usr/local/redis/7001/redis.conf

测试连接redis
/usr/local/redis/redis-5.0.3/src/redis-cli -h 192.168.1.12 -p 7001 -a 123456

二、安装zookeeper
安装目录以 /opt/share/zk 为例
新建目录 /opt/share/zk,命令如下:
mkdir -p /opt/share/zk
进入 /opt/share/zk 目录,上传 jdk-8u341-linux-x64.tar.gz 文件
解压 jdk-8u341-linux-x64.tar.gz 文件,命令如下:
tar -zxvf jdk-8u341-linux-x64.tar.gz
修改 java 执行权限 ,命令如下:
chmod u+x jdk1.8.0_341/bin/java*
上传 apache-zookeeper-3.6.3-bin.tar.gz 文件
解压 apache-zookeeper-3.6.3-bin.tar.gz 文件,命令如下:
tar -zxvf apache-zookeeper-3.6.3-bin.tar.gz
apache-zookeeper-3.6.3-bin/data/ 目录下新建 子目录 snapshot 与 log,命令如下:
mkdir -p /opt/share/zk/apache-zookeeper-3.6.3-bin/data/snapshot
mkdir -p /opt/share/zk/apache-zookeeper-3.6.3-bin/data/log
进入 apache-zookeeper-3.6.3-bin/conf 目录,新建 java.env 文件,命令如下:
touch java.env
vi java.env
java.env 文件内容如下:
#!/bin/sh
#配置JDK目录
export JAVA_HOME=/opt/share/zk/jdk1.8.0_341
#配置JVM参数
export JVMFLAGS="-Xmx2048m $JVMFLAGS"
修改 java.env 文件执行权限
chmod u+x java.env
拷贝配置文件 zoo_sample.cfg 为 zoo.cfg,命令如下:
cd apache-zookeeper-3.6.3-bin/conf
cp zoo_sample.cfg zoo.cfg
修改 zoo.cfg 配置文件,命令如下:
vi zoo.cfg
以下为修改配置
#与客户端(agent)通信端口
clientPort=2181
#快照存储目录。修改位置:第12行
dataDir=/opt/share/zk/apache-zookeeper-3.6.3-bin/data/snapshot
# 开启(把注释去掉),保留快照的个数,修改位置:第25行
autopurge.snapRetainCount=10
# 开启(把注释去掉),自动清理事务日志和快照文件的功能,单位是小时,默认是0,表示不开启自动清理功能。修改位置:第28行
autopurge.purgeInterval=24
以下为新增配置,在文件末尾新增以下配置
#事务日志存储目录
dataLogDir=/opt/share/zk/apache-zookeeper-3.6.3-bin/data/log
#HTTP方式查看服务信息
admin.serverPort=8081
#开启审核日志
audit.enable=true
2181对agent开放
开放端口命令如下:
#开放2181端口
firewall-cmd --zone=public --add-port=2181/tcp --permanent
#重新加载防火墙规则
firewall-cmd --reload
进入 /opt/share/zk/apache-zookeeper-3.6.3-bin/bin 目录,启动ZooKeeper
cd ../bin
./zkServer.sh start
如果打印以下信息,则表示启动成功
ZooKeeper JMX enabled by default
Using config: /opt/share/zk/apache-zookeeper-3.6.3-bin/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

根据端口查看进程,命令如下:
netstat -anp | grep 2181
打印以下信息
tcp6 0 0 :::2181 :::* LISTEN 3538/java

如果需要关闭,可以用以下命令:
./zkServer.sh stop
正常打印信息如下:
ZooKeeper JMX enabled by default
Using config: /opt/share/zk/apache-zookeeper-3.6.3-bin/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED
三、安装MogDB资料库
以5.0.7为例,部署单机数据库
创建相关目录,用户,组。创建目录。
groupadd dbgrp -g 20001
useradd omm -g 20001 -u 20001
echo "Enmo@123" | passwd --stdin omm
mkdir -p /opt/mogdb
chown -R omm:dbgrp /opt/mogdb
su - omm
mkdir /opt/mogdb/data
mkdir /opt/mogdb/soft
安装包上传到/opt/mogdb/soft下,解压
cd /opt/mogdb/soft
tar -xf MogDB-5.0.7-CentOS-64bit.tar.gz
cd MogDB-5.0.7-CentOS-64bit
cp -r ./* ../

增加环境变量
echo "export GAUSSHOME=/opt/mogdb/soft" >> /home/omm/.bashrc && \
echo "export PATH=\$GAUSSHOME/bin:\$PATH " >> /home/omm/.bashrc && \
echo "export LD_LIBRARY_PATH=\$GAUSSHOME/lib:\$LD_LIBRARY_PATH" >> /home/omm/.bashrc
source /home/omm/.bashrc
以omm用户初始化数据库
gs_initdb --pgdata=/opt/mogdb/data --nodename=primary --pwpasswd=Enmo@123 --encoding=UTF-8 --locale=en_US.UTF-8
修改数据库参数
echo "port=26000" >> /opt/mogdb/data/postgresql.conf
echo "listen_addresses = '0.0.0.0'" >> /opt/mogdb/data/postgresql.conf
echo "password_encryption_type = 0" >> /opt/mogdb/data/postgresql.conf
echo "log_directory = 'pg_log'" >> /opt/mogdb/data/postgresql.conf
echo "remote_read_mode=non_authentication" >> /opt/mogdb/data/postgresql.conf
echo "host all all 0.0.0.0/0 md5" >> /opt/mogdb/data/pg_hba.conf
启动数据库
gs_ctl start -D /opt/mogdb/data
1.初始化资料库
1)切换到omm用户,并使用超级用户登录mogdb资料库
su - omm
gsql -d postgres -p 26000 -r
2)创建DATABASE:sqmdb
CREATE DATABASE sqmdb WITH ENCODING 'UTF-8' dbcompatibility 'PG';
3)切换database
\c sqmdb
4)创建用户sqm并赋权,此时会同时在数据库sqmdb中创建模式sqm
CREATE USER sqm PASSWORD 'sqm@1234';
grant all privileges to sqm;
5)修改数据库属主
ALTER DATABASE sqmdb OWNER TO sqm;
6)退出资料库
\q
四、安装SQM程序
1.解压安装包
在服务器上解压sqm.zip,假设解压到/opt/share/sqm

2.修改配置文件
打开配置文件/opt/share/sqm/sqm/config/app.conf,修改下面红色部分:
1)修改MogDB资料库配置,REPOS_DB_USER为资料库用户名 , REPOS_DB_PASSWORD为资料库用户密码 , EPOS_DB_URL为资料库jdbc连接串,以实际MogDB配置为准
#修改MogDB资料库用户名、密码、连接串
REPOS_DB_USER=sqm
REPOS_DB_PASSWORD=sqm@1234
REPOS_DB_URL=jdbc:opengauss://192.168.64.142:26000/sqmdb?currentSchema=sqm
#若配置了Jenkins,需修改以下参数,这里的mysql指的是目标库
#Jenkins扫描MySQL建表资料库,必须使用root用户
REPOS_DB_USER_SCRIPT=root
REPOS_DB_PASSWORD_SCRIPT=123456
#注意REPOS_DB_URL_SCRIPT:只需要配置IP:PORT.禁止添加schema(数据库名),若填写schema,则此schema会在Jenkins建表脚本构建任务第一次执行完后被删除
REPOS_DB_URL_SCRIPT=jdbc:mysql://192.168.64.131:3307?serverTimezone=Asia/Shanghai\&useUnicode=true\&characterEncoding=utf-8\&connectTimeout=5000\&useCursorFetch=true
2)修改redis配置,REDIS_NODES为redis 的”IP:端口”, REDIS_PASSWORD为redis密码,以实际Redis配置为准
#若Redis配置为单机模式
#若Redis配置为单机模式
REDIS_NODES=192.168.64.142:7001
REDIS_PASSWORD=123456
#若Redis配置为集群模式(请确保配置的IP、端口与redis机器一致)
REDIS_NODES=192.168.64.142:7001,192.168.64.142:7002,192.168.64.142:7003,192.168.64.141:7004,192.168.64.141:7005,192.168.64.141:7006
REDIS_PASSWORD=123456
3)修改ZooKeeper配置,以实际ZooKeeper配置为准,ZooKeeper密码第一次设置后,请牢记,后期不建议修改
#若ZooKeeper配置为单机模式:IP:clientPort
ZOOKEEPER_CONNECT_STRING=192.168.64.142:2181
#单台机器同时执行任务数阈值
ZOOKEEPER_ASSIGN_THRESHOLD=5
#若ZooKeeper配置为集群模式:IP1:clientPort,IP2:clientPort,IP3:clientPort(请确保配置的IP、端口与ZooKeeper机器一致)
ZOOKEEPER_CONNECT_STRING=192.168.64.142:2181,192.168.64.143:2181,192.168.64.144:2181
#单台机器同时执行任务数阈值
ZOOKEEPER_ASSIGN_THRESHOLD=5
#修改ZooKeeper用户密码
ZOOKEEPER_USER=sqm
ZOOKEEPER_PASSWORD=sqm@1234
注:若需要修改ZooKeeper密码,操作步骤如下(ZooKeeper和sqm路径以实际为准):
1.登录ZooKeeper
cd /opt/share/zk/apache-zookeeper-3.6.3-bin/bin
./zkCli.sh
2.使用原先的账号与密码认证
addauth digest 旧账号:旧密码
3.取消权限
setAcl -R /topsql world:anyone:cdrwa
4.修改/opt/share/sqm/sqm/config/app.conf中的参数ZOOKEEPER_PASSWORD=的内容
4)若需要修改默认端口,可修改以下参数;
TOMCAT_HTTP_PORT=8899
TOMCAT_HTTPS_REDIECT_PORT=8843
TOMCAT_SHUTDOWN_PORT=8045
TOMCAT_AJP_PORT=8049
OPTIMIZE_URL=127.0.0.1:19006
AGENT_ OPTIMIZE_PORT=19006
5)若需使用自有的Java,则需要替换JRE,SQM自带的JRE在/opt/share/sqm/sqm/java/jdk1.8.0_341
替换方法:修改配置文件中JDK_HOME的值,指向自己安装的JDK
JDK_HOME=/opt/share/sqm/sqm/java/jdk1.8.0_341
6)若需要修改SQM会话超时时间,修改如下参数
#SQM会话超时时间,单位毫秒,不可为空,默认30分钟(1800000毫秒)
SESSION_TIME_OUT=1800000
7)若需要对明文密码进行加密,按以下操作(不需要加密,可忽略)
…/sqm/sqm/config/app.conf配置文件中参数REPOS_DB_PASSWORD=和REDIS_PASSWORD=,必须先设置为明文密码。
进入…/sqm/bin下(必须在该目录下),执行下述命令将app.conf中的密码进行加密,加密后的内容会自动覆盖app.conf的REPOS_DB_PASSWORD=和REDIS_PASSWORD=字段中的明文密码。
java -jar RSA.c3p0-1.0.jar
3.修改文件权限
chmod u+x /opt/share/sqm/sqm/bin/*.sh
chmod u+x /opt/share/sqm/sqm/java/jdk1.8.0_341/bin/java*
chmod u+x /opt/share/sqm/sqm/server/bin/*.sh
4.启动SQM程序
第一步:启动Server,集群部署时,只有第一个SQM正常启动运行后再启动其他的SQM!!
cd /opt/share/sqm/sqm/bin
./start_server.sh

等待server启动完成,当/opt/share/sqm/sqm/server/logs/catalina.out中输出如下信息,即表示Server启动完成

打开SQM页面,如果能正常显示,说明启动成功。

第二步:启动agent(Server启动成功后执行),集群部署时,只有一个SQM应用程序可以开启所有的agent。
首先进入/opt/share/sqm/sqm/bin目录,然后根据需要开启功能:

Agent日志:/opt/share/sqm/logs/agent*.out
五、访问SQM
http://部署服务器IP:8899/sqm
我的ip为 http://192.168.1.12:8899/sqm
登录用户:sys,密码:123456

六、启动SQM
# 1)启动Redis
/usr/local/redis/redis-5.0.3/src/redis-server /usr/local/redis/7001/redis.conf
2)启动zookeeper
/opt/share/zk/apache-zookeeper-3.6.3-bin/bin/zkServer.sh start
3)启动MogDB资料库
gs_ctl start
4)启动SQM程序
cd /opt/share/sqm/sqm/bin
./start_server.sh
等待server启动完成,当/opt/share/sqm/sqm/server/logs/catalina.out中输出如下信息,即表示Server启动完成

打开SQM页面,如果能正常显示,说明启动成功。
启动agent(Server启动成功后执行),集群部署时,只有一个SQM应用程序可以开启所有的agent。
进入/opt/share/sqm/bin目录,然后根据需要开启功能
| 启动命令 | 功能说明 | 集群 |
|---|---|---|
| ./start_oracle_agent.sh | 开启审核任务-Oracle审核 | 支持,可以启动多个 |
| ./start_topsql.sh | 开启审核任务-MySQL审核、TeleDB审核、DB2审核、SQL Server审核、OB审核(Oracle)、TelePG审核、PostgreSQL审核 | 支持,可以启动多个 |
| ./start_java_agent.sh | 开启审核任务-java应用 | 支持,可以启动多个 |
| ./start_mysql_log_agent.sh | 开启审核任务-MySQL日志、TeleDB日志 | 支持,可以启动多个 |
| ./start_metadata.sh | 开启工具箱-元数据管理 | 不支持,只能启动1个 |
| ./start_xlog.sh | 开启审核任务-达梦日志、TDSQL日志 | 支持,可以启动多个 |
| ./start_optimize.sh | 开启智能优化功能 | 支持,可以启动多个 |
| ./start_apollo.sh | 开启APOLLO监控,用于监控Oracle审核采集程序,启动前需要参考《部署APOLLO监控程序操作步骤》进行部署 | 不支持,只能启动1个 |
Agent日志:/opt/share/sqm/logs/agent*.out
七、停止SQM
注:Redis、zookeeper、SQM安装路径请根据实际情况填写
1)停止SQM程序
/opt/share/sqm/sqm/bin/stop_all.sh
/opt/share/sqm/sqm/bin/stop_server.sh
2)停止MogDB资料库
su - omm
gs_ctl stop
3)停止zookeeper
/opt/share/zk/apache-zookeeper-3.6.3-bin/bin/zkServer.sh stop
4)停止Redis
/usr/local/redis/redis-5.0.3/src/redis-cli -h 192.168.1.12 -p 7001 -a 123456 shutdown
#检查SQM相关程序是否停止(若遇到java相关进程没关掉,可直接kill)
ps -ef|grep redis
ps -ef|grep zookeeper
ps -ef|grep mogdb
ps -ef|grep sqm




