准备工作
从github下载安装介质[Source code (tar.gz)]
https://github.com/hhyo/Archery/releases
复制
上传安装介质到服务器/app/目录下并解压:
tar xf Archery-1.11.1.tar.gz
复制
安装系统工具
yum install -y yum-utils device-mapper-persistent-data lvm2
复制
安装git
yum install -y git
复制
安装Docker
按照企业标准安装手册执行,正常情况不用。
添加软件源信息:
yum-config-manager --add-repo https://mirrors.h****n.com/package/setting/docker-ce.repo yum clean all yum makecache fast
复制
安装docker-CE
yum -y install docker-ce
复制
安装docker-compose
yum -y install docker-compose
复制
授予可执行权限
chmod +x /usr/bin/docker-compose
复制
启动docker
systemctl start docker mkdir -p /etc/docker tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors":["https://docker.h****n.com"] } EOF systemctl daemon-reload systemctl restart docker
复制
用Docker部署Archery
进入解压的安装目录后,再进入src子目录,再进入docker-compose子目录
用docker部署archery
cd /app/Archery-1.11.1/src/docker-compose docker-compose -f docker-compose.yml up -d docker ps
复制
docker-compose.yml文件内的services可按照本身的运行环境来调整,同时注意检查版本号是否正确,比如说外部已经装好了mysql、redis、inception,就可以将对应的services删除,但是需要注意修改settings.py文件的相关配置,具体可以参考修改配置
注:如果出现services.archery.depends_on contains an invalid type, it should be an array的报错,则使用1.10.0版本或1.9.1版本的yml文件
mv docker-compose.yml docker-compose.yml.bak vim docker-compose.yml
复制
附1.10.0版本的docker-compose.yml:
version: '3' services: redis: image: redis:5 container_name: redis restart: always command: redis-server --requirepass 123456 expose: - "6379" mysql: image: mysql:5.7 container_name: mysql restart: always ports: - "3306:3306" volumes: - "./mysql/my.cnf:/etc/mysql/my.cnf" - "./mysql/datadir:/var/lib/mysql" environment: MYSQL_DATABASE: archery MYSQL_ROOT_PASSWORD: 123456 goinception: image: hanchuanchuan/goinception container_name: goinception restart: always ports: - "4000:4000" volumes: - "./inception/config.toml:/etc/config.toml" archery: image: hhyo/archery:v1.10.0 container_name: archery restart: always ports: - "9123:9123" volumes: - "./archery/settings.py:/opt/archery/local_settings.py" - "./archery/soar.yaml:/etc/soar.yaml" - "./archery/docs.md:/opt/archery/docs/docs.md" - "./archery/downloads:/opt/archery/downloads" - "./archery/sql/migrations:/opt/archery/sql/migrations" - "./archery/logs:/opt/archery/logs" - "./archery/keys:/opt/archery/keys" entrypoint: "dockerize -wait tcp://mysql:3306 -wait tcp://redis:6379 -timeout 60s /opt/archery/src/docker/startup.sh" env_file: - .env
复制
注:不要轻易修改初始密码,否则后续步骤会报错。密码待部署完成后再修改为高强度密码即可。
进入容器
docker exec -ti archery /bin/bash
复制
表结构初始化
cd /opt/archery source /opt/venv4archery/bin/activate python3 manage.py makemigrations sql python3 manage.py migrate
复制
数据初始化
python3 manage.py dbshell<sql/fixtures/auth_group.sql python3 manage.py dbshell<src/init_sql/mysql_slow_query_review.sql
复制
创建管理用户
python3 manage.py createsuperuser
复制
exit退出容器
重启服务
docker restart archery
复制
日志查看和问题排查
docker logs archery -f --tail=10 logs/archery.log
复制
注:本机本地运行的mysql、redis和docker冲突,一个起了就需要关另一个。此外Archery容器依赖于其余三个容器,启动时需要最后起Archery容器,关闭时首先关Archery容器。
网页访问http://hostname:9123登录。
如果可以绑定域名则绑定域名http://archery10.h****n.com:9123
错误日志进入容器后参考这三个日志文件:
logs/archery.log logs/qcluster.log logs/soar.log
复制
系统设置
goinception配置
功能是对修改的数据进行备份,需要进入web页面配置,进入系统管理-配置项管理:
- GO_INCEPTION_HOST:写本地ip地址即可;
- GO_INCEPTION_PORT:填4000(从docker ps也可查看);
- BACKUP_HOST:写本地ip地址即可,数据备份到docker中的MySQL;
- BACKUP_USER:此账号密码发现和当时安装时创建的superadmin账号相同(此账号应为数据库的管理员账号密码);
- BACKUP_PASSWORD:输入数据库用户密码即可。
SQL优化
- SQLAdvisor
功能说明:利用美团SQLAdvisor对收集的慢日志进行优化,一键获取优化建议。docker镜像已包含。
在系统管理-配置项管理中修改SQLADVISOR_PATH为程序路径,路径需要完整,docker部署的修改为:
/opt/archery/src/plugins/sqladvisor
复制
- SOAR
SOAR(SQL Optimizer And Rewriter)是一个对SQL进行优化和改写的自动化工具。 由小米人工智能与云平台的数据库团队开发与维护。
在系统管理-配置项管理中修改SOAR_PATH为程序路径,路径需要完整,docker部署的修改为:
/opt/archery/src/plugins/soar
复制
修改SOAR_TEST_DSN为测试环境连接信息
root:123456@hostname:3306/archery
复制
- SlowQuery
参考:
https://archerydms.com/modules/sql_optimize/
复制
工单通知
- ARCHERY_BASE_URL:填绑定的域名即可http://archery10.h****n.com
- DDL_NOTIFY_AUTH_GROUP:填DBA
- MAIL:ON,测试链接应该能通,否则检查网络和smtp服务器是否连通
- MAIL_SSL:ON,使用SSL连接
- MAIL_SMTP_SERVER:填smtp.h****n.com
- MAIL_SMTP_PORT:填465
- MAIL_SMTP_USER:填archery@h****n.com,此邮箱需要单独申请
- MAIL_SMTP_PASSWORD:填生成的终端授权复杂密码
注:对于通知,如果想要自定义,可通过修改archery容器中/opt/archery/sql/notify.py文件来实现。
其他配置
- MY2SQL
功能类似于Binlog2SQL,通过多线程以更高的性能快速解析binlog。支持回滚、去除主键、去db前缀及分表输出文件等多种解析模式,并拥有完备的过滤筛选项;支持异步获取文件,并且通知执行结果。
docker镜像已包含,无需手动再安装,只需在web页面进行配置:
/opt/archery/src/plugins/my2sql
复制
如果通过页面导出SQL保存到文件,则会异步保存至/app/Archery-1.11.3/src/docker-compose/archery/downloads/my2sql/目录下。
-
DEFAULT_AUTH_GROUP
可设置为default,后续建完权限组后改为devops -
LOCK_CNT_THRESHOLD
设为10 -
SchemaSync
对比不同数据库的Schema信息,输出修改语句和回滚语句,SchemaSync不仅限于表结构,它可以处理的对象还有:视图、事件、存储过程、函数、触发器、外键
(v1.7.7以及以上版本无需配置)
对接LDAP
进入容器
docker exec -it archery bash
复制
安装依赖
yum -y install openldap-devel
复制
安装python依赖库
vim ~/.pip/pip.conf
复制
内容如下:
[global] index-url = https://mirrors.h****n.com/repository/Pypi/simple/ [install] trusted-host=mirrors.h****n.com
复制
缺少依赖库的话在浏览器登陆时会报错:“500 Internal Server Error”,其原因是 Django 3.x 版本移除了部分用于兼容Python2 的 API,也有说法是django-auth-ldap版本问题,所以我们直接安装4.1
source /opt/venv4archery/bin/activate pip install django-auth-ldap==4.1.0 --upgrade pip pip install six cd /opt/venv4archery/lib/python3.9/site-packages/ cp six.py /opt/venv4archery/lib/python3.9/site-packages/django/utils/
复制
安装后重启容器
exit docker restart archery
复制
然后进入容器配置LDAP
docker exec -it archery bash cd /opt/archery/archery cp settings.py settings.py.bak vim settings.py
复制
修改的部分如下:
# LDAP ENABLE_LDAP = True if ENABLE_LDAP: import ldap from django_auth_ldap.config import LDAPSearch AUTHENTICATION_BACKENDS = ( "django_auth_ldap.backend.LDAPBackend", # 配置为先使用LDAP认证,如通过认证则不再使用后面的认证方式 "django.contrib.auth.backends.ModelBackend", # django系统中手动创建的用户也可使用,优先级靠后。注意这2行的顺序 ) AUTH_LDAP_SERVER_URI = "ldaps://ldap.h****n.com:636" AUTH_LDAP_USER_DN_TEMPLATE = env("AUTH_LDAP_USER_DN_TEMPLATE", default=None) if not AUTH_LDAP_USER_DN_TEMPLATE: del AUTH_LDAP_USER_DN_TEMPLATE AUTH_LDAP_BIND_DN = "cn=archery_admin,ou=ldapAppAdminUsers,ou=hoaas,ou=sso,dc=h****n,dc=com" AUTH_LDAP_BIND_PASSWORD = "password" AUTH_LDAP_USER_SEARCH_BASE = "ou=sso,dc=h****n,dc=com" AUTH_LDAP_USER_SEARCH_FILTER = "(cn=%(user)s)" AUTH_LDAP_USER_SEARCH = LDAPSearch( AUTH_LDAP_USER_SEARCH_BASE, ldap.SCOPE_SUBTREE, AUTH_LDAP_USER_SEARCH_FILTER ) AUTH_LDAP_ALWAYS_UPDATE_USER = True # 每次登录从ldap同步用户信息 AUTH_LDAP_USER_ATTR_MAP = { "username": "cn", "name": "displayName", "email": "email" } AUTH_LDAP_START_TLS = False # 指定CA证书的路径 #AUTH_LDAP_GLOBAL_OPTIONS = { # ldap.OPT_X_TLS_REQUIRE_CERT: True, # ldap.OPT_X_TLS_CACERTFILE: '/ca-dev.crt', #} AUTH_LDAP_CONNECTION_OPTIONS = { ldap.OPT_X_TLS_CACERTFILE: '/ca-prod.crt', ldap.OPT_X_TLS_REQUIRE_CERT: ldap.OPT_X_TLS_ALLOW, ldap.OPT_X_TLS_NEWCTX: 0, } LDAP_CA_CERT_FILE = '/ca-prod.crt' SUPPORTED_AUTHENTICATION = [ ("LDAP", ENABLE_LDAP), ("DINGDING", ENABLE_DINGDING), ("OIDC", ENABLE_OIDC), ]
复制
stop重启后再start生效。
用户登录后会自动创建一个后台账号,创建完成后管理员在后台进行配置即可。
其他配置
实例配置
在界面上创建实例即可,命名规则是{业务缩写}+{ip地址}+节点角色。
每个archery实例按照业务划分,为业务单独创建一个archery使用账号,如OA系统创建一个sql_oa;
一个三节点的MySQL集群,可能有多个业务数据库,但在archery上最好是按业务划分,方便后续管理。
权限组配置
权限组是多个权限的集合,以此将打包好的权限组授予用户更加方便。
目前划分为devops和dev_mngr两种,其中dev_mngr可以审批并执行自己提交的工单,一般是给项目负责人授予此权限组。
用户配置
用户由LDAP登录后自动创建,管理员授予DBA所有权限,以后DBA可以用自己的账号进行登录。
需要配置邮箱、权限组、资源组等。
资源组
创建资源组,关联用户和实例。
一个项目创建两个资源组:如OA和OA_mngr方便后续配置工单审核流。
注意如果想收到邮件,用户必须有此资源组的权限。如DBA应该授予所有资源组的权限。
工单审核流
为每个组配置相应的流程,依次选择相应的审批权限组即可,
如OA:DBA(普通开发用户提交的由DBA审批)
OA_mngr:dev_mngr(开发负责人提交的工单自己即可审批执行)
SQL审核规则
需配置goInception,本地需要安装mysql客户端,然后执行:
mysql -h127.0.0.1 -P4000
复制
然后查看可配置变量:
inception show variables;
复制
修改配置,如我这里关闭检查列注释,:
inception set check_column_comment = false; inception set enable_set_charset = true; inception set enable_set_collation = true;
复制
goInception参考:
https://hanchuanchuan.github.io/goInception/zh/demo.html#golang%E8%B0%83%E7%94%A8
复制
文章被以下合辑收录
评论
