Archery1.10.0部署和配置

准备工作

从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:填生成的终端授权复杂密码

其他配置

  • MY2SQL
    功能类似于Binlog2SQL,通过多线程以更高的性能快速解析binlog。支持回滚、去除主键、去db前缀及分表输出文件等多种解析模式,并拥有完备的过滤筛选项;支持异步获取文件,并且通知执行结果。
    docker镜像已包含,无需手动再安装,只需在web页面进行配置:
/opt/archery/src/plugins/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://ldap1.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(开发负责人提交的工单自己即可审批执行)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容