特点:
1、可以轻松调整各节点间的复制关系,可以web图形化操作,可以命令行操作。
2、自动检测主库异常,并可以按照自定规则或者自主选择数据延迟最低的节点接替旧主库,还可以通过Hooks自定义脚本进行扩展。
3、支持管理节点的高可用,基于Raft分步式一致性协议。
4、自动发现MySQL的复制拓扑,并且在web上展示。
5、结合GTID,半同步复制可以轻松实现零数据丢失。
6、无侵入性,支持Mysql、Percona Mysql、MarriaDB等,现在类似的方案中, MGR, PXC都会不同程度的使用限制。
MySQL主从、GTID、半同步复制等主要配置省略,特别注意事项:
stop slave;
change master to master_host='192.168.44.129', master_port=3306, master_user='repl', master_password='repl123',master_auto_position=1,MASTER_HEARTBEAT_PERIOD=2,MASTER_CONNECT_RETRY=1,MASTER_RETRY_COUNT=86400;
set global slave_net_timeout=8;
start slave;
在被管理MySQL中建立用户
GRANT SELECT, RELOAD, PROCESS, SUPER, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'orchestrator'@'%' IDENTIFIED BY 'orchestrator';
下载并在主、从、从上安装orchestrator。
https://github.com/github/orchestrator/releases/download/v3.1.2/orchestrator-3.1.2-linux-amd64.tar.gz
tar xzvf orchestrator-3.1.2-linux-amd64.tar.gz -C /
vim /usr/local/orchestrator/orchestrator.conf.json
{
"Debug": true, #开启调试模式,测试结束后可以设置为false
"EnableSyslog": false,
"ListenAddress": ":3000", #orch监听端口
"MySQLTopologyUser": "orchestrator", #被管理数据库用户
"MySQLTopologyPassword": "orchestrator", #被管理数据库用户密码
"MySQLTopologyCredentialsConfigFile": "", #可以将用户密码配置到文件中
"MySQLTopologySSLPrivateKeyFile": "",
"MySQLTopologySSLCertFile": "",
"MySQLTopologySSLCAFile": "",
"MySQLTopologySSLSkipVerify": true,
"MySQLTopologyUseMutualTLS": false,
"BackendDB": "sqlite", #orch后台数据库类型
"SQLite3DataFile": "/usr/local/orchestrator/orchestrator.sqlite3", #orch后台数据库存放位置
"MySQLConnectTimeoutSeconds": 1,
"DefaultInstancePort": 3306,
"DiscoverByShowSlaveHosts": true,
"InstancePollSeconds": 5,
"UnseenInstanceForgetHours": 240,
"SnapshotTopologiesIntervalHours": 0,
"InstanceBulkOperationsWaitTimeoutSeconds": 10,
"HostnameResolveMethod": "default",
"MySQLHostnameResolveMethod": "@@hostname",
"SkipBinlogServerUnresolveCheck": true,
"ExpiryHostnameResolvesMinutes": 60,
"RejectHostnameResolvePattern": "",
"ReasonableReplicationLagSeconds": 10,
"ProblemIgnoreHostnameFilters": [],
"VerifyReplicationFilters": false,
"ReasonableMaintenanceReplicationLagSeconds": 20,
"CandidateInstanceExpireMinutes": 60,
"AuditLogFile": "",
"AuditToSyslog": false,
"ReadOnly": false,
"AuthenticationMethod": "",
"HTTPAuthUser": "",
"HTTPAuthPassword": "",
"AuthUserHeader": "",
"PowerAuthUsers": [
"*"
],
"ClusterNameToAlias": {
"127.0.0.1": "test suite"
},
"SlaveLagQuery": "",
"DetectClusterAliasQuery": "SELECT SUBSTRING_INDEX(@@hostname, '.', 1)",
"DetectClusterDomainQuery": "",
"DetectInstanceAliasQuery": "",
"DetectPromotionRuleQuery": "",
"PromotionIgnoreHostnameFilters": ["mysqls2"], #排除非意向候选备库
"DetectSemiSyncEnforcedQuery": "",
"ServeAgentsHttp": false,
"AgentsServerPort": ":3001",
"AgentsUseSSL": false,
"AgentsUseMutualTLS": false,
"AgentSSLSkipVerify": false,
"AgentSSLPrivateKeyFile": "",
"AgentSSLCertFile": "",
"AgentSSLCAFile": "",
"AgentSSLValidOUs": [],
"UseSSL": false,
"UseMutualTLS": false,
"SSLSkipVerify": false,
"SSLPrivateKeyFile": "",
"SSLCertFile": "",
"SSLCAFile": "",
"SSLValidOUs": [],
"URLPrefix": "",
"StatusEndpoint": "/api/status",
"StatusSimpleHealth": true,
"StatusOUVerify": false,
"AgentPollMinutes": 60,
"UnseenAgentForgetHours": 6,
"StaleSeedFailMinutes": 60,
"SeedAcceptableBytesDiff": 8192,
"PseudoGTIDPattern": "",
"PseudoGTIDPatternIsFixedSubstring": false,
"PseudoGTIDMonotonicHint": "asc:",
"DetectPseudoGTIDQuery": "",
"BinlogEventsChunkSize": 10000,
"SkipBinlogEventsContaining": [],
"ReduceReplicationAnalysisCount": true,
"FailureDetectionPeriodBlockMinutes": 1, #failover后多长时间内再次发现主库down掉,不予处理
"RecoveryPeriodBlockSeconds": 60, #failover后多长时间内再次发现主库down掉,不予处理
"RecoveryIgnoreHostnameFilters": [],
"RecoverMasterClusterFilters": ["*"], #主库down掉后,需要做recover的列表,不配置则不会理会
"RecoverIntermediateMasterClusterFilters": ["*"], #主库down掉后,需要做recover的列表,不配置则不会理会
"OnFailureDetectionProcesses": [
"echo 'Detected {failureType} on {failureCluster}. Affected replicas: {countSlaves}' >> /tmp/recovery.log"
],
"PreFailoverProcesses": [
"echo 'Will recover from {failureType} on {failureCluster}' >> /tmp/recovery.log"
],
"PostFailoverProcesses": [
"echo '(for all types) Recovered from {failureType} on {failureCluster}. Failed: {failedHost}:{failedPort}; Successor: {successorHost}:{successorPort}' >> /tmp/recovery.log"
"/usr/local/bin/orch_hook.sh {failureType} {failureClusterAlias} {failedHost} {successorHost} >> /tmp/orch.log"
],
"PostUnsuccessfulFailoverProcesses": [],
"PostMasterFailoverProcesses": [
"echo 'Recovered from {failureType} on {failureCluster}. Failed: {failedHost}:{failedPort}; Promoted: {successorHost}:{successorPort}' >> /tmp/recovery.log"
],
"PostIntermediateMasterFailoverProcesses": [
"echo 'Recovered from {failureType} on {failureCluster}. Failed: {failedHost}:{failedPort}; Successor: {successorHost}:{successorPort}' >> /tmp/recovery.log"
],
"CoMasterRecoveryMustPromoteOtherCoMaster": true,
"DetachLostSlavesAfterMasterFailover": true,
"ApplyMySQLPromotionAfterMasterFailover": true,
"PreventCrossDataCenterMasterFailover": false,
"PreventCrossRegionMasterFailover": false,
"MasterFailoverDetachSlaveMasterHost": false,
"MasterFailoverLostInstancesDowntimeMinutes": 0,
"PostponeSlaveRecoveryOnLagMinutes": 0,
"OSCIgnoreHostnameFilters": [],
"GraphiteAddr": "",
"GraphitePath": "",
"GraphiteConvertHostnameDotsToUnderscores": true,
"RaftEnabled": true, #启动orch高可用
"RaftBind": "192.168.44.129",
"RaftDataDir": "/var/lib/orchestrator",
"DefaultRaftPort": 10008,
"RaftNodes": [
"192.168.44.129",
"192.168.44.130",
"192.168.44.132"
]
}
在主、从、从上分别启动orchestrator,注意不能写绝对路径。
./orchestrator --config=./orchestrator.conf.json http
打开任意节点web管理端

网友评论