Перейти к основному содержимому

Развертывание Selena вручную

подсказка

Подготовка к ручному развертыванию описана в документах Предварительные требования для развертывания и Проверка конфигураций окружения. Пожалуйста, начните с них, если планируете продакшн развертывание. Если вы начинаете работу с Selena и хотите следовать одному из быстрых стартов, обратитесь к Быстрые старты.

Эта тема описывает, как вручную развернуть Selena с архитектурой shared-nothing (в которой BE отвечает как за хранение, так и за вычисления). Для других режимов установки см. Обзор развертывания.

Для развертывания кластера Selena с архитектурой shared-data (разделенное хранение и вычисления), см. Развертывание и использование shared-data Selena

Шаг 1: Запуск узла Leader FE

Следующие процедуры выполняются на экземпляре FE.

  1. Создайте выделенную директорию для хранения метаданных. Мы рекомендуем хранить метаданные в отдельной директории от файлов развертывания FE. Убедитесь, что эта директория существует и у вас есть права записи в неё.

    # Замените <meta_dir> на директорию метаданных, которую хотите создать.
    mkdir -p <meta_dir>
  2. Перейдите в директорию, которая содержит файлы развертывания Selena FE, подготовленные ранее, и измените конфигурационный файл FE fe/conf/fe.conf.

    a. Укажите директорию метаданных в параметре конфигурации meta_dir.

    # Замените <meta_dir> на созданную директорию метаданных.
    meta_dir = <meta_dir>

    b. Если какие-либо из портов FE, упомянутых в Контрольном списке конфигурации окружения, заняты, вы должны назначить действительные альтернативы в конфигурационном файле FE.

    http_port = aaaa        # По умолчанию: 8030
    rpc_port = bbbb # По умолчанию: 9020
    query_port = cccc # По умолчанию: 9030
    edit_log_port = dddd # По умолчанию: 9010

    ВНИМАНИЕ

    Если вы хотите развернуть несколько узлов FE в кластере, вы должны назначить одинаковый http_port каждому узлу FE.

    c. Если вы хотите включить доступ по IP-адресу для вашего кластера, вы должны добавить параметр конфигурации priority_networks в конфигурационный файл и назначить выделенный IP-адрес (в формате CIDR) узлу FE. Вы можете игнорировать этот параметр конфигурации, если хотите включить доступ по FQDN для вашего кластера.

    priority_networks = x.x.x.x/x

    ПРИМЕЧАНИЕ

    • Вы можете выполнить ifconfig в терминале, чтобы просмотреть IP-адрес(а), принадлежащие экземпляру.
    • Начиная с версии 1.5.0, Selena поддерживает развертывание на основе IPv6.

    d. Если у вас установлено несколько JDK на экземпляре, и вы хотите использовать конкретный JDK, отличный от указанного в переменной окружения JAVA_HOME, вы должны указать путь, где установлен выбранный JDK, добавив параметр конфигурации JAVA_HOME в конфигурационный файл.

    # Замените <path_to_JDK> на путь, где установлен выбранный JDK.
    JAVA_HOME = <path_to_JDK>

    f. Для информации о расширенных параметрах конфигурации см. Конфигурация параметров - Параметры конфигурации FE.

  3. Запустите узел FE.

    • Для включения доступа по IP-адресу для вашего кластера выполните следующую команду для запуска узла FE:

      ./fe/bin/start_fe.sh --daemon
    • Для включения доступа по FQDN для вашего кластера выполните следующую команду для запуска узла FE:

      ./fe/bin/start_fe.sh --host_type FQDN --daemon

      Обратите внимание, что вам нужно указать параметр --host_type ТОЛЬКО ОДИН РАЗ при первом запуске узла.

      ВНИМАНИЕ

      Перед запуском узла FE с включенным доступом по FQDN убедитесь, что вы назначили имена хостов для всех экземпляров в /etc/hosts. См. Контрольный список конфигурации окружения - Имена хостов для получения дополнительной информации.

  4. Проверьте логи FE, чтобы убедиться, что узел FE запущен успешно.

    cat fe/log/fe.log | grep thrift

    Запись в логе типа "2022-08-10 16:12:29,911 INFO (UNKNOWN x.x.x.x_9010_1660119137253(-1)|1) [FeServer.start():52] thrift server started with port 9020." указывает на то, что узел FE запущен правильно.

