沃趣科技作為國(guó)內(nèi)領(lǐng)先的數(shù)據(jù)庫(kù)云平臺(tái)解決方案提供商,一直致力于企業(yè)級(jí)數(shù)據(jù)庫(kù)云平臺(tái)產(chǎn)品的研發(fā),為用戶提供高性能、高可用、可擴(kuò)展的的數(shù)據(jù)庫(kù)云環(huán)境及不同業(yè)務(wù)場(chǎng)景需求的數(shù)據(jù)庫(kù)平臺(tái),滿足客戶對(duì)極致性能、數(shù)據(jù)安全、容災(zāi)備份、業(yè)務(wù)永續(xù)等需求。沃趣科技憑借專業(yè)的團(tuán)隊(duì),優(yōu)質(zhì)的產(chǎn)品,前沿的技術(shù),貼心的服務(wù)贏得了客戶的信任與尊重,也獲得了市場(chǎng)的認(rèn)同。
成都創(chuàng)新互聯(lián)公司主要從事網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)類烏齊,十載網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來(lái)電咨詢建站服務(wù):028-86922220
————————————————————————————————————
上篇文章講了orchestrator單節(jié)點(diǎn)的安裝。本篇文章我們繼續(xù)探索orchestrator的旅程,講一講orchestrator是如何實(shí)現(xiàn)數(shù)據(jù)庫(kù)實(shí)例復(fù)制拓?fù)涞陌l(fā)現(xiàn)。
這里涉及到兩個(gè)參數(shù):HostnameResolveMethod、MySQLHostnameResolveMethod
HostnameResolveMethod有三個(gè)選項(xiàng):"cname"、"default"、"none"
cname:通過(guò)CNAME做域名解析(resolve hostname)
default:不做特別的解析, no special resolving via net protocols
none:do nothing
MySQLHostnameResolveMethod有三個(gè)選項(xiàng):"@@hostname"、"@@report_host"、""
@@hostname: select @@hostname
@@report_host: select @@report_host
"": do nothing
這里會(huì)有一個(gè)問(wèn)題需要注意:
假設(shè)生產(chǎn)環(huán)境存在兩臺(tái)數(shù)據(jù)庫(kù)服務(wù)器主機(jī)名一樣,比如都是localhost.localdomain;并且,orch配置參數(shù)HostnameResolveMethod使用了默認(rèn)的"default"、MySQLHostnameResolveMethod使用了默認(rèn)的"@@hostname"。那么,orch在 找的時(shí)候,會(huì)將用戶輸入的I P 地址解析成hostname,但因?yàn)榇嬖趦膳_(tái)hostname一樣的機(jī)器,所以可能會(huì)導(dǎo)致出錯(cuò),即orch找不到正確的那臺(tái)服務(wù)器。
因此,最好保證線上環(huán)境,不同服務(wù)器的主機(jī)名都不同。
由參數(shù)DiscoverByShowSlaveHosts控制。如果為true,則會(huì)嘗試先通過(guò)show slave hosts命令去發(fā)現(xiàn)從庫(kù)。此時(shí)會(huì)有三種情況。
從庫(kù)設(shè)置了正確的report_host,show slave hosts中的host字段顯示正確的IP,則直接通過(guò)show slave hosts發(fā)現(xiàn)從庫(kù)。
從庫(kù)設(shè)置了錯(cuò)誤的report_host,show slave hosts中的host字段顯示錯(cuò)誤的IP,則orchestrator找不到從庫(kù)。
- 如果IP ping不通,則報(bào)如下信息:
[mysql] 2019/10/29 17:57:24 driver.go:81: net.Error from Dial()': dial tcp 10.10.30.222:3306: i/o timeout
[mysql] 2019/10/29 17:57:25 driver.go:81: net.Error from Dial()': dial tcp 10.10.30.222:3306: i/o timeout
[mysql] 2019/10/29 17:57:26 driver.go:81: net.Error from Dial()': dial tcp 10.10.30.222:3306: i/o timeout
2019-10-29 17:57:26 ERROR driver: bad connection
- 如果IP ping的通,則可能報(bào)如下信息:
2019-10-29 18:15:34 ERROR dial tcp 10.10.30.228:3306: connect: connection refused
2019-10-29 18:15:40 ERROR dial tcp 10.10.30.228:3306: connect: connection refused
2019-10-29 18:15:46 ERROR dial tcp 10.10.30.228:3306: connect: connection refused
2019-10-29 18:15:52 ERROR dial tcp 10.10.30.228:3306: connect: connection refused
// 或者
2019-10-29 18:11:11 ERROR Error 1045: Access denied for user 'orchestrator'@'10.10.30.146' (using password: YES)
WARNING: NamedStopwatch.Stop("instance") IsRunning is false
2019-10-29 18:11:17 ERROR Error 1045: Access denied for user 'orchestrator'@'10.10.30.146' (using password: YES)
WARNING: NamedStopwatch.Stop("instance") IsRunning is false
從庫(kù)沒(méi)有設(shè)置report_host,show slave hosts中的host字段顯示為空,則通過(guò)processlist發(fā)現(xiàn)從庫(kù)。
- 此時(shí),會(huì)報(bào)如下信息:
2019-08-06 18:12:49 ERROR ReadTopologyInstance(10.10.30.129:3306) show slave hosts: ReadTopologyInstance(10.10.30.129:3306) 'show slave hosts' returned row with <host,port>: <,3306>
如果為false,則通過(guò)information_schema.processlist去發(fā)現(xiàn)從庫(kù)。
select substring_index(host, ':', 1) as slave_hostname from information_schema.processlist where command IN ('Binlog Dump', 'Binlog Dump GTID');
通過(guò)show slave status命令去發(fā)現(xiàn)主庫(kù)。
既然show slave status命令顯示的host不一定準(zhǔn)確,那為什么還要加入DiscoverByShowSlaveHosts這個(gè)參數(shù)呢?
這個(gè)有幾種原因:
首先,MaxScale不支持PROCESSLIST,因此SHOW SLAVE HOSTS是唯一的選擇。
更重要的是,如果只是通過(guò)information_schema.processlist去發(fā)現(xiàn)從庫(kù),master無(wú)法知道replica監(jiān)聽(tīng)的是哪個(gè)端口。show processlist只會(huì)顯示復(fù)制進(jìn)程使用的套接字端口,而不是replica實(shí)例監(jiān)聽(tīng)的端口。所以需要用戶在配置文件中設(shè)置好report_host和report_port參數(shù),并且在orch的配置文件中將參數(shù)DiscoverByShowSlaveHosts設(shè)置為true。
report_port
report_port其實(shí)可以不在mysql配置文件中配置,因?yàn)閞eport_port默認(rèn)會(huì)被設(shè)置成slave的端口。
The default value for this option is the port number actually used by the slave. This is also the default value displayed by SHOW SLAVE HOSTS.
DiscoverByShowSlaveHosts設(shè)置為false
這種情況下,orch通過(guò)information_schema.processlist去發(fā)現(xiàn)從庫(kù)。如果slave的端口和master的不一樣,orch會(huì)假設(shè)從庫(kù)監(jiān)聽(tīng)的是和主庫(kù)相同的端口,那么這個(gè)slave就無(wú)法被orch自動(dòng)發(fā)現(xiàn),需要人工手動(dòng)進(jìn)行發(fā)現(xiàn):
命令行:orchestrator-client -b hjj:hjj -c discover -i 10.10.30.230:3307
web界面:clusters/discover
實(shí)際生產(chǎn)環(huán)境中有可能主從端口不是同一個(gè),所以DiscoverByShowSlaveHosts不能為false。
DiscoverByShowSlaveHosts設(shè)置為true
如果沒(méi)有使用默認(rèn)的3306端口,比如slave用的是3308端口,然后在mysql的配置文件中又沒(méi)有配置report_host參數(shù),orch會(huì)先嘗試通過(guò)show slave hosts發(fā)現(xiàn)從庫(kù),但會(huì)報(bào)錯(cuò),然后再通過(guò)processlist去發(fā)現(xiàn)從庫(kù)。這個(gè)時(shí)候orch會(huì)假設(shè)從庫(kù)監(jiān)聽(tīng)的是和主庫(kù)相同的端口(并不會(huì)使用show slave hosts中得到的port的信息,因?yàn)闆](méi)有設(shè)置report_host,就無(wú)法將port和host對(duì)應(yīng)),如果此時(shí)主庫(kù)使用的是3306端口,那么這個(gè)slave就自動(dòng)發(fā)現(xiàn)不了。
##這里我的master是10.10.30.230:3307,slave是10.10.30.249:3306,且從庫(kù)沒(méi)有設(shè)置report_host
// show slave hosts報(bào)錯(cuò)信息如下
2019-10-29 17:37:18 ERROR ReadTopologyInstance(10.10.30.230:3307) show slave hosts: ReadTopologyInstance(10.10.30.230:3307) 'show slave hosts' returned row with <host,port>: <,3306>
// 顯示10.10.30.249:3307連不上,說(shuō)明通過(guò)processlist發(fā)現(xiàn)從庫(kù)用的是和主庫(kù)相同的端口
2019-10-29 17:37:24 ERROR dial tcp 10.10.30.249:3307: connect: connection refused
此時(shí)需要手動(dòng)進(jìn)行發(fā)現(xiàn):
命令行:orchestrator-client -b hjj:hjj -c discover -i 10.10.30.249:3306
web界面:clusters/discover
綜上考慮,我們需要將DiscoverByShowSlaveHosts設(shè)置為true,并且至少在mysql配置文件中設(shè)置正確的report_host。
參考文章
https://github.com/github/orchestrator/blob/master/docs/supported-topologies-and-versions.md
http://code.openark.org/blog/mysql/the-importance-of-report_host-report_port
韓杰 沃趣科技高級(jí)數(shù)據(jù)庫(kù)工程師
專注MySQL數(shù)據(jù)庫(kù)三年,精通MySQL體系結(jié)構(gòu),數(shù)據(jù)庫(kù)優(yōu)化,trouble shooting。服務(wù)過(guò)多家銀行客戶,熟悉銀行業(yè)務(wù)及系統(tǒng)下數(shù)據(jù)庫(kù)不同架構(gòu)使用場(chǎng)景。熟悉MySQL主從復(fù)制原理,及應(yīng)用的各種高可用場(chǎng)景。
網(wǎng)站標(biāo)題:【沃趣科技】MySQL高可用工具Orchestrator系列二:復(fù)制拓?fù)涞陌l(fā)現(xiàn)
分享網(wǎng)址:http://www.chinadenli.net/article38/jiippp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、靜態(tài)網(wǎng)站、標(biāo)簽優(yōu)化、網(wǎng)站營(yíng)銷、微信小程序、面包屑導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)