Исходный данные:
| 84.56.32.7 | Головной офис |
| 84.56.54.34 | Филиал |
Задача:
Нужно каждый месяц забирать определенное количество MB по прокси серверу у своего филиал
Обязательный условия:
Архитектура
Каждый месяц первого числа наш прокси сервер(squid) будет переключаться в каскадный режим(т.е. будет работать через другой прокси), каждуй ночь данные будут скидываться в базу mysql, как только набираем определенное количество MB переключаемся обратно(считать трафик будем c помощью ipcad)
Настраиваем squid
У вас должно быть три файла conf в каталоге squid(/etc/squid)
cache_peer 84.56.54.34 parent 3128 0 no-query
Настраиваем ipcad:
capture-ports enable; buffers = 128k; interface eth1; interface eth0; aggregate 192.168.50.0/24 strip32; rsh enable at 127.0.0.1; rsh root@127.0.0.1 admin; rsh root@127.0.0.1 backup; rsh root@127.0.0.1; rsh 127.0.0.1 view-only; rsh ttl = 3; rsh timeout = 30; dumpfile = /var/log/ipcad/ipcad.dump; pidfile = /var/run/ipcad.pid; memory_limit = 80m;
Создадим базу допустим spacedust
[root@spacedust ~]# mysql -u root Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1000 to server version: 4.1.20
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> create database spacedust; Query OK, 1 row affected (0.03 sec)
mysql> show databases; +-----------+ | Database | +-----------+ | mysql | | spacedust | | test | +-----------+ 3 rows in set (0.00 sec)
mysql>
Теперь создадим таблицу b255 куда будут скидываться наши данные
[root@spacedust ~]# mysql -u root Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1001 to server version: 4.1.20
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> use spacedust; Database changed mysql> create table b255( id int(11) NOT NULL AUTO_increment,date DATE,ip VARCHAR(90) not null,input int(90) not null, primary key(id)); Query OK, 0 rows affected (0.06 sec)
mysql> show tables; +---------------------+ | Tables_in_spacedust | +---------------------+ | b255 +---------------------+ 2 rows in set (0.02 sec)
mysql>
Создаем в каталоге /var/www/html папку traf_inza
Считаем входящий трафик идущий на внешний интерфейс по порту в 3128(в реальном времени)
от филиала. Создаем скрипт traf_b255 со следующим содержанием:
/usr/bin/rsh localhost show ip accounting | grep -w 84.56.32.7 |awk '{if($1=="84.56.54.34" && $8=="eth1" && $5=="3128"){s+=$4}} END {printf "%i\n ",((s/1024)/1024)}'
Скрипт который будет запускаться каждую ночь(время задаете в crond), он будет
скидывать статистику за день в базу mysql и обнулять ее
Создаем скрипт mysql_b255 со следующим содержанием:
path="/var/www/html/traf_inza/traf_b255";
day=$(date +%d);
month=$(date +%m);
year=$(date +%Y);
date=$year-$month-$day;
execl=$(exec $path);
traf=$(expr $execl);
mysql -u root -Bse "use spacedust;insert into b255 (date,ip,input) values ('$date','84.56.32.7','$traf');"
/usr/bin/rsh localhost clear ip accounting
Теперь сам скрипт который будет заниматься переключением, можете его загнать в crond
и запускать каждые час или два, у меня стоит забирать 700MB, и до 10 числа месяца делать
перелючение, до это времени мы полюбому добираем столько метров.
Создаем скрипт squid_b255 со следующим содержанием:
path="/var/www/html/traf_inza/b255";
path1="/etc/squid/squid.conf";
path2="/etc/squid/squid.conf_kudr";
path3="/etc/squid/squid.conf_b255";
limit=700;
rm -f $path;
sum=0;
day=$(date +%d);
month=$(date +%m);
year=$(date +%Y);
date_begin=$year-$month-01;
date_end=$year-$month-31;
mysql -u root -Bse "use spacedust; select input from b255 where ip='84.56.32.7' && date>='$date_begin' && date<='$date_end';" >> $path
/var/www/html/traf_inza/traf_b255 >> $path
for i in $(cat $path); do
sum=$(expr $i + $sum);
done
echo "Zabrali u b255 = " $sum"Mb";
rm -f $path;
if [ $(expr $day) -lt 10 ]; then
{
echo "day" $(expr $day) - "perekluchenie ON";
if [ $sum -lt $limit ]; then
{
rm -f $path1;
cp -p $path3 $path1;
/etc/init.d/squid reload;
echo $sum"Mb" "<" $limit"Mb";
echo "now squid - b255";
}
fi
if [ $sum -gt $limit ]; then
{
rm -f $path1;
cp -p $path2 $path1;
/etc/init.d/squid reload;
echo $sum"Mb" ">" $limit"Mb";
echo "now squid - kudr";
}
fi
}
else
{
echo "day" $(expr $day) - "perekluchenie OFF";
}
fi