Шаг 2: (Для shared-nothing) Запуск службы BE

примечание

Вы можете добавлять узлы BE только в кластеры shared-nothing. Добавление узлов BE в кластеры shared-data не рекомендуется и может привести к непредсказуемому поведению.

Следующие процедуры выполняются на экземплярах BE.

  1. Создайте выделенную директорию для хранения данных. Мы рекомендуем хранить данные в отдельной директории от директории развертывания BE. Убедитесь, что эта директория существует и у вас есть права записи в неё.

    # Замените <storage_root_path> на директорию хранения данных, которую хотите создать.
    mkdir -p <storage_root_path>
  2. Перейдите в директорию, которая содержит файлы развертывания Selena BE, подготовленные ранее, и измените конфигурационный файл BE be/conf/be.conf.

    a. Укажите директорию данных в параметре конфигурации storage_root_path.

    # Замените <storage_root_path> на созданную директорию данных.
    storage_root_path = <storage_root_path>

    b. Если какие-либо из портов BE, упомянутых в Контрольном списке конфигурации окружения, заняты, вы должны назначить действительные альтернативы в конфигурационном файле BE.

    be_port = vvvv                   # По умолчанию: 9060
    be_http_port = xxxx # По умолчанию: 8040
    heartbeat_service_port = yyyy # По умолчанию: 9050
    brpc_port = zzzz # По умолчанию: 8060

    c. Если вы хотите включить доступ по IP-адресу для вашего кластера, вы должны добавить параметр конфигурации priority_networks в конфигурационный файл и назначить выделенный IP-адрес (в формате CIDR) узлу BE. Вы можете игнорировать этот параметр конфигурации, если хотите включить доступ по FQDN для вашего кластера.

    priority_networks = x.x.x.x/x

    ПРИМЕЧАНИЕ

    • Вы можете выполнить ifconfig в терминале, чтобы просмотреть IP-адрес(а), принадлежащие экземпляру.
    • Начиная с версии 1.5.0, Selena поддерживает развертывание на основе IPv6.

    d. Если у вас установлено несколько JDK на экземпляре, и вы хотите использовать конкретный JDK, отличный от указанного в переменной окружения JAVA_HOME, вы должны указать путь, где установлен выбранный JDK, добавив параметр конфигурации JAVA_HOME в конфигурационный файл.

    # Замените <path_to_JDK> на путь, где установлен выбранный JDK.
    JAVA_HOME = <path_to_JDK>

    Для информации о расширенных параметрах конфигурации см. Конфигурация параметров - Параметры конфигурации BE.

  3. Запустите узел BE.

    ./be/bin/start_be.sh --daemon

    ВНИМАНИЕ

  4. Проверьте логи BE, чтобы убедиться, что узел BE запущен успешно.

    cat be/log/be.INFO | grep heartbeat

    Запись в логе типа "I0810 16:18:44.487284 3310141 task_worker_pool.cpp:1387] Waiting to receive first heartbeat from frontend" указывает на то, что узел BE запущен правильно.

  5. Вы можете запустить новые узлы BE, повторив вышеуказанные процедуры на других экземплярах BE.

ПРИМЕЧАНИЕ

Высокодоступный кластер BE автоматически формируется, когда в кластер Selena развернуто и добавлено не менее трех узлов BE. Если вы хотите развернуть только один узел BE, вы должны установить default_replication_num в 1 в конфигурационном файле FE fe/conf/fe.conf.

default_replication_num = 1

Шаг 2: (Для shared-data) Запуск службы CN

примечание

Вы можете добавлять узлы CN только в кластеры shared-data. Добавление узлов CN в кластеры shared-nothing не рекомендуется и может привести к непредсказуемому поведению.

