VK WorkSpace On-Premise logo
Помощь
Обновлена 20 октября 2026 г. в 14:33

Как переносить пользователей между шардами

Назначение документа

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

Шард в хранилище данных — это часть общего набора данных, которая хранится отдельно от других частей, обычно на другом узле, сервере или диске, но вместе с ними образует единое логическое хранилище.

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

Предварительные требования

Для успешного переноса пользователей потребуются:

  • Навыки работы с SQL-запросами.
  • Доступ по SSH к виртуальным машинам в кластере.
  • Доступ к веб-интерфейсу установщика.

Как перенести пользователей между шардами

Номер шарда на скриншоте ниже указан в столбце № кластера. То есть хранилища по шардам распределены следующим образом:

  • Шард 1: xtaz1, xtaz2, xtaz3, xtaz7.
  • Шард 2: xtaz4, xtaz5, xtaz6.

добавить stm в шард

Чтобы добавить новый контейнер stm:

  1. В веб-интерфейсе установщика, в самом низу страницы со списком ролей, нажмите на кнопку Добавить → Контейнер.
  2. Найдите контейнер stm в списке.
  3. В общей строке состояния запустите автоустановку и дождитесь ее окончания.

Чтобы перенести пользователя на другой шард:

  1. Подключитесь по SSH к любой ВМ или серверу с ролью БД.

  2. В консоли на ВМ c ролью БД перейдите в контейнер umi*. Номер в названии контейнера зависит от того, к какой ВМ вы подключились.

    docker exec -it umi1 mysql
  3. Выполните команду:

    use mPOP
  4. Найдите ID пользователя в таблице Users:

    select ID from user where Username="<mail adress>";
  5. Скопируйте ID нужного пользователя.

  6. Перейдите на любой сервер с ролью Хранилище.

  7. Перейдите в контейнер stm<X>, где <Х> — номер stm. Номер контейнера зависит от того, к какой ВМ вы подключились.

    docker exec -it stm<X> bash
  8. Проверьте, на каком шарде находится пользователь:

    check_user_shard <user ID> "xtazik"

    Пример успешного выполнения команды:

    warning: iproto: failed to shmget() pinger shared memory: No such file or directorykey `xtazik': `<номер шарда>'
  9. В разделе Настройки → Хранилища → Mescalito проверьте на какой ВМ с ролью Хранилище находится общий для всех шардов контейнер stm.

    общий stm

  10. Подключитесь по SSH к этой ВМ.

  11. Перейдите в контейнер stm*, который является общим для текущего и будущего шардов, обрабатывающих данные выбранного пользователя (stm1, stm2, stm3 и т.д.). Общий контейнер stm был добавлен перед шагом 1.

    docker exec -it stm<X> bash
  12. Выполните команду для переноса пользователя:

    xindex_tools -c /usr/local/etc/mescalito.conf move -s <с какого шарда перенос> -d <на какой шард перенос> <email>
  13. Проверьте, перенесен ли пользователь на другой шард:

    check_user_shard <user ID> "xtazik"

Если в ответе команды шард был изменен, перенос прошел успешно.


Технический писатель: Груздев Никита

Была ли статья полезна?