您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關(guān)Linux中shell如何實現(xiàn)HTTP服務(wù)的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
一、前言
使用代理服務(wù)器 HAProxy 對 Mysql 做負(fù)載均衡是常用方案,為提高可用性,當(dāng)某個 Mysql 出現(xiàn)問題時,例如服務(wù)器故障了,或者數(shù)據(jù)復(fù)制中斷了,最好可以讓 HAProxy 馬上知道,然后停止向其轉(zhuǎn)發(fā)請求。
二、解決思路
(1)編寫一個shell腳本,檢查 mysql 的狀態(tài),然后輸出結(jié)果,例如狀態(tài)正常時,返回狀態(tài)碼200及正確信息,否則返回狀態(tài)碼503及錯誤信息
(2)實現(xiàn)一個HTTP服務(wù),有請求連接后,調(diào)用上面的檢查腳本,返回檢查結(jié)果
(3)HAProxy 訪問這個HTTP服務(wù),根據(jù)返回的結(jié)果信息來判斷這個 mysql 是否可用
如何方便快速的實現(xiàn)一個可以調(diào)用shell腳本的HTTP服務(wù)呢?
比較通用的方案就是 xinetd
xinetd 是 Linux 的守護(hù)進(jìn)程,全稱為 extended interent daemon,擴展的網(wǎng)絡(luò)守護(hù)進(jìn)程
xinetd 可以打開一個端口,等待連接,你可以告訴 xinetd 運行哪個腳本,當(dāng)有連接進(jìn)來后,xinetd 便會執(zhí)行腳本,然后直接返回腳本輸出的內(nèi)容
HAProxy -> xinetd -> mysql-check
腳本,HAProxy 便取得了mysql的狀態(tài)信息
xinetd 的配置案例
下面實現(xiàn)一個簡單的 xinetd 示例,開放 9200 端口,返回一個測試腳本的輸出內(nèi)容
如果機器上還沒有 xinetd,先安裝一下,centos7 下可以使用命令 yum install xinetd
(1)測試腳本
#!/bin/bash echo `uptime | egrep -o 'up ([0-9]+) days' | awk '{print $2}'`
這個腳本用來輸出當(dāng)前服務(wù)器的在線天數(shù)
用 chmod +x
給腳本添加可執(zhí)行權(quán)限
(2)編寫 xinetd 服務(wù)
例如服務(wù)名為 helloworld
,文件名 /etc/xinetd.d/helloworld
,內(nèi)容為
service helloworld { disable = no port = 9200 socket_type = stream protocol = tcp wait = no user = root server = /root/test.sh server_args = test }
port
指定監(jiān)聽的端口
server
指定要執(zhí)行的腳本
(3)加入服務(wù)列表
修改 /etc/services
找到定義 9200 端口的位置,注釋掉原有的,添加 helloworld
服務(wù)
helloworld 9200/tcp #wap-wsp 9200/tcp #wap-wsp 9200/udp
(4)重啟 xinetd
centos 下的重啟命令為:
systemctl restart xinetd.service
(5)測試
分別用 nc
和 telnet
兩個命令測試一下
nc localhost 9200
telnet localhost 9200
可以正確輸出腳本執(zhí)行內(nèi)容,完成示例。
感謝各位的閱讀!關(guān)于“Linux中shell如何實現(xiàn)HTTP服務(wù)”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。