Всем салют!
Есть контора в которой стоит прокси(p3) squid(512Кбит/сек), который пользуется каналом другого территориально-удалённого прокси(p1, 80Мбит/сек) или резервного прокси(p2, 10Мбит/сек).
Другими словами: Сделать скрипт, который бы реализовывал работу p3 через p1. В случае падения p1 - переключается на p2. В случае падения p2 и p3 - работает напрямую через p1. С периодичностью в 3 минуты скрипт проверяет доступность обоих прокси. Основной прокси, через который идёт трафик - p1.
Чего сделал:
#!/bin/sh
p1="1.2.3.4" ##через удалённый прокси-1(80Мбит)
p2="5.6.7.8" ##через удалённый прокси-2(10Мбит)
p3="####" ##напрямую прокси-3(512Кбит)
path="/etc/squid/squid.conf"
if (ping -c 3 -s 1 -W2 $p1 | grep "3 received");
then
if (grep $p2 $path || grep $p3 $path);
then
sed -i -e 's/'$p2'/'$p1'/g' $path
sed -i -e 's/'$p3'/''/g' $path
squid -k reconfigure
break
fi
else
if (ping -c 3 -s 1 -W2 $p2 | grep "3 received" && grep $p1 $path || grep $p3 $path);
then
sed -i -e 's/'$p1'/'$p2'/g' $path
sed -i -e 's/'$p3'/''/g' $path
squid -k reconfigure
break
else
if (grep $p3 $path);
then break
else
sed -i -e 's/'cache_peer'/'####cache_peer'/g' $path
squid -k reconfigure
break
fi
fi
- Сам /etc/squid/squid.conf:
http_port 3128
dns_nameservers 8.8.8.8 9.9.9.9
acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY
cache_dir ufs /var/log/squid/cache 2048 16 256
reload_into_ims on
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern . 0 20% 4320
cache_peer 1.2.3.4 parent 3129 0 no-query default no-digest
acl all src 0.0.0.0/0.0.0.0
acl office src 192.168.0.0/255.255.255.0
http_access allow office
http_access deny all
cache_mem 100 MB
maximum_object_size 100 MB
maximum_object_size_in_memory 100 KB
visible_hostname ME_3
memory_pools off
error_directory /var/log/squid/errors
access_log /var/log/squid/access.log squid
cache_log /var/log/squid/cache.log
cache_store_log /var/log/squid/store.log
Есть ли здесь недочёты, нужно ли что-то улучшить или задачу можно решить каким-либо некостыльным способом?