Перейти к содержанию

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

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

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

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

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

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

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

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

Перед переносом пользователей проверьте, что шарды обслуживаются одноименными обработчиками (stm). Проверить можно в веб-интерфейсе установщика в разделе Настройки -> Хранилища -> Mescalito. Например, если нужно переместить пользователя с первого шарда на второй, на обоих шардах должен быть одинаковый обработчик (stm1-stm1, stm2-stm2 и т.п.). Если одинаковых обработчиков у шардов нет, то создайте еще один контейнер stm в списке ролей и добавьте его во все шарды. Таким образом, у всех шардов будет один общий обработчик.

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

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

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

Теперь можно перенести пользователя на другой шард:

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

    docker exec -it umi1 mysql
    

    Примечание

    В списке ролей можно проверить, какой номер у контейнера umi на ВМ, к которой вы подключились.

    на какой umi переходить

  3. Выполнитe команду:

    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"
    
  9. В разделе Настройки -> Хранилища -> Mescalito проверьте на какой ВМ с ролью Хранилище находится общий для всех шардов контейнер stm.

    общий stm

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

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

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

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

    check_user_shard <user ID> "xtazik"
    

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