Сравнение работы 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).
Посмотрим — как новый инстанс будет вести себя в «прайм-тайм».