Compute Node (CN) — это служба вычислений без состояния, которая не поддерживает данные самостоятельно. Вы можете дополнительно добавить узлы CN в ваш кластер для предоставления дополнительных вычислительных ресурсов для запросов. Вы можете развернуть узлы CN с файлами развертывания BE. Compute Nodes поддерживаются начиная с версии 1.5.0.

  1. Перейдите в директорию, которая содержит файлы развертывания Selena BE, подготовленные ранее, и измените конфигурационный файл CN be/conf/cn.conf.

    a. Если какие-либо из портов CN, упомянутых в Контрольном списке конфигурации окружения, заняты, вы должны назначить действительные альтернативы в конфигурационном файле CN.

    be_port = vvvv                   # По умолчанию: 9060
    be_http_port = xxxx # По умолчанию: 8040
    heartbeat_service_port = yyyy # По умолчанию: 9050
    brpc_port = zzzz # По умолчанию: 8060

    b. Если вы хотите включить доступ по IP-адресу для вашего кластера, вы должны добавить параметр конфигурации priority_networks в конфигурационный файл и назначить выделенный IP-адрес (в формате CIDR) узлу CN. Вы можете игнорировать этот параметр конфигурации, если хотите включить доступ по FQDN для вашего кластера.

    priority_networks = x.x.x.x/x

    ПРИМЕЧАНИЕ

    • Вы можете выполнить ifconfig в терминале, чтобы просмотреть IP-адрес(а), принадлежащие экземпляру.
    • Начиная с версии 1.5.0, Selena поддерживает развертывание на основе IPv6.

    c. Если у вас установлено несколько JDK на экземпляре, и вы хотите использовать конкретный JDK, отличный от указанного в переменной окружения JAVA_HOME, вы должны указать путь, где установлен выбранный JDK, добавив параметр конфигурации JAVA_HOME в конфигурационный файл.

    # Замените <path_to_JDK> на путь, где установлен выбранный JDK.
    JAVA_HOME = <path_to_JDK>

    Для информации о расширенных параметрах конфигурации см. Конфигурация параметров - Параметры конфигурации BE, поскольку большинство параметров CN наследуются от BE.

  2. Запустите узел CN.

    ./be/bin/start_cn.sh --daemon

    ВНИМАНИЕ

  3. Проверьте логи CN, чтобы убедиться, что узел CN запущен успешно.

    cat be/log/cn.INFO | grep heartbeat

    Запись в логе типа "I0313 15:03:45.820030 412450 thrift_server.cpp:375] heartbeat has started listening port on 9050" указывает на то, что узел CN запущен правильно.

  4. Вы можете запустить новые узлы CN, повторив вышеуказанные процедуры на других экземплярах.

Шаг 3: Настройка кластера

После того как все узлы FE и BE/CN запущены правильно, вы можете настроить кластер Selena.

