The OpenNET Project / Index page

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




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
ускорение импорта данных в RDS MySQL с помощью ssh proxy, !*! Alexander, 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 прокси?

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

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

    • ускорение импорта данных в RDS MySQL с помощью ssh proxy, !*! Alexander, 09:43 , 27-Май-24 (3)
      >> Есть идеи, почему скорость вырастает при работе через 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%

  • ускорение импорта данных в RDS MySQL с помощью ssh proxy, !*! Tron is Whistling, 09:14 , 25-Май-24 (2)
    Попробуй Nagle отключить
    • ускорение импорта данных в RDS MySQL с помощью ssh proxy, !*! Alexander, 09:43 , 27-Май-24 (4)
      > Попробуй Nagle отключить

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

    • ускорение импорта данных в RDS MySQL с помощью ssh proxy, !*! Alexander, 10:11 , 27-Май-24 (5)
      > Попробуй 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




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

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