Ручное обновление Ranger до версии 2.5
Данная инструкция описывает ручное обновление Apache Ranger в составе Hadoop (MWS Data Slon) с версии 2.3.0 до 2.5.0.
Процедура учитывает текущую структуру конфигурации дистрибутива doh и ручную установку Bigtop-пакетов Ranger 2.5.0:
- rpm-репозитории подключаются ролью
doh-prepareчерез файл/etc/yum.repos.d/doh.repo; - пакеты Ranger устанавливаются как RPM-пакеты из секции
[ranger]; - конфигурация Ranger вынесена из пакетов в каталоги
/etc/ranger/admin/confи/etc/ranger/usersync/conf; - часть путей в конфигурации и окружении завязана на версионный каталог
/usr/bigx/ranger/<version>; - запуск сервисов выполняется через
ranger-adminиranger-usersync; - плагины Ranger устанавливаются отдельными пакетами под конкретный сервис: HDFS, Hive и YARN.
Инструкция рассчитана на ручной режим и не заменяет штатные Ansible playbooks. Перед началом работ рекомендуется выделить сервисное окно.
Что обновляется
| Группа хостов | RPM-пакеты | Сервис |
|---|---|---|
rangeradmin |
ranger-admin-<version>-<release> |
ranger-admin |
rangerusersync |
ranger-usersync-<version>-<release>, postgresql-jdbc-42.2.14-1.el8.noarch |
ranger-usersync |
namenode |
ranger-hdfs-plugin-<version>-<release> |
hadoop-hdfs-namenode |
hiveserver |
ranger-hive-plugin-<version>-<release> |
hive-server2 |
resourcemanager |
ranger-yarn-plugin-<version>-<release> |
hadoop-yarn-resourcemanager |
Важно После выполнения
db_setup.pyоткат только пакетов уже недостаточен. Для возврата на2.3.0потребуется восстановление базы данныхrangerиз резервной копии.
Предварительные требования
Перед обновлением необходимо убедиться в следующем:
- В rpm-репозитории опубликованы пакеты Ranger
2.5.0, подготовленные в формате Bigtop дляel8. - На узлах настроен
doh.repoс секцией[ranger], а также с зависимостямиbigtop-*,hadoopиhive. - Есть доступ к серверу PostgreSQL, который хранит стандартную базу Ranger
ranger. - Есть доступ к актуальному JDBC-драйверу PostgreSQL, используемому кластером. В
dohон задается переменнойranger__postgresql_jdbc_artifact_url. - На узлах
rangeradmin,rangerusersync,namenode,hiveserverиresourcemanagerесть свободное место под резервные копии.
Важно Текущий
dohустанавливает единый пакетranger-plugins-2.3.0-*, а целевая Bigtop-сборка2.5.0использует отдельные пакетыranger-hdfs-plugin,ranger-hive-plugin,ranger-yarn-plugin. При обновлении plugin-части фактически меняется layout RPM-пакетов, поэтому для плагинов необходимо отдельно учитывать сценарий замены пакетов.
Проверьте доступность новых пакетов:
dnf clean all
dnf makecache
dnf --showduplicates list \
ranger-admin \
ranger-usersync \
ranger-hdfs-plugin \
ranger-hive-plugin \
ranger-yarn-plugin
Если репозиторий не настроен, подготовьте на хостах /etc/yum.repos.d/doh.repo по аналогии с шаблоном roles/doh-prepare/templates/doh.repo.j2.
Подготовка переменных
Ниже приведен минимальный набор переменных, который удобно использовать в ручной процедуре:
export RANGER_OLD_VERSION="2.3.0"
export RANGER_OLD_RELEASE="$(rpm -q --qf '%{RELEASE}\n' ranger-admin)"
export RANGER_NEW_VERSION="2.5.0"
export RANGER_NEW_RELEASE="<release>"
export RANGER_OLD_HOME="/usr/bigx/ranger/${RANGER_OLD_VERSION}"
export RANGER_NEW_HOME="/usr/bigx/ranger/${RANGER_NEW_VERSION}"
export RANGER_CURRENT="/usr/bigx/ranger/current"
export RANGER_DB_NAME="ranger"
export RANGER_DB_OWNER="rangeradmin"
export RANGER_POSTGRES_JDBC_URL="<ranger__postgresql_jdbc_artifact_url>"
export BACKUP_ROOT="/backup/ranger-${RANGER_OLD_VERSION}-to-${RANGER_NEW_VERSION}-$(date +%Y%m%d-%H%M%S)"
Значение RANGER_NEW_RELEASE должно совпадать с фактическим release в репозитории, например 1.el8, 2.el8 и т.д.
Значение RANGER_OLD_RELEASE рекомендуется определять автоматически по установленному пакету, так как фактический release должен совпасть с текущим состоянием узла.
Резервное копирование
Резервное копирование PostgreSQL
Резервное копирование необходимо выполнять до остановки Ranger и до запуска db_setup.py.
Ниже приведен пример для стандартной базы ranger.
Команды рекомендуется выполнять непосредственно на сервере PostgreSQL:
mkdir -p "${BACKUP_ROOT}/postgres"
sudo -u postgres pg_dump -Fc \
-d "${RANGER_DB_NAME}" \
-f "${BACKUP_ROOT}/postgres/ranger.dump"
Если резервное копирование выполняется не с PostgreSQL-хоста, добавьте параметры -h <postgresql__master> -p 5432 -U postgres.
Примечание Дополнительно можно сохранить файл
globals.sql:Такой дамп не содержит данные базыsudo -u postgres pg_dumpall --globals-only \ > "${BACKUP_ROOT}/postgres/globals.sql"ranger, но позволяет при необходимости восстановить глобальные объекты PostgreSQL: роли, права, ownership, tablespace и другие параметры уровня экземпляра СУБД. Для типового обновления Ranger сохранениеglobals.sqlне является обязательным, так как основным резервным артефактом остается дамп базыranger.
Резервное копирование Ranger Admin
На каждом хосте из группы rangeradmin сохраните конфигурацию, исполняемые файлы и текущую установленную версию:
mkdir -p "${BACKUP_ROOT}/$(hostname -f)"
tar -C / -czf "${BACKUP_ROOT}/$(hostname -f)/ranger-admin-config.tar.gz" \
etc/ranger/admin \
etc/default/ranger-admin \
etc/init.d/ranger-admin
cp -a "${RANGER_OLD_HOME}/ranger-admin/install.properties" \
"${BACKUP_ROOT}/$(hostname -f)/install.properties"
tar -C /usr/bigx/ranger -czf "${BACKUP_ROOT}/$(hostname -f)/ranger-admin-home.tar.gz" \
"${RANGER_OLD_VERSION}"
rpm -q ranger-admin > "${BACKUP_ROOT}/$(hostname -f)/ranger-admin.rpm.txt"
readlink -f "${RANGER_CURRENT}" > "${BACKUP_ROOT}/$(hostname -f)/ranger-current.txt"
Особенно важно сохранить содержимое /etc/ranger/admin/conf/.jceks, так как в нем находятся текущие credential aliases Ranger Admin.
Резервное копирование Ranger Usersync
На каждом хосте из группы rangerusersync дополнительно сохраните keystore и jceks:
mkdir -p "${BACKUP_ROOT}/$(hostname -f)"
tar -C / -czf "${BACKUP_ROOT}/$(hostname -f)/ranger-usersync-config.tar.gz" \
etc/ranger/usersync \
etc/default/ranger-usersync \
etc/init.d/ranger-usersync
cp -a "${RANGER_OLD_HOME}/ranger-usersync/unixauthservice.jks" \
"${BACKUP_ROOT}/$(hostname -f)/unixauthservice.jks"
cp -a "${RANGER_OLD_HOME}/ranger-usersync/rangerusersync.jceks" \
"${BACKUP_ROOT}/$(hostname -f)/rangerusersync.jceks"
cp -a "${RANGER_OLD_HOME}/ranger-usersync/.rangerusersync.jceks.crc" \
"${BACKUP_ROOT}/$(hostname -f)/.rangerusersync.jceks.crc"
rpm -q ranger-usersync postgresql-jdbc > "${BACKUP_ROOT}/$(hostname -f)/ranger-usersync.rpm.txt"
Резервное копирование хостов с Ranger plugins
На узлах namenode, hiveserver и resourcemanager достаточно сохранить список текущих пакетов и копию конфигурации:
mkdir -p "${BACKUP_ROOT}/$(hostname -f)"
rpm -qa | grep -E '^ranger-plugins$|^ranger-(hdfs|hive|yarn)-plugin' \
> "${BACKUP_ROOT}/$(hostname -f)/ranger-plugins.rpm.txt"
tar -C / -czf "${BACKUP_ROOT}/$(hostname -f)/service-conf.tar.gz" \
etc/hadoop/conf \
etc/hive/conf \
etc/ranger
После создания локальных резервных копий рекомендуется загрузить их во внешнее хранилище.
Порядок обновления
Остановка сервисов Ranger
Перед обновлением остановите сервисы Ranger:
- На всех хостах
rangerusersync:
systemctl stop ranger-usersync
- На всех хостах
rangeradmin:
systemctl stop ranger-admin
Если Ranger Admin развернут на нескольких узлах, все узлы должны быть остановлены до запуска обновления схемы БД.
Обновление первого узла Ranger Admin
На одном узле из группы rangeradmin:
- Установите новый пакет:
dnf install -y "ranger-admin-${RANGER_NEW_VERSION}-${RANGER_NEW_RELEASE}"
dnf install -y python2
- Переустановите символьные ссылки и внешние каталоги так же, как это делает роль
ranger:
ln -sfn "${RANGER_NEW_HOME}" "${RANGER_CURRENT}"
rm -rf "${RANGER_NEW_HOME}/ranger-admin/ews/webapp/WEB-INF/classes/conf"
ln -s /etc/ranger/admin/conf "${RANGER_NEW_HOME}/ranger-admin/ews/webapp/WEB-INF/classes/conf"
rm -rf "${RANGER_NEW_HOME}/ranger-admin/ews/logs"
ln -s /var/log/ranger/admin "${RANGER_NEW_HOME}/ranger-admin/ews/logs"
ln -sfn "${RANGER_NEW_HOME}/ranger-admin/ews/ranger-admin-services.sh" /usr/bin/ranger-admin
- Восстановите
install.propertiesи обновите пути на новую версию:
cp -a "${BACKUP_ROOT}/$(hostname -f)/install.properties" \
"${RANGER_NEW_HOME}/ranger-admin/install.properties"
sed -i "s#${RANGER_OLD_VERSION}#${RANGER_NEW_VERSION}#g" \
/etc/default/ranger-admin \
/etc/ranger/admin/conf/ranger-admin-default-site.xml \
"${RANGER_NEW_HOME}/ranger-admin/install.properties"
В doh файл /etc/ranger/admin/conf/ranger-admin-default-site.xml содержит версионный путь до rangeradmin.jceks, поэтому его необходимо обновить вручную.
- Загрузите JDBC-драйвер PostgreSQL в каталог новой версии:
curl -fL "${RANGER_POSTGRES_JDBC_URL}" \
-o "${RANGER_CURRENT}/ranger-admin/ews/webapp/WEB-INF/lib/postgresql-jdbc.jar"
chown ranger:ranger "${RANGER_CURRENT}/ranger-admin/ews/webapp/WEB-INF/lib/postgresql-jdbc.jar"
chmod 0644 "${RANGER_CURRENT}/ranger-admin/ews/webapp/WEB-INF/lib/postgresql-jdbc.jar"
- Выполните обновление схемы БД. Эти команды запускаются только на одном узле Ranger Admin:
source /etc/default/ranger-admin && \
/usr/bin/python2 "${RANGER_NEW_HOME}/ranger-admin/dba_script.py" -q
source /etc/default/ranger-admin && \
/usr/bin/python2 "${RANGER_NEW_HOME}/ranger-admin/db_setup.py" -checkupgrade
source /etc/default/ranger-admin && \
/usr/bin/python2 "${RANGER_NEW_HOME}/ranger-admin/db_setup.py"
source /etc/default/ranger-admin && \
/usr/bin/python2 "${RANGER_NEW_HOME}/ranger-admin/db_setup.py" -javapatch
Если в процессе обновления был потерян файл /etc/ranger/admin/conf/.jceks/rangeradmin.jceks, восстановите его из резервной копии.
Если резервной копии нет, повторно создайте aliases ranger.db.password, ranger.ad.binddn.password, unixAuthKeyStoreAlias и unixAuthTrustStoreAlias по аналогии с задачами roles/ranger/tasks/init_ranger-admin.yml.
- Запустите сервис и проверьте доступность web-интерфейса:
systemctl start ranger-admin
systemctl status ranger-admin
curl -f http://localhost:6080/login.jsp >/dev/null
Обновление остальных узлов Ranger Admin
Если в группе rangeradmin больше одного хоста, повторите на остальных узлах только следующие действия:
- Установка пакета
ranger-admin-2.5.0. - Обновление symlink'ов и
install.properties. - Замена старого пути
2.3.0на2.5.0в/etc/default/ranger-adminи/etc/ranger/admin/conf/ranger-admin-default-site.xml. - Загрузка JDBC-драйвера.
- Запуск
systemctl start ranger-admin.
Повторно запускать db_setup.py на остальных узлах не требуется.
Обновление Ranger Usersync
На каждом хосте из группы rangerusersync:
- Установите новые пакеты:
dnf install -y \
"ranger-usersync-${RANGER_NEW_VERSION}-${RANGER_NEW_RELEASE}" \
"postgresql-jdbc-42.2.14-1.el8.noarch"
- Переустановите symlink'и и внешние каталоги:
ln -sfn "${RANGER_NEW_HOME}" "${RANGER_CURRENT}"
rm -rf "${RANGER_NEW_HOME}/ranger-usersync/conf"
ln -s /etc/ranger/usersync/conf "${RANGER_NEW_HOME}/ranger-usersync/conf"
rm -rf "${RANGER_NEW_HOME}/ranger-usersync/logs"
ln -s /var/log/ranger/usersync "${RANGER_NEW_HOME}/ranger-usersync/logs"
ln -sfn "${RANGER_NEW_HOME}/ranger-usersync/ranger-usersync-services.sh" /usr/bin/ranger-usersync
- Верните сохраненные keystore и jceks:
cp -a "${BACKUP_ROOT}/$(hostname -f)/unixauthservice.jks" \
"${RANGER_NEW_HOME}/ranger-usersync/unixauthservice.jks"
cp -a "${BACKUP_ROOT}/$(hostname -f)/rangerusersync.jceks" \
"${RANGER_NEW_HOME}/ranger-usersync/rangerusersync.jceks"
cp -a "${BACKUP_ROOT}/$(hostname -f)/.rangerusersync.jceks.crc" \
"${RANGER_NEW_HOME}/ranger-usersync/.rangerusersync.jceks.crc"
chown ranger:ranger "${RANGER_NEW_HOME}/ranger-usersync/unixauthservice.jks"
chown ranger:ranger "${RANGER_NEW_HOME}/ranger-usersync/rangerusersync.jceks"
chown ranger:ranger "${RANGER_NEW_HOME}/ranger-usersync/.rangerusersync.jceks.crc"
chmod 600 "${RANGER_NEW_HOME}/ranger-usersync/unixauthservice.jks"
chmod 600 "${RANGER_NEW_HOME}/ranger-usersync/rangerusersync.jceks"
chmod 600 "${RANGER_NEW_HOME}/ranger-usersync/.rangerusersync.jceks.crc"
- Обновите пути до новой версии:
sed -i "s#${RANGER_OLD_VERSION}#${RANGER_NEW_VERSION}#g" \
/etc/default/ranger-usersync \
/etc/ranger/usersync/conf/ranger-ugsync-site.xml
- Запустите сервис:
systemctl start ranger-usersync
systemctl status ranger-usersync
Если unixauthservice.jks или rangerusersync.jceks отсутствуют, не запускайте сервис до их восстановления.
В doh данные файлы создаются на этапе init_ranger-usersync, поэтому для ручного обновления предпочтительно использовать резервную копию.
Обновление Ranger plugins
В Bigtop 2.5.0 плагины Ranger устанавливаются отдельными пакетами под конкретный сервис.
При этом текущий doh использует единый пакет ranger-plugins, поэтому на plugin-узлах нужно сначала заменить старый пакет на новый набор per-service пакетов.
Конфигурация плагинов в doh уже хранится вне пакета, поэтому после замены RPM достаточно перезапустить сервис, который использует соответствующий plugin.
Если один и тот же хост одновременно входит в несколько групп (namenode, hiveserver, resourcemanager), удалите ranger-plugins один раз, затем установите на этот хост все необходимые plugin-пакеты, и только после этого перезапустите затронутые сервисы.
На узлах namenode:
dnf remove -y ranger-plugins
dnf install -y "ranger-hdfs-plugin-${RANGER_NEW_VERSION}-${RANGER_NEW_RELEASE}"
systemctl restart hadoop-hdfs-namenode
На узлах hiveserver:
dnf remove -y ranger-plugins
dnf install -y "ranger-hive-plugin-${RANGER_NEW_VERSION}-${RANGER_NEW_RELEASE}"
systemctl restart hive-server2
На узлах resourcemanager:
dnf remove -y ranger-plugins
dnf install -y "ranger-yarn-plugin-${RANGER_NEW_VERSION}-${RANGER_NEW_RELEASE}"
systemctl restart hadoop-yarn-resourcemanager
Если HDFS или YARN развернуты в HA-режиме, сначала обновляйте standby-узел, затем выполняйте переключение ролей и обновляйте бывший active-узел. Если HA не используется, обновление плагинов вызовет кратковременную недоступность соответствующего сервиса.
Проверка результата
После завершения обновления проверьте:
- Версии пакетов:
rpm -q ranger-admin ranger-usersync
На узлах namenode:
rpm -q ranger-hdfs-plugin
На узлах hiveserver:
rpm -q ranger-hive-plugin
На узлах resourcemanager:
rpm -q ranger-yarn-plugin
- Состояние сервисов:
systemctl status ranger-admin
systemctl status ranger-usersync
systemctl status hadoop-hdfs-namenode
systemctl status hive-server2
systemctl status hadoop-yarn-resourcemanager
- Доступность Ranger UI:
curl -f http://<ranger_admin_host>:6080/login.jsp >/dev/null
- Отсутствие ошибок в логах:
tail -n 50 /var/log/ranger/admin/ranger-admin.log
tail -n 50 /var/log/ranger/usersync/ranger-usersync.log
- Наличие сервисов Ranger для HDFS, Hive и YARN:
curl -u admin:<password> \
"http://<ranger_admin_host>:6080/service/public/v2/api/service/name/<cluster>_hdfs"
curl -u admin:<password> \
"http://<ranger_admin_host>:6080/service/public/v2/api/service/name/<cluster>_hive"
curl -u admin:<password> \
"http://<ranger_admin_host>:6080/service/public/v2/api/service/name/<cluster>_yarn"
Имена сервисов должны совпадать со значениями {{ hadoop__cluster_name }}_hdfs, {{ hadoop__cluster_name }}_hive и {{ hadoop__cluster_name }}_yarn, которые используются в doh.
Откат
Откат необходимо выполнять при любой проблеме с запуском ranger-admin, ошибке db_setup.py, недоступности UI или потере работоспособности плагинов Ranger.
1. Остановите обновленные сервисы
На узлах rangerusersync:
systemctl stop ranger-usersync
На узлах rangeradmin:
systemctl stop ranger-admin
На узлах с плагинами остановите или переведите в standby соответствующий сервис перед откатом пакета.
2. Восстановите базу данных Ranger
Если до отката уже выполнялся db_setup.py, обязательно восстановите PostgreSQL из резервной копии:
sudo -u postgres dropdb --if-exists "${RANGER_DB_NAME}"
sudo -u postgres createdb -O "${RANGER_DB_OWNER}" "${RANGER_DB_NAME}"
sudo -u postgres pg_restore \
-d "${RANGER_DB_NAME}" \
"${BACKUP_ROOT}/postgres/ranger.dump"
Если в ходе обновления были изменены роли, ownership, grants или другие глобальные объекты PostgreSQL, дополнительно восстановите globals.sql:
sudo -u postgres psql -f "${BACKUP_ROOT}/postgres/globals.sql"
3. Верните пакеты Ranger 2.3.0
На узлах rangeradmin:
dnf downgrade -y "ranger-admin-${RANGER_OLD_VERSION}-${RANGER_OLD_RELEASE}"
На узлах rangerusersync:
dnf downgrade -y "ranger-usersync-${RANGER_OLD_VERSION}-${RANGER_OLD_RELEASE}"
На узлах namenode:
dnf remove -y ranger-hdfs-plugin
dnf install -y "ranger-plugins-${RANGER_OLD_VERSION}-${RANGER_OLD_RELEASE}"
На узлах hiveserver:
dnf remove -y ranger-hive-plugin
dnf install -y "ranger-plugins-${RANGER_OLD_VERSION}-${RANGER_OLD_RELEASE}"
На узлах resourcemanager:
dnf remove -y ranger-yarn-plugin
dnf install -y "ranger-plugins-${RANGER_OLD_VERSION}-${RANGER_OLD_RELEASE}"
Если downgrade недоступен, установите точные rpm-пакеты 2.3.0 из локального архива или из репозитория вручную.
Если старые пакеты недоступны, используйте подготовленные архивы конфигурации и каталога /usr/bigx/ranger/${RANGER_OLD_VERSION} как временную меру для возврата сервиса.
4. Восстановите конфигурацию и symlink'и
На узлах rangeradmin:
tar -C / -xzf "${BACKUP_ROOT}/$(hostname -f)/ranger-admin-config.tar.gz"
ln -sfn "${RANGER_OLD_HOME}" "${RANGER_CURRENT}"
ln -sfn "${RANGER_OLD_HOME}/ranger-admin/ews/ranger-admin-services.sh" /usr/bin/ranger-admin
На узлах rangerusersync:
tar -C / -xzf "${BACKUP_ROOT}/$(hostname -f)/ranger-usersync-config.tar.gz"
ln -sfn "${RANGER_OLD_HOME}" "${RANGER_CURRENT}"
ln -sfn "${RANGER_OLD_HOME}/ranger-usersync/ranger-usersync-services.sh" /usr/bin/ranger-usersync
cp -a "${BACKUP_ROOT}/$(hostname -f)/unixauthservice.jks" \
"${RANGER_OLD_HOME}/ranger-usersync/unixauthservice.jks"
cp -a "${BACKUP_ROOT}/$(hostname -f)/rangerusersync.jceks" \
"${RANGER_OLD_HOME}/ranger-usersync/rangerusersync.jceks"
cp -a "${BACKUP_ROOT}/$(hostname -f)/.rangerusersync.jceks.crc" \
"${RANGER_OLD_HOME}/ranger-usersync/.rangerusersync.jceks.crc"
Если в процессе обновления изменялись дополнительные файлы внутри /usr/bigx/ranger/${RANGER_NEW_VERSION}, восстановите их из подготовленных архивов.
5. Запустите сервисы после отката
Порядок запуска:
ranger-adminна узлахrangeradmin;ranger-usersyncна узлахrangerusersync;hadoop-hdfs-namenode,hive-server2,hadoop-yarn-resourcemanagerна узлах с плагинами.
После запуска повторите проверку доступности UI и логов.
Признаки успешного обновления
Обновление можно считать успешным, если выполнены следующие условия:
- На узлах установлены пакеты Ranger
2.5.0. ranger-adminотвечает на порту6080.ranger-usersyncстартует без ошибок и проходит очередной цикл синхронизации.- Плагины HDFS, Hive и YARN получают политики из Ranger Admin без ошибок в логах.
- Политики, пользователи и группы, существовавшие до обновления, доступны в интерфейсе Ranger.