暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Orchestrator:01基础篇

万能修实验室 2021-07-14
3047


Orchestrator是什么

Orchestrator是一个对MySQL复制提供高可用、拓扑、管理和可视化的工具,它能够主动发现当前拓扑结构和主从复制状态,也可以重构当前的拓扑结构,识别各种故障并自动恢复。


它有许多不错的功能

  • 自动检测和监控复制状态和拓扑结构

  • 可以使用GUI,CLI或API来检查和执行操作

  • 支持主库的自动故障转移,并且当发生故障时,可以手动或自动修复

  • 不依赖于MySQL的任何特定版本或分支(MySQL,Percona Server,MariaDB都支持)

  • 支持许多不同类型的拓扑,从简单的主 - >从结构,到由数百台服务器组成的复杂多层复制

  • 可根据当时的状态进行拓扑更改; 而不需要预先对数据库拓扑定义相对应的配置。

  • 提供友好美观的图形界面,通过拖放即可在Web界面更改复制关系(也可以通过CLI和API操作以及更多功能)


功能演示


支持的拓扑结构和版本

  • GTID复制。(Oracle GTID和MariaDB GTID都支持)

  • SBR和RBR都可以。(Statement-Based and Row-Based Replication)

  • 半同步复制

  • 单主复制、级联复制

  • Master-Master 复制(两个节点)

  • 5.7并行复制

    • 使用GTID时,没有限制。

    • 使用Pseudo-GTID时,必须启用 slave_preserve_commit_order


不支持的拓扑结构和版本

  • 不支持3个节点以上的主主(Master-Master)复制

  • 不支持多源复制(多主一从 Multi master replication )

  • 不支持5.6版本的并行复制 (thread per schema) 

  • 不支持Percona XtraDB Cluster(Galera)

  • 不支持Tungsten replicator 方式的复制


下面愉快的开始吧!



发错车了,是这辆


