Содержание статьи
Q: Сделал бэкап контроллера домена win2k8r2 акронисом, после восстановления вывалился USN Rollback. Что это за зверь, что с ним делать и как предотвратить появление?
A: Обратимся к теории. Update Sequence Number (USN) — это элемент метаданных репликации, называемый номером последовательного обновления. Каждый контроллер домена поддерживает USN, который ему специфичен. При внесении изменений в Active Directory к значению USN прибавляется 1. USN существует только в пределах контроллера домена, никакого отношения к USN на соседнем контроллере он не имеет. Для полноты понимания разберем пример. Есть контроллер test1, у него USN = 100 и test2 с USN = 200. При изменении в AD первого контроллера test1 его USN станет равным 101. Таким образом происходит репликация со вторым КД. Теперь разберем, что будет при правильном бэкапе контроллера. При восстановлении из образа highest watermark USN возвращается в то состояние, которое было во время бэкапа; при восстановлении AD поддерживаемым методом КД оповещает партнеров по репликации, что был восстановлен, и сообщает им свой восстановленный highest watermark USN. Те, зная из своего USN high-watermark vector, вычисляют разницу из USN и определяют, какие изменения нужны партнеру.
При восстановлении из образа, созданного акронисом, проблема в том, что восстановленный КД ничего никому не сообщает и происходит ошибка USN Rollback. Для восстановления работы придется с проблемного контроллера удалять Active Directory, затем очищать метаданные из AD и восстанавливать роль контроллера. Для начала запустим утилиту
dcpromo /forceremoval
Теперь отключаем контроллер и начинаем чистить метаданные по статье от майкрософт.
Q: Неожиданно в самый нужный момент кончились лицензии к RDP. Как теперь подключиться к серверу, если нет физического доступа, чтобы убить сессии?
A: Для этого нужно вспомнить синтаксис mstsc
mstsc [<файл подключения>] [/v:<сервер[:порт]>] [/admin] [/f[ullscreen]] [/w:<ширина>] [/h:<высота>] [/public] | [/span] [/edit "файл подключения"] [/migrate] [/?]
Из всего перечисленного нам нужен параметр /admin. При использовании этого ключа с mstsc-соединением не требуется лицензии клиентского доступа (CAL) Terminal Services. Даже если сервер терминала не принимает новых сеансов, все же можно создать сеанс /admin. Сеанс /admin не учитывается в счет предела, установленного на сервере терминала, с целью ограничить число сеансов. Таким образом, конечная команда будет иметь вид:
mstsc /admin
Q: На андроид-смартфоне постоянно выскакивает приложение svoice, стоит только нажать на джойстик. Можно ли его как-то отключить без root-доступа?
A: Конечно, можно, даже нужно! Для этого заходим в настройки, идем в диспетчер приложений, там выбираем все приложения и находим svoice. Открываем и нажимаем «Отключить». Больше он не появится.
Q: Купил себе новый ноут с предустановленной Win8, поставил рядом Mint — и отвалился мультитач. Как его вернуть обратно, в двух системах?
A: Для этого нужно поставить драйверы на тачпад к своей модели ноутбука. Также нужно установить утилиту для настройки, самые распространенные — это SmartGestue, Elantech и Synaptics. Они идут под определенную модель тачпада, от чего и нужно отталкиваться при выборе. На минте есть отдельная настройка. Находится она в
preferences -> mouse -> touchpad
где можно настроить различное поведение тачпада на разные действия.
5 ШАГОВ: Тюнинг веб-сервера
Хочу провести тюнинг веб-сервера. Используется Debian + nginx + MySQL + PHP. На сервере крутится около 40 сайтов различной величины. Есть как простенькие лендинги, так и крупные проекты, использующие весьма нагруженные базы данных. Какие программные решения можно применить в данном случае для более быстрой и устойчивой работы?
- Начать тюнинг лучше всего с самого конфига nginx’a/usr/local/nginx/confНаиболее интересные строки — это:
worker_processes 2; — задается по принципу: сколько ядер в системе, столько и процессов. Хотя если нагрузка на сервер сильная, то стоит указать на пару значений меньше, а то и вполовину. Скажем, если восемь ядер, то четыре процесса будет достаточно. worker_connections 2048; — общее максимальное количество обслуживаемых клиентов будет равно числу по формуле worker_processes * worker_connections. Данное значение может упереться в ограничение по коннекшенам самой ОС.
- Для тюнинга самой системы нужно обратиться к команде
ulimit -a
где можно увеличить Max Processes для каждого пользователя. Ulimit используется для установки ограничений на определенные ресурсы для каждого процесса. Существует два типа ограничений:
- жесткие ограничения — это те, что определены для базовых системных ресурсов. Их можно модифицировать, только обладая полномочиями привилегированного пользователя;
- мягкие ограничения — это ограничения по умолчанию, применяемые к вновь создаваемым процессам. Мягкие ограничения можно довести до жестких ограничений системного масштаба.
- PHP-FPM — патч к PHP, предоставляющий альтернативный интерфейс FastCGI. Обычно используется с nginx в проектах с высокими нагрузками или дефицитом ресурсов. Для его установки и конфигурирования делаем следующее:
sudo apt-get install php5-cgi
Редактируем /etc/nginx/sites-enabled/default — добавляет в секцию location / привязку расширения .php к php-fpm:
location ~ \.php$ { fastcgi_pass unix:/var/run/php-fpm/default.socket; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; }
- Memcached — это связующее программное обеспечение, реализующее сервис кеширования данных в оперативной памяти на основе парадигмы хеш-таблицы. Он разработан для кеширования данных, генерация которых требует большого количества ресурсов. Такого рода данные могут содержать что угодно, начиная от результатов запроса к базе данных и заканчивая тяжеловесным куском шаблона. Ставится из репозитория:
sudo apt-get install memcached
- SSDB — сетевое журналируемое хранилище данных типа «ключ — значение» с открытым исходным кодом, альтернатива Redis. Ставится из исходников:
wget --no-check-certificate https://github.com/ideawu/ssdb/archive/master.zip unzip master cd ssdb-master make sudo make install
После чего можно запустить в качестве демона:
./ssdb-server -d ssdb.conf
Q: Есть сайт на IIS с огромным количеством директорий, порядка 150к. Листинг файлов и сам сайт весьма задумчивы. Лечится ли это как-то на винде?
A: Можно отключить параметр NtfsDisableLastAccessUpdate. По умолчанию система NTFS, когда идет обращение к файлу или папке, каждый раз делает обновление атрибута времени и даты последнего обращения. В результате обновления больших томов NTFS этот процесс снижает производительность системы. Чтобы этого избежать, необходимо выключить данную функцию в реестре, по адресу
HKLM\SYSTEM\CurrentControlSet\Control\FileSystem
Значение REG_DWORD выставляем равным 1. Если случай не тяжелый, это должно помочь.
Q: Для домена нужно сделать несколько А-записей. Слышал, что есть какой-то механизм, который может мешать айпишники и отдавать их в случайном порядке. Так ли это?
A: Совершенно верно. Называется он round robin. Это один из методов распределения нагрузки или отказоустойчивости за счет избыточного количества серверов, с помощью управления ответами DNS-сервера в соответствии с некой статистической моделью. В простейшем случае round robin DNS работает, отвечая на запросы не одним IP-адресом, а списком из нескольких адресов серверов, предоставляющих идентичный сервис. Порядок, в котором возвращаются IP-адреса из списка, основан на алгоритме round robin. С каждым ответом последовательность IP-адресов меняется. Как правило, простые клиенты пытаются устанавливать соединения с первым адресом из списка, таким образом, разным клиентам будут выданы адреса разных серверов, что распределит общую нагрузку между серверами. Но данная технология не панацея, и этот алгоритм имеет несколько существенных недостатков, связанных с кешированием записи в иерархии RR DNS самого себя, а также с кешированием на стороне клиента, выданного адреса и его повторного использования, сочетание которых трудно управляемо.
Q: Как установить проприетарный драйвер для NVIDIA через консоль?
A: Для этого первоначально нужно остановить иксы:
sudo /etc/init.d/mdm stop
или gdm\kdm\ldm, в зависимости от того, что установлено. Затем скачать скрипт и сделать его исполняемым:
cd /usr/local/bin && wget -Nc smxi.org/sgfxi && chmod +x sgfxi
Теперь запускаем скрипт с нужными ключами:
sgfxi -N nvidia
И выбираем необходимые пункты в меню утилиты. Учитывая, что у нас карта NVIDIA, запускаем скрипт еще раз:
sgfxi
Теперь остается только перезагрузиться и залогиниться в иксы:
sudo reboot
Q: Встал вопрос апгрейда дедлика. Нужно узнать, есть ли на удаленном сервере свободные слоты под память, сервер на Debian.
A: Для этого советую воспользоваться командой
sudo lshw
Команда выведет полную информацию об установленном железе, включая пустые слоты под память. У утилиты также есть гуи для десктоптных систем.
Хакер #184. Современный фронтенд
"БОЛЬШОЙ ВОПРОС": Виртуальные хосты
Q: Как можно обнаружить виртуальные хосты?
A: Термин «виртуальный хост» относится к практике размещения более чем одного веб-сайта (например, www.company1.com и www.company2.com) на одной машине. Виртуальный хост может быть привязанным к IP-адресу (что означает использование отдельного IP-адреса для каждого сайта) либо привязанным к имени (это позволяет иметь несколько различных имен для каждого IP-адреса). Предположим, у нас есть некий хостинг, у которого в наличии один сервер с одним выделенным IP (скажем, 89.89.89.89), и сто сайтов на нем. Каждый сайт имеет свое уникальное имя, но при этом IP всех этих сайтов один и тот же, 89.89.89.89. Как это возможно? Учитывая, что у нас стоит сервер, это можно реализовать, редактируя файл /etc/httpd/conf/httpd.conf
<VirtualHost *:80>
ServerAdmin username1@example.com
DocumentRoot /home/username1/www/user1.domain.ru
ServerName user1.domain.ru
ServerAlias www.user1domain.ru
ErrorLog logs/user1domain.ru-error_log
CustomLog logs/user1domain.ru-access_log common
</VirtualHost>
<VirtualHost *:80>
ServerAdmin username2@example.org
DocumentRoot /var/www/html/user2.example.ru
ServerName user2.example.ru
ErrorLog logs/user2.example.ru-error_log
CustomLog logs/user2.example.ru-access_log common
</VirtualHost>
Чтобы обнаружить все хосты удаленной машины, нужно воспользоваться одним из следующих способов. Если хост смотрит в инет, то:
- Протестировать через какой-либо онлайн-сервис, к примеру http://2ip.ru/domain-list-by-ip/или любой другой подобный.
- Shodan — думаю, представлять не нужно :).
- Можно использовать theHarvester или все то же самое, что и для локальных хостов.
Если хост локальный, то:
- Halberd
- Модуль метасплойта HTTP Virtual Host Brute Force Scanner
- Host-extract
- Zenmap — метод сканирования slow comprehensive scan
- Скрипт Nmap’a http-vhosts
Все эти тулзы помогут тебе в нелегком деле поиска виртуальных хостов на конечной машине.
Q: Как можно устроить нагрузочное тестирование веб-сервера?
A: Предлагаю воспользоваться для этого утилитой ab. Для организации нагрузки нашему серверу в одну тысячу последовательных запросов команда будет иметь вид:
ad -n 1000 http://test.ru:80/test.html
В результатах мы увидим информацию о сервере и сами результаты тестирования:
Concurrency Level: 1
Time taken for tests: 1.500 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 453000 bytes
HTML transferred: 177000 bytes
Requests per second: 666.58 [#/sec] (mean)
Time per request: 1.500 [ms] (mean)
Time per request: 1.500 [ms] (mean, across all concurrent requests)
Transfer rate: 294.88 [Kbytes/sec] received
Еще интересные опции данной утилиты:
c — очень важный параметр. Определяет количество параллельных запросов, отправляемых одновременно;
n — количество отправляемых запросов;
t — максимальное количество секунд, отведенное на тест. Подходит для тестирования приложения в течение определенного временного промежутка. При этом необходимо задать большое значение параметра -n;
C cookie-name=value — добавляем cookie в каждый запрос к серверу;
H — задаем заголовок запроса;
T — Content-type заголовок запроса;
p — файл, содержащий тело POST-запроса.
Например, для имитации тысячи одновременных запросов команда примет вид
ab -n 1000 -c 1000 http://test.ru:80/test.html
Q: Возможно ли сделать голосовое управление на Raspberry Pi своими руками?
A: Да! Для этого советую обратиться к проекту Jasper. Для создания нужно минимум деталей, а сам Jasper уже содержит в себе готовые к использованию модули. К примеру, можно узнать погоду на сегодня/завтра, есть ли новые письма на гмейл и нет ли новых уведомлений на фейсбуке.
Q: Начал изучать JavaScript. Какие онлайн-сервисы можешь для этого посоветовать?
A: Один из последних сервисов подобного типа, которые я видел, — это codecombat.com. Фишка его в том, что можно играть в мультиплеер с другими живыми игроками-программистами. Все твои юниты управляются исключительно программированием на JS. Для новичков есть кампания, где можно в спокойной обстановке изучить основные функции и писать простенькие сценарии. Здесь нет традиционного подхода к языку, когда нужно перелопатить кучу теории и только потом написать свой хеллоу ворлд. Здесь сразу в бой. Стоит учитывать, что управление юнитами и нападение на огров никак не поможет в написании тех же сайтов и однозначно не заменит теоретические знания. Но как быстрый старт для обретения уверенности и понимания алгоритма пойдет на все 100%. Да и как развлекуха тоже весьма ничего. Стоит отметить и наличие русского языка — тоже однозначный плюс.
ОДНОЗНАЧНОГО ОТВЕТА НЕТ: Польза виртуальных столов
Q. Действительно ли так нужны четыре виртуальных стола на Ubuntu?
- A. Это очень удобно, особенно когда много окон, браузеров и задач. Скажем, у меня на первом столе открыт почтовый клиент и лиса, на втором хром с онлайн-радио и личными вкладками, на третьем реммина с открытыми удаленными серверами, а на четвертом виртуальная машина для экспериментов без отрыва от основных задач. Все на своих местах и по делу.
- B. С другой стороны, сколько работал в винде, никогда потребности в дополнительных рабочих столах не наблюдалось. Если не знать про них на убунту, то и пользоваться не будешь. Да и если что-то повисло, нужно еще определить, что и на каком столе висит, плюс пользоваться одновременно кучей программ просто невозможно. Так что тут, пожалуй, дело привычки и желания разложить все по полочкам.
Q: Хочу себе поставить оконный менеджер, какой можешь посоветовать?
A: Лично мне нравится awesome — это тайлинговый WM, с возможностью быть и композитным. Часто пользователям требуется компактность (тайлинговая сторона этого WM), но иногда можно и поработать в обычном режиме (композитном). Он очень легок, не нагружает процессор, пространство экрана используется очень размеренно, и пустых пространств не остается (в тайлинговом режиме). Настраивается он при помощи конфигурационного файла, на скриптовом языке Lua. Есть поддержка плагинов, которые тоже, в свою очередь, написаны на Lua. Устанавливается командой
sudo apt-get install awesome awesome-extra
Готовые конфигурационные файлы можно найти здесь.