Небольшой How-to для начинающих работать с ОС Solaris и платформой виртуализации Oracle VM Server for SPARC, ранее известной как Sun Logical Domains.

image

Logical Domains — технология виртуализации и разделения физических ресурсов для линейки UNIX-серверов, основанных на архитектуре SPARC V9, представленная в мае 2007 корпорацией Sun Microsystems.

Управлять гипервизором возможно из командной строки или визуальными интерфейсами управления, последнее не будет здесь рассматриваться.

Примеры приведены для ОС Solaris 10, в Solaris 11 стоит учитывать особенности настройки сети.

В терминологии Sun виртуальные машины обозначаются как домены, существует несколько видов доменов.

Роли доменов


  • Control Domain — Домен управления, именно в нём работает Oracle VM Server, создаётся при установке по умолчанию из системы где устанавливается Oracle VM Server, имеет название primary. Может быть только один домен управления.
  • Service Domain — Домен виртуальных устройств, таких как виртуальные свитчи, виртуальные диски и т.д. Любой домен может быть сконфигурирован как Service Domain, по умолчанию Control Domain уже является Service Domain.
  • I/O Domain — Домен, имеющий доступ к физическим PCIe устройствам сервера. Может предоставлять доступ к этим устройствам, если сконфигурирован как Service Domain. Имеет более высокую производительность по сравнению с Guest Domain, почти сравнимую с невиртуализированным сервером. Максимальное количество доменов ограничивается количеством PCIe-шин на сервере. Использование подобных доменов усложняет миграцию. По умолчанию Control Domain выполняет функции I/O Domain.

    Просмотр имеющихся PCIe-шин и устройств:

    # /usr/sbin/ldm list-io
  • Root Domain — Корневой домен имеет более расширенный доступ к архитектуре физических PCIe устройств сервера, чем I/O Domain. Имеет доступ ко всем сервисам предоставляемым PCIe устройствами, например к фабрике обработки ошибок (fabric error handling). Количество корневых доменов зависит от архитектуры сервера.
  • Guest Domain — Гостевой домен, имеет только виртуальные устройства.

Обозначения виртуальных устройств и сервисов


  • vnet – Virtual Network. Виртуальная сетевая карта.
  • vsw – Virtual Switch. Виртуальный свитч.
  • vds – Virtual Disk Server. Виртуальный жёсткий диск. Модель использования диска строится на клиент-серверной архитектуре, поэтому для доступа к диску используется клиент vdc, а vds представляет собой службу доступа к физическим дискам или их образам.
  • vdc — Virtual Disk Client. Предоставляет доступ к виртуальному жёсткому диску. Несмотря на то, что виртуальные диски относятся к Guest Domain большинство операций по работе с ними выполняется на Service Domain.
  • vcc — Virtual Console Concentrator. Обычно данное виртуальное устройство имеет Control Domain (primary). Оно обеспечивает доступ к консолям виртуальных машин. Сервис svc:/ldoms/vntsd:default обеспечивает доступ к консолям виртуальных машин, запущен в Control Domain.

Пример создания основных сервисов


Обычно сервисы устройств создаются в Control Domain, но можно выделить для этого отдельный домен — Service Domain.

  • Создаём концентратор консолей в домене primary, с названием primary-vcc0 и диапазоном используемых портов 5000-5100:

    # /usr/sbin/ldm add-vcc port-range=5000-5100 primary-vcc0 primary

  • Создаём сервер виртуальных жёстких дисков в домене primary, с названием primary-vds0:

    # /usr/sbin/ldm add-vds primary-vds0 primary

  • Создаём виртуальный свитч в домене primary, с названием primary-vsw0 и привязываем его к сетевому интерфейсу nxge0. Использовать mac-адрес сетевой карты:

    # /usr/sbin/ldm add-vsw net-dev=nxge0 primary-vsw0 primary

    Используется указанный mac-адрес:

    # /usr/sbin/ldm add-vsw mac-addr=2:04:4f:fb:9f:0d net-dev=nxge0 primary-vsw0 primary

  • Просмотреть список сервисов домена primary:

    # /usr/sbin/ldm list-services primary


Настройка Control Domain и высвобождение ресурсов из него для других доменов


  • Просмотр списка криптографических устройств. Используются в системах SPARC, наличие этих устройств в домене не позволяет динамически переконфигурировать количество CPU:

    # /usr/sbin/ldm list -o crypto primary
  • Естественно ставим этот параметр в 0, или вообще не трогаем эту команду:

    # /usr/sbin/ldm set-mau 0 primary
  • Задаём количество ядер домену primary:

    # /usr/sbin/ldm set-vcpu 8 primary
  • Запускаем переконфигурацию домена primary или просто перезагружаем сервер:

    # /usr/sbin/ldm start-reconf primary
  • Задаём количество оперативной памяти домену primary:

    # /usr/sbin/ldm set-memory 4G primary
  • Сохраняем текущую конфигурацию доменов как initial:

    # /usr/sbin/ldm add-config initial
  • Просмотреть список конфигураций доменов(initial [next poweron] означает, что конфигурация будет использоваться при следующей загрузке гипервизора):

    # /usr/sbin/ldm list-config
  • Перезагружаем гипервизор:

    # shutdown -y -g0 -i6