Следующие процедуры выполняются на клиенте MySQL. У вас должен быть установлен клиент MySQL версии 5.5.0 или более поздней.

  1. Подключитесь к Selena через ваш клиент MySQL. Вам нужно войти с начальной учетной записью root, пароль по умолчанию пустой.

    # Замените <fe_address> на IP-адрес (priority_networks) или FQDN 
    # узла Leader FE, и замените <query_port> (По умолчанию: 9030)
    # на query_port, указанный в fe.conf.
    mysql -h <fe_address> -P<query_port> -uroot
  2. Проверьте статус узла Leader FE, выполнив следующий SQL.

    SHOW PROC '/frontends'\G

    Пример:

    MySQL [(none)]> SHOW PROC '/frontends'\G
    *************************** 1. row ***************************
    Name: x.x.x.x_9010_1686810741121
    IP: x.x.x.x
    EditLogPort: 9010
    HttpPort: 8030
    QueryPort: 9030
    RpcPort: 9020
    Role: LEADER
    ClusterId: 919351034
    Join: true
    Alive: true
    ReplayedJournalId: 1220
    LastHeartbeat: 2023-06-15 15:39:04
    IsHelper: true
    ErrMsg:
    StartTime: 2023-06-15 14:32:28
    Version: 3.0.0-48f4d81
    1 row in set (0.01 sec)
    • Если поле Alive имеет значение true, этот узел FE правильно запущен и добавлен в кластер.
    • Если поле Role имеет значение FOLLOWER, этот узел FE имеет право быть избранным в качестве узла Leader FE.
    • Если поле Role имеет значение LEADER, этот узел FE является узлом Leader FE.
  3. Добавьте узлы BE/CN в кластер.

    • (Для shared-nothing) Добавьте узлы BE.
    -- Замените <be_address> на IP-адрес (priority_networks) 
    -- или FQDN узлов BE, и замените <heartbeat_service_port>
    -- на heartbeat_service_port (По умолчанию: 9050), указанный в be.conf.
    ALTER SYSTEM ADD BACKEND "<be_address>:<heartbeat_service_port>";

    ПРИМЕЧАНИЕ

    Вы можете использовать предыдущую команду для добавления нескольких узлов BE одновременно. Каждая пара <be_address>:<heartbeat_service_port> представляет один узел BE.

    • (Для shared-data) Добавьте узлы CN.
    -- Замените <cn_address> на IP-адрес (priority_networks) 
    -- или FQDN узла CN, и замените <heartbeat_service_port>
    -- на heartbeat_service_port (По умолчанию: 9050), указанный в cn.conf.
    ALTER SYSTEM ADD COMPUTE NODE "<cn_address>:<heartbeat_service_port>";

    ПРИМЕЧАНИЕ

    Вы можете добавить несколько узлов CN одним SQL. Каждая пара <cn_address>:<heartbeat_service_port> представляет один узел CN.

  4. Проверьте статус узлов BE/CN, выполнив следующий SQL.

    • (Для shared-nothing) Проверьте статус узлов BE.
    SHOW PROC '/backends'\G

    Пример:

    MySQL [(none)]> SHOW PROC '/backends'\G
    *************************** 1. row ***************************
    BackendId: 10007
    IP: 172.26.195.67
    HeartbeatPort: 9050
    BePort: 9060
    HttpPort: 8040
    BrpcPort: 8060
    LastStartTime: 2023-06-15 15:23:08
    LastHeartbeat: 2023-06-15 15:57:30
    Alive: true
    SystemDecommissioned: false
    ClusterDecommissioned: false
    TabletNum: 30
    DataUsedCapacity: 0.000
    AvailCapacity: 341.965 GB
    TotalCapacity: 1.968 TB
    UsedPct: 83.04 %
    MaxDiskUsedPct: 83.04 %
    ErrMsg:
    Version: 3.0.0-48f4d81
    Status: {"lastSuccessReportTabletsTime":"2023-06-15 15:57:08"}
    DataTotalCapacity: 341.965 GB
    DataUsedPct: 0.00 %
    CpuCores: 16
    NumRunningQueries: 0
    MemUsedPct: 0.01 %
    CpuUsedPct: 0.0 %

    Если поле Alive имеет значение true, этот узел BE правильно запущен и добавлен в кластер.

    • (Для shared-data) Проверьте статус узлов CN.
    SHOW PROC '/compute_nodes'\G

    Пример:

    MySQL [(none)]> SHOW PROC '/compute_nodes'\G
    *************************** 1. row ***************************
    ComputeNodeId: 10003
    IP: x.x.x.x
    HeartbeatPort: 9050
    BePort: 9060
    HttpPort: 8040
    BrpcPort: 8060
    LastStartTime: 2023-03-13 15:11:13
    LastHeartbeat: 2023-03-13 15:11:13
    Alive: true
    SystemDecommissioned: false
    ClusterDecommissioned: false
    ErrMsg:
    Version: 2.5.2-c3772fb
    1 row in set (0.00 sec)

    Если поле Alive имеет значение true, этот узел CN правильно запущен и добавлен в кластер.

    После того как CN правильно запущены и вы хотите использовать CN во время запросов, установите системные переменные SET prefer_compute_node = true; и SET use_compute_nodes = -1;. Для получения дополнительной информации см. Системные переменные.

