Skip to content

Ручное обновление 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 из резервной копии.

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

Перед обновлением необходимо убедиться в следующем:

  1. В rpm-репозитории опубликованы пакеты Ranger 2.5.0, подготовленные в формате Bigtop для el8.
  2. На узлах настроен doh.repo с секцией [ranger], а также с зависимостями bigtop-*, hadoop и hive.
  3. Есть доступ к серверу PostgreSQL, который хранит стандартную базу Ranger ranger.
  4. Есть доступ к актуальному JDBC-драйверу PostgreSQL, используемому кластером. В doh он задается переменной ranger__postgresql_jdbc_artifact_url.
  5. На узлах 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:

  1. На всех хостах rangerusersync:
systemctl stop ranger-usersync
  1. На всех хостах rangeradmin:
systemctl stop ranger-admin

Если Ranger Admin развернут на нескольких узлах, все узлы должны быть остановлены до запуска обновления схемы БД.

Обновление первого узла Ranger Admin

На одном узле из группы rangeradmin:

  1. Установите новый пакет:
dnf install -y "ranger-admin-${RANGER_NEW_VERSION}-${RANGER_NEW_RELEASE}"
dnf install -y python2
  1. Переустановите символьные ссылки и внешние каталоги так же, как это делает роль 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
  1. Восстановите 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, поэтому его необходимо обновить вручную.

  1. Загрузите 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"
  1. Выполните обновление схемы БД. Эти команды запускаются только на одном узле 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.

  1. Запустите сервис и проверьте доступность web-интерфейса:
systemctl start ranger-admin
systemctl status ranger-admin
curl -f http://localhost:6080/login.jsp >/dev/null

Обновление остальных узлов Ranger Admin

Если в группе rangeradmin больше одного хоста, повторите на остальных узлах только следующие действия:

  1. Установка пакета ranger-admin-2.5.0.
  2. Обновление symlink'ов и install.properties.
  3. Замена старого пути 2.3.0 на 2.5.0 в /etc/default/ranger-admin и /etc/ranger/admin/conf/ranger-admin-default-site.xml.
  4. Загрузка JDBC-драйвера.
  5. Запуск systemctl start ranger-admin.

Повторно запускать db_setup.py на остальных узлах не требуется.

Обновление Ranger Usersync

На каждом хосте из группы rangerusersync:

  1. Установите новые пакеты:
dnf install -y \
  "ranger-usersync-${RANGER_NEW_VERSION}-${RANGER_NEW_RELEASE}" \
  "postgresql-jdbc-42.2.14-1.el8.noarch"
  1. Переустановите 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
  1. Верните сохраненные 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"
  1. Обновите пути до новой версии:
sed -i "s#${RANGER_OLD_VERSION}#${RANGER_NEW_VERSION}#g" \
  /etc/default/ranger-usersync \
  /etc/ranger/usersync/conf/ranger-ugsync-site.xml
  1. Запустите сервис:
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 не используется, обновление плагинов вызовет кратковременную недоступность соответствующего сервиса.

Проверка результата

После завершения обновления проверьте:

  1. Версии пакетов:
rpm -q ranger-admin ranger-usersync

На узлах namenode:

rpm -q ranger-hdfs-plugin

На узлах hiveserver:

rpm -q ranger-hive-plugin

На узлах resourcemanager:

rpm -q ranger-yarn-plugin
  1. Состояние сервисов:
systemctl status ranger-admin
systemctl status ranger-usersync
systemctl status hadoop-hdfs-namenode
systemctl status hive-server2
systemctl status hadoop-yarn-resourcemanager
  1. Доступность Ranger UI:
curl -f http://<ranger_admin_host>:6080/login.jsp >/dev/null
  1. Отсутствие ошибок в логах:
tail -n 50 /var/log/ranger/admin/ranger-admin.log
tail -n 50 /var/log/ranger/usersync/ranger-usersync.log
  1. Наличие сервисов 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} как временную меру для возврата сервиса.

На узлах 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. Запустите сервисы после отката

Порядок запуска:

  1. ranger-admin на узлах rangeradmin;
  2. ranger-usersync на узлах rangerusersync;
  3. hadoop-hdfs-namenode, hive-server2, hadoop-yarn-resourcemanager на узлах с плагинами.

После запуска повторите проверку доступности UI и логов.

Признаки успешного обновления

Обновление можно считать успешным, если выполнены следующие условия:

  1. На узлах установлены пакеты Ranger 2.5.0.
  2. ranger-admin отвечает на порту 6080.
  3. ranger-usersync стартует без ошибок и проходит очередной цикл синхронизации.
  4. Плагины HDFS, Hive и YARN получают политики из Ranger Admin без ошибок в логах.
  5. Политики, пользователи и группы, существовавшие до обновления, доступны в интерфейсе Ranger.