Еуропадағы MySQL үшін бұлт сервері: InnoDB баптау нұсқаулығы
MySQL дүние жүзіндегі веб қосымшалардың орасан үлесін өзінде ұстайды - WordPress блогтарынан бастап трафигі жоғары электрондық сауда платформаларына дейін. Еуропалық пайдаланушыларға қызмет көрсететін компаниялар үшін MySQL базасының орналасқан жері GDPR-ға сәйкестікке де, пайдаланушылар сезінетін сұраныс жауап беру уақытына да тікелей әсер етеді.
Бұл нұсқаулық MySQL-ге жақсы жұмыс істеу үшін қандай жабдық қажет, оны ЕО бұлт серверінде қалай баптау керек және іс жүзінде қандай өткізу қабілетін күту керегін баяндайды.
ЕО хостингі MySQL жүктемелері үшін неге маңызды
GDPR деректер базасының серверлерін деректерді өңдеуші деп қарайды. Егер сіздің MySQL данасы дербес деректерді - есімдерді, пошта адрестерін, сатып алу тарихын - сақтайтын болса, ол ЕО құқығына тең дәрежедегі деректер қорғауын беретін юрисдикцияда орналасуы керек. ЕО провайдерінде ЕО ішінде хостинг - бұл талапты қосымша заңдық жүктемесіз орындаудың ең қарапайым жолы.
Желі кешігуі де практикалық сұрақ. Орталық Еуропадағы MySQL сервері сол өңірдегі қосымша серверлеріне 5-15 мс айналым уақытын қосады. АҚШ дата-орталығындағы сол база 80-120 мс қосады. Бір бет жүктелгенде ондаған сұраныс жасайтын қосымшалар үшін бұл айырма соңғы пайдаланушыға өте байқалады.
MySQL үшін серверге қойылатын ең аз талаптар
MySQL өнімділігі бірінші кезекте RAM көлемімен (InnoDB буфер пулына) және енгізу-шығару жылдамдығымен (қайта орындау журналына және деректер файлдарына жазуға) шектеледі:
- Шағын (әзірлеу мен стейджинг, секундына 500 сұраныстан аз) - 2 vCPU, 4 ГБ RAM, 50 ГБ NVMe SSD
- Орташа (продакшен қосымша, секундына 500-5000 сұраныс) - 8 vCPU, 32 ГБ RAM, 500 ГБ NVMe SSD
- Ірі (трафигі жоғары OLTP немесе аналитика) - 16 және одан көп vCPU, 64-128 ГБ RAM, 1 ТБ және одан көп NVMe SSD
InnoDB буфер пулын қолжетімді RAM-ның 70-80% етіп қою керек. 32 ГБ серверде бұл пулға 22-25 ГБ. Деректердің жұмыс жиыны буфер пулына сыйғанда MySQL оқуларды толығымен жадтан береді.
Ұсынылатын DCXV конфигурациясы
DCXV бұлт серверлері MySQL-дің жазу журналдауы үшін аса маңызды тұрақты IOPS-ы жоғары NVMe қорына негізделген сақтауды береді. Ұсынылатын конфигурациялар:
- 8 vCPU, 32 ГБ RAM, 500 ГБ NVMe - продакшен қосымшалардың көпшілігіне келеді
- 16 vCPU, 64 ГБ RAM, 1 ТБ NVMe - трафигі жоғары платформалар немесе оқу репликалары бар қосымшалар
DCXV-нің барлық сервері Tier III бойынша сертификатталған ЕО дата-орталықтарында жұмыс істейді. Жеке желі қосымша серверлері мен базаның трафик дата-орталық желісінен шықпай деректер алмасуына мүмкіндік береді, бұл кешігуді төмендетеді және ашық бетті кішірейтеді.
Жүктемеңіздегі оқу мен жазудың қатынасын талқылап, конфигурация бойынша ұсыныс алу үшін sales@dcxv.com адресіне жазыңыз.
Жылдам орнатуға арналған командалар
# Ubuntu 22.04-ке MySQL 8.0 орнату
sudo apt update && sudo apt install -y mysql-server
# Қауіпсіздік баптау шеберін жіберу
sudo mysql_secure_installation
# Қызметті іске қосу және қосулы қалдыру
sudo systemctl start mysql
sudo systemctl enable mysql
# База мен пайдаланушы жасау
sudo mysql -e "CREATE DATABASE myapp CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
sudo mysql -e "CREATE USER 'myapp_user'@'10.0.0.%' IDENTIFIED BY 'strongpassword';"
sudo mysql -e "GRANT ALL PRIVILEGES ON myapp.* TO 'myapp_user'@'10.0.0.%';"
sudo mysql -e "FLUSH PRIVILEGES;"
# 32 ГБ RAM серверіне my.cnf-тың негізгі параметрлері
# /etc/mysql/mysql.conf.d/mysqld.cnf файлын түзетіңіз
[mysqld]
# InnoDB буфер пулы - RAM-ның 70-80% етіп қойыңыз
innodb_buffer_pool_size = 24G
innodb_buffer_pool_instances = 8 # пулдың 1-2 ГБ-ына біреу
# Жазу өнімділігі
innodb_redo_log_capacity = 1G
innodb_flush_log_at_trx_commit = 1 # 1 = толық ACID, 2 = жылдамырақ, бірақ қауіптірек
innodb_flush_method = O_DIRECT # ОЖ кешімен қос буферлеусіз
# Қосылымдар және уақытша кестелер
max_connections = 300
tmp_table_size = 256M
max_heap_table_size = 256M
# Сұраныс кеші (MySQL 8.0-де әдепкіде өшірулі - ProxySQL немесе қосымша деңгейіндегі кешті қолданыңыз)
# Өзгерістен кейін қайта жіберіңіз
# Конфигурацияны түзеткеннен кейін MySQL-ді қайта жіберу
sudo systemctl restart mysql
# Буфер пулының өлшемі қолданылғанын тексеру
sudo mysql -e "SHOW VARIABLES LIKE 'innodb_buffer_pool_size';"
# Тию үлесі үшін InnoDB күйін тексеру (мақсат 99%-тен жоғары)
sudo mysql -e "SHOW STATUS LIKE 'Innodb_buffer_pool_reads';"
sudo mysql -e "SHOW STATUS LIKE 'Innodb_buffer_pool_read_requests';"
# Екінші DCXV серверінде оқу репликасын баптау
# Негізгіде - екілік журналды қосыңыз
# mysqld.cnf-ке қосыңыз:
# server-id = 1
# log_bin = /var/log/mysql/mysql-bin.log
# binlog_do_db = myapp
# Негізгіде репликация пайдаланушысын жасау
sudo mysql -e "CREATE USER 'replica'@'10.0.0.%' IDENTIFIED WITH mysql_native_password BY 'replicapass';"
sudo mysql -e "GRANT REPLICATION SLAVE ON *.* TO 'replica'@'10.0.0.%';"
# Реплика серверінде репликацияны баптап іске қосыңыз
sudo mysql -e "CHANGE REPLICATION SOURCE TO SOURCE_HOST='10.0.0.5', SOURCE_USER='replica', SOURCE_PASSWORD='replicapass', SOURCE_AUTO_POSITION=1;"
sudo mysql -e "START REPLICA;"
sudo mysql -e "SHOW REPLICA STATUS\G"
Бірінші не сынады және онымен не істеу керек
MySQL баяулауының көпшілігі - сервердің тым кіші болуы емес. Төмендегі бес жолдың төртеуі баптаумен немесе сұраныспен шешіледі, тек біреуі жабдық қосу арқылы жауап табады:
| Белгі | Әдеттегі себеп | Неге қарау керек | Шешім |
|---|---|---|---|
| Оқулар баяу, диск бос емес | Буфер пулы жұмыс жиынынан кіші | InnoDB буфер пулына тию үлесі | RAM көбірек, оның шамамен 70% пулға |
| Жазулар шапшаңдап тоқтап қалады | Қайта орындау журналы оларды қабылдауға кіші | Бақылау нүктесінің жасы, innodb_redo_log_capacity | Ірірек журнал |
| Бір есеп жіберілгенше бәрі жақсы | Бір сұраныс кестені сканерлейді | Баяу сұраныстар журналы, содан кейін EXPLAIN | Индекс немесе есептерге оқу репликасы |
| CPU толы, диск бос тұр | Деректер сыйып жатыр, шығын сұраныстардың өзінде | Threads_running | Ірірек сервер емес, жақсырақ сұраныстар |
| Қосылымдар қабылданбайды | Пулдың орнына max_connections көтерілген | Threads_connected шектеуге қарсы | Үлкенірек сан емес, қосылым пулы |
Тәртіп маңызды: кез келген сатып алудан бұрын буфер пулына тию үлесін өлшеңіз. Жұмыс жиынын әлдеқашан сыйдырып отырған пул ірірек данада жылдамырақ болмайды, ал ақшаны сканерлейтін сұранысқа жұмсаған дұрыс.
Күтілетін өнімділік көрсеткіштері
MySQL 8.0 және InnoDB дұрыс бапталған 8 vCPU / 32 ГБ RAM / NVMe данасында:
- sysbench OLTP тек оқу (8 ағын) - секундына 25 000-40 000 сұраныс
- sysbench OLTP оқу мен жазу (8 ағын) - секундына 8 000-14 000 транзакция
- Бір жолды таңдау кешігуі (индекс бойынша) - 1 мс-тен аз
- Пакеттік INSERT (1 млн жол, 1000-дық партиялар) - 90 секундтан аз
Жұмыс жиыны RAM-ға сыйғанда буфер пулына тию үлесінің 99%-тен жоғары болуы қолжетімді. Осы нүктеде оқулардың көпшілігі дискіге тимейді, ал өнімділік CPU-мен шектеледі.
Бұл осы кластағы жабдыққа күтілетін шамалар, өз зертханамыздағы өлшемдер емес. Оларды есептеудің бастау нүктесі деп санап, өз жүктемеңізді өлшеңіз: нақты цифрлар провайдерден гөрі сіздің деректеріңізге, сұраныстарыңызға және баптауыңызға әлдеқайда күштірек байланысты.
Түйін
ЕО бұлт серверіндегі MySQL деректердің сақталу орны бойынша GDPR талаптарын орындайды және сонымен бірге продакшен қосымшаларға керек төмен кешігу мен жоғары өткізу қабілетін береді. InnoDB-ні дұрыс баптау - өнімділіктің ең күшті тұтқасы: буфер пулын RAM-ның 70-80% етіп қойып, O_DIRECT арқылы төгуді қосыңыз. DCXV бұлт серверлері жүктемеңізге керек NVMe енгізу-шығаруын және деректерді ЕО ішінде сақтауды береді.
