Сравнение работы RTFM при использовании базы на AWS RDS Aurora db.t2.medium
– и t2.nano
с MariaDB 10.0.
Причина поиска альтернативы AWS Aurora – простая:
За 12 дней.
Вынес базу временно, так как во время использования MariaDB на одном с web-сервером инстансе – Load Average у него временами поднималась до 5.0-6.0, причём большая часть времени уходила на Steal time (хороший обзор на эту тему и AWS есть тут>>>). Перезд на другой инстанс не помог, а вот смена хоста для баз данных – помогла.
Собственно, ниже – просто сравнение работы блога по результатам Apache Bench при использовании разных серверов баз данных, плюс описание процесса создания нового EC2 инстанса в приватной сети и установки MariaDB на него.
Содержание
RDS Aurora db.t2.medium
Текущие результаты (AWS RDS Aurora):
$ ab -n 100 -c 10 https://rtfm.co.ua/ ... Concurrency Level: 10 Time taken for tests: 33.438 seconds Complete requests: 100 Failed requests: 7 (Connect: 0, Receive: 0, Length: 7, Exceptions: 0) Total transferred: 10662686 bytes HTML transferred: 10621186 bytes Requests per second: 2.99 [#/sec] (mean) Time per request: 3343.758 [ms] (mean) Time per request: 334.376 [ms] (mean, across all concurrent requests) Transfer rate: 311.41 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 170 177 9.1 173 208 Processing: 1108 3072 463.4 3081 4197 Waiting: 485 2168 425.8 2173 3213 Total: 1304 3249 460.7 3254 4401 ...
MariaDB на t2.nano
Подготовка сети
Подробнее про работу с VPC и подсетями – см. в посте AWS: VPC – EC2 в public и private подсетях, NAT и Internet Gateway.
Создаём приватную посеть в default VPC:
$ aws ec2 create-subnet --vpc-id vpc-3941cb5c --cidr-block 172.31.64.0/24 { "Subnet": { "VpcId": "vpc-3941cb5c", "CidrBlock": "172.31.64.0/24", "State": "pending", "AvailabilityZone": "eu-west-1a", "SubnetId": "subnet-4490cc32", "AvailableIpAddressCount": 251 } }
Добавляем теги:
$ aws ec2 create-tags --resources subnet-4490cc32 --tags Key=Name,Value=rtfm_db_private
Создаём security group:
$ aws ec2 create-security-group --group-name rtfm_db_private --vpc-id vpc-3941cb5c --description "RTFM DB instance access" { "GroupId": "sg-ffb92599" }
Находим текущую группу RTFM веб-сервера:
$ aws ec2 describe-instances --instance-ids i-a00cfd36 --query '[Reservations[*].Instances[*].SecurityGroups[*].GroupId]' --output text sg-4753d121
И разрешаем доступ из сети веб-сервера RTFM к новой подсети на порты 3306 и 22:
$ aws ec2 authorize-security-group-ingress --group-id sg-ffb92599 --protocol tcp --port 3306 --source-group sg-4753d121 $ aws ec2 authorize-security-group-ingress --group-id sg-ffb92599 --protocol tcp --port 22 --source-group sg-4753d121
Добавляем NAT-gateway.
Получаем EIP:
$ aws ec2 allocate-address --domain vpc { "PublicIp": "52.212.226.5", "Domain": "vpc", "AllocationId": "eipalloc-00063364" }
В публичной сети (там же, где RTFM-веб) создаём NAT-gateway:
$ aws ec2 create-nat-gateway --subnet-id subnet-0ee86857 --allocation-id eipalloc-00063364 { "NatGateway": { "NatGatewayAddresses": [ { "AllocationId": "eipalloc-00063364" } ], "VpcId": "vpc-3941cb5c", "State": "pending", "NatGatewayId": "nat-0838bcea448529665", "SubnetId": "subnet-0ee86857", "CreateTime": "2016-12-12T14:20:06.847Z" } }
Создаём route table:
$ aws ec2 create-route-table --vpc-id vpc-3941cb5c { "RouteTable": { "Associations": [], "RouteTableId": "rtb-32120d56", "VpcId": "vpc-3941cb5c", "PropagatingVgws": [], "Tags": [], "Routes": [ { "GatewayId": "local", "DestinationCidrBlock": "172.31.0.0/16", "State": "active", "Origin": "CreateRouteTable" } ] } }
Добавляем правило маршрутизации всего трафика через созданный NAT:
$ aws ec2 create-route --route-table-id rtb-32120d56 --nat-gateway-id nat-0838bcea448529665 --destination-cidr-block 0.0.0.0/0 { "Return": true }
Подключаем эту таблицу маршрутизации к приватной сети:
$ aws ec2 associate-route-table --route-table-id rtb-32120d56 --subnet-id subnet-4490cc32 { "AssociationId": "rtbassoc-b7b9fad0" }
Запуск EC2
Находим AMI тут>>> и запускаем инстанс с Debian 8:
$ aws ec2 run-instances --image-id ami-7d45150e --key-name rtfm_prod --count 1 --instance-type t2.nano --subnet-id subnet-4490cc32 --security-group-ids sg-ffb92599 { "OwnerId": "264418146286", "ReservationId": "r-0bb77681", ...
Добавляем теги:
$ aws ec2 create-tags --resources i-1ef9bdfe --tags Key=Name,Value=rtfm_db_prod
Копируем ключ на web-инстанс (т.к. доступа “снаружи” к DB-серверу нет – подключаемся через web):
$ scp ~/.ssh/rtfm_prod.pem [email protected]:/home/setevoy
Подключаемся, проверяем доступ к DB:
$ ssh [email protected] -i .ssh/rtfm_prod.pem ... admin@ip-172-31-64-60:~$
Проверяем сеть в мир:
admin@ip-172-31-64-60:~$ ping ya.ru -c 1 PING ya.ru (213.180.193.3) 56(84) bytes of data. 64 bytes from www.yandex.ru (213.180.193.3): icmp_seq=1 ttl=44 time=62.5 ms --- ya.ru ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 62.559/62.559/62.559/0.000 ms
Установка MariaDB
# apt-get install software-properties-common # apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db # add-apt-repository 'deb [arch=amd64,i386] http://mirror.23media.de/mariadb/repo/10.1/debian jessie main' # apt-get update && apt-get install mariadb-server
Т.к. по умолчанию MariaDB слушает localhost – редактируем файл /etc/mysql/my.cnf
, и обновляем:
bind-address = 127.0.0.1
на:
bind-address = 172.31.64.60
Перезагружаем, проверяем:
# service mysql restart # netstat -anp | grep 3306 tcp 0 0 172.31.64.60:3306 0.0.0.0:* LISTEN 11231/mysqld
Копируем базу:
# mysqldump -h rtfm-prod.cluster-chcmj9clr1dt.eu-west-1.rds.amazonaws.com -u username -p rtfm_db1 > rtfm_db1_aurora_12_12_2016_bkp.sql
На новом инстансе создаём базу и пользователя:
MariaDB [(none)]> create database rtfm_db1; Query OK, 1 row affected (0.00 sec) MariaDB [(none)]> grant all privileges on rtfm_db1.* to 'username'@'%' identified by 'password'; Query OK, 0 rows affected (0.01 sec)
Заливаем в неё дамп базы:
# mysql -u username -p rtfm_db1 < rtfm_db1_aurora_12_12_2016_bkp.sql Enter password:
В файле /var/www/vhosts/rtfm/rtfm.co.ua/wp-config.php
обновляем настройки WordPress:
... /** MySQL hostname */ //define('DB_HOST', 'localhost'); //define('DB_HOST', 'rtfm-prod.cluster-chcmj9clr1dt.eu-west-1.rds.amazonaws.com'); define('DB_HOST', '172.31.64.60'); ...
Готово.
Сравнение Aurora vs MariaDB
И, наконец-то – сравниваем время ответа блога при использовании MariaDB:
$ ab -n 100 -c 10 https://rtfm.co.ua/ ... Concurrency Level: 10 Time taken for tests: 40.148 seconds Complete requests: 100 Failed requests: 11 (Connect: 0, Receive: 0, Length: 11, Exceptions: 0) Total transferred: 10731886 bytes HTML transferred: 10690386 bytes Requests per second: 2.49 [#/sec] (mean) Time per request: 4014.842 [ms] (mean) Time per request: 401.484 [ms] (mean, across all concurrent requests) Transfer rate: 261.04 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 169 177 26.1 173 432 Processing: 1250 3611 840.3 3536 6927 Waiting: 488 2648 747.3 2592 5445 Total: 1422 3787 839.1 3711 7099
Напомню результаты Aurora:
$ ab -n 100 -c 10 https://rtfm.co.ua/ ... Concurrency Level: 10 Time taken for tests: 33.438 seconds Complete requests: 100 Failed requests: 7 (Connect: 0, Receive: 0, Length: 7, Exceptions: 0) Total transferred: 10662686 bytes HTML transferred: 10621186 bytes Requests per second: 2.99 [#/sec] (mean) Time per request: 3343.758 [ms] (mean) Time per request: 334.376 [ms] (mean, across all concurrent requests) Transfer rate: 311.41 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 170 177 9.1 173 208 Processing: 1108 3072 463.4 3081 4197 Waiting: 485 2168 425.8 2173 3213 Total: 1304 3249 460.7 3254 4401
На Aurora немного быстрее, но стоимость t2.nano
и db.t2.medium
– $0.0070/час (~5 у.е./мес) и $0.088/час (~60 у.е./мес) соответсвенно (Ирландия, eu-west).
Посмотрим – как новый инстанс будет вести себя в “прайм-тайм”.