部署教程
部署MySQL
orchestrator的元数据服务依赖MySQL,所以这里需要给每个orchestrator节点部署一个MySQL作为元数据服务。
具体如何部署MySQL这里不详细展开。
元数据初始化
CREATE DATABASE IF NOT EXISTS orchestrator;
CREATE TABLE IF NOT EXISTS orchestrator.`failover_circuit_breaker_config` (
`id` int(11) NOT NULL,
`value` int(11) DEFAULT NULL,
`createtime` bigint(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO failover_circuit_breaker_config values(1,4,1608710638);
部署Orchestrator
下载安装包,下载地址:Release GA release v3.2.6 · openark/orchestrator · GitHub
并安装包解压到/usr/local/orchestrator 目录,启动修改相关配置文件,orchestrator.conf.json配置文件内容修改重点:
{
"Debug": true,
"EnableSyslog": true,
"ListenAddress": ":3000",
"MySQLTopologyUser": "orchestrator", # 管理MySQL集群的通用账号
"MySQLTopologyPassword": "******", # 管理MySQL集群的通用密码
"MySQLTopologyCredentialsConfigFile": "",
"MySQLTopologySSLPrivateKeyFile": "",
"MySQLTopologySSLCertFile": "",
"MySQLTopologySSLCAFile": "",
"MySQLTopologySSLSkipVerify": true,
"MySQLTopologyUseMutualTLS": false,
"MySQLOrchestratorHost": "127.0.0.1", #元数据库地址,只需要本地单机部署,高可用和一致性交给orc本身去保证
"MySQLOrchestratorPort": 33066, #元数据库端口
"MySQLOrchestratorDatabase": "orchestrator", #元数据scheme
"MySQLOrchestratorUser": "dbauser", #元数据库账号
"MySQLOrchestratorPassword": "******", #元数据库密码
"MySQLOrchestratorCredentialsConfigFile": "",
"MySQLOrchestratorSSLPrivateKeyFile": "",
"MySQLOrchestratorSSLCertFile": "",
"MySQLOrchestratorSSLCAFile": "",
"MySQLOrchestratorSSLSkipVerify": true,
"MySQLOrchestratorUseMutualTLS": false,
"MySQLConnectTimeoutSeconds": 1,
"DefaultInstancePort": 33066, #管理集群的实例端口
"DiscoverByShowSlaveHosts": true,
"InstancePollSeconds": 5,
"DiscoveryIgnoreReplicaHostnameFilters": [
],
"UnseenInstanceForgetHours": 240,
"SnapshotTopologiesIntervalHours": 0,
"InstanceBulkOperationsWaitTimeoutSeconds": 30,
"HostnameResolveMethod": "none",
"MySQLHostnameResolveMethod": "",
"SkipBinlogServerUnresolveCheck": true,
"ExpiryHostnameResolvesMinutes": 60,
"RejectHostnameResolvePattern": "",
"ReasonableReplicationLagSeconds": 10,
"ProblemIgnoreHostnameFilters": [],
"VerifyReplicationFilters": false,
"ReasonableMaintenanceReplicationLagSeconds": 20,
"CandidateInstanceExpireMinutes": 60,
"AuditLogFile": "",
"AuditToSyslog": false,
"RemoveTextFromHostnameDisplay": "",
"ReadOnly": false,
"AuthenticationMethod": "multi",
"HTTPAuthUser": "dba", #web服务登录账号
"HTTPAuthPassword": "******", #web服务登录密码
"AuthUserHeader": "",
"PowerAuthUsers": [
"*"
],
"ClusterNameToAlias": {
},
"SlaveLagQuery": "",
"DetectClusterAliasQuery": "",
"DetectClusterDomainQuery": "",
"DetectInstanceAliasQuery": "",
"DetectPromotionRuleQuery": "",
"DataCenterPattern": "",
"PhysicalEnvironmentPattern": "",
"PromotionIgnoreHostnameFilters": [],
"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,
"AutoPseudoGTID": true,
"PseudoGTIDPattern": "",
"PseudoGTIDPatternIsFixedSubstring": false,
"PseudoGTIDMonotonicHint": "asc:",
"DetectPseudoGTIDQuery": "",
"BinlogEventsChunkSize": 10000,
"SkipBinlogEventsContaining": [],
"ReduceReplicationAnalysisCount": true,
"FailureDetectionPeriodBlockMinutes": 60,
"RecoveryPeriodBlockSeconds": 600,
"RecoveryIgnoreHostnameFilters": [],
"RecoverMasterClusterFilters":["*"],
"RecoverIntermediateMasterClusterFilters": ["*"],
"OnFailureDetectionProcesses": [
"/usr/local/orchestrator/failureDetection.sh {failureCluster} {failureType} {countSlaves}"
],
"PreFailoverProcesses": [
"/usr/local/orchestrator/preFailover.sh {failedHost} {failedPort}"
], #切换前钩子脚本
"PostFailoverProcesses": [
"/usr/local/orchestrator/postFailover.sh {failedHost} {failedPort} {successorHost} {successorPort}"
], #切换后调用的钩子脚本
"PostUnsuccessfulFailoverProcesses": [
"/usr/local/orchestrator/postUnsuccessfulFailover.sh {failedHost} {failedPort} {failureType} {failureCluster}"
], #切换失败调用的钩子脚本
"PostMasterFailoverProcesses": [
],
"PostIntermediateMasterFailoverProcesses": [
],
"CoMasterRecoveryMustPromoteOtherCoMaster": true,
"DetachLostSlavesAfterMasterFailover": true,
"ApplyMySQLPromotionAfterMasterFailover": true,
"PreventCrossDataCenterMasterFailover": false,
"PreventCrossRegionMasterFailover": false,
"MasterFailoverDetachSlaveMasterHost": false,
"MasterFailoverLostInstancesDowntimeMinutes": 0,
"DelayMasterPromotionIfSQLThreadNotUpToDate": true,
"PostponeSlaveRecoveryOnLagMinutes": 0,
"OSCIgnoreHostnameFilters": [],
"GraphiteAddr": "",
"GraphitePath": "",
"GraphiteConvertHostnameDotsToUnderscores": true,
"RaftEnabled": true,
"RaftBind": "127.0.0.1", #本地节点服务监听地址
"RaftDataDir": "/usr/local/orchestrator/raftdata",
"DefaultRaftPort": 10008, #监听端口
"RaftNodes": [
"mysql-orchestrator-0",
"mysql-orchestrator-1",
"mysql-orchestrator-2"
] #三节点高可用,集群节点ip列表,
}
启动orchestrator服务
cd /usr/local/orchestrator
rm -rf ./raftdata #
./orchestrator --config=./orchestrator.conf.json --debug http >> ./orchestrator.log 2>&1 &