Про те, як використовувати memcached і його функцію в якості автономного сервера разом з MySQL, вже написано в безлічі прекрасних статей - наприклад, Установка і використання Memcache на Ubuntu 14.04. Але як автономного сервера memcached виконує проміжну функцію, передуючи рівнем доступу MySQL-клієнта, і працює тільки з тією інформацією, яка знаходиться в пам'яті, без можливості її постійного зберігання. Це дозволяє виконувати такі завдання, як кешування результатів повторних MySQL-запитів, що економить ресурси і оптимізує роботу навантажених сайтів.
Але в цій статті ми поговоримо про інше. Memcached буде встановлений як MySQL-плагін і тісно інтегрований в MySQL. Це створить рівень доступу в стилі NoSQL для управління інформацією прямо в стандартних MySQL-таблицях InnoDB. Як стане ясно зі статті, це дає ряд переваг.
Базова інформація
Щоб розуміти, про що йде мова в цій статті, вам потрібно мати хоча б загальне уявлення про те, що таке NoSQL і memcached. NoSQL працює з інформацією у формі елементів «ключ-значення (значення)». Це більш простий підхід в порівнянні зі стандартним SQL. Більш того, він забезпечує більшу ефективність і краще масштабування, що особливо важливо для роботи з великими обсягами інформації (Big Data).
Але для того, щоб замінити стандартний SQL, однією тільки хорошої роботи NoSQL недостатньо. Через свою простоту NoSQL не підходить для роботи зі структурованими даними, які містять складні взаємозв'язки. Тому NoSQL швидше можна назвати важливим доповненням до SQL, ніж його заміною.
Що стосується, memcached, то його можна назвати популярною реалізацією NoSQL. Це дуже швидке програмне забезпечення і, як вже зрозуміло з його назви, має відмінні механізми кешування. Ось чому memcached це відмінний вибір для приведення стилю NoSQL до традиційного стилю MySQL.
Також вам знадобляться базові знання про протокол memcached. Memcached працює з елементами, що складаються з наступних частин:
- Key (Ключ) - буквено-цифрове значення, яке є ключем доступу до значення елемента.
- Value (Значення) - довільні дані, в яких зберігається найбільш важлива частина переданих даних.
- Flag (Прапор) - зазвичай це значення, яке використовується для завдання додаткових параметрів, що відносяться до основного значенням. Наприклад, прапор використовувати або не використовувати стиснення.
- Expiration time (Термін закінчення) - час закінчення в секундах. Не забувайте про те, що memcached спочатку призначався для кешування.
- CAS value (Значення CAS) - унікальний ідентифікатор для кожного елемента.
вимоги
Тестування, описане в даній статті, проводилося на Ubuntu 14.04. Описаний тут процес установки і конфігурації буде схожий на процес установки і конфігурації на інших операційних системах або їх версіях, але команди і розташування файлів конфігурації можуть відрізнятися.
Вам знадобиться наступне:
- Нещодавно встановлена Ubuntu 14.04
- Користувач non-root з привілеями sudo
Всі команди, описані в цій статті, повинні виконуватися користувачем non-root. Якщо для команди потрібен доступ root, перед нею стоятиме sudo. Якщо у вас це ще не налаштоване, вам сюди: Початкове налаштування сервера з Ubuntu 14.04.
Крок 1 - Установка MySQL 5.6
Плагін memcached в MySQL доступний у версіях MySQL вище 5.6.6. Це означає, що використовувати пакет MySQL (версія 5.5) зі стандартного сховища Ubuntu 14.04 не вийде. Замість цього зробіть наступне:
- Додайте офіційне сховище MySQL
- Встановіть з нього MySQL-сервер, клієнта і бібліотеки
Спочатку перейдіть на сторінку сховища MySQL і завантажте пакет, який додасть MySQL-сховище на вашу Ubuntu 14.04. Ви також можете завантажити пакет безпосередньо на своєму сервері:
Потім встановіть його за допомогою dpkg:
При виконанні цієї команди з'являється діалогове вікно з двома питаннями:
- Який продукт MySQL ви бажаєте конфігурувати? Відповідайте Server.
- Яку версію сервера ви бажаєте отримати? Відповідайте mysql-5.6.
Після відповіді на ці два питання ви будете перенаправлені до першого питання про продукт, який ви хочете встановити. Натисніть на «Apply» (Застосувати) внизу, щоб підтвердити свій вибір, і вийдіть з діалогового вікна.
Тепер, коли у вас є нове сховище MySQL, ви повинні оновити apt cache. тобто інформацію про пакети, доступних для установки на Ubuntu. Таким чином, коли ви будете встановлювати MySQL, він буде вилучений з нового сховища. Для поновлення apt cache виконайте наступну команду:
Тепер ви можете встановити MySQL 5.6 на Ubuntu 14.04 з допомогою такої команди:
При виконанні цієї команди вас попросять поставити root-пароль (пароль адміністратора) для MySQL. Для зручності ви можете не ставити пароль на цьому етапі, а при запиті пароля просто натискати ENTER. Але коли ви вирішите використовувати цей сервер, то для безпечної установки MySQL рекомендується виконати команду sudo mysql_secure_installation і задати root-пароль.
Після завершення процесу установки у вас буде встановлено MySQL-сервер версії 5.6, клієнт командного рядка і необхідні бібліотеки. Ви можете перевірити роботу системи, запустивши клієнта за допомогою команди:
Для завдання пароля ви повинні будете виконати наступну команду і при запиті пароля ввести свій root-пароль для MySQL:
Ви побачите наступне:
Залишаючись у вікні MySQL (клієнтському терміналі), створіть нову базу даних під назвою test:
Ця база буде потрібно нам для подальшого тестування. Щоб вийти з MySQL-клієнта, введіть:
Нарешті, вам також потрібно встановити пакет для асинхронних повідомлень - libevent-dev. Для цього виконайте команду:
Крок 2 - Установка плагіна memcached на MySQL
Перед установкою плагіна memcached необхідно виконати запити, що знаходяться в файлі /usr/share/mysql/innodb_memcached_config.sql. Запустіть MySQL-клієнт:
або, якщо ви задали пароль:
За допомогою цієї команди ви створите всі необхідні настройки для плагіна в базі даних innodb_memcache. а також вставите деякі тестові дані в тільки що створену базу даних test.
Потім виконайте установку плагіна memcached з терміналу MySQL за допомогою наступної команди:
Вийдіть з сеансу MySQL:
Отже, ви встановили плагін memcached, що знаходиться в папці / usr / lib / mysql / plugin / в Ubuntu 14.04. Цей файл доступний тільки в MySQL 5.6 і вище.
Після рядка [mysqld] додайте новий рядок:
Ця команда cконфігурірует слухача плагіна memcached на порте 11222. який активний тільки для IP 127.0.0.1. Це означає, що підключитися зможуть тільки клієнти з вашого сервера. Якщо ви не вкажіть IP (-l 127.0.0.1), то безперешкодно підключитися зможе абсолютно будь-який клієнт, а це становить серйозну загрозу безпеці. Щоб дізнатися більше про безпеку плагіна memcached, ви можете ознайомитися з його документацією з питань безпеки.
Для запуску нового процесу прослуховування для плагіна memcached, перезапустіть MySQL-сервер за допомогою команди:
Крок 3 - Тестування плагіна memcached
Щоб перевірити, що установка пройшла успішно, виконайте наступну команду в MySQL-клієнті (запустіть клієнта за допомогою mysql -u root або mysql -u root -p):
Якщо все працює належним чином, ви побачите наступне (скоріше за все в кінці списку плагінів):
В іншому випадку, переконайтеся, що ви використовуєте MySQL 5.6 (вище ніж 5.6.19 так як на цій версії не працювало) або вище і що ви в точності слідували описаного вище процесу установки. Ви також можете спробувати підключитися до інтерфейсу нового плагіна memcached через telnet з вашого сервера:
При успішному підключенні в вихідному рядку ви побачите:
Щоб перевірити, як працює з'єднання, ви можете виконати команду, наприклад stats. щоб подивитися статистику. Щоб закрити вікно, натисніть одночасно на CTRL і] на клавіатурі. Потім введіть quit, щоб вийти з клієнта Telnet.
Telnet являє собою найпростіший спосіб підключитися до плагіну memcached і до самих даних MySQL. Цей спосіб відмінно підходить для тестування, але якщо ви вирішите використовувати його на професійному рівні, вам слід почитати доступні бібліотеки для популярних мов програмування (наприклад, PHP і Python).
Крок 4 - Виконання NoSQL-запитів в MySQL через плагін memcached
Якщо ви повернетеся до тієї частини цієї статті, де описувалася установка плагіна memcached, ви побачите, що ми виконували оператори з файлу /usr/share/mysql/innodb_memcached_config.sql. Ці оператори створили в базі даних test нову таблицю demo_test. Таблиця demo_test має такі стовпці, відповідні протоколу memcached:
- c1 відповідає полю key (ключ).
- c2 відповідає полю value (значення).
- c3 відповідає полю flag (прапор).
- c4 відповідає полю CAS.
- c5 відповідає полю expiration (витікання).
За допомогою цієї таблиці demo_test ми і будемо проводити тестування. Для початку відкриємо базу даних / таблицю через MySQL-клієнт за допомогою наступної команди:
Або, якщо ви задали пароль для MySQL:
У таблиці demo_tes t вже повинен бути один запис:
Результати повинні виглядати наступним чином:
Вийдіть з сеансу MySQL:
Тепер створимо другий запис за допомогою NoSQL-інтерфейсу memcached і telnet. Знову встановіть з'єднання з робочої станції через TCP-порт 11222:
Потім використовуйте наступні синтаксичні конструкції:
Зверніть увагу на те, що компонент value (значення) повинен розташовуватися на наступному рядку. Більш того, при роботі описаним вище способом для кожного запису необхідно в якості значення вказувати довжину в бітах.
Як приклад створимо новий елемент (запис в таблиці) з ключем newkey. значенням 0 для прапора і значенням 0 для закінчення (термін закінчення відсутня). Значення - 12 біт в довжину.
set newkey 0 0 12 NewTestValue
Звичайно, ви також можете отримати значення через цей NoSQL-інтерфейс. Це можна зробити за допомогою команди get. після якої необхідно вказати назву ключа, які ви хочете отримати. Не виходячи з сеансу Telnet, введіть:
Результат повинен виглядати наступним чином:
Згадані вище команди set і get працюють для будь-якого сервера memcached. Тут ми привели лише кілька простих прикладів того, як вставити і витягти записи в стилі NoSQL.
У таблиці повинна з'явитися новий запис:
На цьому етапі ви можете задатися питанням, звідки плагін memcached знає, до якої базі даних і таблиці підключатися і як відображати інформацію в шпальтах таблиці. Відповідь криється в базі даних innodb_memcache і в контейнерах таблиці.
Виконайте наступний оператор select:
Ви побачите наступне:
Якщо ви хочете дізнатися більше про те, як створювати різні відображення, і вивчити розширені можливості плагіна memcached, ознайомтеся зі сторінкою про внутрішній устрій плагіна memcached.
Переваги інтеграції MySQL з плагіном memcached
Наведена вище інформація та приклади виділяють кілька важливих переваг інтеграції MySQL з NoSQL через плагін memcached:
Всі ваші дані (MySQL і NoSQL) зберігаються в одному місці. Вам не потрібно встановлювати і підтримувати додатково програмне забезпечення для NoSQL-даних. Збереженість, відновлення і реплікація NoSQL-даних можливі за рахунок потужного движка lnnoDB.
Неймовірний швидкий рівень доступу до даних memcached можна як і раніше використовувати для роботи з великими обсягами інформації (порівняйте з роботою з більш повільним MySQL-клієнтом).
Управління NoSQL-даними можна здійснювати через інтерфейс і синтаксис MySQL. Так ви зможете включати NoSQL-дані в більш складні SQL-запити (наприклад, оператори left join).