По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие наши статьи:
img
В этой статье мы расскажем как решить проблему с блокировкой файлов в ESXi. Проблема Появляется ошибка при добавлении диска имеющейся виртуальной машины (VMDK) к виртуальной машине, которая не включается: Failed to add disk scsi0:1. Failed to power on scsi0:1 Включение виртуальной машины зависает на 95%. Не удается включить виртуальную машину после развертывания ее из шаблона. Включение виртуальной машины выдает ошибки доступа к файлам, конфигурации виртуальной машины, или файла подкачки: Unable to open Swap File Unable to access a file since it is locked Unable to access a file [filename] since it is locked Unable to access Virtual machine configuration В записях журнала появляются похожие записи: WARNING: World: VM xxxx: xxx: Failed to open swap file [path]: Lock was not free WARNING: World: VM xxxx: xxx: Failed to initialize swap file [path] При открытии консоли для виртуальной машины может возникнуть ошибка: Error connecting to [path][virtual machine].vmx because the VMX is not started Виртуальная машина сообщает о конфликтных состояниях питания между центральным сервером управления vCenter Server и пользовательским интерфейсом ESXi хост. При открытии файла .vmx с помощью текстового редактора (например, cat или vi) появляются похожие записи: cat: can't open '[name of vm].vmx': Invalid argument Решение Цель блокировки файлов Для предотвращения непредвиденных изменений в ценные системные файлы и файлы виртуальной машины, их необходимо заблокировать. В определенных обстоятельствах блокировка сохраняется, даже с выключенной виртуальной машиной. Таким образом, другие ESXi хосты не смогут получить доступ к заблокированным файлам, даже если виртуальная машина не запускается. Файлы виртуальной машины, заблокированные во время выполнения, включают в себя: VMNAME.vswp DISKNAME-flat.vmdk DISKNAME-ITERATION-delta.vmdk VMNAME.vmx VMNAME.vmxf vmware.log Быстрый первичный тест Поставьте DRS (Планировщик Распределения Ресурсов) в режим обслуживания. С его помощью вы сможете выбрать хост, пока вы включаете виртуальную машину. Если DRS не используется, передайте ВМ другому хосту. Если это не удается, попробуйте включить питание виртуальной машины на других узлах кластера. Машина должна включиться, когда она окажется на узле, который заблокировал файлы. Если ВМ по-прежнему не включается, рассмотрите действия, предложенные ниже. Действия по устранению неполадок: поиск хоста заблокированного файла Чтобы определить заблокированный файл, попробуйте включить виртуальную машину. Во время включения питания ошибка может отображаться или записываться в журналы виртуальной машины. Ошибка и запись в журнале идентифицируют виртуальную машину и файлы: Чтобы найти блокирующий узел, запустите утилиту vmfsfilelockinfo с узла, который не может открыть заблокированный файл. Чтобы узнать IP-адрес хоста, который заблокировал файлы, необходимо запустить утилиту vmfsfilelockinfo для файла VMDK flat, delta или sesparse для VMFS или для файла .UUID. lck для vSAN. Утилита vmfsfilelockinfo потребует следующий материал: Заблокированный файл Имя пользователя и пароль для доступа к VMware vCenter Server (при отслеживании MAC-адреса хостом ESX.) Например: Запустите команду: ~ # vmfsfilelockinfo -p /vmfs/volumes/iscsi-lefthand-2/VM1/VM1_1-000001-delta.vmdk -v 192.168.1.10 -u administrator@vsphere.local Результат будет приблизительно такой: vmfsflelockinfo Version 1.0 Looking for lock owners on "VM1_1-000001-delta.vmdk" "VM1_1-000001-delta.vmdk" is locked in Exclusive mode by host having mac address ['xx:xx:xx:xx:xx:xx'] Trying to make use of Fault Domain Manager ---------------------------------------------------------------------- Found 0 ESX hosts using Fault Domain Manager. ---------------------------------------------------------------------- Could not get information from Fault domain manager Connecting to 192.168.1.10 with user administrator@vsphere.local Password: xXxXxXxXxXx ---------------------------------------------------------------------- Found 3 ESX hosts from Virtual Center Server. ---------------------------------------------------------------------- Searching on Host 192.168.1.178 Searching on Host 192.168.1.179 Searching on Host 192.168.1.180 MAC Address : xx:xx:xx:xx:xx:xx Host owning the lock on the vmdk is 192.168.1.180, lockMode : Exclusive Total time taken : 0.27 seconds. Примечание: в течение жизненного цикла работающей виртуальной машины ее файлы могут менять тип блокировки. Вид блокировки (mode) обозначает тип блокировки на файле. Список видов блокировки: mode 0 = отсутствие блокировки mode 1 = эксклюзивная блокировка (файл vmx работающей виртуальной машины, использует VMDK-диск (flat or delta), *vswp и т.д.) mode 2 = блокировка «только для чтения» (read-only). (Например, для файла данных flat.vmdk работающей машины со снапшотами) mode 3 = блокировка для одновременной записи с нескольких хостов (например, используется для кластеров MSCS или FTVMs) Чтобы узнать название процесса, который заблокировал файл, запустите команду lsof на хосте, заблокировавшем файл, и укажите название нужного файла: ~ # lsof | egrep 'Cartel|VM1_1-000001-delta.vmdk' Результат будет приблизительно такой: Cartel | World name | Type | fd | Description 36202 vmx FILE 80 /vmfs/volumes/556ce175-7f7bed3f-eb72-000c2998c47d/VM1/VM1_1-000001-delta.vmdk Из результата вы узнаете Cartel ID заблокировавшей машины – например, 36202. Теперь, с помощью следующей команды, выведете на экран список активных Cartel ID: ~ # esxcli vm process list Информация активных виртуальных машин сгруппирована по названиям машин. Формат приблизительно такой: Alternate_VM27 World ID: 36205 Process ID: 0 VMX Cartel ID: 36202 UUID: 56 4d bd a1 1d 10 98 0f-c1 41 85 ea a9 dc 9f bf Display Name: Alternate_VM27 Config File: /vmfs/volumes/556ce175-7f7bed3f-eb72-000c2998c47d/Alternate_VM27/Alternate_VM27.vmx ……… Найдя нужный вам VMX Cartel ID, вы узнаете название машины, заблокировавшей ваш файл. Если никакие процессы не отображаются, можете найти виртуальные машины с подключенным vmdk. Замените VMDKS_TO_LOOK_FOR на необходимый vmdk. В результате будет список всех зарегистрированных виртуальных машин, и VMDK отобразится под виртуальной машиной, которая заблокировала файл: for i in $(vim-cmd vmsvc/getallvms | grep -v Vmid | awk -F "/" '{print $2}' | awk '{print $1}'); do echo $i && find ./ -iname $i | xargs grep vmdk | grep -Ei VMDKS_TO_LOOK_FOR ; done Снятие блокировки Машину, которая не включается, переместите на заблокировавший хост и снова попробуйте включить ее. Чтобы снять блокировку, извлеките VMDK-диск или выключите машину, которая удерживает блокировку. Перезагрузите хост, который заблокировал файл. Обратитесь к VMware storage team, vSAN team или разработчику NFS за дальнейшей помощью, так как проблемы с метаданными могут мешать управлению блокировками. Снятие блокировки .lck file (только для NFS) Файлы на виртуальной машине могут быть заблокированы через NFS storage. Такие файлы заканчиваются на .lck-#### (где #### - значение поля fileid, которое можно получить из запроса GETATTR для заблокированного файла). Внимание: для безопасного извлечения файлов машина должна быть выключена. Примечание: Тома VMFS не имеют .lck файлов. Механизм блокировки для томов VMFS расположен в метаданных тома VMFS. Проверка целостности файла конфигурации виртуальной машины (.vmx) Если виртуальная машина не включается, причина может быть в наличие двух дисков в файле .vmx. Извлеките один из дисков и попробуйте включить машину снова. Команда touch *, которая раньше использовалась для устранения неполадок с заблокированными снапшотами vmdk, теперь записывает время последнего изменения файла, который должен быть остановлен и запущен с помощью vmkfstools-D или chmod-s * или vmfsfilelockinfo * для идентификации блокировки.
img
Эта статья подробно объясняет функции и терминологию протокола RIP (административное расстояние, метрики маршрутизации, обновления, пассивный интерфейс и т.д.) с примерами. RIP - это протокол маршрутизации вектора расстояния. Он делится информацией о маршруте через локальную трансляцию каждые 30 секунд. Маршрутизаторы хранят в таблице маршрутизации только одну информацию о маршруте для одного пункта назначения. Маршрутизаторы используют значение AD и метрику для выбора маршрута. Первая часть статьи про базовые принципы работы протокола RIP доступна по ссылке. Административная дистанция В сложной сети может быть одновременно запущено несколько протоколов маршрутизации. Различные протоколы маршрутизации используют различные метрики для расчета наилучшего пути для назначения. В этом случае маршрутизатор может получать различную информацию о маршрутах для одной целевой сети. Маршрутизаторы используют значение AD для выбора наилучшего пути среди этих маршрутов. Более низкое значение объявления имеет большую надежность. Административная дистанция Протокол/Источник 0 Непосредственно подключенный интерфейс 0 или 1 Статическая маршрутизация 90 EIGRP 110 OSPF 120 RIP 255 Неизвестный источник Давайте разберемся в этом на простом примере: А маршрутизатор изучает два разных пути для сети 20.0.0.0/8 из RIP и OSPF. Какой из них он должен выбрать? Ответ на этот вопрос скрыт в приведенной выше таблице. Проверьте объявленную ценность обоих протоколов. Административное расстояние - это правдоподобие протоколов маршрутизации. Маршрутизаторы измеряют каждый источник маршрута в масштабе от 0 до 255. 0 - это лучший маршрут, а 255-худший маршрут. Маршрутизатор никогда не будет использовать маршрут, изученный этим (255) источником. В нашем вопросе у нас есть два протокола RIP и OSPF, и OSPF имеет меньшее значение AD, чем RIP. Таким образом, его маршрут будет выбран для таблицы маршрутизации. Метрики маршрутизации У нас может быть несколько линий связи до целевой сети. В этой ситуации маршрутизатор может изучить несколько маршрутов, формирующих один и тот же протокол маршрутизации. Например, в следующей сети у нас есть два маршрута между ПК-1 и ПК-2. Маршрут 1: ПК-1 [10.0.0.0/8] == Маршрутизатор OFF1 [S0/1 - 192.168.1.254] = = Маршрутизатор OFF3 [S0/1-192.168.1.253] = = ПК-2 [20.0.0.0/8] Маршрут 2: ПК-1 [10.0.0.0/8] == Маршрутизатор OFF1 [S0/0 - 192.168.1.249] == Маршрутизатор OFF2 [S0/0 - 192.168.1.250] == Маршрутизатор OFF2 [S0/1 - 192.168.1.246] == Маршрутизатор OFF3 [S0/0 - 192.168.1.245] == ПК-2 [20.0.0.0/8] В этой ситуации маршрутизатор использует метрику для выбора наилучшего пути. Метрика - это измерение, которое используется для выбора наилучшего пути из нескольких путей, изученных протоколом маршрутизации. RIP использует счетчик прыжков в качестве метрики для определения наилучшего пути. Прыжки - это количество устройств уровня 3, которые пакет пересек до достижения пункта назначения. RIP (Routing Information Protocol) - это протокол маршрутизации вектора расстояния. Он использует расстояние [накопленное значение метрики] и направление [вектор], чтобы найти и выбрать лучший путь для целевой сети. Мы объяснили этот процесс с помощью примера в нашей первой части этой статьи. Хорошо, теперь поймите концепцию метрики; скажите мне, какой маршрут будет использовать OFF1, чтобы достичь сети 20.0.0.0/8? Если он выбирает маршрут S0/1 [192.168.1.245/30], он должен пересечь устройство 3 уровня. Если он выбирает маршрут S0/0 [19.168.1.254/30], то ему придется пересечь два устройства уровня 3 [маршрутизатор OFF! и последний маршрутизатор OFF3], чтобы достичь целевой сети. Таким образом, он будет использовать первый маршрут, чтобы достигнуть сети 20.0.0.0/8. Маршрутизация по слухам Иногда RIP также известен как маршрутизация по протоколу слухов. Потому что он изучает информацию о маршрутизации от непосредственно подключенных соседей и предполагает, что эти соседи могли изучить информацию у своих соседей. Обновления объявлений RIP периодически транслирует информацию о маршрутизации со всех своих портов. Он использует локальную трансляцию с IP-адресом назначения 255.255.255.255. Во время вещания ему все равно, кто слушает эти передачи или нет. Он не использует никакого механизма для проверки слушателя. RIP предполагает, что, если какой-либо сосед пропустил какое-либо обновление, он узнает об этом из следующего обновления или от любого другого соседа. Пассивный интерфейс По умолчанию RIP транслирует со всех интерфейсов. RIP позволяет нам контролировать это поведение. Мы можем настроить, какой интерфейс должен отправлять широковещательную передачу RIP, а какой нет. Как только мы пометим любой интерфейс как пассивный, RIP перестанет отправлять обновления из этого интерфейса. Расщепление горизонта Split horizon-это механизм, который утверждает, что, если маршрутизатор получает обновление для маршрута на любом интерфейсе, он не будет передавать ту же информацию о маршруте обратно маршрутизатору-отправителю на том же порту. Разделенный горизонт используется для того, чтобы избежать циклов маршрутизации. Чтобы понять эту функцию более четко, давайте рассмотрим пример. Следующая сеть использует протокол RIP. OFF1-это объявление сети 10.0.0.0/8. OFF2 получает эту информацию по порту S0/0. Как только OFF2 узнает о сети 10.0.0.0/8, он включит ее в свое следующее обновление маршрутизации. Без разделения горизонта он будет объявлять эту информацию о маршруте обратно в OFF1 на порту S0/0. Ну а OFF1 не будет помещать этот маршрут в таблицу маршрутизации, потому что он имеет более высокое значение расстояния. Но в то же время он не будет игнорировать это обновление. Он будет предполагать, что OFF1 знает отдельный маршрут для достижения сети 10.0.0.0/8, но этот маршрут имеет более высокое значение расстояния, чем маршрут, который я знаю. Поэтому я не буду использовать этот маршрут для достижения 10.0.0.0/8, пока мой маршрут работает. Но я могу воспользоваться этим маршрутом, если мой маршрут будет недоступен. Так что это может сработать как запасной маршрут для меня. Это предположение создает серьезную сетевую проблему. Например, что произойдет, если интерфейс F0/1 OFF1 выйдет из строя? OFF1 имеет прямое соединение с 10.0.0.0/8, поэтому он сразу же узнает об этом изменении. В этой ситуации, если OFF1 получает пакет для 10.0.0.0/8, вместо того чтобы отбросить этот пакет, он переадресует его из S0/0 в OFF2. Потому что OFF1 думает, что у OFF2 есть альтернативный маршрут для достижения 10.0.0.0/8. OFF2 вернет этот пакет обратно в OFF1. Потому что OFF2 думает, что у OFF1 есть маршрут для достижения 10.0.0.0/8. Это создаст сетевой цикл, в котором фактический маршрут будет отключен, но OFF1 думает, что у OFF2 есть маршрут для назначения, в то время как OFF2 думает, что у OFF1 есть способ добраться до места назначения. Таким образом, этот пакет будет бесконечно блуждать между OFF1 и OFF2. Чтобы предотвратить эту проблему, RIP использует механизм подсчета прыжков (маршрутизаторов). Количество прыжков RIP подсчитывает каждый переход (маршрутизатор), который пакет пересек, чтобы добраться до места назначения. Он ограничивает количество прыжков до 15. RIP использует TTL пакета для отслеживания количества переходов. Для каждого прыжка RIP уменьшает значение TTL на 1. Если это значение достигает 0, то пакет будет отброшен. Это решение только предотвращает попадание пакета в петлю. Это не решает проблему цикла маршрутизации. Split horizon решает эту проблему. Если расщепление горизонта включено, маршрутизатор никогда не будет вещать тот же маршрут обратно к отправителю. В нашей сети OFF2 узнал информацию о сети 10.0.0.0/8 от OFF1 на S0/0, поэтому он никогда не будет транслировать информацию о сети 10.0.0.0/8 обратно в OFF1 на S0/0. Это решает нашу проблему. Если интерфейс F0/1 OFF1 не работает, и OFF1, и OFF2 поймут, что нет никакого альтернативного маршрута для достижения в сети 10.0.0.0/8. Маршрут отравления Маршрут отравления работает противоположном режиме расщепления горизонта. Когда маршрутизатор замечает, что какой-либо из его непосредственно подключенных маршрутов вышел из строя, он отравляет этот маршрут. По умолчанию пакет может путешествовать только 15 прыжков RIP. Любой маршрут за пределами 15 прыжков является недопустимым маршрутом для RIP. В маршруте, находящимся в неисправном состоянии, RIP присваивает значение выше 15 к конкретному маршруту. Эта процедура известна как маршрутное отравление. Отравленный маршрут будет транслироваться со всех активных интерфейсов. Принимающий сосед будет игнорировать правило разделения горизонта, передавая тот же отравленный маршрут обратно отправителю. Этот процесс гарантирует, что каждый маршрутизатор обновит информацию об отравленном маршруте. Таймеры RIP Для лучшей оптимизации сети RIP использует четыре типа таймеров. Таймер удержания (Hold down timer) - RIP использует удерживающий таймер, чтобы дать маршрутизаторам достаточно времени для распространения отравленной информации о маршруте в сети. Когда маршрутизатор получает отравленный маршрут, он замораживает этот маршрут в своей таблице маршрутизации на период таймера удержания. В течение этого периода маршрутизатор не будет использовать этот маршрут для маршрутизации. Период удержания будет прерван только в том случае, если маршрутизатор получит обновление с той же или лучшей информацией для маршрута. Значение таймера удержания по умолчанию составляет 180 секунд. Route Invalid Timer - этот таймер используется для отслеживания обнаруженных маршрутов. Если маршрутизатор не получит обновление для маршрута в течение 180 секунд, он отметит этот маршрут как недопустимый маршрут и передаст обновление всем соседям, сообщив им, что маршрут недействителен. Route Flush Timer - этот таймер используется для установки интервала для маршрута, который становится недействительным, и его удаления из таблицы маршрутизации. Перед удалением недопустимого маршрута из таблицы маршрутизации он должен обновить соседние маршрутизаторы о недопустимом маршруте. Этот таймер дает достаточно времени для обновления соседей, прежде чем недопустимый маршрут будет удален из таблицы маршрутизации. Таймер Route Flush Timer по умолчанию установлен на 240 секунд. Update Timer -В RIP широковещательная маршрутизация обновляется каждые 30 секунд. Он будет делать это постоянно, независимо от того, изменяется ли что-то в маршрутной информации или нет. По истечении 30 секунд маршрутизатор, работающий под управлением RIP, будет транслировать свою информацию о маршрутизации со всех своих интерфейсов. RIP - это самый старый протокол вектора расстояний. Для удовлетворения текущих требований к сети он был обновлен с помощью RIPv2. RIPv2 также является протоколом вектора расстояния с максимальным количеством прыжков 15. Вы все еще можете использовать RIPv1, но это не рекомендуется. В следующей таблице перечислены ключевые различия между RIPv1 и RIPv2. Основные различия между RIPv1 и RIPv2 RIPv1 RIPv2 Он использует широковещательную передачу для обновления маршрутизации. Он использует многоадресную рассылку для обновления маршрутизации. Он посылает широковещательный пакет по адресу назначения 255.255.255.255. Он отправляет многоадресную рассылку по адресу назначения 224.0.0.9. Он не поддерживает VLSM. Он поддерживает VLSM. Он не поддерживает никакой аутентификации. Он поддерживает аутентификацию MD5 Он поддерживает только классовую маршрутизацию. Он поддерживает как классовую, так и бесклассовую маршрутизацию. Он не поддерживает непрерывную сеть. Он поддерживает непрерывную сеть.
img
Сегодня подробно расскажем как найти практическое применение знаниям, полученным в статье про структуру asteriskcdrdb, а именно, как сделать ежедневные отчеты о входящих звонках на почту. Создание скрипта Чтобы наш .php скрипт смог подключиться к базе данных, необходимо создать пользователя, с правами, которые буду позволять ему извлекать необходимую информацию. Для этого, подключимся к нашему серверу по SSH [root@asterisk]# mysql mysql>CREATE USER ' user'@'localhost' IDENTIFIED BY 'P@ssw0rd'; На данном этапе мы создали пользователя user с паролем P@ssw0rd. Далее дадим ему необходимые права: mysql> GRANT SELECT ON asteriskcdrdb.cdr TO 'user' Создадим файл с расширением .php, в котором мы отразим подключение к нашей базе данных. Запишем эту конструкцию так: $hostname = "localhost"; //адрес хоста. Скрипт мы будем запускать на той же машине, на которой находится БД asteriskcdrdb; $username = "user"; //отражаем пользователя $password = "P@ssw0rd"; //пароль для созданного нами пользователя $dbName = "asteriskcdrdb"; //база данных, в которой хранятся необходимые нам данные $today = date('y-m-d'); // сегодняшняя дата в формате 2016-03-25 $counter = 1; // счетчик mysql_connect($hostname,$username,$password) OR DIE("Не могу создать соединение "); // соединиться к БД mysql_select_db($dbName) or die(mysql_error()); //выбрать базу данных. Если произойдет ошибка - вывести ее $headers = "; charset=windows-1251 "; //заголовок для письма $headers .= "From: Мерион Нетворкс <info@merionet.ru> "; $headers .= "Reply-To: info@merionet.ru "; Предположим, что все входящие звонки приходят на номер секретаря – 100. Так же мы знаем, что при звонке из города, мы видим номер звонящего, который содержит в себе больше 3 символов (пусть у нас используется трехзначная внутренняя нумерация). Наша задача сводится к формулировке запроса к таблице cdr. Добавляем к нашему .php файлу: $query = "SELECT `dst` , `src` , `duration` , `dstchannel` , `calldate` , `disposition` FROM `cdr` WHERE `calldate` >='$today 00:00:00' AND `calldate` <='$today 23:59:59' AND LENGTH( `src` ) >3 AND `dst` = '100';" ; $res=mysql_query($query) or die(mysql_error()); // Выполнить запрос. Если произойдет ошибка - вывести ее. $number = mysql_num_rows($res); // Как много нашлось строк У нас почти все готово. Осталось только обработать данные на выходе. Для этого, нам понадобится следующая конструкция: //формируем шапку нашей таблицы со значениями $mes .= ' table style="max-width: 575px;border-bottom:none; margin: 0 auto;border-spacing: inherit;"> thead> tr style="border-bottom: 2px solid #05477c;"> th style="padding:10px; color: #fff; max-width: 150px;background:#05477c;">Порядковый номер</th> th style="padding:10px; color: #fff; max-width: 150px;background:#05477c;">Дата</th> th style="padding:10px; color: #fff; max-width: 100px;background:#05477c;">От кого</th> th style="padding:10px; color: #fff; max-width: 45px;background:#05477c;">Кому</th> th style="padding:10px; color: #fff; max-width: 45px;background:#05477c;">Статус звонка</th> /tr> /thead>'; //перебираем значения ассоциативного массива. Число элементов данного массива равно числу строк на выходе sql запроса while ($row=mysql_fetch_array($res)) { $mes .= ' tbody> tr style="width: 100px;"> td style="padding:10px; border-bottom: 1px solid #eee; text-align:center;">'.$counter.'</td> td style="padding:10px; border-bottom: 1px solid #eee; text-align:center;min-width: 100px;">'. $row['calldate'].'</td> td style="padding:10px; border-bottom: 1px solid #eee; text-align:center;min-width: 100px;">'. $row['src'].'</td> td style="padding:10px; border-bottom: 1px solid #eee; text-align:center;">'.$row['dst'].'</td> td style="padding:10px; text-align:center; border-bottom: 1px solid #eee; min-width: 120px; ">'.$row['disposition'].'</td> /tr>'; $counter = $counter + 1; } Теперь, мы храним в переменной $mes html таблицу, которая готова к отправке на почту. Добавим в конец скрипта: mail("info@merionet.ru", 'Все входящие за '.$today.'', $mes, $headers); ВАЖНО! Если вы используете кириллические символы, установите кодировку .php файла на Кириллицу (windows-1251) Итак, готово. Давайте посмотрим что приходит нам на почту: Работает. Давайте сделаем ежедневное задание на отработку этого скрипта через cron. Сделаем, например, ежедневно, в 17:30, когда рабочий день подходит к концу: 30 17 * * * php /home/admin/mail_report.php Не забудьте в начала скрипта поставить открывающий тэг php, а в конце скрипта закрывающий.
ВЕСЕННИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59