Archery部署

一、基础环境安装

1、升级Python

yum install epel-release

yum install python36 python36-pip

2、安装virtualenv

pip3.6 install virtualenv -i https://mirrors.aliyun.com/pypi/simple/

3、关闭SELinux

# vim /etc/sysconfig/selinux
SELINUX=enforcing 改为 SELINUX=disabled

 

二、安装Archery

1、准备虚拟环境

cd /usr/local/

virtualenv venv4archery --python=python3.6

source /usr/local/venv4archery/bin/activate(可利用deactivate退出)

2、安装依赖包

yum install gcc gcc-c++ python-devel python36-devel mysql-devel openldap-devel unixODBC-devel gettext

若mysql-devel安装报错,如下操作后重新执行即可

cd /etc/yum.repos.d/
rpm -ivh http://repo.mysql.com/mysql57-community-release-el7-8.noarch.rpm
yum install mysql-devel

3、下载源码包,安装Python相关依赖包

cd /usr/local

git clone https://github.com/hhyo/Archery.git

cd Archery

pip3.6 install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/

 

三、MySQL及Pt工具集的安装

5.7版本,略

Percona-Toolkits,略

 

四、goInception

1、go环境安装

# wget -c https://dl.google.com/go/go1.13.4.linux-amd64.tar.gz
# tar zxvf go1.13.4.linux-amd64.tar.gz -C /usr/local/
# echo "export PATH=$PATH:/usr/local/go/bin" >> /etc/profile
# source /etc/profile
# go version
输出:go version go1.13.4 linux/amd64,表示安装成功

 

2、安装goInception

wget -c https://github.com/hanchuanchuan/goInception/releases/download/v1.1.5/goInception-linux-amd64-v1.1.5.tar.gz

mkdir /usr/local/goInception

tar zxvf goInception-linux-amd64-v1.1.5.tar.gz -C /usr/local/goInception

cp /usr/local/goInception/config/config.toml.default /usr/local/goInception/config/config.toml

config.toml配置如下,基本配置为host、port,以及[inc] 内的备份库连接信息(需要SELECT, INSERT, CREATE权限)


# IP地址
host = "127.0.0.1"

# 端口
port = 4000

# TiDB数据库目录
path = "/tmp/tidb"

[log]
# 日志级别: debug, info, warn, error, fatal.
level = "info"

# 日志格式, one of json, text, console.
format = "text"

# 禁用时间戳输出
disable-timestamp = false

# 日志文件
[log.file]
# 日志文件名
filename = ""

# 日志文件的最大上限(MB)
max-size = 300

# Max日志文件的保存天数,默认值 `0`,即不清理
max-days = 0

# 要保留的最大旧日志文件数,默认值 `0`,即不清理
max-backups = 0

# 日志轮询,默认值 `true`,即开启
log-rotate = true

[inc]

backup_host = "127.0.0.1"
backup_port = 3306
backup_user = "inception_bak"
backup_password = "123456"

enable_nullable = true
enable_drop_table = false
enable_set_engine = true
enable_change_column = true

check_timestamp_count = true
check_table_comment = false
check_column_comment = false

# 审核列类型变更
check_column_type_change = true

# explain判断受影响行数时使用的规则, 默认值"first"
# 可选值: "first", "max"
#      "first":    使用第一行的explain结果作为受影响行数
#      "max":      使用explain结果中的最大值作为受影响行数
explain_rule = "first"

# 安全更新是否开启(mysql自身的功能).
# -1 表示不做操作,基于远端数据库 [默认值]
# 0  表示关闭安全更新
# 1  表示开启安全更新
sql_safe_updates = -1

support_charset = "utf8,utf8mb4"
support_engine = "innodb"

lang = "en-US"

# 全量日志
general_log = false

[osc]

# 用来设置在arkit返回结果集中,对于原来OSC在执行过程的标准输出信息是不是要打印到结果集对应的错误信息列中,
# 如果设置为1,就不打印,如果设置为0,就打印。而如果出现了错误,则都会打印。默认值:OFF
osc_print_none = false

# 对应参数pt-online-schema-change中的参数--print。默认值:OFF
osc_print_sql = false

# 全局的OSC开关,默认是打开的,如果想要关闭则设置为OFF,这样就会直接修改。默认值:OFF
osc_on = false

# 这个参数实际上是一个OSC开关,如果设置为0,则全部ALTER语句都使用OSC方式,
# 如果设置为非0,则当这个表占用空间大小大于这个值时才使用OSC方式。
# 单位为M,这个表大小的计算方式是通过语句
# select (DATA_LENGTH + INDEX_LENGTH)/1024/1024 from information_schema.tables
# where table_schema = 'dbname' and table_name = 'tablename' 来实现的。默认值:16
# [0-1048576]
osc_min_table_size = 16

# 对应参数pt-online-schema-change中的参数alter-foreign-keys-method,具体意义可以参考OSC官方手册。默认值:none
# [auto | none | rebuild_constraints | drop_swap]
osc_alter_foreign_keys_method = "none"

# 对应参数pt-online-schema-change中的参数recursion_method,具体意义可以参考OSC官方手册。默认值:processlist
# [processlist | hosts | none]
osc_recursion_method = "processlist"

# 对应参数pt-online-schema-change中的参数--max-lag。默认值:3
osc_max_lag = 3

# 对应参数pt-online-schema-change中的参数--[no]check-alter。默认值:ON
osc_check_alter = true

# 对应参数pt-online-schema-change中的参数--[no]check-replication-filters。默认值:ON
osc_check_replication_filters = true

