美文网首页
2021.09.22 [MySQL 读写分离]使用小米中间件Ga

2021.09.22 [MySQL 读写分离]使用小米中间件Ga

作者: 薛定谔的猴子 | 来源:发表于2021-09-22 21:37 被阅读0次

    一、Gaea 简介

    Gaea是小米中国区电商研发部研发的基于mysql协议的数据库中间件,目前在小米商城大陆和海外得到广泛使用,包括订单、社区、活动等多个业务。Gaea支持分库分表、sql路由、读写分离等基本特性。本文将介绍Gaea 部署的过程,以及数据库监控图表的部署过程。

    项目地址:https://github.com/XiaoMi/Gaea

    使用版本:v1.2.2,发行日期:2020-11-24

    二、Go 环境安装

    可参考文章:Linux系统下安装Go语言环境_李维山的博客-CSDN博客

    三、Gaea 安装教程

    环境描述
    系统:CentOS 7.5
    Mysql:5.7
    Go: 1.13.4

    1、下载安装包

    存放路径: /usr/local/gaea

    目前仅支持在Linux中部署

    2、修改名称

    下载后,修改名称,方便直接在系统中使用

    mv gaea-v1.2.2-linux-amd64-go1.13.4 gaea
    

    3、新增配置文件,在/usr/local/gaea目录中,新增gaea.ini文件

    Gaea是支持基于文件的namespace配置的,因此config_type=file

    ; config type, etcd/file, you can test gaea with file type, you shoud use etcd in production
    config_type=file
    ;file config path, 具体配置放到file_config_path的namespace目录下,该下级目录为固定目录
    file_config_path=cd /usr/local/gaea/file
    
    ;coordinator addr
    coordinator_addr=http://127.0.0.1:2379
    
    ;远程配置(当前为etcd)根目录
    ;将会废弃该配置项,通过cluster name识别root
    coordinator_root=/gaea
    
    ;etcd user config
    username=root
    password=root
    ;environ
    environ=online
    
    ;service name
    service_name=gaea_proxy
    ;gaea_proxy cluster name
    cluster_name=gaea
    
    ;log config
    log_path=./logs
    log_level=Notice
    log_filename=gaea
    log_output=file
    
    ;admin addr
    admin_addr=0.0.0.0:13307
    ; basic auth
    admin_user=admin
    admin_password=admin
    
    ;proxy addr
    proto_type=tcp4
    proxy_addr=0.0.0.0:13306
    proxy_charset=utf8
    
    ;slow sql time, when execute time is higher than this, log it, unit: ms
    slow_sql_time=100
    
    ;close session after session timeout, unit: seconds
    session_timeout=3600
    
    ;stats conf
    stats_enabled=true 
    
    ;encrypt key
    encrypt_key=1234abcd5678efg*
    

    4、新增配置文件

    • 创建namespace文件夹,路径为/usr/local/gaea/file/namespace
    • 创建test_namespace_1.json文件,路径为/usr/local/gaea/file/namespace/test_namespace_1.json

    关于字段解释,可参考官方文档:配置说明

    {
        "name": "test_namespace_1",
        "online": true,
        "read_only": false,
        "allowed_dbs": {
            "cibe_app": true,
            "information_schema":true,
            "mysql":true,
            "performance_schema":true,
            "sys":true
        },
        "slow_sql_time": "1000",
        "black_sql": [
            ""
        ],
        "allowed_ip": null,
        "slices": [
            {
                "name": "slice-0",
                "user_name": "cibeappuroot",
                "password": "CIBE@app1031r00t",
                "master": "121.0.0.139:43306",
                "slaves": ["121.0.0.139:43307"],
                "statistic_slaves": null,
                "capacity": 1200,
                "max_capacity": 2400,
                "idle_timeout": 60
            }
        ],
        "shard_rules": null,
        "users": [
            {
                "user_name": "root",
                "password": "11223344",
                "namespace": "test_namespace_1",
                "rw_flag": 2,
                "rw_split": 1,
                "other_property": 0
            }
        ],
        "default_slice": "slice-0",
        "global_sequences": null
    }
    

    5、启动命令

    #进入目录
    cd /usr/local/gaea
    
    #启动方式 1
    ./gaea -config "/usr/local/gaea/gaea.ini"
    
    #启动方式 2,如果想在后台运行
    nohup ./gaea -config "/usr/local/gaea/gaea.ini" &
    

    若启动成功,则会见到如下图片:


    滚动日志

    6、查询端口使用情况

    进程启动后查看默认监听端口13306如果正常监听,则说明启动成功

    netstat -antup | grep 13306
    

    7、使用数据库管理工具、或使用mysql-connector-java连接数据库

    IP地址:自己的IP地址
    端口:13306
    账号:与test_namespace_1.json中的users的user_name保持一致
    密码:与test_namespace_1.json中的users的password保持一致

    四、借助Prometheus 、Grafana 进行数据库监控

    官方描述:“gaea proxy基于prometheus做统计数据的存储,使用grafana实现数据可视化展示。”

    具体部署教程如下:

    1、Prometheus 的部署

    tar xvfz prometheus-2.15.0.linux-amd64.tar.gz
    cd prometheus-2.15.0.linux-amd64
    mv prometheus-2.15.0.linux-amd64 /usr/local/prometheus
    
    • 启动
    ./prometheus --config.file=prometheus.yml
    
    • 加入到服务配置文件里,并设置为热加载。步骤如下:
    vim /etc/systemd/system/prometheus.service
    

    加入 --web.enable-lifecycle

    [Unit]
    Description=Prometheus
    Documentation=https://prometheus.io/
    After=network.target
    
    [Service]
    Type=simple
    User=prometheus
    ExecStart=/data/prometheus/bin/prometheus --config.file=/data/prometheus/conf/prometheus.yml --storage.tsdb.path=/data/prometheus/data --storage.tsdb.retention=90d --web.enable-lifecycle
    Restart=on-failure
    
    [Install]
    WantedBy=multi-user.target
    
    • 启动、重启、停止命令
    systemctl start prometheus
    systemctl restart prometheus
    systemctl stop prometheus
    
    • 修改配置文件
    vim /data/prometheus/conf/prometheus.yml
    

    在rule_files中加入规则配置,在scrape_configs中加入gaea的监控

    rule_files:
      - "/data/prometheus/rules/gaea_proxy_rule.yml"
    scrape_configs:
      - job_name: 'prometheus'
        static_configs:
        - targets: ['localhost:9090']
      - job_name: "gaea_proxy"
        metrics_path: '/api/metric/metrics'
        static_configs:
        - targets: ["localhost:13307"]
        basic_auth:
          username: admin
          password: admin
    

    需要修改admin_addr,admin_user,admin_password与gaea.ini中的以下几项保持一致。

    ;管理地址
    admin_addr=0.0.0.0:13307
    ;basic auth
    admin_user=admin
    admin_password=admin
    

    增加gaea_proxy_rule.yml,路径为/data/prometheus/rules

    groups:
      - name: gaea_proxy_rule
        rules:
        - record: gaea_proxy_sql_timings_count_rate_each_namespace
          expr: sum(avg(rate(gaea_proxy_sql_timings_count[20s])) without (slave)) by (namespace)
        - record: gaea_proxy_sql_timings_count_rate_total
          expr: sum(sum(avg(rate(gaea_proxy_sql_timings_count[20s])) without (slave)) by (namespace))
        - record: gaea_proxy_flow_counts_rate_namespace_flowdirection
          expr: sum(avg(rate(gaea_proxy_flow_counts[20s])) without (slave)) by (namespace, flowdirection)
        - record: gaea_proxy_flow_counts_rate_namespace
          expr: sum(avg(rate(gaea_proxy_flow_counts[20s])) without (slave)) by (namespace)
        - record: gaea_proxy_flow_counts_rate_total
          expr: sum(sum(avg(rate(gaea_proxy_flow_counts[20s])) without (slave)) by (namespace))
        - record: gaea_proxy_sql_timings_rate_namespace_operation
          expr: sum(delta(gaea_proxy_sql_timings_sum[20s])) by (namespace,operation) / sum(delta(gaea_proxy_sql_timings_count[20s])) by (namespace,operation)
        - record: gaea_proxy_sql_timings_rate_namespace
          expr: sum(delta(gaea_proxy_sql_timings_sum[20s])) by (namespace) / sum(delta(gaea_proxy_sql_timings_count[20s])) by (namespace)
        - record: gaea_proxy_sql_error_counts_rate_namespace
          expr: sum(avg(rate(gaea_proxy_sql_error_counts[20s])) without (instance)) by (namespace)
    
    

    运行热加载命令

    curl -XPOST http://localhost:9090/-/reload
    

    打开浏览器,输入IP+端口,9090为默认侦听端口,菜单切换到 Status >> Targets ,即可发现多了一个Target


    2、Grafana 的部署

    tar xvfz grafana-enterprise-8.1.5.linux-amd64.tar.gz
    cd grafana-enterprise-8.1.5.linux-amd64
    mv grafana-enterprise-8.1.5.linux-amd64 /usr/local/grafana
    
    • 后台启动
    cd /usr/local/grafana/bin
    nohup ./grafana-server web & 
    

    打开浏览器,输入IP+端口,3000为Grafana的默认端口

    系统默认用户名和密码为admin/admin,第一次登陆系统会要求修改密码,修改密码后登陆,界面显示如下:

    • 添加 Prometheus 的配置
    左侧菜单栏,选择“Dta sources” 选择Prometheus 填写URL 最后保存并测试链接
    • 配置监控图表


      左侧菜单栏,选择“Manage”
    选择 Import

    填充官方提供的json文件:gaea_proxy.json

    效果如下:


    参考文章:

    1、 小米开源数据库中间件Gaea实战

    2、【MySQL】Gaea 数据库中间件实现 MySQL 读写分离_yuxiangdeming的博客-CSDN博客

    相关文章

      网友评论

          本文标题:2021.09.22 [MySQL 读写分离]使用小米中间件Ga

          本文链接:https://www.haomeiwen.com/subject/ipqggltx.html