По умолчанию между Control Domain и остальными доменами нет сетевого соединения, это связано с тем, что Control Domain использует физический интерфейс(напр.: nxge0), а остальные домены виртуальные(напр.: vsw0).

Конфигурирование виртуального свитча как главного интерфейса в Control Domain


  • Список всевозможных сетевых интерфейсов системе:

    # /usr/sbin/dladm show-link
  • Включаем необходимый виртуальный свитч:

    # /usr/sbin/ifconfig vsw0 plumb
  • Выключаем физический интерфейс:

    # /usr/sbin/ifconfig nxge0 down unplumb
  • Задаём IP-адрес и помечаем интерфейс виртуального свитча включенным:

    # /usr/sbin/ifconfig vsw0 192.168.0.108 netmask 255.255.0.0 broadcast+up

    Или можно использовать DHCP:

    # /usr/sbin/ifconfig vsw0 dhcp start
  • Не забываем прописать настройки сетевого интерфейса в конфигурационные файлы:

    # mv /etc/hostname.nxge0 /etc/hostname.vsw0

    При использовании DHCP:

    # mv /etc/dhcp.nxge0 /etc/dhcp.vsw0

Создание Guest Domain


  • Создание домена ldg1:

    # /usr/sbin/ldm add-domain ldg1
  • Добавление процессоров в домен ldg1:

    # /usr/sbin/ldm add-vcpu 8 ldg1
  • Добавление оперативной памяти в домен ldg1:

    # /usr/sbin/ldm add-memory 2G ldg1
  • Добавление сетевого интерфейса vnet1, подключенного к свитчу vsw0 в домене ldg1:

    # /usr/sbin/ldm add-vnet vnet1 primary-vsw0 ldg1
  • Добавляем физический жёсткий диск /dev/dsk/c2t1d0s2 к виртуальному дисковому серверу primary-vds0 под именем vol1.

    # /usr/sbin/ldm add-vdsdev /dev/dsk/c2t1d0s2 vol1@primary-vds0

    Или:

    • Создание ФС с точкой монтирования:

      # zfs create -o mountpoint=/LDoms rpool/LDoms
    • Создание файловой системы определённого размера:

      # /usr/sbin/zfs create -V 10G rpool/LDoms/disk1
    • Добавляем раздел ZFS в качестве виртуального диска на дисковый сервер:

      # /usr/sbin/ldm add-vdsdev /dev/zvol/dsk/rpool/LDoms/disk1 vol1@primary-vds0

    Или:

    • Создать файл размером 10 гигабайт:

      # /usr/sbin/mkfile 10G <имя файла>
    • Добавляем файл в качестве виртуального диска:

      # /usr/sbin/ldm add-vdsdev <имя файла>  vol1@primary-vds0
  • Добавляем виртуальный диск vol1@primary-vds0 к домену ldg1 под именем vdisk1:

    # /usr/sbin/ldm add-vdisk vdisk1 vol1@primary-vds0 ldg1
  • Устанавливаем для домена ldg1 автозагрузку при старте сервера:

    # /usr/sbin/ldm set-var auto-boot\?=true ldg1
  • Устанавливаем диск с которого будет грузиться домен ldg1:

    # /usr/sbin/ldm set-var boot-device=vdisk1 ldg1
  • Связываем домен ldg1 с Control Domain:

    # /usr/sbin/ldm bind-domain ldg1
  • Просмотреть информацию о домене ldg1, в графе CONS будет указан порт, по которому подключиться к домену:

    # /usr/sbin/ldm list-domain ldg1
  • Просмотр всех связанных с доменом ldg1 ресурсов:

    # /usr/sbin/ldm list-bindings ldg1
  • Подключиться к консоли домена, слушающего порт 5000:

    # /usr/bin/telnet localhost 5000
  • Запустить домен ldg1, если он остановлен:

    # /usr/sbin/ldm start-domain ldg1