# 对应参数pt-online-schema-change中的参数--[no]drop-old-table。默认值:ON
osc_drop_old_table = true

# 对应参数pt-online-schema-change中的参数--[no]drop-new-table。默认值:ON
osc_drop_new_table = true

# 对应参数pt-online-schema-change中的参数--max-load中的thread_running部分。默认值:80
osc_max_thread_running = 80

# 对应参数pt-online-schema-change中的参数--max-load中的thread_connected部分。默认值:1000
osc_max_thread_connected = 1000

# 对应参数pt-online-schema-change中的参数--critical-load中的thread_running部分。默认值:80
osc_critical_thread_running = 80

# 对应参数pt-online-schema-change中的参数--critical-load中的thread_connected部分。默认值:1000
osc_critical_thread_connected = 1000

# 对应参数pt-online-schema-change中的参数--chunk-time。默认值:1
osc_chunk_time = 1.0

# 对应参数pt-online-schema-change中的参数--chunk-size-limit。默认值:4
osc_chunk_size_limit = 4

# 对应参数pt-online-schema-change中的参数--chunk-size。默认值:1000
osc_chunk_size = 1000

# 对应参数pt-online-schema-change中的参数--check-interval,意义是Sleep time between checks for --max-lag。默认值:5
osc_check_interval = 5

osc_bin_dir = "/usr/local/bin"


[ghost]
# 略

[inc_level]
# 略

指定该配置文件启动:

/usr/local/goInception/goInception -config=/usr/local/goInception/config/config.toml &

使用4000端口连接(默认):mysql -h127.0.0.1 -P4000

 

五、SOAR

详见另一篇博文:

小米SQL优化改写工具: SOAR 初体验

 

六、Nginx

touch /etc/yum.repos.d/nginx.repo,填入以下yum源信息

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

yum install nginx

修改配置文件 /etc/nginx/conf.d/nginx.conf

server{
        listen 9123; # 监听的端口
        server_name archery;
        client_max_body_size 20M; # 处理Request Entity Too Large
        proxy_read_timeout 600s;  # 超时时间与Gunicorn超时时间设置一致,主要用于在线查询

        location / {
          proxy_pass http://127.0.0.1:8000;
          proxy_set_header Host $host:9123; # 解决重定向404的问题,和listen端口保持一致,如果是docker则和宿主机映射端口保持一致
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header X-Forwarded-Proto $scheme;
        }

        location /static {
          alias /usr/local/Archery/static; # 此处指向settings.py配置项STATIC_ROOT目录的绝对路径,用于nginx收集静态资源
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    } 

 /etc/sysconfig/iptables中开放9123端口

systemctl start iptables

systemctl restart nginx

 

七、Redis

wget -c http://download.redis.io/releases/redis-5.0.7.tar.gz
tar zxvf redis-5.0.7.tar.gz
cd redis-5.0.7
make

make install PREFIX=/usr/local/redis
mkdir /usr/local/redis/etc
cp redis.conf /usr/local/redis/etc
修改/usr/local/redis/etc/redis.conf:

#实现后台运行

daemonize yes

运行(配置文件有更新,直接再次运行,重载配置)
redis-server /usr/local/redis/etc/redis.conf

登录

redis-cli

127.0.0.1:6379> CONFIG SET requirepass "123456"
OK
127.0.0.1:6379> AUTH 123456

后续登录先输入密码

 

八、Archery配置

1、配置信息修改

配置文件:/usr/local/Archery/archery/settings.py,必要配置项如下:

# secret key用于敏感信息加密,必须启用,且需要自行替换为其他随机值
SECRET_KEY = 'hfusaf2m4ot#7)fkw#di2bu6(cv0@opwmafx5n#6=3d%x^hpl6'

# 关闭debug模式
DEBUG = False

# 设置ALLOWED_HOSTS,建议限制内网访问
ALLOWED_HOSTS = [
    '.example.com',  # Allow domain and subdomains
    '.example.com.',  # Also allow FQDN and subdomains

# 请求SQL大小限制,可按需修改,默认15M
DATA_UPLOAD_MAX_MEMORY_SIZE = 15728640

#MySQL配置
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'archery', #数据库名
        'USER': 'root', #数据用户名
        'PASSWORD': '', #数据库密码
        'HOST': '127.0.0.1',
        'PORT': '3306',
        'OPTIONS': {
            'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
            'charset': 'utf8mb4'
        },
        'TEST': {
            'NAME': 'test_archery',
            'CHARSET': 'utf8mb4',
        },
    }
}


#Redis配置
CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/0",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
            "PASSWORD": "123456"
        }
    },
    "dingding": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/1",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
            "PASSWORD": ""
        }
    }
}

 

2、数据库初始化

# 创建 archery 数据库
create database archery default character set=utf8mb4;

cd /usr/local/Archery

python3.6 manage.py makemigrations sql

python3.6 manage.py migrate

python3.6 manage.py loaddata initial_data.json

python3.6 manage.py createsuperuser

此时会要求输入用户名密码,用于web页面登录

Username: admin
Email address: admin@WD.com
Password: adminpass

 

3、启动

source /usr/local/venv4archery/bin/activate

cd /usr/local/Archery/

功能测试:

python3.6 manage.py test -v 3

启动:

./startup.sh &

Web默认地址:http://127.0.0.1:9123

 

九、功能模块配置

1、goInception

(1)

 

2、SOAR

(1)SOAR

 

 

附、参考资料

Archery项目Github地址

开源SQL审核平台——Archery 安装、部署心得

archery 平台升级部署实践

 

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值