Действия при изменении IP-адреса диспетчера или БД
Изменение IP-адреса БД
Порядок действий
При изменении IP-адреса БД необходимо выполнить следующие действия:
-
Перейти в терминал узла с ролью Leader и сохранить текущие настройки в файл
old_secrets
с помощью команды:sudo docker exec -it {ID} cat /run/secrets/LOC_SET > old_secrets
ID контейнера можно получить в выводе команды
docker ps
. -
Открыть файл
old_secrets
на редактирование. -
Найти строку
DB_HOST
и изменить зашифрованное значение на новый IP-адрес подключения:DB_HOST = '10.251.32.3'
Примечание
IP-адрес 10.251.32.3 представлен в качестве примера.
-
Удалить
stack
с помощью команды:docker stack rm multivdi
-
Удалить старый
secret
с помощью команды:docker secret rm LOC_SET
-
Создать новый
secret
с измененным содержимым с помощью команды:docker secret create LOC_SET old_secrets
-
Пересоздать
stack
для применения новых переменных окружения с помощью команды:sudo docker stack deploy --resolve-image never -c /opt/multivdi/multivdi-stack.yml multivdi
Внимание
Если изменился также и IP-адрес диспетчера, необходимо пересоздать кластер с помощью команды:
docker swarm init --force-new-cluster
Для проверки изменения IP-адреса БД необходимо выполнить команды:
docker exec -it {ID} "cat /run/secrets/LOC_SET"
Пример
docker exec -it e3072f35e77d "cat /run/secrets/LOC_SET"
Возможные ошибки
Ошибка: Невозможно извлечь secret
.
Решение:
Записать secret
с настройками в контейнер Redis, который не пересоздается каждые N-секунд. Для этого:
-
Открыть файл
multivdi-stack.yml
:sudo vim /opt/multivdi/multivdi-stack.yml
-
Добавить в сервис
vdi-redis
в полеsecrets
еще одно значение:LOC_SET
. -
Пересоздать
stack
:stack rm
stack deploy
-
Выполнить команду:
redis docker exec -it {ID} cat /run/secrets/LOC_SET > old_secrets
В поле {ID} необходимо указать ID контейнера.
Примечание
При записи новых
secrets
добавленныйsecret
необходимо убрать из Redis.
Изменение IP-адреса Leader или Manager
При изменении IP-адреса узла с ролью Leader необходимо пересоздать docker-кластер. Для этого следует выполнить следующие команды на узле, который будет занимать роль Leader.
-
Выйти из текущего кластера:
docker swarm leave
-
Создать новый кластер:
docker swarm init --force-new-cluster
-
Вывести и сохранить токен для подключения узлов с ролью Manager:
sudo docker swarm join-token manager -q
После выполнения вышеописанных действий необходимо поочередно на каждом из оставшихся узлов (кроме БД) выполнить следующие команды:
-
Выйти из текущего кластера:
docker swarm leave
-
Присоединиться к новому кластеру:
docker swarm {join-token} {leader-ip}
join-token
- токен для подключения новых узлов с ролью Manager, полученный на Leader.leader-ip
- IP-адрес узла с ролью Leader.
Для просмотра списка узлов в кластере необходимо на любом из узлов выполнить команду:
sudo docker node ls