Linux shell實(shí)現(xiàn)HTTP服務(wù)示例代碼
一、前言
使用代理服務(wù)器 HAProxy 對(duì) Mysql 做負(fù)載均衡是常用方案,為提高可用性,當(dāng)某個(gè) Mysql 出現(xiàn)問(wèn)題時(shí),例如服務(wù)器故障了,或者數(shù)據(jù)復(fù)制中斷了,最好可以讓 HAProxy 馬上知道,然后停止向其轉(zhuǎn)發(fā)請(qǐng)求
HAProxy 如何知道 Mysql 是否有問(wèn)題呢?
二、解決思路
(1)編寫(xiě)一個(gè)shell腳本,檢查 mysql 的狀態(tài),然后輸出結(jié)果,例如狀態(tài)正常時(shí),返回狀態(tài)碼200及正確信息,否則返回狀態(tài)碼503及錯(cuò)誤信息
(2)實(shí)現(xiàn)一個(gè)HTTP服務(wù),有請(qǐng)求連接后,調(diào)用上面的檢查腳本,返回檢查結(jié)果
(3)HAProxy 訪問(wèn)這個(gè)HTTP服務(wù),根據(jù)返回的結(jié)果信息來(lái)判斷這個(gè) mysql 是否可用
如何方便快速的實(shí)現(xiàn)一個(gè)可以調(diào)用shell腳本的HTTP服務(wù)呢?
比較通用的方案就是 xinetd
xinetd 是 Linux 的守護(hù)進(jìn)程,全稱為 extended interent daemon,擴(kuò)展的網(wǎng)絡(luò)守護(hù)進(jìn)程
xinetd 可以打開(kāi)一個(gè)端口,等待連接,你可以告訴 xinetd 運(yùn)行哪個(gè)腳本,當(dāng)有連接進(jìn)來(lái)后,xinetd 便會(huì)執(zhí)行腳本,然后直接返回腳本輸出的內(nèi)容
HAProxy -> xinetd -> mysql-check
腳本,HAProxy 便取得了mysql的狀態(tài)信息
xinetd 的配置案例
下面實(shí)現(xiàn)一個(gè)簡(jiǎn)單的 xinetd 示例,開(kāi)放 9200 端口,返回一個(gè)測(cè)試腳本的輸出內(nèi)容
如果機(jī)器上還沒(méi)有 xinetd,先安裝一下,centos7 下可以使用命令 yum install xinetd
(1)測(cè)試腳本
#!/bin/bash echo `uptime | egrep -o 'up ([0-9]+) days' | awk '{print $2}'`
這個(gè)腳本用來(lái)輸出當(dāng)前服務(wù)器的在線天數(shù)
用 chmod +x
給腳本添加可執(zhí)行權(quán)限
(2)編寫(xiě) 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)聽(tīng)的端口
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)測(cè)試
分別用 nc
和 telnet
兩個(gè)命令測(cè)試一下
nc localhost 9200
telnet localhost 9200
可以正確輸出腳本執(zhí)行內(nèi)容,完成示例
總結(jié)
Linux shell實(shí)現(xiàn)HTTP服務(wù)的內(nèi)容到這就基本結(jié)束了,希望對(duì)大家的工作和學(xué)習(xí)能有所幫助,如果有疑問(wèn)可以留言討論。
- PHP程序員玩轉(zhuǎn)Linux系列 Nginx中的HTTPS詳解
- 詳解阿里云LINUX服務(wù)器配置HTTPS(NGINX)
- Linux下nginx配置https協(xié)議訪問(wèn)的方法
- Linux下SVN服務(wù)器同時(shí)支持Apache的http和svnserve獨(dú)立服務(wù)器兩種模式且使用相同的訪問(wèn)權(quán)限賬號(hào)
- Linux服務(wù)器nginx訪問(wèn)日志里出現(xiàn)大量http 400錯(cuò)誤的請(qǐng)求分析
- Linux下Web性能壓力測(cè)試工具h(yuǎn)ttp_load使用教程
- Linux下模擬http的get/post請(qǐng)求(curl or wget)詳解
相關(guān)文章
Shell中set與shopt命令選項(xiàng)的含義和使用示例
這篇文章主要給大家介紹了關(guān)于Shell中set與shopt命令選項(xiàng)的含義與使用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-09-09Linux shell編程中IO和條件及循環(huán)處理的細(xì)節(jié)問(wèn)題討論
這篇文章主要介紹了Linux shell編程中IO和條件及循環(huán)處理的細(xì)節(jié)問(wèn)題討論,需要的朋友可以參考下2016-02-02Shell expr命令進(jìn)行整數(shù)計(jì)算的實(shí)現(xiàn)
這篇文章主要介紹了Shell expr命令進(jìn)行整數(shù)計(jì)算的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03Linux定時(shí)執(zhí)行任務(wù)at和crontab命令詳解
本篇文章主要介紹了Linux定時(shí)執(zhí)行任務(wù)at和crontab命令這兩個(gè)命令的基本用法和區(qū)別,一起學(xué)習(xí)下。2017-11-11