Документация по ОС FreeBSD Пятница, 29.03.2024, 00:16
Приветствую Вас Гость | RSS
Меню сайта

Категории каталога
Apache [58]
DNS [25]
FTP [27]
Mail [74]
Samba [24]
Squid [46]
SSH [23]
VPN [35]
РРР [20]
Net [173]

Главная » Статьи » Сеть » Squid

SQUID - с поддержкой мультироцессорности [2010]
После внезапного решения обновить сквида с версии 2.5. на версию 3.1, что-то всё упало, пришлось вернуться на 2.7. кеш был 60Гб - подцепленный через nfs. Соответственно индексация кеша, после смены версии, ничего интересного не предвещала. И как обычно бывает, что клиентские ПК обновляются чаще, чем оборудование которое использует сисадмин, в не зависимости от количества написанных служебных записок, требований, сроков которое оборудование отработало. После изъятия у секретаря q8300 решил попробовать использовать многопроцессорность у сквида, т.к. он висит 1-3 процессами в топе, полноценную нагрузку не окажет на данный проц. Найдя в инете записки на сайтеsquid-cache.org о реализации, просто взял и поставил.

1. Cтавим сквид из портов. 

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. Cоздание конфигурационных файлов.
Инклюд в конфигах поддерживается как понял с 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


для сквида версии от 2.6-3.0 localhost и отдельный IP можно указывать без маски сети...
/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.



Источник: http://www.lissyara.su/?id=2126
Категория: Squid | Добавил: oleg (29.11.2010)
Просмотров: 1362 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Beastie

Друзья сайта

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
links

Copyright MyCorp © 2024