某个网站的附件服务器是采用lighttpd,
想实现客户端根据服务器当前的连接及数进行分流
刚开始思路是基于snmp,获取IP数,但是snmp经常超时
所以换个思路,弄一个api,返回json数据方便调用:
1 lighttpd服务器绑定一个端口到存放json文件的目录
2 写个shell脚本用corntab执行定时任务,每5分钟收集一次TCP的连接信息
3 shell脚本将获取到的数据写入虚拟主机目录下的json文件
4 客户端需要分流时,去请求这个地址的文件,获取数据信息进行处理,实现分流
由于lighttpd附件服务器已经在线,就不写怎么安装了,参照我以前的文章
一 配置虚拟机
新建一个目录放文件
1 | mkdir -p /srv/www/vhosts/ipcount |
修改主配置文件
先备份一个配置文件:
1 | cd /etc/lighttpd/ |
1 | cp -a lighttpd.conf lighttpd20180313backup.conf |
如果修改后错误,快速用备份的配置还原:
1 | cp lighttpd20180313backup.conf lighttpd.conf |
修改配置文件
1 | vi /etc/lighttpd/lighttpd.conf |
按键盘shift + G vi光标跳转到配置文件末尾(顺便说下跳转到配置起始点命令为在非insert模式下按gg)
加入以下配置
1 2 3 4 | #修改以下内容中的static.xxx.com:666为当前文件服务器实际绑定的域名及端口,也可以使用IP $SERVER["socket"] == "static.xxx.com:666" { server.document-root = "/srv/www/vhosts/ipcount/" } |
意思是服务器收到该端口的tcp请求,指定响应的根目录为/srv/www/vhosts/ipcount/
1 2 3 4 5 6 7 8 9 | 拓展内容:Lighttpd绑定一个端口一般都是下面的方法. 备忘一下 server.port = 80 如果需要绑定多个端口, 可以这样. $SERVER["socket"] == "0.0.0.0:82" { server.document-root = "/oldyzzt_s2/webroot/game/" } $SERVER["socket"] == "0.0.0.0:83" { server.document-root = "/oldyzzt_s3/webroot/game/" } |
接着验证lighttpd.conf是否正确,避免重启失败影响线上业务:
重要:重启前验证配置文件是否正确!!
1 | lighttpd -t -f /etc/lighttpd/lighttpd.conf |
lighttpd重新启动
1 | systemctl restart lighttpd |
添加防火墙规则并重启防火墙
1 | firewall-cmd --permanent --add-port=12316/tcp && firewall-cmd --reload |
测试下虚拟主机是否工作
1 | touch /srv/www/vhosts/ipcount/index.html |
1 | echo 111 >> /srv/www/vhosts/ipcount/index.html |
浏览器访问http://static.xxx.com:666/index.html
应该能显示111,如果需要启用SSL的话百度lighttpd的SSL配置
到这里,咱们的api接口第一步完成
二 shell脚本
1 2 3 4 5 6 7 8 | #!/bin/bash #统计服务器当前的established IP establishedIP=`netstat -na|grep -i "80"|grep ESTABLISHED|wc -l` TXpre=$(cat /proc/net/dev | grep eth0 | tr : " " | awk '{print $10}') sleep 1 TXnext=$(cat /proc/net/dev | grep eth0 | tr : " " | awk '{print $10}') bandwidth=$((${TXnext}-${TXpre})) echo '{"establishedIP":"'$establishedIP'","bandwidth":"'$bandwidth'"}' > /srv/www/vhosts/ipcount/index.json |
将该脚本命名为ServerIPcount.sh放入系统目录,这里以/tools为例
新建脚本
1 | touch /tools/ServerIPcount.sh |
编辑内容
1 | vi /tools/ServerIPcount.sh |
将上面脚本内容写入这个脚本,然后添加执行权
1 | chmod +x /tools/ServerIPcount.sh |
设定执行周期(参看https://xiaohost.com/1265.html)
每五分钟获取一次数据
1 | crontab -e |
1 | */5 * * * * /tools/ServerIPcount.sh |
返回数据示例:
三 php 读取json信息
1 2 3 4 5 6 7 8 9 10 | <?php // 从文件中读取数据到PHP变量 $json_string = file_get_contents('http://static.xxx.com:666/index.json'); // 把JSON字符串转成PHP数组 $data = json_decode($json_string, true); // 显示出来看看 var_dump($data); ?> |
值返回
实现:某时间段内,连接数超过多少就替换下载服务器
先把时间段的code记录下,明天继续写
用php判断当前时间是否在每天的某一时间区域内?比如: 9:00-18:00
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | function get_curr_time_section() { $checkDayStr = date('Y-m-d ',time()); $timeBegin1 = strtotime($checkDayStr."09:00".":00"); $timeEnd1 = strtotime($checkDayStr."18:00".":00"); $curr_time = time(); if($curr_time >= $timeBegin1 && $curr_time <= $timeEnd1) { return 0; } return -1; } $result = get_curr_time_section(); echo $result; |
评论0