www.lissyara.su
—> статьи
—> FreeBSD
—> программы
—> SQUID-MultiCpuSystem
SQUID - с поддержкой мультироцессорности
После внезапного решения обновить сквида с версии 2.5. на версию 3.1, что-то всё упало, пришлось вернуться на 2.7. кеш был 60Гб - подцепленный через nfs. Соответственно индексация кеша, после смены версии, ничего интересного не предвещала. И как обычно бывает, что клиентские ПК обновляются чаще, чем оборудование которое использует сисадмин, в не зависимости от количества написанных служебных записок, требований, сроков которое оборудование отработало. После изъятия у секретаря q8300 решил попробовать использовать многопроцессорность у сквида, т.к. он висит 1-3 процессами в топе, полноценную нагрузку не окажет на данный проц. Найдя в инете записки на сайте squid-cache.org о реализации, просто взял и поставил.
1. ставим сквид из портов.
cd /usr/ports/www/squid31 && make install clean
| Выставляем галки на необходимых опциях + в squid 2.7,3.0
[X] SQUID_CARP Enable CARP support
| что- данного в 3.1. не заметил )
2. Разделение стартовых скриптов.
cd /usr/local/etc/rc.d/ && cp squid squid_backend1 && cp squid squid_backend2
| Далее даем им свои PID и конфиги используемые по умолчанию, в принципе можно было через flag настроить но что-то не захотелось.
/usr/local/etc/rc.d/squid:
cat /usr/local/etc/rc.d/squid | grep -v #
squid_checkrunning() {
${command} ${squid_flags} -k check 2>/dev/null
}
squid_setfib() {
sysctl net.fibs >/dev/null 2>&1 || return 0
if [ "x${squid_fib}" != "xNONE" ]; then
command="setfib -F ${squid_fib} ${command}"
else
return 0
fi
}
squid_stop() {
echo "Stopping ${name}."
${command} ${squid_flags} -k shutdown
run_rc_command poll
}
. /etc/rc.subr
name=squid
rcvar=${name}_enable
command=/usr/local/sbin/squid
extra_commands=reload
reload_cmd="${command} ${squid_flags} -k reconfigure"
start_precmd="squid_setfib"
stop_precmd="squid_checkrunning"
stop_cmd="squid_stop"
load_rc_config ${name}
squid_chdir=${squid_chdir:-"/var/squid"}
squid_conf=${squid_conf:-"/usr/local/etc/squid/frontend.conf"}
squid_enable=${squid_enable:-"NO"}
squid_fib=${squid_fib:-"NONE"}
squid_flags="-f ${squid_conf} ${squid_flags}"
squid_pidfile=${squid_pidfile:-"/var/run/squid/squid.pid"}
squid_user=${squid_user:-squid}
pidfile=${squid_pidfile}
required_dirs=${squid_chdir}
required_files=${squid_conf}
run_rc_command "$1"
| /usr/local/etc/rc.d/squid_backend1:
cat /usr/local/etc/rc.d/squid_backend1 | grep -v #
squidb1_checkrunning() {
${command} ${squidb1_flags} -k check 2>/dev/null
}
squidb1_setfib() {
sysctl net.fibs >/dev/null 2>&1 || return 0
if [ "x${squidb1_fib}" != "xNONE" ]; then
command="setfib -F ${squidb1_fib} ${command}"
else
return 0
fi
}
squidb1_stop() {
echo "Stopping ${name}."
${command} ${squidb1_flags} -k shutdown
run_rc_command poll
}
. /etc/rc.subr
name=squidb1
rcvar=${name}_enable
command=/usr/local/sbin/squid
extra_commands=reload
reload_cmd="${command} ${squidb1_flags} -k reconfigure"
start_precmd="squidb1_setfib"
stop_precmd="squidb1_checkrunning"
stop_cmd="squidb1_stop"
load_rc_config ${name}
squidb1_chdir=${squidb1_chdir:-"/var/squid"}
squidb1_conf=${squidb1_conf:-"/usr/local/etc/squid/squidb1.conf"}
squidb1_enable=${squidb1_enable:-"NO"}
squidb1_fib=${squidb1_fib:-"NONE"}
squidb1_flags="-f ${squidb1_conf} ${squidb1_flags}"
squidb1_pidfile=${squidb1_pidfile:-"/var/run/squid/squidb1.pid"}
squidb1_user=${squid_user:-squid}
pidfile=${squidb1_pidfile}
required_dirs=${squidb1_chdir}
required_files=${squidb1_conf}
run_rc_command "$1"
| /usr/local/etc/rc.d/squid_backend2
cat /usr/local/etc/rc.d/squid_backend2 | grep -v #
squidb2_checkrunning() {
${command} ${squidb2_flags} -k check 2>/dev/null
}
squidb2_setfib() {
sysctl net.fibs >/dev/null 2>&1 || return 0
if [ "x${squidb2_fib}" != "xNONE" ]; then
command="setfib -F ${squidb2_fib} ${command}"
else
return 0
fi
}
squidb2_stop() {
echo "Stopping ${name}."
${command} ${squidb2_flags} -k shutdown
run_rc_command poll
}
. /etc/rc.subr
name=squidb2
rcvar=${name}_enable
command=/usr/local/sbin/squid
extra_commands=reload
reload_cmd="${command} ${squidb2_flags} -k reconfigure"
start_precmd="squidb2_setfib"
stop_precmd="squidb2_checkrunning"
stop_cmd="squidb2_stop"
load_rc_config ${name}
squidb2_chdir=${squidb2_chdir:-"/var/squid"}
squidb2_conf=${squidb2_conf:-"/usr/local/etc/squid/squidb2.conf"}
squidb2_enable=${squidb2_enable:-"NO"}
squidb2_fib=${squidb2_fib:-"NONE"}
squidb2_flags="-f ${squidb2_conf} ${squidb2_flags}"
squidb2_pidfile=${squidb2_pidfile:-"/var/run/squid/squidb2.pid"}
squidb2_user=${squid_user:-squid}
pidfile=${squidb2_pidfile}
required_dirs=${squidb2_chdir}
required_files=${squidb2_conf}
run_rc_command "$1"
| 3. создание конфигурационных файлов.
Инклюд в конфигах поддерживается как понял с squid 2.6.
/usr/local/etc/squid/common.acl.conf:
cat /usr/local/etc/squid/common.acl.conf | grep -v #
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8
acl localnet src 192.168.0.0/24
cachemgr_passwd parolparolpoherkoy all
| /usr/local/etc/squid/common.backend.conf:
cat /usr/local/etc/squid/common.backend.conf | grep -v #
cache_mem 4 MB
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern . 0 20% 4320
Shutdown_lifetime 3 second
http_access allow localhost
http_access deny all
| /usr/local/etc/squid/frontend.conf:
cat /usr/local/etc/squid/frontend.conf | grep -v #
include /usr/local/etc/lab/common.acl.conf
http_port 192.168.0.169:3128 transparent
cache_peer localhost parent 4001 0 carp login=PASS name=backend-1
cache_peer localhost parent 4002 0 carp login=PASS name=backend-2
cache_mem 512 MB
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern . 0 20% 4320
shutdown_lifetime 3 second
access_log /var/log/squid/frontend.access.log
cache_log /var/log/squid/frontend.cache.log
pid_filename /var/log/squid/frontend.pid
http_access allow manager localhost
http_access deny manager
http_access allow localnet
http_access allow localhost
http_access deny all
| /usr/local/etc/squid/squidb1.conf:
cat /usr/local/etc/squid/squidb1.conf | grep -v #
include /usr/local/etc/lab/common.acl.conf
http_port 127.0.0.1:4001
visible_hostname backend-1
unique_hostname backend-1
cache_dir aufs /squidcache/cache-1 20240 64 256
change /var/log/squid to your own log directory
access_log /var/log/squid/backend-1.access.log
cache_log /var/log/squid/backend-1.cache.log
pid_filename /var/log/squid/backend-1.pid
include /usr/local/etc/lab/common.backend.conf
| /usr/local/etc/squid/squidb2.conf:
cat /usr/local/etc/squid/squidb2.conf | grep -v #
include /usr/local/etc/lab/common.acl.conf
http_port 127.0.0.1:4002
visible_hostname backend-2
unique_hostname backend-2
cache_dir aufs /squidcache/cache-2 20240 64 256
change /var/log/squid to your own log directory
access_log /var/log/squid/backend-2.access.log
cache_log /var/log/squid/backend-2.cache.log
pid_filename /var/log/squid/backend-2.pid
include /usr/local/etc/lab/common.backend.conf
| 4. Запуск.
Добавляем в /etc/rc.conf
echo 'squid_enable="YES"' >> /etc/rc.conf
echo 'squidb1_enable="YES" ' >> /etc/rc.conf
echo 'squidb2_enable="YES" ' >> /etc/rc.conf
| создаём кеши:
squid -z -f /usr/local/etc/squid/squidb1.conf
squid -z -f /usr/local/etc/squid/squidb2.conf
| запускаем:
/usr/local/etc/rc.d/squid/squid start \
&& /usr/local/etc/rc.d/squid/_backend1 start \
&& /usr/local/etc/rc.d/squid/_backend2 start
| Смотрим:
top -U squid
PID USERNAME THR PRI NICE SIZE RES STATE C TIME WCPU COMMAND
18452 squid 1 44 0 30112K 9368K kqread 1 0:21 0.00% squid
18432 squid 1 44 0 30112K 9368K kqread 0 0:21 0.00% squid
18499 squid 1 44 0 30112K 8912K kqread 3 0:14 0.00% squid
18433 squid 1 76 0 7224K 1420K piperd 0 0:00 0.00% unlinkd
18453 squid 1 76 0 7224K 1420K piperd 0 0:00 0.00% unlinkd
18500 squid 1 76 0 7224K 1420K piperd 0 0:00 0.00% unlinkd
18430 squid 1 76 0 21792K 4436K wait 0 0:00 0.00% squid
18450 squid 1 76 0 21792K 4440K wait 1 0:00 0.00% squid
18497 squid 1 76 0 21792K 4460K wait 0 0:00 0.00% squid
|
sockstat -4 | grep squid
squid squid 18499 7 udp4 6 *:16265 *:*
squid squid 18499 8 udp4 *:42361 *:*
squid squid 18499 15 tcp4 192.168.0.169:3128 *:*
squid squid 18452 7 udp4 6 *:61609 *:*
squid squid 18452 8 udp4 *:53562 *:*
squid squid 18452 15 tcp4 127.0.0.1:4002 *:*
squid squid 18432 7 udp4 6 *:48090 *:*
squid squid 18432 8 udp4 *:12180 *:*
squid squid 18432 15 tcp4 127.0.0.1:4001 *:*
| 5. Заключение
Сквид у меня прозрачный какбе особо ограничивать не требуется. Можно также для бекэнда использовать havp+clamAV, но вот только думаю если использовать их на 1 ПК то потребуется ClamAV и HAVP тоже раздвоить...
Аналогичным образом можно организовать сбалансированнаую нагрузку на сервер с squid, используя машины с squid в различных сегментах сети или при наличии нескольких соединений с интернет, можно комбинировать в различных вариациях.Отлично работает со всеми извращеннеями:SAMS, Rejik, редиректы и прочие приблуды. Только пихать их надо во фроненд и снимать соответственно с фронтэнда. squid+sams+rejik-ntlm или с squid+sams+rejik
Есть смысл поиграться с coss.
|
Комментарии пользователей [2 шт.]