The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



"ускорение импорта данных в RDS MySQL с помощью ssh proxy"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Открытые системы на сервере (Оптимизация и тюнинг)
Изначальное сообщение [ Отслеживать ]

"ускорение импорта данных в RDS MySQL с помощью ssh proxy"  +/
Сообщение от Alexander (ok), 24-Май-24, 17:56 
Коллеги,

Поделитесь своими мыслями по поводу следующего сценария.

Есть EC2 instance в регионе us-east-1 (ec2-use1), где лежит дамп базы mysql. Есть инстанс RDS в регионе ap-southeast-2 (rds-apse2).

Импорт данных идет скоростью примерно 2.5MB/sec с пиками до 3:
[user@ec2-use1]$ pv user_service.dump | mysql --defaults-file=mysqlroot.cnf -h rds-apse2 -u sp user_service

Но если поднять EC2 инстанс в регионе RDS (ec2-apse2) и импортировать данные через pipe, то скорость вырастает в 2 раза (в серднем 5.5MB/sec с пиками до 10):
[user@ec2-use1]$ pv user_service.dump | ssh ec2-user@ec2-apse2 mysql --defaults-file=mysqlroot.cnf -h rds-apse2 -u sp user_service

Если же импортировать данные через ssh-тоннель, то скорость такая же, как и без ssh:
[user@ec2-use1]$ ssh -L 3306:rds-apse2:3306 ec2-user@ec2-apse2
[user@ec2-use1]$ pv user_service.dump | mysql --defaults-file=mysqlroot.cnf -h localhost -u sp user_service

Есть идеи, почему скорость вырастает при работе через ssh прокси?

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения [Сортировка по времени | RSS]


1. "ускорение импорта данных в RDS MySQL с помощью ssh proxy"  +/
Сообщение от Аноним (1), 25-Май-24, 01:38 
> Есть идеи, почему скорость вырастает при работе через ssh прокси?

Поставь в /etc/ssh/ssh_config
Compression no
и попробуй измерить снова

Ответить | Правка | Наверх | Cообщить модератору

3. "ускорение импорта данных в RDS MySQL с помощью ssh proxy"  +/
Сообщение от Alexander (ok), 27-Май-24, 09:43 
>> Есть идеи, почему скорость вырастает при работе через ssh прокси?
> Поставь в /etc/ssh/ssh_config
> Compression no
> и попробуй измерить снова

Ничего не изменилось:
# pv user_service.dump | ssh -o Compression=no ec2-user@ec2-apse2 mysql --defaults-file=mysqlroot.cnf -h rds-apse2 -u sp user_service
390MiB 0:01:14 [5.20MiB/s] [===================================================================================================================>] 100%

Ответить | Правка | Наверх | Cообщить модератору

2. "ускорение импорта данных в RDS MySQL с помощью ssh proxy"  +/
Сообщение от Tron is Whistling (?), 25-Май-24, 09:14 
Попробуй Nagle отключить
Ответить | Правка | Наверх | Cообщить модератору

4. "ускорение импорта данных в RDS MySQL с помощью ssh proxy"  +/
Сообщение от Alexander (ok), 27-Май-24, 09:43 
> Попробуй Nagle отключить

Как и где именно это сделать?

Ответить | Правка | Наверх | Cообщить модератору

5. "ускорение импорта данных в RDS MySQL с помощью ssh proxy"  +/
Сообщение от Alexander (ok), 27-Май-24, 10:11 
> Попробуй Nagle отключить

чатгпт посоветовал сделать через LD_PRELOAD и выдал такой код:
#define _GNU_SOURCE
#include <dlfcn.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/tcp.h>
#include <unistd.h>
#include <stdio.h>
#include <errno.h>

int socket(int domain, int type, int protocol) {
    // Оригинальная функция socket
    int (*original_socket)(int, int, int);
    original_socket = dlsym(RTLD_NEXT, "socket");

    // Вызов оригинальной функции
    int sockfd = original_socket(domain, type, protocol);
    if (sockfd < 0) {
        return sockfd;
    }

    // Установка TCP_NODELAY для созданного сокета
    if (domain == AF_INET && type == SOCK_STREAM) {
        int opt = 1;
        if (setsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY, &opt, sizeof(opt)) < 0) {
            perror("setsockopt TCP_NODELAY");
        }
    }

    return sockfd;
}

gcc -shared -fPIC -o tcp_nodelay.so tcp_nodelay.c -ldl

Судя по strace'у код рабочий:
...
connect(5, {sa_family=AF_INET, sin_port=htons(3306), sin_addr=inet_addr("172.16.7.170")}, 16) = 0
setsockopt(5, SOL_TCP, TCP_NODELAY, [1], 4) = 0
setsockopt(5, SOL_SOCKET, SO_KEEPALIVE, [1], 4) = 0
...

Но не помогло:
# pv user_service.dump | LD_PRELOAD=/home/ec2-user/tcp_nodelay.so mysql --defaults-file=mysqlroot.cnf -h rds-apse2 -u sp user_service
^C.5MiB 0:00:23 [2.99MiB/s] [==============>                                                                                                      ] 13% ETA 0:02:31
^C -- query aborted

Ответить | Правка | К родителю #2 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру