一、前言
使用代理服務器 HAProxy 對 Mysql 做負載均衡是常用方案,為提高可用性,當某個 Mysql 出現(xiàn)問題時,例如服務器故障了,或者數(shù)據(jù)復制中斷了,最好可以讓 HAProxy 馬上知道,然后停止向其轉發(fā)請求
HAProxy 如何知道 Mysql 是否有問題呢?
二、解決思路
(1)編寫一個shell腳本,檢查 mysql 的狀態(tài),然后輸出結果,例如狀態(tài)正常時,返回狀態(tài)碼200及正確信息,否則返回狀態(tài)碼503及錯誤信息
(2)實現(xiàn)一個HTTP服務,有請求連接后,調用上面的檢查腳本,返回檢查結果
(3)HAProxy 訪問這個HTTP服務,根據(jù)返回的結果信息來判斷這個 mysql 是否可用
如何方便快速的實現(xiàn)一個可以調用shell腳本的HTTP服務呢?
比較通用的方案就是 xinetd
xinetd 是 Linux 的守護進程,全稱為 extended interent daemon,擴展的網(wǎng)絡守護進程
xinetd 可以打開一個端口,等待連接,你可以告訴 xinetd 運行哪個腳本,當有連接進來后,xinetd 便會執(zhí)行腳本,然后直接返回腳本輸出的內容
HAProxy -> xinetd -> mysql-check
腳本,HAProxy 便取得了mysql的狀態(tài)信息
xinetd 的配置案例
下面實現(xiàn)一個簡單的 xinetd 示例,開放 9200 端口,返回一個測試腳本的輸出內容
如果機器上還沒有 xinetd,先安裝一下,centos7 下可以使用命令 yum install xinetd
(1)測試腳本
#!/bin/bash
echo `uptime | egrep -o 'up ([0-9]+) days' | awk '{print $2}'`
這個腳本用來輸出當前服務器的在線天數(shù)
用 chmod +x
給腳本添加可執(zhí)行權限
(2)編寫 xinetd 服務
例如服務名為 helloworld
,文件名 /etc/xinetd.d/helloworld
,內容為
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)加入服務列表
修改 /etc/services
找到定義 9200 端口的位置,注釋掉原有的,添加 helloworld
服務
helloworld 9200/tcp
#wap-wsp 9200/tcp
#wap-wsp 9200/udp
(4)重啟 xinetd
centos 下的重啟命令為:
systemctl restart xinetd.service
(5)測試
分別用 nc
和 telnet
兩個命令測試一下
可以正確輸出腳本執(zhí)行內容,完成示例
總結
Linux shell實現(xiàn)HTTP服務的內容到這就基本結束了,希望對大家的工作和學習能有所幫助,如果有疑問可以留言討論。
您可能感興趣的文章:- PHP程序員玩轉Linux系列 Nginx中的HTTPS詳解
- 詳解阿里云LINUX服務器配置HTTPS(NGINX)
- Linux下nginx配置https協(xié)議訪問的方法
- Linux下SVN服務器同時支持Apache的http和svnserve獨立服務器兩種模式且使用相同的訪問權限賬號
- Linux服務器nginx訪問日志里出現(xiàn)大量http 400錯誤的請求分析
- Linux下Web性能壓力測試工具http_load使用教程
- Linux下模擬http的get/post請求(curl or wget)詳解