Q1. Как заставить OOPS не ходить DIRECT-ом?
A1. Есть два способа:
1) использовать директиву parent (не ту, что в описании icp-peer-ов,
а ту, которая 'parent xxx.yyy.zzz 3128')
В этом случае
a) ВСЕ запросы (кроме попадающих в local-domain или local-networks)
будут удовлетворяться через parent-a.
б) никакие icp-запросы не посылаются
в) если в oops.cfg не используется директива local-networks,
то и никаких попыток отрезолвить имена не будет.
г) Запросы к хостам, попадающим в local-domain или local-networks
удовлетворяются напрямую.
2) Использовать icp-peer с описанием parent. В этом случае при получении
запроса от клиента, посылается icp-запрос ко всем icp-peer-ам (как
к parent-ам, так и к sibling-ам). При получении от кого-либо ответа
'HIT' - идем к нему. При получении только 'MISS'-ов - идем к паренту,
приславшему ответ 'MISS' раньше всех. И только при отсутствии
каких-бы то ни-было ответов от парентов идем напрямую. Если
предположить что последний вариант редок - то можно считать что oops
будет всегда идти через самого быстрого парента.
Q2. Собрал успешно, запустил и в oops.log увидел следующее:
-------------------------------------------------------
[0x400]db_open: Invalid argument
[0x400]oops 1.2d Started
[0x400]DB engine by Sleepycat Software: DB 2.4.14: (6/2/98)
При этом в кэш на диске ничего не пишется. Почему и что делать?
A2. Проблема в том, что OOPS был собран со старой версией библиотеки
DB. Нужно просто установить новую версию, запустить configure и
make. Взять свежую версию можно с www.sleepycat.com.
Q3. Я отформатировал storages которые в сумме должны были-бы занять 1G,
но что-то обьем свободного места на диске слабо изменился. Так и должно
быть?
A3. Да, во время форматирования делается следующее:
1) создается файл хранилища, если он еще не был создан.
2) создается 'супер-блок' и бит-мап, которые хранятся в начале файла
3) делается seek на последний байт файла хранилища и записывается один
байт. Т.е. - отформатированное таким способом хранилище представляет
собой "дырку" в файловой системе, которая будет заполняться по мере
сохранения документов.
Если такое поведение не подходит - можно создать хранилища заранее с
помошью команды
dd if=/dev/null of=storage ...
В этом случае Вы сразу зарезервируете необходимое место.
После такого dd не забудьте всё-таки запустить oops -z на это
хранилище - ведь dd не создает битмап и суперблок...
Q3. Как настроить транспарент прокси?
A3. Внимание: транспарент появился только начиная с версии 1.2f
Настройка состоит из двух частей - настройка форвардинга пакетов
от маршрутизатора в сторону прокси-сервера и настройка самого
прокси-сервера. Первая часть настроек ничем не отличается от того,
что нужно делать в этом плане для сквида. Можно смотреть FAQ по сквиду,
можно на http://www.lexa.ru:8100/lexa/transparent-proxy.html
Вторая часть, конечно отличается.
Во-первых, в oops.cfg нужно расскоментировать конфиг модуля transparent.
Выглядеть он будет примерно так:
module transparent {
myport 3128
}
myport - это тот порт, на который будут перенаправляться пакеты с
маршрутизатора.
Во-вторых, в описании группы, в которую попадают ваши пользователи в
строку redir_mods добавить слово transparent. Т.е. эта строка будет
выглядеть, например так (в простейшем случае):
redir_mods transparent;
или так (это в случае, если Вы используете все три модуля редиректоров):
redir_mods transparent redir accel;
Если есть возможность - установите пакет ipfilter на машине, где
работает прокси - это позволит обслуживать запросы, не содержащие
заголовка 'Host:'. Oops автоматически определяет присутствие или
отсутствие установленного ipfilter во время процедуры configure
Всё.
Признаком неработы являются ответы от прокси "Bad formed URL". Для
поиска неработающего звена:
1. выполните команду telnet proxyhost myport (подставив правильные
значения) и введите
GET / HTTP/1.0
Host: www.cnn.com
В ответ должна появиться страница CNN (CNN взято для примера).
Этот шаг проверки можно выполнить даже до настройки форвардинга
пакетов.
2. проверьте tcpdump-ом или snoop-ом что пакеты форвардятся именно на тот
порт, который указан в myport.
Q4. Как определеляется в какую группу попадает тот или иной хост?
A4. В описании каждой группы есть директива networks или networks_acl
(или обе). networks_acl просматриваются первыми в том порядке, в котором
они появляются в oops.cfg. Если попали - используется та группа,
в которй находится подошедшая строка networks_acl.
Если хост не попал ни в один из networks_acl - смотрим в networks.
порядок просмотра идет в сторону уменьшени длины маски - т.е.
сначала просматриваются наиболее "специфичные" сети, потом - наименее.
Например сети
0/0
192.168.0.0/24
192.168.0.0/25
будут просмотрены в следующем порядке:
192.168.0.0/25
192.168.0.0/24
0/0
и хост 192.168.0.1 попадет в группу, содержащую 192.168.0.0/25,
независимо от порядка появления этих групп в конфиге.
Q5. Какая платформа считается наилучшей для OOPS?
Q6. Основная платформа разработки - Solaris, и, я думаю, это и есть наилучшая
платформа (как sparc, так и x86). Следующая по предпочтительности (и
очень близкая) - FreeBSD. К сожалению, на сегодняшний день Вы можете
использовать OOPS под Linux-ом только до определенного уровня нагрузки.
Причина заключается в том, что библиотека linuxthreads использует модель
"один трид - один процесс", и oops использует модель "одно соединение -
один трид".