Установка Oracle Solaris 10 с DVD-диска


  • Останавливаем службу управления томами:

    # /usr/sbin/svcadm disable volfs
  • Останавливаем необходимый домен:

    # /usr/sbin/ldm stop ldg1
  • Исключить из списка управляемых доменов:

    # /usr/sbin/ldm unbind-domain ldg1
  • Добавляем привод /dev/dsk/c0t0d0s2 к виртуальному дисковому серверу primary-vds0 под именем dvd_vol:

    # /usr/sbin/ldm add-vdsdev /dev/dsk/c0t0d0s2 dvd_vol@primary-vds0
  • Подключаем завиртуализированный привод к домену ldg1 под именем vdisk_cd_media:

    # /usr/sbin/ldm add-vdisk vdisk_cd_media dvd_vol@primary-vds0 ldg1
  • Просмотр всех связанных с доменом ldg1 ресурсов:

    # /usr/sbin/ldm list-bindings ldg1
  • Связываем домен ldg1 с Control Domain:

    # /usr/sbin/ldm bind-domain ldg1
  • Запустить домен ldg1:

    # /usr/sbin/ldm start-domain ldg1
  • Подключаемся к консоли домена:

    # /usr/bin/telnet localhost 5000
  • Просматриваем алиасы устройств домена в поисках vdisk_cd_media:

    ok devalias
  • Загружаемся с диска:

    ok boot vdisk_cd_media:f

Установка Oracle Solaris 10 из образа


  • Остановить необходимый домен:

    # /usr/sbin/ldm stop ldg1
  • Исключить из списка управляемых доменов:

    # /usr/sbin/ldm unbind-domain ldg1
  • Добавить образ solaris10.iso к виртуальному дисковому серверу primary-vds0 под именем iso_vol:

    # /usr/sbin/ldm add-vdsdev /export/solaris10.iso iso_vol@primary-vds0
  • Подключить завиртуализированный привод к домену ldg1 под именем vdisk_iso:

    # /usr/sbin/ldm add-vdisk vdisk_iso iso_vol@primary-vds0 ldg1
  • Просмотреть все связанные с доменом ldg1 ресурсы:

    # /usr/sbin/ldm list-bindings ldg1
  • Связать домен ldg1 с Control Domain:

    # /usr/sbin/ldm bind-domain ldg1
  • Запустить домен ldg1:

    # /usr/sbin/ldm start-domain ldg1
  • Подключаемся к консоли домена:

    # /usr/bin/telnet localhost 5000
  • Просматриваем алиасы устройств домена в поисках vdisk_iso:

    ok devalias
  • Загружаемся с образа:

    ok boot vdisk_iso:f

Удаление домена


  • Остановить домен ldg1:

    # /usr/sbin/ldm stop-domain ldg1
  • Отвязать домен ldg1:

    # /usr/sbin/ldm unbind-domain ldg1
  • Удалить домен ldg1:

    # /usr/sbin/ldm remove-domain ldg1

Комментарии (6)


  1. vrangel
    20.09.2019 17:52

    Спасибо за статью. Есть вопрос: каким инструментом в Solaris можно виртуализировать среду, развернутую на реальном железе? Есть группа старых серверов, хочется оптимизировать инфраструктуру.


    1. SunTechnik
      20.09.2019 20:30

      В самом Solaris есть много инструментов для этого. Простой поиск по Solaris p2v migration выдаст массу рекомендаций из блогов Oracle или документации.

      Начинать надо со списка моделей исходных машин и используемых версий Solaris.
      LDOM могут быть использованы далеко не всех серверах SPARC, тем более старых.
      Гостевой ОС в LDOM может быть только Solaris 10 или Solaris 11.
      Виртуализация в Solaris не ограничивается LDOM, есть еще и zones.


    1. Zebra_86
      23.09.2019 10:16

      Может подойдёт Solaris Container? Там можно наплодить зоны.


  1. SunTechnik
    20.09.2019 20:20

    Статья более чем спорная.
    Solaris 10 — требует Extended Support. Актуальный — Solaris 11.

    «Oracle VM представляет из себя гипервизор XEN, установленный на ОС Solaris.» — Это справедливо для Oracvle VM под x86, и не имеет никакого отношения к Oracle VM под SPARC.

    Для добавления ресурсов нет необходимости делать Unbind домена.

    Непонятна вообще цель статьи. Это краткий перевод родной документации?


    1. serhak Автор
      23.09.2019 10:59

      Вы правы, ХЕN используется в версии для x86. Заменил этот абзац.
      Цель статьи указана в её заголовке, это небольшая шпаргалка(how-to). На Хабре часто вижу статьи, написанные в таком стиле. Они даже иногда появляются на главной странице, поэтому решил выложить свои заметки. Возможно будет кому-то полезно, возможно нет :)


      1. SunTechnik
        23.09.2019 12:12

        Актуальность этой статьи — как сейчас рассказать как ставить Windows XP.
        Статья полезна если разбирается какой-то случай от начала и до конца. Этого нет.
        В статье много мелких ошибок и неясностей.

        Команда /usr/sbin/zfs create -V 10G rpool/LDoms/disk1
        создает устройство (zvol), а не файловую систему.

        Зачем создавать файловую систему /LDoms?

        В Control домене надо делать
        mv /etc/hostname.nxge0 /etc/hostname.vsw0
        , а не cp.
        При Ваших настройках, после перезагрузки поднимется и nxge0, и vsw0 с одинаковыми настройками.
        И это далеко не все замечания по статье…