В документе представлена информация по перемещению пользователей между шардами.
Шард в хранилище данных — это часть общего набора данных, которая хранится отдельно от других частей, обычно на другом узле, сервере или диске, но вместе с ними образует единое логическое хранилище.
Перенос между шардами требуется, если нужно запретить регистрацию на одном шарде и перенести одного или несколько пользователей на другой.
Для успешного переноса пользователей потребуются:
- Навыки работы с SQL-запросами.
- Доступ по SSH к виртуальным машинам в кластере.
- Доступ к веб-интерфейсу установщика.
Номер шарда на скриншоте ниже указан в столбце № кластера. То есть хранилища по шардам распределены следующим образом:
- Шард 1: xtaz1, xtaz2, xtaz3, xtaz7.
- Шард 2: xtaz4, xtaz5, xtaz6.

Чтобы добавить новый контейнер stm:
- В веб-интерфейсе установщика, в самом низу страницы со списком ролей, нажмите на кнопку Добавить → Контейнер.
- Найдите контейнер stm в списке.
- В общей строке состояния запустите автоустановку и дождитесь ее окончания.
Чтобы перенести пользователя на другой шард:
-
Подключитесь по SSH к любой ВМ или серверу с ролью БД.
-
В консоли на ВМ c ролью БД перейдите в контейнер umi*. Номер в названии контейнера зависит от того, к какой ВМ вы подключились.
docker exec -it umi1 mysql -
Выполните команду:
use mPOP -
Найдите ID пользователя в таблице Users:
select ID from user where Username="<mail adress>"; -
Скопируйте ID нужного пользователя.
-
Перейдите на любой сервер с ролью Хранилище.
-
Перейдите в контейнер
stm<X>, где <Х> — номер stm. Номер контейнера зависит от того, к какой ВМ вы подключились.docker exec -it stm<X> bash -
Проверьте, на каком шарде находится пользователь:
check_user_shard <user ID> "xtazik"Пример успешного выполнения команды:
warning: iproto: failed to shmget() pinger shared memory: No such file or directorykey `xtazik': `<номер шарда>' -
В разделе Настройки → Хранилища → Mescalito проверьте на какой ВМ с ролью Хранилище находится общий для всех шардов контейнер stm.

-
Подключитесь по SSH к этой ВМ.
-
Перейдите в контейнер stm*, который является общим для текущего и будущего шардов, обрабатывающих данные выбранного пользователя (stm1, stm2, stm3 и т.д.). Общий контейнер stm был добавлен перед шагом 1.
docker exec -it stm<X> bash -
Выполните команду для переноса пользователя:
xindex_tools -c /usr/local/etc/mescalito.conf move -s <с какого шарда перенос> -d <на какой шард перенос> <email> -
Проверьте, перенесен ли пользователь на другой шард:
check_user_shard <user ID> "xtazik"
Если в ответе команды шард был изменен, перенос прошел успешно.
Технический писатель: Груздев Никита