Данная статья поможет вам не забыть настроить основные моменты при поднятии нового сервера с нуля. Будут использоваться общие принципы при настройке сервера, не зависимо от назначения (а если есть специфические моменты – они будут оговорены отдельно)
Кстати, статья будет дополнятся, обновляться.
1) Установка ОС
Рекомендую ставить последний релиз
Так же хочу добавить рекомендации при разбивке дисков:
– старайтесь разносить базу данных, ОС, сайт на разные физические устройства.
– если предыдущий пункт невозможен, то необходимо выделять отдельные zfs для базы, сайта. Это связано с увеличением безопасности (к примеру, отключаем на таких разделах выполнение)
Хочу отдельно отметить информацию о RAID. Если вы решились на RAID, то внимательно изучите/посчитайте производительность, которую вы получите в таком случае. Диски в составе одного рейда и подключенных к одному контроллеру будут только способствовать снижению производительности I/O. Лучше подключать диски к разным физическим контроллерам, но желательно одинаковым.
Для ZFS лучше вообще отказаться от аппаратного рейда и делать RAID с помощью ZFS. Не рекомендуется использовать RAIDZ, если производительность и IOPS являются главными критериями.
Для пулов рекомендую добавлять ZIL и cache диски. Это повысит производительность
После установки не забудьте изменить время ожидание запуска в grub’e. По умолчанию стоит 30 секунд. Что бы изменить, отредактируйте файл /rpool/boot/grub/menu.lst
Не забудьте выделить под swap достаточно места, так как Solaris с маленьким swap’ом или без него работать не будет (или будет очень жутко тормозить при небольшой нагрузке)
2) Тюнинг /etc/system
Добавим такие параметры в /etc/system
– увеличиваем количество открытых дескриптов/файлов
set rlim_fd_max = 260000
set rlim_fd_cur = 260000
– ограничиваем память для кеша zfs (arc). Делать это бездумно не рекомендуется. Обычно это делают на серверах с базами данных. В остальных случаях можно не ограничивать. Небольшая рекомендация к тому, какие параметры нужно выставить, может помочь этот скрипт
set zfs:zfs_arc_max = 32212254720
– запрещаем упреждающее чтение
set zfs:zfs_prefetch_disable = 1
– утраняем зависание системы при росте потребления CPU (это баг https://www.illumos.org/issues/1333#note-21)
set apix:apic_timer_preferred_mode = 0x0
– максимально количество процессов в системе.
set max_nprocs=999999
set maxuprc=999990
set pidmax=999999
– для высоконагруженных систем (увеличиваем таблицу подключений)
set tcp:tcp_conn_hash_size=8192
– тюнинг дисков
set zfs:zfs_vdev_max_pending = 10
подробнее можно прочесть здесь http://www.c0t0d0s0.org/archives/7370-A-little-change-of-queues.html
Не забываем делать
# bootadm update-archive
иначе будет двойная перезагрузка.
3) Тюнинг zfs
Рекомендую подтюнить zfs: выключить двойное кеширование (в основном на базах данных), отключить atime, выставить нужный размер блока, посмотреть другие параметры.
Запланируйте регулярный бэкап через снапшоты: очень удобно и места занимают мало. Всегда можно откатиться, посмотреть изменения. Желательно сливать снапшоты на другой сервер так же.
Обязательно прочтите эту статью про то, что бывает с пулом, когда он сильно заполнен и какие последствия этого.
4) Dtrace toolkit
Рекомендую иметь установленный dtrace toolkit на сервере. Скачать его можно отсюда Кстати, на Solaris 11 не все срипты работают, так как он адаптирован под Solaris 10. Неплохой обзор утилит http://www.brendangregg.com/dtrace.html
5) Зоны
Если вы уж выбрали Solaris, то у вас явно не 1Гб памяти. Рекомендую использовать зоны для разных проектов. Очень удобно получается разграничение ресурсов, управление, делегирование полномочий и прочее. Советую для каждой зоны выделять отдельный сетевой интерфейс (если есть такая возможность).
По возможности используйте Whole root зоны. Не забывайте ставить лимиты на потребление ресурсов.
6) Разграничение доступа.
Используете везде RBAC, а так же pool’ы ресурсов. Очень хорошим примером для этого, служит защита от форк бомб, которая описана здесь
7) home директории
Забудьте про /home/$USER. Привыкайте к /export/home/$USER
8 ) Настройка fmadm
Не забудьте про уведомления о событиях через fmadm. Очень удобно получать уведомления на почту при проблемах, чем периодически обходить 10-ок серверов и смотреть fmadm faulty.
9) Жёсткие диски.
Обязательно прочтите статью про ошибки на дисках и как их отключать.
10) Performance
Рекомендую обратить внимание на сборник рецептов для выявления узких мест в вашей ОС.
5 коментарів “Рекомендации по настройке нового сервера Solaris”
Насчёт Cache диска на SSD устройстве, поддерживаю, опыт положительный: скорость хоть и не радикально, но увеличивается.
Насчёт ZIL диска могу сказать, что это может быть хорошо разве для очень больших массивов, когда из ZIL дисков можно сделать mirror. Если просто положить ZIL на диск, а этот диск выйдет из строя, то восстановление пула будет долгим и мучительным.
По поводу set apix:apic_timer_preferred_mode = 0x0, думаю надо написать что это интел, баг посажен после snv_134 (в ней его ещё нет), и проявляется как interrupt storm по переходу в C3 состояние процессора. У меня есть 2 системы, где проявлялся (это i7 однопроцессорники), и 4, где не проявлялся (это как раз xeon многопроцессорные и на супермикре).
Может, чтоит написать ещё и про dladm. Во всяком случае, лично у меня каждая зона сидит на своём минимум одном собственном vnic, а уж за какой физический интерфейс я его завтра зацеплю, или какой раутинг построю, если он в etherstub воткнут, – неважно.
Спасибо за содержательный комментарий.
Я как-то пробовал через vnic организовать, но не сложилось (перепробовал очень много вариантов, но увы – сеть в зоне и глобалке недоступна)
Странно. На первый взгляд, ничего неочевидного я не делал. Сперва
dladm create-vnic -l (имя эзернета) (имя интерфейса)
например, на физическом интерфейсе
dladm create-vnic -l igb2 http0
У меня тут есть проблема – я люблю зоны называть смысловыми именами, например http, а имя интерфейса обязано заканчиваться на цифру. Т.е. для зоны http интерфейс выходит http0.
Затем, при создании зоны тупо
add net
set physical=(имя интерфейса, например http0)
end
И, наконец, внутри самой зоны ifconfig http0, ну или vi (где оно там)/etc/hostname.http0 (зоны я уже давно не инсталлирую, а клонирую через zfs send|recv, zonecfg export/import с редактированием и потом attach. Оно быстрее и проще).
С виртуалбоксом на vnic есть одна проблема (как впрочем, и с xen, пока тот был жив) – в сетевом конфиге гостя надо указывать точно тот же макадрес, что и в dladm. Иначе пакеты только в одну сторону пойдут. Но с зонами такой проблемы нет, в zonecfg макадрес указывать не надо.
Так и делал. Но ещё раз попробую. Спасибо.
Забыл упомянуть, что я это делал на VirtualBox, и собственно там это не работает. Кстати, вот и заметка про это http://www.c0t0d0s0.org/archives/7520-How-to-get-Solaris-11-VNICs-in-a-Virtualbox-VM-to-work-kind-of-….html