четверг, 20 февраля 2020 г.

Proxmox VE. Отделяю сеть кластера.

Имеется кластер Proxmox VE из трех нод. Планируется присоединение к данному кластеру еще несколько нод. Принял решение, с целью избежания затыков по сети выделить сеть кластера в отдельную сеть.
  1. Шаг первый
    На каждой из нод настраиваю второй интерфейс, для простоты дальнейшего администрирования присваиваю в обеих подсетях один адрес.
    Например: нода имеет настроенный мост на первом интерфейсе с IP 192.168.1.10 для второго интерфейса назначаю IP 10.10.1.10 (Если предполагается использовать второй интерфейс не только для кластерной сети следует на этом интерфейсе так же сделать мост и присваивать адрес ему)
  2. Шаг второй
    Настраиваем на своем свитче VLAN, в который подключаем все вторые интерфейсы своих нод (процес зависит от конкретного свича и здесь не описывается).
    Перегружаем ноды, чтоб изменения вступили в силу.
    С помошью ping <node address второго интерфейса> проверяем доступность всех нод по новой сети.
  3. Шаг третий
    Редактируем файл /etc/pve/corosync.conf:
    cp /etc/pve/corosync.conf /etc/pve/corosync.conf.bak
    cp /etc/pve/corosync.conf /etc/pve/corosync.conf.new
    nano /etc/pve/corosync.conf.new
    Мы должны увидеть примерно следующее:
    logging {
      debug: off
      to_syslog: yes
    }
    
    nodelist {
      node {
        name: pve1
        nodeid: 3
        quorum_votes: 1
        ring0_addr: 192.168.1.10
      }
      node {
        name: pve2
        nodeid: 2
        quorum_votes: 1
        ring0_addr: 192.168.1.11
      }
      node {
        name: pve3
        nodeid: 1
        quorum_votes: 1
        ring0_addr: 192.168.1.12
      }
    }
    
    quorum {
      provider: corosync_votequorum
    }
    
    totem {
      cluster_name: myClaster
      config_version: 21
      interface {
        bindnetaddr: 192.168.1.10
        ringnumber: 0
      }
      ip_version: ipv4
      secauth: on
      version: 2
    }

    Внимание!
    Перво-наперво увеличиваем на 1 значение config_version иначе не избежать проблем.

    Приводим файл к примерно следующему виду:
    logging {
      debug: off
      to_syslog: yes
    }
    
    nodelist {
      node {
        name: pve1
        nodeid: 3
        quorum_votes: 1
        ring0_addr: 10.10.1.10
        ring1_addr: 192.168.1.10
      }
      node {
        name: pve2
        nodeid: 2
        quorum_votes: 1
        ring0_addr: 10.10.1.11
        ring1_addr: 192.168.1.11
      }
      node {
        name: pve3
        nodeid: 1
        quorum_votes: 1
        ring0_addr: 10.10.1.12
        ring1_addr: 192.168.1.12
      }
    }
    
    quorum {
      provider: corosync_votequorum
    }
    
    totem {
      cluster_name: myClaster
      config_version: 21
      interface {
        bindnetaddr: 10.10.1.10
        ringnumber: 0
      }
      interface {
        bindnetaddr: 192.168.1.10
        ringnumber: 1
      }
      ip_version: ipv4
      secauth: on
      version: 2
    }

    Пояснение
    Старые интерфейсы остались для обеспечения избыточности (приоритет имеет интерфейс с меньшим ringnumber)

  4. Шаг четвертый
    Заменяем /etc/pve/corosync.conf на /etc/pve/corosync.conf.new
    mv /etc/pve/corosync.conf.new /etc/pve/corosync.conf
    Спустя пару минут выполнить
    systemctl status corosync
    ● corosync.service - Corosync Cluster Engine
       Loaded: loaded (/lib/systemd/system/corosync.service; enabled; vendor preset: enabled)
       Active: active (running) since Fri 2020-02-14 07:07:15 EET; 6 days ago
         Docs: man:corosync
               man:corosync.conf
               man:corosync_overview
     Main PID: 4600 (corosync)
        Tasks: 9 (limit: 4915)
       Memory: 151.0M
       CGroup: /system.slice/corosync.service
               └─4600 /usr/sbin/corosync -f
    
    Feb 20 07:05:50 pve4 corosync[4600]:   [KNET  ] rx: host: 3 link: 0 is up
    Feb 20 07:05:50 pve4 corosync[4600]:   [KNET  ] host: host: 2 (passive) best link: 0 (pri: 1)
    Feb 20 07:05:50 pve4 corosync[4600]:   [KNET  ] host: host: 2 (passive) best link: 0 (pri: 1)
    Feb 20 07:05:50 pve4 corosync[4600]:   [KNET  ] host: host: 3 (passive) best link: 0 (pri: 1)
    Feb 20 07:05:50 pve4 corosync[4600]:   [KNET  ] host: host: 3 (passive) best link: 0 (pri: 1)
    Feb 20 07:05:50 pve4 corosync[4600]:   [KNET  ] pmtud: PMTUD link change for host: 2 link: 0 from 469 to 1397
    Feb 20 07:05:50 pve4 corosync[4600]:   [KNET  ] pmtud: PMTUD link change for host: 2 link: 1 from 469 to 1397
    Feb 20 07:05:50 pve4 corosync[4600]:   [KNET  ] pmtud: PMTUD link change for host: 3 link: 0 from 469 to 1397
    Feb 20 07:05:50 pve4 corosync[4600]:   [KNET  ] pmtud: PMTUD link change for host: 3 link: 1 from 469 to 1397
    Feb 20 07:05:50 pve4 corosync[4600]:   [TOTEM ] Retransmit List: 9ca42