1 下载安装软件包

    wget https://github.com/github/orchestrator/releases/download/v3.0.13/orchestrator-3.0.13-1.x86_64.rpm
    rpm -ivh orchestrator-3.0.13-1.x86_64.rpm


    安装后的位置:/usr/local/orchestrator


    建立个软连接到  usr/bin/:

      ln -s usr/local/orchestrator/orchestrator  usr/bin/orchestrator


      Orchestrator服务端建立数据库和用户:

        CREATE DATABASE IF NOT EXISTS orchestrator;
        GRANT ALL PRIVILEGES ON `orchestrator`.* TO 'orc_server'@'%' IDENTIFIED BY 'orc_server_pass';


        2 参数配置


        准备参数文件:

          cp /usr/local/orchestrator/orchestrator-sample.conf.json etc/orchestrator.conf.json
          vi /etc/orchestrator.conf.json


          找到如下内容修改:

            {
            "ListenAddress": ":3333",
            "AuthenticationMethod": "basic",
            "HTTPAuthUser": "caihao",
            "HTTPAuthPassword": "caihao",


            "MySQLTopologyUser": "orc_client",
            "MySQLTopologyPassword": "orch_client_pass",


            "MySQLOrchestratorHost": "127.0.0.1",
            "MySQLOrchestratorPort": 3306,
            "MySQLOrchestratorDatabase": "orchestrator",
            "MySQLOrchestratorUser": "orc_server",
            "MySQLOrchestratorPassword": "orc_server_pass",


            "HostnameResolveMethod": "none",
            "MySQLHostnameResolveMethod": "",


            "RecoverMasterClusterFilters": ["*"],
            "RecoverIntermediateMasterClusterFilters": ["*"],


            "PostMasterFailoverProcesses": [
            "sudo -u orchestrator usr/local/orchestrator/failover.sh {failureType} {failureClusterAlias} {failedHost} {successorHost} >> tmp/orc_failover.log"
            ],
            }



            参数说明:

            https://github.com/github/orchestrator/blob/master/go/config/config.go


              "ListenAddress": ":3333",                      --供WebGUI访问的端口
              "AuthenticationMethod": "basic", --身份验证类型。可选如下参数:
                  1 ""  无认证,
              2 "basic" 用户密码认证
              3 "multi" 类似basic,但也接受用户readonly使用任何密码。readonly用户被允许查看所有内容,但无法通过API来执行写入操作
              (such as stopping a replica, repointing replicas, discovering new instances etc.)
              "HTTPAuthUser": "caihao", --身份验证用户名
              "HTTPAuthPassword": "caihao", --身份验证密码

              "MySQLTopologyUser": "orc_client", --client 用户名密码
              "MySQLTopologyPassword": "orch_client_pass", --client 用户名密码


              "HostnameResolveMethod": "none", --所有数据库使用IP地址识别【默认是主机名识别,而且要唯一】
              "MySQLHostnameResolveMethod": "",

              "MySQLOrchestratorHost": "127.0.0.1", --Orchestrator Server DB的配置信息
              "MySQLOrchestratorPort": 3306,
              "MySQLOrchestratorDatabase": "orchestrator",
              "MySQLOrchestratorUser": "orc_server",
              "MySQLOrchestratorPassword": "orc_server_pass",


              "RecoverMasterClusterFilters": ["*"], --定义哪些集群可以自动failover/recover
              "RecoverIntermediateMasterClusterFilters": ["*"],


              "PostMasterFailoverProcesses": --指定故障转移后要执行的操作。(可以多次指定)。如稍后所述运行故障转移脚本。


              性能优化参数:


              官方建议的生产配置示例:

              https://github.com/github/orchestrator/blob/master/docs/configuration-sample.md


              建议修改以下参数:

                "MySQLConnectTimeoutSeconds":   1,         --Orch连接MySQL的超时时间,默认2
                "InstancePollSeconds": 3, --Orch探测MySQL的间隔秒数,默认5
                "MySQLTopologyReadTimeoutSeconds": 3, --中止拓扑mysql读取操作之前的秒数(驱动程序端)。用于除发现查询以外的所有查询 默认600
                "MySQLDiscoveryReadTimeoutSeconds": 3, --中止拓扑mysql读取操作之前的秒数(驱动程序端)。用于发现查询。默认10
                "SkipMaxScaleCheck": true, --如没配置MaxScale BinlogServer(大多数没有),设置为“true”以避免无意义的查询。默认false
                "RecoveryPeriodBlockSeconds"60,         --在该时间内再次出现故障,不会进行切换,避免出现并发恢复和不稳定。默认3600


                根据业务可选择调整:

                  "CandidateInstanceExpireMinutes": 60,        --多少分钟后,使用实例作为候选副本的建议已过期。默认60
                  "MySQLOrchestratorMaxPoolConnections": 128, --Orchestrator后端的连接池的最大大小,默认128
                  "MySQLOrchestratorReadTimeoutSeconds": 30, --后端MySQL读超时时间 默认30


                  其他一些参数:

                    SlaveLagQuery:检查复制延迟
                    PreventCrossDataCenterMasterFailover: 如果为true(默认值:false),则不允许跨DC故障转移,orchestrator将尽其所能仅在同一DC内进行故障转移,否则不进行故障转移。AgentAutoDiscover:设置为true的话,orchestrator将会自动发现复制拓扑的变化
                    PreFailoverProcesses:定义failover前orchestrator做什么操作
                    PostFailoverProcesses:定义failover后orchestrator做什么操作
                    ApplyMySQLPromotionAfterMasterFailover:如果设置true为, failover后将提升为master的slave独立出来
                    DataCenterPattern:如果有多个数据中心,可以采用不同颜色标记


                    3 启动Orchestrator

                      /etc/init.d/orchestrator start


                      或者

                        cd usr/local/orchestrator && ./orchestrator http


                        debug模式:

                          cd usr/local/orchestrator && ./orchestrator --debug http


                          访问页面(默认是3000端口)

                          http://10.7.91.63:3333


                          4 客户端数据库上建立用户

                            GRANT SUPER, PROCESS, REPLICATION SLAVE, RELOAD ON *.* TO 'orc_client'@'%' IDENTIFIED BY 'orch_client_pass';
                            GRANT SELECT ON mysql.slave_master_info TO 'orc_client'@'%';


                            5 添加要监控的数据库

                              curl http://10.4.4.104:3333/api/discover/db1/3306


                              或者在页面中Discover添加


                              添加之后可以在Dashboard中找到。



                              6 切换测试

                              只要Orch发现了复制关系中的一个节点,就会找到对应的master或者slave,识别出拓扑结构。这里尝试下把其中一个从库切换为主库。



                              切换前需要再确认



                              切换完成。但是原主库状态是红色,因为切换后,需手动start slave继续同步



                              图形界面中即可启动同步操作。注意这个是原来的主库,下面的read only已经自动修改为true



                              启动后,新拓扑结构中主从同步正常。



                              总结

                              Orchestrator默认只提供高可用的切换功能,很多方面仍需手工介入。要真正达到生产的标准,可以用以下方式进行补充:

                              1. VIP方式:默认绑定到主库,主从切换后漂移。

                              2. DNS:基于DNS识别当前主从关系。例如 Consul 。

                              3. 代理方式:DB前加一层Proxy分发读写请求。例如ProxySQL MaxScale , HAProxy 之类。


                              下几篇文章将继续探讨Orchestrator关于VIP切换、常规操作、高可用方式等方面的细节,欢迎关注订阅,周末愉快。







                              文章转载自万能修实验室,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                              评论