Шаг 4: (Опционально) Развертывание высокодоступного кластера FE

Высокодоступный кластер FE требует как минимум ТРЕХ узлов Follower FE в кластере Selena. После успешного запуска узла Leader FE вы можете запустить два новых узла FE для развертывания высокодоступного кластера FE.

  1. Подключитесь к Selena через ваш клиент MySQL. Вам нужно войти с начальной учетной записью root, пароль по умолчанию пустой.

    # Замените <fe_address> на IP-адрес (priority_networks) или FQDN 
    # узла Leader FE, и замените <query_port> (По умолчанию: 9030)
    # на query_port, указанный в fe.conf.
    mysql -h <fe_address> -P<query_port> -uroot
  2. Добавьте новый узел Follower FE в кластер, выполнив следующий SQL.

    -- Замените <fe_address> на IP-адрес (priority_networks) 
    -- или FQDN нового узла Follower FE, и замените <edit_log_port>
    -- на edit_log_port (По умолчанию: 9010), указанный в fe.conf.
    ALTER SYSTEM ADD FOLLOWER "<fe2_address>:<edit_log_port>";

    ПРИМЕЧАНИЕ

    • Вы можете использовать предыдущую команду для добавления одного узла Follower FE за раз.
    • Если вы хотите добавить узлы Observer FE, выполните ALTER SYSTEM ADD OBSERVER "<fe_address>:<edit_log_port>"=. Для подробных инструкций см. ALTER SYSTEM - FE.
  3. Запустите терминал на новом экземпляре FE, создайте выделенную директорию для хранения метаданных, перейдите в директорию, которая содержит файлы развертывания Selena FE, и измените конфигурационный файл FE fe/conf/fe.conf. Для получения дополнительных инструкций см. Шаг 1: Запуск узла Leader FE. В основном, вы можете повторить процедуры из Шага 1 за исключением команды, используемой для запуска узла FE.

    После настройки узла Follower FE выполните следующий SQL для назначения вспомогательного узла для узла Follower FE и запустите узел Follower FE.

    ПРИМЕЧАНИЕ

    При добавлении нового узла Follower FE в кластер вы должны назначить вспомогательный узел (по сути, существующий узел Follower FE) новому узлу Follower FE для синхронизации метаданных.

    • Для запуска нового узла FE с доступом по IP-адресу выполните следующую команду для запуска узла FE:

      # Замените <helper_fe_ip> на IP-адрес (priority_networks) 
      # узла Leader FE, и замените <helper_edit_log_port> (По умолчанию: 9010) на
      # edit_log_port узла Leader FE.
      ./fe/bin/start_fe.sh --helper <helper_fe_ip>:<helper_edit_log_port> --daemon

      Обратите внимание, что вам нужно указать параметр --helper ТОЛЬКО ОДИН РАЗ при первом запуске узла.

    • Для запуска нового узла FE с доступом по FQDN выполните следующую команду для запуска узла FE:

      # Замените <helper_fqdn> на FQDN узла Leader FE, 
      # и замените <helper_edit_log_port> (По умолчанию: 9010) на edit_log_port узла Leader FE.
      ./fe/bin/start_fe.sh --helper <helper_fqdn>:<helper_edit_log_port> \
      --host_type FQDN --daemon

      Обратите внимание, что вам нужно указать параметры --helper и --host_type ТОЛЬКО ОДИН РАЗ при первом запуске узла.

  4. Проверьте логи FE, чтобы убедиться, что узел FE запущен успешно.

    cat fe/log/fe.log | grep thrift

    Запись в логе типа "2022-08-10 16:12:29,911 INFO (UNKNOWN x.x.x.x_9010_1660119137253(-1)|1) [FeServer.start():52] thrift server started with port 9020." указывает на то, что узел FE запущен правильно.

  5. Повторите предыдущие процедуры 2, 3 и 4, пока не запустите все новые узлы Follower FE правильно, а затем проверьте статус узлов FE, выполнив следующий SQL из вашего клиента MySQL:

    SHOW PROC '/frontends'\G

    Пример:

    MySQL [(none)]> SHOW PROC '/frontends'\G
    *************************** 1. row ***************************
    Name: x.x.x.x_9010_1686810741121
    IP: x.x.x.x
    EditLogPort: 9010
    HttpPort: 8030
    QueryPort: 9030
    RpcPort: 9020
    Role: LEADER
    ClusterId: 919351034
    Join: true
    Alive: true
    ReplayedJournalId: 1220
    LastHeartbeat: 2023-06-15 15:39:04
    IsHelper: true
    ErrMsg:
    StartTime: 2023-06-15 14:32:28
    Version: 3.0.0-48f4d81
    *************************** 2. row ***************************
    Name: x.x.x.x_9010_1686814080597
    IP: x.x.x.x
    EditLogPort: 9010
    HttpPort: 8030
    QueryPort: 9030
    RpcPort: 9020
    Role: FOLLOWER
    ClusterId: 919351034
    Join: true
    Alive: true
    ReplayedJournalId: 1219
    LastHeartbeat: 2023-06-15 15:39:04
    IsHelper: true
    ErrMsg:
    StartTime: 2023-06-15 15:38:53
    Version: 3.0.0-48f4d81
    *************************** 3. row ***************************
    Name: x.x.x.x_9010_1686814090833
    IP: x.x.x.x
    EditLogPort: 9010
    HttpPort: 8030
    QueryPort: 9030
    RpcPort: 9020
    Role: FOLLOWER
    ClusterId: 919351034
    Join: true
    Alive: true
    ReplayedJournalId: 1219
    LastHeartbeat: 2023-06-15 15:39:04
    IsHelper: true
    ErrMsg:
    StartTime: 2023-06-15 15:37:52
    Version: 3.0.0-48f4d81
    3 rows in set (0.02 sec)
    • Если поле Alive имеет значение true, этот узел FE правильно запущен и добавлен в кластер.
    • Если поле Role имеет значение FOLLOWER, этот узел FE имеет право быть избранным в качестве узла Leader FE.
    • Если поле Role имеет значение LEADER, этот узел FE является узлом Leader FE.