У нас все получилось!

11 комментариев:

  1. Отличная идея если много нод, но главный вопрос: удвоится ли ширина канала при синхронизации/репликации между нодами (т.е. фактически будут ли использоваться оба интерфейса одновременно) при таких настройках? Мне кажется нет, эти настройки скорее для резервирования и отказоустойчивости синхронизации, а как сделать настройки если стоит подобная задача по расширению пропускной способности канала при наличии 2 сетевых интерфейсов или более на сервере (иными словами бондинг) где установлен Proxmox с роутером Mikrotik?

    ОтветитьУдалить
    Ответы
    1. Канал не удвоится - используется только один интерфейс, с более высоким приоритетом (меньшим номером), второй только при недоступности первого. Для расширения канала необходимо агрегировать интерфейсы, и уже агрегированный интерфейс указывать.

      Удалить
  2. А пример практической реализации такого агрегирования на сервере Proxmox и маршрутизаторе Mikrotik можете описать в виде отдельной статьи? С бенчмарками такого соединения? Очень уж интересно!

    ОтветитьУдалить
    Ответы
    1. Я даже не представляю зачем там микротик. По всем раскладам 2 гигабитных интерфейса на ноду со всем справляются: на одном сеть кластера, а на втором сеть виртуальных машин. У меня просто нет таких нагрузок. Свободных мощных серверов для того, чтоб сделать стенд и экспериментировать тоже нету. Так что только в случае реорганизации, когда будет свободное для экспериментов железо. Экспериментов на рабочих серверах не поймут - провинция.

      Удалить
    2. Mikrotik указан потому как на чём же ещё из того что всегда можно легко найти делать бондинг? Я правильно понимаю что нужно на сервере Proxmox сделать из 2 физических сетевых интерфейсов мост и уже его везде использовать? А руководство как сделать бондинг на Mikrotik я найду, у них хорошая документация на сайте.

      Удалить
    3. Мост это бридж, а бондинг это объединение(агрегирование), поддерживается большинством управляемых свитчей.

      Удалить
    4. Микротик, если это роутер жалко простым свитчем юзать.

      Удалить
    5. А разве есть простые свитчи, поддерживающие агрегирование каналов (бондинг)? Какие например?

      Удалить
    6. Любые современные управляемые. Может каждый конкретный свитч не поддерживает все виды бондинга, но обычно openvswitch можно сконфигурировать для работы с хардовым свитчем.

      Удалить
  3. Добрый день, Можете помочь с настройкой Proxmox 6.1 - против 5$ в час?
    Если да, мой тел 0970165002 Сергей. почта sdoroshenko@artwebny.com

    ОтветитьУдалить
    Ответы
    1. Что именно делать? у меня не всеобъемлющий опыт.

      Удалить