Упражнение. Перенос рабочих нагрузок MongoDB в Cosmos DB
Вы работаете в компании коммунальных служб с датчиками Интернета вещей, которые собирают данные температуры. Температура регистрируется в базе данных MongoDB вместе с меткой времени. У каждого устройства есть уникальный идентификатор. Вы запустите приложение MongoDB, которое имитирует эти устройства и сохраняет данные в базе данных. Вы также будете использовать второе приложение, которое позволяет пользователю запрашивать статистические сведения о каждом устройстве. После переноса базы данных из MongoDB в Cosmos DB вы настроите оба приложения для подключения к Cosmos DB и убедитесь, что они по-прежнему работают правильно.
В этом упражнении вы получите существующую базу данных MongoDB и перенесите ее в Cosmos DB. Вы будете использовать Azure Database Migration Service. Вы также узнаете, как перенастроить существующие приложения, использующие базу данных MongoDB для подключения к базе данных Cosmos DB.
Это важно
Служба Azure Data Migration Service не поддерживается в бесплатной версии песочницы Azure. Эти действия можно выполнить в рамках собственной подписки или просто ознакомиться с ними, чтобы понять, как выполнять миграцию базы данных.
Создание базы данных MongoDB в Azure
Сначала вы создадите базу данных MongoDB для хранения данных, захваченных с устройств температуры.
Создание группы ресурсов и виртуальной сети
С помощью веб-браузера откройте новую вкладку и перейдите на портал Azure.
На портале Azure выберите группы ресурсов и нажмите кнопку +Добавить.
На странице "Создание группы ресурсов" введите следующие сведения:
Недвижимость Ценность Подписка <ваша подписка> Группа ресурсов mongodbrg Регион Выберите ближайшее к вам расположение Выберите Просмотр + Создание, а затем выберите Создать. Дождитесь создания группы ресурсов.
В меню портала Azure нажмите кнопку +Создать ресурс.
На новой странице в поле "Поиск Marketplace " введите виртуальную сеть и нажмите клавишу ВВОД.
На странице "Виртуальная сеть" нажмите кнопку "Создать".
На странице "Создание виртуальной сети " введите следующие сведения и нажмите кнопку "Далее: IP-адреса".
Недвижимость Ценность Группа ресурсов mongodbrg Имя сеть базы данных Регион Выберите то же расположение, которое вы указали для группы ресурсов На странице IP-адресов задайте для адресного пространства IPv4 значение10.0.0.0/24.
Выберите подсеть по умолчанию и нажмите кнопку "Удалить подсеть".
Нажмите + Добавить подсеть. В области "Добавление подсети " задайте для имени подсети значениепо умолчанию, задайте диапазон адресов подсетизначение 10.0.0.0/28, а затем нажмите кнопку "Добавить".
На странице IP-адресов нажмите кнопку "Далее: безопасность".
На странице "Безопасность" убедитесь, что для защиты сети DDoS Azure задано значение Disable, и брандмауэру присвоено значение Disable. Выберите Review + create.
На странице "Создание виртуальной сети " нажмите кнопку "Создать". Дождитесь создания виртуальной сети, прежде чем продолжить.
Создание сервера базы данных MongoDB
В меню портала Azure нажмите кнопку +Создать ресурс.
В поле Поиска в Marketplace введите Ubuntu и нажмите клавишу ВВОД.
На странице Marketplace выберите Ubuntu Server 18.04 LTS.
На странице Ubuntu Server 18.04 LTS нажмите кнопку "Создать".
На странице "Создание виртуальной машины" введите следующие сведения:
Недвижимость Ценность Группа ресурсов mongodbrg Название виртуальной машины mongodbserver Регион Выберите то же расположение, которое вы указали для группы ресурсов Параметры доступности Нет необходимости в избыточности инфраструктуры Изображение Ubuntu Server 18.04 LTS — 1-го поколения Виртуальная машина Azure Spot Не проверено Размер Стандартный A1_v2 Тип аутентификации Пароль Имя пользователя azureuser Пароль Pa55w.rdPa55w.rd Подтверждение пароля Pa55w.rdPa55w.rd Общедоступные входящие порты Разрешить выбранные порты Выбрать входящие порты SSH (22) Нажмите кнопку "Далее" — диски >.
На странице "Диски" оставьте параметры по умолчанию, а затем нажмите кнопку "Далее: Сеть >".
На странице "Сеть" введите следующие сведения:
Недвижимость Ценность Виртуальная сеть databasevnet Подсеть по умолчанию (10.0.0.0/28) Общедоступный IP-адрес (новое) mongodbserver-ip Группа безопасности сети NIC Продвинутый Настройка группы безопасности сети (новое) mongodbserver-nsg Ускорение работы в сети Не проверено Балансировка нагрузки Не проверено Выберите "Рецензирование и создание >".
На странице проверки нажмите кнопку "Создать".
Дождитесь развертывания виртуальной машины, прежде чем продолжить
В меню портала Azure выберите все ресурсы.
На странице "Все ресурсы " выберите mongodbserver-nsg.
На странице mongodbserver-nsg в разделе "Параметры" выберите правила безопасности для входящего трафика.
На странице правил безопасности для входящего трафика mongodbserver-nsg нажмите кнопку +Добавить.
В области Добавление правила безопасности для входящего трафика введите следующие сведения:
Недвижимость Ценность Исходный материал Любое Диапазоны исходных портов * Место назначения Любое Диапазоны портов назначения 8080 Протокол Любое Действие Разрешить Приоритет 1030 Имя Mongodb-port Описание Порт, используемый клиентами для подключения к MongoDB Нажмите кнопку "Добавить".
Замечание
В этом упражнении вы настроите MongoDB порт 8080. Это необходимо сделать только из-за ограничений безопасности в этой среде. Обычно используется порт MongoDB по умолчанию 27017.
Установка MongoDB
В меню портала Azure выберите все ресурсы.
На странице "Все ресурсы " выберите mongodbserver-ip.
На странице mongodbserver-ip запишите IP-адрес.
На панели инструментов в верхней части портала Azure выберите Cloud Shell.
Если появится окно с сообщением "У вас не подключено хранилище", нажмите "Создать хранилище".
При запуске Cloud Shell в раскрывающемся списке над окном Cloud Shell выберите Bash.
В Cloud Shell введите следующую команду, чтобы подключиться к виртуальной машине mongodbserver. Замените <IP-адрес> значением IP-адреса mongodbserver-ip :
ssh azureuser@<ip address>В командной строке введите "Да ", чтобы продолжить подключение.
Введите пароль Pa55w.rdPa55w.rd.
Чтобы перезагрузить базу данных пакета, введите следующую команду:
sudo apt-get updateЧтобы установить MongoDB, введите следующую команду:
sudo apt-get install -y mongodbУстановка должна продолжаться с сообщениями об установке, подготовке и распаковке пакетов. Для завершения установки может потребоваться несколько минут.
Настройка базы данных MongoDB
По умолчанию экземпляр Mongo DB настроен для запуска без проверки подлинности. В этой задаче вы настроите MongoDB привязку к локальному сетевому интерфейсу, чтобы он мог принимать подключения с других компьютеров. Вы также включите проверку подлинности и создадите необходимую учетную запись пользователя для выполнения миграции. Наконец, вы добавите учетную запись, которую тестовое приложение может использовать для запроса базы данных.
Чтобы открыть файл конфигурации MongoDB, выполните следующую команду:
sudo nano /etc/mongodb.confВ файле найдите параметр bind_ip и задайте для него значение 0.0.0.0.0.
Найдите параметр порта и задайте для него значение 8080.
Чтобы сохранить файл конфигурации, нажмите клавишу ESC и нажмите клавиши CTRL+X. Нажмите клавишу Y , а затем введите , чтобы сохранить измененный буфер.
Чтобы перезапустить службу MongoDB и применить изменения, введите следующую команду:
sudo service mongodb restartЧтобы подключиться к службе MongoDB, введите следующую команду:
mongo --host 127.0.0.1:8080> Чтобы переключиться в базу данных администрирования, выполните следующую команду:
use admin;Чтобы создать нового пользователя с именем администратора, выполните следующую команду. Для повышения удобочитаемости можно ввести команду в одной строке или в нескольких строках. Команда выполняется, когда
mongoпрограмма достигает точки с запятой:db.createUser( { user: "administrator", pwd: "Pa55w.rd", roles: [ { role: "userAdminAnyDatabase", db: "admin" }, { role: "clusterMonitor", db:"admin" }, "readWriteAnyDatabase" ] } );Чтобы выйти из программы, введите следующую
mongoкоманду;exit;Чтобы подключиться к MongoDB с учетной записью нового администратора, выполните следующую команду:
mongo admin -u "administrator" -p "Pa55w.rd" --host 127.0.0.1:8080Чтобы переключиться в базу данных DeviceData , выполните следующую команду:
use DeviceData;Чтобы создать пользователя с именем deviceadmin, который приложение будет использовать для подключения к базе данных, выполните следующую команду:
db.createUser( { user: "deviceadmin", pwd: "Pa55w.rd", roles: [ { role: "readWrite", db: "DeviceData" } ] } );Чтобы выйти из программы, введите следующую
mongoкоманду;exit;Выполните следующую команду, чтобы перезапустить службу Mongodb. Убедитесь, что служба перезапускается без сообщений об ошибках:
sudo service mongodb restartВыполните следующую команду, чтобы убедиться, что теперь вы можете войти в mongodb в качестве пользователя deviceadmin:
mongo DeviceData -u "deviceadmin" -p "Pa55w.rd" --host 127.0.0.1:8080В командной строке > выполните следующую команду, чтобы выйти из оболочки mongo:
exit;В командной строке bash выполните следующую команду, чтобы отключиться от сервера MongoDB и вернуться в Cloud Shell:
exit
Заполнение и запрос базы данных MongoDB
Теперь вы создали сервер и базу данных MongoDB. Следующим шагом является демонстрация примеров приложений, которые могут заполнять и запрашивать данные в этой базе данных.
Создание и запуск приложения для заполнения базы данных MongoDB
В Azure Cloud Shell выполните следующую команду, чтобы скачать пример кода:
git clone https://github.com/MicrosoftLearning/DP-060T00A-Migrating-your-Database-to-Cosmos-DB migration-workshop-appsПерейдите в папку migration-workshop-apps/MongoDeviceDataCapture/MongoDeviceCapture :
cd ~/migration-workshop-apps/MongoDeviceDataCapture/MongoDeviceDataCaptureИспользуйте редактор кода для проверки файла TemperatureDevice.cs :
code TemperatureDevice.csКод в этом файле содержит класс с именем TemperatureDevice , который имитирует устройство температуры, захватывающее данные и сохраняющее его в базе данных MongoDB. Она использует библиотеку MongoDB для .NET Framework. Конструктор TemperatureDevice подключается к базе данных с помощью параметров, хранящихся в файле конфигурации приложения. Метод RecordTemperatures снимает показания и записывает их в базу данных.
Закройте редактор кода и откройте файл ThermometerReading.cs :
code ThermometerReading.csВ этом файле показана структура документов, которые приложение хранит в базе данных. Каждый документ содержит следующие поля:
- Идентификатор объекта. Это поле "_id", созданное MongoDB для уникальной идентификации каждого документа.
- Идентификатор устройства. Каждое устройство имеет номер с префиксом Device.
- Температура, записанная устройством.
- Дата и время записи температуры.
Закройте редактор кода и откройте файл App.config :
code App.configЭтот файл содержит параметры подключения к базе данных MongoDB.
Задайте значение для ключа Address, указав IP-адрес сервера MongoDB, который вы записали ранее.
Измените порт, используемый приложением на 8080.
Сохраните файл и закройте редактор с помощью клавиш CTRL + s, а затем CTRL + q.
Выполните следующую команду, чтобы перестроить приложение:
dotnet buildЭто может занять около 5 минут.
Запустите приложение:
dotnet runПриложение имитирует одновременно 100 устройств. Разрешите приложению работать в течение нескольких минут, а затем нажмите клавишу ВВОД, чтобы остановить его.
Создание и запуск другого приложения для запроса базы данных MongoDB
Перейдите в папку DP160T00A-Migrating-your-Database-to-Cosmos-DB/MongoDeviceDataCapture/DeviceDataQuery :
cd ~/migration-workshop-apps/MongoDeviceDataCapture/DeviceDataQueryЭта папка содержит другое приложение, которое можно использовать для анализа данных, захваченных каждым устройством.
Используйте редактор кода для проверки файла Program.cs :
code Program.csПриложение подключается к базе данных (с помощью метода ConnectToDatabase в нижней части файла) и запрашивает пользователю номер устройства. Приложение использует библиотеку MongoDB для .NET Framework для создания и запуска агрегатного конвейера, который вычисляет следующую статистику для указанного устройства:
- Число записанных операций чтения.
- Средняя температура, записанная.
- Минимальное значение.
- Максимальное значение.
- Последнее чтение.
Закройте редактор кода и откройте файл App.config :
code App.configЗадайте значение для ключа Address, указав IP-адрес сервера MongoDB, который вы записали ранее.
Измените порт, используемый приложением на 8080.
Сохраните файл и закройте редактор с помощью клавиш CTRL + s, а затем CTRL + q.
Выполните сборку и запуск приложения:
dotnet build dotnet runВ командной строке "Ввод номера устройства" введите значение от 0 до 99. Приложение запрашивает базу данных, вычисляет статистику и отображает результаты. Нажмите клавишу Q , чтобы выйти из приложения.
Перенос базы данных MongoDB в Cosmos DB
Следующий шаг — принять базу данных MongoDB и передать ее в Cosmos DB.
Создание учетной записи и базы данных Cosmos
Вернитесь на портал Azure.
В меню выберите +Создать ресурс.
На странице New в поле "Поиск на Marketplace" введите *Azure Cosmos DB, а затем нажмите Enter.
На странице Azure Cosmos DB выберите Создать.
На странице "Создание учетной записи Azure Cosmos DB " введите следующие параметры:
Недвижимость Ценность Группа ресурсов mongodbrg Имя учетной записи mongodb*nnn*, где nnn является случайным числом, выбранным вами API (Интерфейс программирования приложений) AZURE Cosmos DB для API MongoDB Ноутбуки Выкл. Местоположение Укажите то же расположение, которое использовалось для сервера MongoDB и виртуальной сети. Режим емкости Подготовленная пропускная способность Применить скидку бесплатного уровня Применить Тип учетной записи Не производственные Версия 3.6 Географическая избыточность Отключить Многорегиональные записи Отключить Зоны доступности Отключить Выберите Review + create.
На странице проверки нажмите кнопку "Создать" и дождитесь развертывания учетной записи Cosmos DB.
В меню портала Azure выберите все ресурсы и выберите новую учетную запись Cosmos DB (mongodbnnn).
На странице mongodbnnn выберите Обозреватель данных.
В области обозревателя данных выберите "Создать коллекцию".
В области добавления коллекции укажите следующие параметры:
Недвижимость Ценность Идентификатор базы данных Выберите "Создать" и введите DeviceData Обеспечение пропускной способности базы данных выбрано Пропускная способность 10000 Идентификатор коллекции Температуры Объём хранилища Неограниченный Ключ сегмента deviceID Мой ключ шардирования больше 100 байт оставьте не выбрано Создайте подстановочный индекс по всем полям оставьте не выбрано Хранилище аналитических данных Выкл. Нажмите ОК.
Создание Службы миграции базы данных
Вернитесь на портал Azure.
Щелкните Все службы, затем Подписки, после чего выберите свою подписку.
На странице подписки в разделе Параметры выберите Поставщики ресурсов.
В поле Фильтровать по имени введите DataMigration, а затем выберите Microsoft.DataMigration.
Если поставщик Microsoft.DataMigration не зарегистрирован, щелкните Зарегистрировать и подождите, пока значение в поле Состояние изменится на Зарегистрировано. Чтобы увидеть изменение состояния, может потребоваться нажать кнопку Обновить.
В меню портала Azure нажмите кнопку +Создать ресурс.
На странице New, в поле Поиск Рынка введите Azure Database Migration Service и нажмите клавишу ввод.
На странице Azure Database Migration Service щелкните Создать.
На странице Create Migration Service введите следующие параметры:
Недвижимость Ценность Группа ресурсов mongodbrg Имя службы MongoDBMigration Местоположение Выберите то же расположение, которое вы использовали ранее Режим службы Лазурный Ценовая категория Стандарт: 1 vCore Выберите Next: Networking.
На странице "Сеть" выберите databasevnet/default, а затем нажмите кнопку "Проверить и создать".
Выберите "Создать" и дождитесь развертывания службы перед продолжением. Эта операция может занять около 10 минут.
Создание и запуск нового проекта миграции
В меню портала Azure выберите группы ресурсов.
В окне групп ресурсов выберите mongodbrg.
В окне mongodbrg выберите MongoDBMigration.
На странице MongoDBMigration выберите +Создать проект миграции.
На странице нового проекта миграции введите следующие параметры:
Недвижимость Ценность Имя проекта MigrateTemperatureData Тип исходного сервера MongoDB Тип целевого сервера Cosmos DB (API MongoDB) Выберите тип действия Офлайн миграция данных Выберите "Создать" и выполнить действие.
При запуске мастера миграции на странице сведений об источнике введите следующие сведения:
Недвижимость Ценность Режим Стандартный режим Имя исходного сервера Укажите значение IP-адреса mongodbserver-ip , записанного ранее. Порт сервера 8080 Имя пользователя администратор Пароль Pa55w.rd Требовать SSL отмена выбора Нажмите кнопку "Далее". Выберите целевой объект.
На странице выбора целевого объекта введите следующие сведения:
Недвижимость Ценность Режим Выбор целевого объекта Cosmos DB Выбор имени базы данных Comos mongodb*nnn* строка подключения Примите строку подключения, созданную для учетной записи Cosmos DB Нажмите кнопку "Далее" — параметр базы данных.
На странице параметров базы данных введите следующие сведения:
Недвижимость Ценность База данных-источник DeviceData Целевая база данных DeviceData Пропускная способность (запросов в секунду, RU/s) 1000 Очистка коллекций Снимите это поле Выберите Далее: настройка коллекции.
На странице параметров коллекции выберите стрелку раскрывающегося списка рядом с базой данных DeviceData и введите следующие сведения:
Недвижимость Ценность Имя Температуры Целевая коллекция Температуры Пропускная способность (запросов в секунду, RU/s) 1000 Ключ шардирования deviceID Уникальный Не указывайте Нажмите кнопку "Далее" — сводка по миграции.
На странице сводка по миграции в поле "Имя активности" введите mongodb-migration, а затем нажмите "Начать миграцию".
На странице mongodb-миграции выберите Обновить каждые 30 секунд до завершения миграции. Обратите внимание на количество обработанных документов.
Убедитесь, что миграция выполнена успешно
В меню портала Azure выберите "Все ресурсы".
На странице "Все ресурсы" выберите mongodb nnn.
На странице mongodb*nnn выберите Обозреватель данных.
В области обозревателя данных разверните базу данных DeviceData , разверните коллекцию "Температуры " и выберите "Документы".
В области "Документы" прокрутите список документов. Вы увидите идентификатор документа (_id) и ключ сегмента (/deviceID) для каждого документа.
Выберите любой документ. Вы увидите сведения о документе. Типичный документ выглядит следующим образом:
{ "_id" : ObjectId("5ce8104bf56e8a04a2d0929a"), "deviceID" : "Device 83", "temperature" : 19.65268837271849, "time" : 636943091952553500 }На панели инструментов в области обозревателя документов выберите "Создать оболочку".
В панели оболочки 1 в командной строке > введите следующую команду и нажмите Enter:
db.Temperatures.count()Эта команда отображает количество документов в коллекции "Температура". Он должен соответствовать номеру, сообщаемому мастером миграции.
Введите следующую команду и нажмите клавишу Enter:
db.Temperatures.find({deviceID: "Device 99"})Эта команда извлекает и отображает документы для устройства 99.
Перенастройка и запуск существующих приложений для использования Cosmos DB
Последним шагом является перенастройка существующих приложений MongoDB для подключения к Cosmos DB и проверка их работы. Для этого необходимо изменить способ подключения приложений к базе данных, но логика приложений должна оставаться неизменной.
В области mongodbnnn в разделе Параметры выберите Строка подключения.
На странице строки подключения к базе данных MongoDB nnn запишите следующие параметры:
- Хозяин
- Имя пользователя
- Основной пароль
Вернитесь в окно Cloud Shell (повторно подключитесь, если сеанс истекло) и перейдите к папке migration-workshop-apps/MongoDeviceDataCapture/DeviceDataQuery :
cd ~/migration-workshop-apps/MongoDeviceDataCapture/DeviceDataQueryОткройте файл App.config в редакторе кода:
code App.configВ разделе "Параметры для MongoDB" файла закомментируйте существующие параметры.
Раскомментируйте параметры в разделе "Параметры для Mongo API для Cosmos DB" и задайте значения для этих параметров следующим образом:
Настройки Ценность Адрес Узел с страницы строки подключения mongodb nnn Порт ПОРТ со страницы строки подключенияmongodb nnn Имя пользователя ИМЯ ПОЛЬЗОВАТЕЛЯ со страницы mongodbnnn строки подключения Пароль ПЕРВИЧНЫЙ ПАРОЛЬ с страницы mongodbnnn строки подключения Завершенный файл должен выглядеть следующим образом:
<?xml version="1.0" encoding="utf-8"?> <configuration> <appSettings> <add key="Database" value="DeviceData" /> <add key="Collection" value="Temperatures" /> <!-- Settings for MongoDB <add key="Address" value="nn.nn.nn.nn" /> <add key="Port" value="27017" /> <add key="Username" value="deviceadmin" /> <add key="Password" value="Pa55w.rd" /> End of settings for MongoDB --> <!-- Settings for CosmosDB Mongo API --> <add key="Address" value="mongodbnnn.documents.azure.com"/> <add key="Port" value="10255"/> <add key="Username" value="mongodbnnn"/> <add key="Password" value="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=="/> <!-- End of settings for CosmosDB Mongo API --> </appSettings> </configuration>Сохраните файл и закройте редактор кода.
Откройте файл Program.cs с помощью редактора кода:
code Program.csПрокрутите вниз до метода ConnectToDatabase .
Закомментируйте строку, которая задает учетные данные для подключения к MongoDB, и раскомментируйте строки, которые указывают учетные данные для подключения к Cosmos DB. Код должен выглядеть следующим образом:
// Connect to the MongoDB database MongoClient client = new MongoClient(new MongoClientSettings { Server = new MongoServerAddress(address, port), ServerSelectionTimeout = TimeSpan.FromSeconds(10), // // Credential settings for MongoDB // // Credential = MongoCredential.CreateCredential(database, azureLogin.UserName, azureLogin.SecurePassword), // // Credential settings for CosmosDB Mongo API // UseTls = true, Credential = new MongoCredential("SCRAM-SHA-1", new MongoInternalIdentity(database, azureLogin.UserName), new PasswordEvidence(azureLogin.SecurePassword)) // End of Mongo API settings });Эти изменения необходимы, так как исходная база данных MongoDB не использовала SSL-подключение. Cosmos DB всегда использует SSL.
Сохраните файл и закройте редактор кода.
Перестройте и запустите приложение:
dotnet build dotnet runВ командной строке "Ввод номера устройства " введите номер устройства от 0 до 99. Приложение должно выполняться точно так же, как и раньше, за исключением того, что оно использует данные, содержащиеся в базе данных Cosmos DB.
Повышение производительности запросов в Cosmos DB
Cosmos DB позволяет добавлять дополнительные индексы для повышения производительности запросов. Добавление этого поля в качестве индекса при агрегировании по deviceID ускорит ваши запросы.
Вернитесь на портал Azure.
Слева выберите Обозреватель данных.
В области обозревателя данных разверните базу данных DeviceData , разверните коллекцию "Температуры " и выберите "Параметры".
Выберите политику индексирования.
В разделе _id добавить новый индекс, введите идентификатор устройства для определения и выберите одно поле для типа.
Нажмите кнопку "Сохранить", чтобы добавить новый индекс.
Вернитесь в Cloud Shell, чтобы повторить запрос, и обратите внимание на улучшенный ответ в приложении.
Протестируйте приложение с другими номерами устройств. Введите Q , чтобы завершить работу.
База данных MongoDB успешно перенесена в Cosmos DB и перенастроила существующее приложение MongoDB для подключения к новой базе данных Cosmos DB.
Очистка созданных ресурсов
Это важно
Если вы выполняли описанные выше действия в своей личной подписке, можно удалять ресурсы по отдельности или группой для удаления сразу всего набора ресурсов. Оставленные без присмотра ресурсы могут стоить вам денег.
В Cloud Shell выполните указанную ниже команду, чтобы удалить группу ресурсов.
az group delete --name mongodbrg