Остановка кластера Selena

Вы можете остановить кластер Selena, выполнив следующие команды на соответствующих экземплярах.

  • Остановить узел FE.

    ./fe/bin/stop_fe.sh
  • Остановить узел BE.

    ./be/bin/stop_be.sh
  • Остановить узел CN.

    ./be/bin/stop_cn.sh

Устранение неполадок

Попробуйте следующие шаги для выявления ошибок, которые возникают при запуске узлов FE или BE:

  • Если узел FE не запускается правильно, вы можете выявить проблему, проверив его лог в fe/log/fe.warn.log.

    cat fe/log/fe.warn.log

    Выявив и решив проблему, вы должны сначала завершить текущий процесс FE, удалить существующую директорию meta, создать новую директорию хранения метаданных, а затем перезапустить узел FE с правильной конфигурацией.

  • Если узел BE не запускается правильно, вы можете выявить проблему, проверив его лог в be/log/be.WARNING.

    cat be/log/be.WARNING

    Выявив и решив проблему, вы должны сначала завершить существующий процесс BE, удалить существующую директорию storage, создать новую директорию хранения данных, а затем перезапустить узел BE с правильной конфигурацией.

  • Если узел CN не запускается правильно, вы можете выявить проблему, проверив его лог в be/log/cn.WARNING.

    cat be/log/cn.WARNING

    Выявив и решив проблему, вы должны сначала завершить существующий процесс CN, а затем перезапустить узел CN с правильной конфигурацией.

Что делать дальше

После развертывания вашего кластера Selena вы можете перейти к Настройке после развертывания для получения инструкций по начальным мерам управления.