Moodle е най-популярната система за управление на обучението (LMS), която позволява на преподавателите да създават свой собствен уебсайт с курсове или съдържание, което разширява обучението. Тези видове платформи стават все по-важни, за да ви позволят да продължите да учите дистанционно, когато традиционната образователна система не е налична или просто като допълнение към нея, така че увеличаването на трафика или потребителите изискват мащабиране на вашата среда, за да се осигури ниска реакция време.
Мащабируемостта е свойството на система/база данни да се справя с нарастващо количество изисквания чрез добавяне на ресурси. Съществуват различни подходи за мащабиране на вашата база данни в зависимост от начина, по който трябва да я мащабирате, а в производствена среда най-вероятно не е желателно дълго време на престой, така че също трябва да вземете това предвид.
В този блог ще разгледаме какви опции за мащабиране са налични и как да мащабирате вашата база данни Moodle PostgreSQL по лесен начин, без да засягате работещата ви система.
Хоризонтално и вертикално мащабиране
Има два основни начина за мащабиране на вашата база данни:
- Хоризонтално мащабиране (намаляване):Извършва се чрез добавяне на още възли на база данни, създаващи или увеличаващи клъстер от база данни.
- Вертикално мащабиране (увеличаване):Извършва се чрез добавяне на повече хардуерни ресурси (CPU, памет, диск) към съществуващ възел на базата данни.
За хоризонтално мащабиране , можете да добавите още възли на базата данни като възли в режим на готовност. Може да ви помогне да подобрите производителността на четене, като балансирате трафика между възлите. В този случай ще трябва да добавите балансьор на натоварване, за да разпределите трафика към правилния възел в зависимост от политиката и състоянието на възела. Трябва също да помислите за добавяне на два или повече възли за балансиране на натоварването, за да избегнете една точка на повреда, и да използвате инструмент като „Keepalived“, за да гарантирате наличността. Keepalived е услуга, която ви позволява да конфигурирате виртуален IP адрес в активна/пасивна група сървъри. Този виртуален IP адрес се присвоява на активен сървър (активен Load Balancer). Ако този сървър не успее, IP адресът автоматично се мигрира към „Вторичния“ пасивен сървър, което му позволява да продължи да работи със същия IP адрес по прозрачен за системите начин.
За вертикално мащабиране , може да е необходимо да промените някои конфигурационни параметри, за да позволите на PostgreSQL да използва нов или по-добър хардуерен ресурс. Нека видим някои от тези параметри от документацията на PostgreSQL.
- work_mem:Определя количеството памет, което да се използва от вътрешни операции за сортиране и хеш таблици, преди да се записва във временни дискови файлове. Няколко работещи сесии биха могли да извършват подобни операции едновременно, така че общата използвана памет може да бъде многократно по-голяма от стойността на work_mem.
- maintenance_work_mem:Посочва максималното количество памет, което да се използва от операции по поддръжка, като ВАКУУМ, СЪЗДАВАНЕ НА ИНДЕКС и ПРОМЕНИ ТАБЛИЦАТА, ДОБАВЯНЕ НА ВЪНШЕН КЛЮЧ. По-големите настройки може да подобрят производителността при почистване с прахосмукачка и за възстановяване на дъмпове на база данни.
- autovacuum_work_mem:Посочва максималното количество памет, което да се използва от всеки работен процес за автоматично вакуумиране.
- autovacuum_max_workers:Посочва максималния брой процеси за автоматично вакуумиране, които могат да се изпълняват по всяко време.
- max_worker_processes:Задава максималния брой фонови процеси, които системата може да поддържа. Посочете границите на процеса, като вакуумиране, контролни точки и други задачи за поддръжка.
- max_parallel_workers:Задава максималния брой работници, които системата може да поддържа за паралелни операции. Паралелните работници се вземат от групата работни процеси, установени от предишния параметър.
- max_parallel_maintenance_workers:Задава максималния брой паралелни работници, които могат да бъдат стартирани от една команда на помощната програма. Понастоящем единствената команда за паралелна помощна програма, която поддържа използването на паралелни работници, е CREATE INDEX и то само при изграждане на индекс на B-дърво.
- effective_cache_size:Задава предположението на планиращия за ефективния размер на дисковия кеш, който е достъпен за една заявка. Това се взема предвид в оценките на разходите за използване на индекс; по-висока стойност прави по-вероятно да се използват индексни сканирания, по-ниска стойност прави по-вероятно да се използват последователни сканирания.
- споделени_буфери:Задава количеството памет, която сървърът на базата данни използва за споделени буфери на паметта. За добра производителност обикновено са необходими настройки, значително по-високи от минималните.
- temp_buffers:Задава максималния брой временни буфери, използвани от всяка сесия на база данни. Това са локални буфери за сесия, използвани само за достъп до временни таблици.
- effective_io_concurrency:Задава броя на едновременните дискови I/O операции, които PostgreSQL очаква да могат да бъдат изпълнени едновременно. Повишаването на тази стойност ще увеличи броя на I/O операциите, които всяка отделна сесия на PostgreSQL се опитва да инициира паралелно. Понастоящем тази настройка засяга само сканирането на растерни карти.
- max_connections:Определя максималния брой едновременни връзки към сървъра на базата данни. Увеличаването на този параметър позволява на PostgreSQL да изпълнява едновременно повече процеси в бекенда.
Предизвикателството тук може да бъде как да разберете дали трябва да мащабирате своята база данни Moodle и по какъв начин, а отговорът е наблюдение.
Мониторинг на PostgreSQL за Moodle
Мащабирането на база данни е сложен процес, така че трябва да проверите някои показатели, за да можете да определите най-добрата стратегия за нейното мащабиране.
Можете да наблюдавате използването на процесора, паметта и диска, за да определите дали има някакъв проблем с конфигурацията или всъщност трябва да мащабирате вашата база данни. Например, ако виждате голямо натоварване на сървъра, но активността на базата данни е ниска, вероятно няма нужда да я мащабирате, трябва само да проверите параметрите на конфигурацията, за да ги съпоставите с вашите хардуерни ресурси.
Проверката на дисковото пространство, използвано от възела PostgreSQL на база данни, може да ви помогне да потвърдите дали имате нужда от повече диск или дори дял на таблица. За да проверите дисковото пространство, използвано от база данни/таблица, можете да използвате някаква функция на PostgreSQL като pg_database_size или pg_table_size.
От страната на базата данни трябва да проверите:
- Обем на връзката
- Изпълнение на заявки
- Използване на индекс
- Надуване
- Закъснение при репликация
Това може да са ясни показатели за потвърждение дали е необходимо мащабирането на вашата база данни.
ClusterControl като система за мащабиране и наблюдение
ClusterControl може да ви помогне да се справите и с двата начина на мащабиране, които споменахме по-рано, и да наблюдавате всички необходими показатели, за да потвърдите изискването за мащабиране.
Ако все още не използвате ClusterControl, можете да го инсталирате и да разположите или импортирате текущата си PostgreSQL база данни, като изберете опцията „Импортиране“ и следвайте стъпките, за да се възползвате от всички функции на ClusterControl като архивиране, автоматично преминаване при отказ, сигнали, наблюдение и др.
Хоризонтално мащабиране
За хоризонтално мащабиране, ако отидете на действия към клъстер и изберете „Добавяне на подчинен репликация“, можете или да създадете нова реплика от нулата, или да добавите съществуваща PostgreSQL база данни като реплика.
Нека видим как добавянето на ново подчинено устройство за репликация може да бъде наистина лесна задача.
Както можете да видите на изображението, трябва само да изберете своя Master сървър, въведете IP адреса за вашия нов подчинен сървър и порта на базата данни. След това можете да изберете дали искате ClusterControl да инсталира софтуера вместо вас и дали подчинението за репликация трябва да бъде синхронно или асинхронно.
По този начин можете да добавяте колкото искате копия и да разпределяте трафика за четене между тях с помощта на балансьор на натоварване, който можете също да внедрите с ClusterControl.
Сега, ако отидете на действия в клъстера и изберете „Добавяне на Load Balancer“, можете да разгърнете нов HAProxy Load Balancer или да добавите съществуващ.
И след това, в същата секция за балансиране на натоварването, можете да добавите Keepalived услуга, която ще се изпълнява на възлите за балансиране на натоварването за подобряване на вашата среда с висока наличност.
След добавяне на Load Balancer или използване на виртуален IP с услугата Keepalived в място, трябва да актуализирате конфигурацията на Moodle, за да използвате новата крайна точка на базата данни. За това отидете в основната директория на Moodle и променете файла config.php с новия IP адрес:
$CFG->dbhost = 'IP_ADDRESS';
$CFG->dbname = 'moodle';
$CFG->dbuser = 'mdluser';
$CFG->dbpass = '********';
$CFG->prefix = 'mdl_';
$CFG->dboptions = array (
'dbpersist' => 0,
'dbport' => PORT,
'dbsocket' => '',
);
Уверете се, че имате достъп до вашата база данни чрез Load Balancer или виртуалния IP адрес или ако трябва да актуализирате своя pg_hba.conf PostgreSQL файл, за да го разрешите.
Вертикално мащабиране
За вертикално мащабиране с ClusterControl можете да наблюдавате възлите на базата данни както от операционната система, така и от страната на базата данни. Можете да проверите някои показатели като използване на процесора, памет, връзки, водещи заявки, изпълнявани заявки и дори повече. Можете също да активирате секцията Табло за управление, която ви позволява да виждате показателите по по-подробен и по-приятелски начин.
От ClusterControl можете също да изпълнявате различни задачи за управление като рестартиране на хост, повторно изграждане Подчинено устройство за репликация или повишаване на подчинено с едно щракване.
Заключение
Мащабирането на вашата Moodle PostgreSQL база данни може да бъде трудна задача, тъй като ще трябва да знаете как трябва да мащабирате и как да го направите, без да засягате системите. Наличието на добра система за наблюдение е първата стъпка, за да разберете кога и как трябва да мащабирате своята база данни Moodle. Добавянето на Load Balancer ще ви помогне да избегнете ненужни престои и също така ще подобри високата наличност във вашата LMS среда.
Всички тези неща, които споменахме, могат да бъдат направени с помощта на ClusterControl, което ще улесни работата. ClusterControl предоставя цял набор от функции, като наблюдение, предупреждение, автоматично преминаване при отказ, архивиране, възстановяване в момент, проверка на архивиране, мащабиране и други.