Виртуальные IP-адреса

Виртуальный IP-адрес — это дополнительный IP-адрес, который можно назначить нескольким серверам. Виртуальный IP-адрес можно использовать в кластере серверов для балансировки нагрузки между серверами (при режиме active-active) или для отказоустойчивости (при режиме active-standby).

Создание виртуального IP-адреса

Чтобы создать виртуальный IP-адрес:

  1. Если нужно привязать виртуальный IP-адрес к MAC-адресу:
    1. Подключитесь к любому серверу кластера.
    2. Определите routerId для кластера серверов. Например, 30. 

      Примечание

      Для каждого кластера в пределах одной сети (одного L2-сегмента) нужно назначить уникальный идентификатор — routerId.

    3. Определите vMAC-адрес кластера (данную команду можно выполнять как на сервере, так и на локальном компьютере):
      1. Если вы используете ОС Windows, запустите Windows PowerShell и выполните команду:
        00:00:5e:00:01:{0:x2}' -f 30
      2. Если вы используете ОС семейства Linux или macOS, выполните команду:
        printf "00:00:5e:00:01:%02x\n" 30
        где 30 routerId, определённый в пункте b.
    4. На каждом сервере кластера установите утилиту keepalived через пакетный менеджер (используйте версию keepalived 2.2.0 или выше):
      1. Подключитесь к серверу кластера.
      2. Выполните команду:
        apt install keepalived
    5. Создайте конфигурационный файл /etc/keepalived/keepalived.conf на каждом сервере кластера. Например:

      global_defs {
          vrrp_version 3
          vrrp_check_unicast_src
          dynamic_interfaces
      }
      vrrp_instance VI_30 {
          advert_int 2
                    
          interface ens8
          track_src_ip
                    
        unicast_src_ip   1.2.3.1 
          unicast_peer {
                  1.2.3.2
                1.2.3.3
          }
                    
          use_vmac
          vmac_xmit_base
                    
          virtual_router_id 30
          virtual_ipaddress {
              1.2.3.30
          }
          virtual_rules {
              preference 30 from 1.2.3.30/32 table 30
              preference 30   to 1.2.3.30/32 table 30
          }
          virtual_routes {
                    default via 1.2.3.1 dev vrrp.30 table 30 onlink
          }
      }

      global_defs {
          vrrp_version 3
          vrrp_check_unicast_src
          dynamic_interfaces
      }
      vrrp_instance VI_30 {
          advert_int 2
                    
          interface ens8
          track_src_ip
                    
          unicast_src_ip    1.2.3.2
          unicast_peer {
                       1.2.3.1
                     1.2.3.3
          }
                    
          use_vmac
          vmac_xmit_base
                    
          virtual_router_id 30
          virtual_ipaddress {
              1.2.3.30
          }
          virtual_rules {
              preference 30 from 1.2.3.30/32 table 30
              preference 30   to 1.2.3.30/32 table 30
          }
          virtual_routes {
              default via 1.2.3.2 dev vrrp.30 table 30 onlink
          }
      }

      global_defs {
          vrrp_version 3
          vrrp_check_unicast_src
          dynamic_interfaces
      }
      vrrp_instance VI_30 {
          advert_int 2

          interface ens8
          track_src_ip

          unicast_src_ip    1.2.3.3 
          unicast_peer {
                        1.2.3.1
                          1.2.3.2
          }

          use_vmac
          vmac_xmit_base
                    
          virtual_router_id 30
          virtual_ipaddress {
              1.2.3.30
          }
          virtual_rules {
              preference 30 from 1.2.3.30/32 table 30
              preference 30   to 1.2.3.30/32 table 30
          }
          virtual_routes {
              default via 1.2.3.3 dev vrrp.30 table 30 onlink
          }
      }

      где:
      • interface имя сетевого интерфейса в ОС сервера, на который назначается виртуальный IP-адрес. Например, ens8;

        ip a s

        Примеры имён сетевых интерфейсов в ОС сервера — eth0, ens33, wlan0.

      • unicast_src_ip — виртуальный IP-адрес сервера, на котором будет применён этот конфигурационный файл. Например:
        • 1.2.3.1 — виртуальный IP-адрес первого сервера;
        • 1.2.3.2 — виртуальный IP-адрес второго сервера;
        • 1.2.3.3 — виртуальный IP-адрес третьего сервера;
      • unicast_peer — виртуальные IP-адреса других серверов в этом кластере;

      • virtual_router_id routerId, определённый в пункте b;
      • virtual_ipaddress — виртуальный IP-адрес кластера. Например, 1.2.3.30.
      Подробнее см. в документации keepalived.
  2. Выберите проект, в котором нужно создать виртуальный IP-адрес.
  3. В главном меню портала перейдите в раздел Ресурсы Cloud Engine Виртуальные IP-адреса.
  4. Нажмите на кнопку Создать и заполните поля: 
    • Имя * — название виртуального IP-адреса;
    • Зона доступности *зона доступности, в которой нужно создать виртуальный IP-адрес;
    • Сети других проектов активируйте переключатель, если нужно создать виртуальный IP-адрес в подсети другого проекта. Для этого в другом проекте нужно предоставить общий доступ к подсети;
    • Сеть * — сеть, в которой нужно создать виртуальный IP-адрес. Сервер и виртуальный IP-адрес должны размещаться в одной сети;
    • Подсеть * — подсеть, в которой нужно создать виртуальный IP-адрес;
    • Задать IP-адрес сетевого интерфейса — активируйте переключатель, если нужно указать IP-адрес вручную. При вводе IP-адреса проверяется, не занят ли он, и принадлежность к выбранной подсети;
    • Режим — режим распределения запросов между серверами:
      • active-active — запросы распределяются между серверами по алгоритму Round-Robin (балансировка нагрузки); 
      • active-standby — запросы передаются только на один сервер. Используется при построении отказоустойчивого кластера (High-availability cluster). Если активный сервер выходит из строя, нагрузка переключается на другой сервер;
    • Задействовать L2 — активируйте переключатель, чтобы задействовать MAC-адрес.
      Если переключатель Задействовать L2 активирован, укажите виртуальный MAC-адрес в поле vMac-адрес * (определённый в пункте 1.c):
    • Разрешить доступ из интернет — активируйте переключатель, чтобы разрешить доступ к виртуальному IP-адресу из сети Интернет. Публичный IP-адрес назначается автоматически;
    • Ограничение скорости, Мбит/сек — лимит пропускной способности канала. Значение должно быть кратно 100. Указывается, если активирован переключатель Разрешить доступ из интернет.
  5. Нажмите на кнопку Подтвердить. Созданный виртуальный IP-адрес отображается на портале:
  6. Подключите созданный виртуальный IP-адрес к сетевому интерфейсу каждого сервера в кластере.
  7. Если в поле Режим выбрано значение active-standby, проверьте работу nginx:
    1. На каждом сервере кластера создайте одинаковые скрипты:

      #!/bin/bash
      if systemctl is-active --quiet nginx; then exit 0 # Сервис работает
      else
      exit 1 # Сервис не работает fi
      vrrp_script chk_nginx {
          script "/usr/bin/killall -0 nginx"
        interval 3
    2.  На всех серверах выдайте скриптам права «на исполнение», выполнив команду:

      sudo chmod +x /usr/local/bin/check_service.sh
    3. На всех серверах перезапустите утилиту keepalived и проверьте её статус, выполнив команды:
      sudo systemctl restart keepalived
      sudo systemctl status keepalived

      Статус Active: active (running) nginx работает.

Действия с виртуальным IP-адресом

Изменение ограничения скорости

Чтобы изменить ограничение пропускной способности канала:

  1. Выберите проект, в котором создан виртуальный IP-адрес.
  2. В главном меню портала перейдите в раздел Ресурсы → Cloud Engine → Виртуальные IP-адреса.
  3. В строке с нужным виртуальным IP-адресом нажмите на кнопку и выберите пункт Изменить ограничение скорости.

    Примечание

    Если пункта Изменить ограничение скорости нет, разрешите доступ к виртуальному IP-адресу из сети Интернет.

  4. В поле Ограничение скорости, Мбит/сек выберите новое ограничение пропускной способности канала. Значение должно быть кратно 100:
  5. Нажмите на кнопку Подтвердить.

Ограничение скорости отображается в Основных параметрах виртуального IP-адреса:

Подключение виртуального IP-адреса к сетевому интерфейсу

Один виртуальный IP-адрес можно подключить к нескольким сетевым интерфейсам.

После создания виртуального IP-адреса подключите его к сетевому интерфейсу:

  1. Выберите проект, в котором создан виртуальный IP-адрес.
  2. В главном меню портала перейдите в раздел РесурсыCloud Engine → Виртуальные IPдреса.
  3. В строке нужного IP-адреса нажмите на кнопку и выберите пункт Подключить к сетевому интерфейсу.
  4. Заполните поля:
    • Показать отключенные сетевые интерфейсы — активируйте переключатель, если нужно подключить виртуальный IP-адрес к сетевому интерфейсу, который не подключен к серверу;
    • Сервер * сервер, к сетевому интерфейсу которого нужно подключить виртуальный IP-адрес. Поле доступно, если переключатель Показать отключенные сетевые интерфейсы не активирован;
    • Сетевой интерфейссетевой интерфейс, к которому нужно подключить виртуальный IP-адрес.
  5. Нажмите на кнопку Подтвердить.
  6. Для направления трафика укажите виртуальный IP-адрес в ОС сервера.

    1. Подключитесь к серверу.
    2. Выполните команду:

      sudo ip addr add <виртуальный IP-адрес>/32 dev <сетевой интерфейс>

      где:

      • <виртуальный IP-адрес> — виртуальный IP-адрес, подключенный к серверу. Например, 10.128.0.57;
      • <сетевой интерфейс>имя сетевого интерфейса в ОС сервера. Например, ens33.
        Чтобы посмотреть имя сетевого интерфейса в ОС сервера, выполните команду:

        ip a s

        Примеры имён сетевых интерфейсов в ОС сервера — eth0, ens33, wlan0.

В результате виртуальный IP-адрес подключится к сетевому интерфейсу.

Отключение виртуального IP-адреса от сетевого интерфейса

Чтобы отключить виртуальный IP-адрес от сетевого интерфейса:

  1. Выберите проект, в котором создан виртуальный IP-адрес.
  2. В главном меню портала перейдите в раздел РесурсыCloud Engine → Виртуальные IP-адреса.
  3. В строке нужного IP-адреса нажмите на кнопку и выберите пункт Отключить от сетевого интерфейса.
  4. Выберите Сетевой интерфейс:
  5. Нажмите на кнопку Подтвердить.

В результате виртуальный IP-адрес будет отключен от сетевого интерфейса.

Доступ к виртуальному IP-адресу из сети Интернет

Чтобы разрешить доступ к виртуальному IP-адресу из сети Интернет:

  1. Выберите проект, в котором создан виртуальный IP-адрес.
  2. В главном меню портала перейдите в раздел РесурсыCloud Engine → Виртуальные IP-адреса.
  3. В строке нужного IP-адреса нажмите на кнопку и выберите пункт Разрешить доступ из интернет.
  4. В открывшемся окне в поле Ограничение скорости, Мбит/сек выберите ограничение пропускной способности канала. Значение должно быть кратно 100.
  5. Нажмите на кнопку Подтвердить.

Чтобы отключить доступ к виртуальному IP-адресу из сети Интернет:

  1. Выберите проект, в котором создан виртуальный IP-адрес.
  2. В главном меню портала перейдите в раздел РесурсыCloud Engine → Виртуальные IP-адреса.
  3. В строке нужного IP-адреса нажмите на кнопку и выберите пункт Отключить доступ из интернет.
  4. В открывшемся окне нажмите на кнопку Подтвердить.

Управление виртуальным MAC-адресом

Чтобы привязать виртуальный IP-адрес к MAC-адресу:

  1. Выберите проект, в котором создан виртуальный IP-адрес.
  2. В главном меню портала перейдите в раздел РесурсыCloud Engine → Виртуальные IP-адреса.
  3. В строке нужного IP-адреса нажмите на кнопку и выберите пункт Управление L2.
  4. Укажите виртуальный MAC-адрес в поле vMac-адрес *:

     
  5. Нажмите на кнопку Подтвердить.

Чтобы отвязать виртуальный IP-адрес от MAC-адреса:

  1. Выберите проект, в котором создан виртуальный IP-адрес.
  2. В главном меню портала перейдите в раздел РесурсыCloud Engine → Виртуальные IP-адреса.
  3. В строке нужного IP-адреса нажмите на кнопку и выберите пункт Управление L2.
  4. Нажмите на кнопку Подтвердить.

Удаление виртуального IP-адреса

Чтобы удалить виртуальный IP-адрес:

  1. Выберите проект, в котором создан виртуальный IP-адрес.
  2. В главном меню портала перейдите в раздел РесурсыCloud Engine → Виртуальные IP-адреса.
  3. В строке нужного IP-адреса нажмите на кнопку и выберите пункт Удалить.
  4. Введите Идентификатор для подтверждения удаления.
  5. Нажмите на кнопку Удалить.

Копирование ID виртуального IP-адреса

ID необходим для взаимодействия с виртуальным IP-адресом через API.

Чтобы скопировать ID виртуального IP-адреса (ITEM_ID):

  1. Выберите проект, в котором создан виртуальный IP-адрес.
  2. В главном меню портала перейдите в раздел РесурсыCloud Engine → Виртуальные IP-адреса.
  3. В строке нужного IP-адреса нажмите на кнопку и выберите пункт Скопировать ID. ID сохраняется в буфер обмена вашего устройства.