Назад | Перейти на главную страницу

Бармен: rsync wal в архиве останавливает некоторые файлы

Я архивирую файлы wal с сервера postgres через rsync, большую часть времени архивирование работает нормально и быстро, тест скорости соединения здесь: (это идет через Интернет)

[ ID] Interval           Transfer     Bandwidth       Retr  Cwnd
[  4]   0.00-1.00   sec  9.30 MBytes  78.0 Mbits/sec    0    395 KBytes
[  4]   1.00-2.00   sec  66.3 MBytes   556 Mbits/sec   14   1.05 MBytes
[  4]   2.00-3.00   sec  75.0 MBytes   629 Mbits/sec    0   1.16 MBytes
[  4]   3.00-4.00   sec  81.2 MBytes   682 Mbits/sec    0   1.24 MBytes
[  4]   4.00-5.00   sec  86.2 MBytes   724 Mbits/sec    0   1.30 MBytes
[  4]   5.00-6.00   sec  88.8 MBytes   744 Mbits/sec    0   1.34 MBytes
[  4]   6.00-7.00   sec  91.2 MBytes   765 Mbits/sec    0   1.37 MBytes
[  4]   7.00-8.00   sec  92.5 MBytes   776 Mbits/sec    0   1.38 MBytes
[  4]   8.00-9.00   sec  93.8 MBytes   786 Mbits/sec    0   1.39 MBytes
[  4]   9.00-10.00  sec  63.8 MBytes   535 Mbits/sec   22    535 KBytes

Итак, доступной пропускной способности более чем достаточно.

Но в некоторых файлах WAL это просто ползет до медленного и занимает 30-50 секунд пока не будет передан файл размером 16 МБ, и я не понимаю, где отлаживать / искать проблему.

Команда rsync выглядит так:

rsync -p --chmod=Fg+r,Fo+r --timeout 10 -e /usr/bin/ssh -i /var/lib/pgsql/.ssh/id_rsa -a pg_wal/000000080000A5500000005D barman@barman_host/data/database/pg/incoming/000000080000A5500000005D

Я посмотрел на rsync через strace на принимающей стороне, и кажется, что только пакеты с отправляющей стороны не приходили достаточно быстро. Я попытался перехватить файл через ssh и вывести его на свою консоль, что было завершено до передачи rsync. Я попытался перебросить его в / dev / null, это было мгновенно.

Итак, я предполагаю, что исходный диск достаточно быстрый.

Я перенес большую часть файлов WAL (60 ГБ) с помощью одной команды rsync, которая также была быстрой и в среднем составляла 65 МБ / с, так что это говорило мне, что все работает нормально, но некоторые файлы работают медленно.

Что еще я могу посмотреть? Как я могу выяснить, связана ли проблема с отправляющей стороной, скоростью интернета, принимающей стороной, есть ли какие-то специальные журналы, которые я могу активировать с помощью rsync? Могу ли я проверить время системных вызовов через strace?

ls -l 000000080000A578000000E8
-rw-------. 1 postgres postgres 16777216 Jul 19 07:32 000000080000A578000000E8
bash-4.2$ du -sh 000000080000A578000000E8
11M 000000080000A578000000E8
bash-4.2$ du -sh 000000080000A578000000E8 --apparent-size
16M 000000080000A578000000E8

Диск WAL - это ZFS с активным сжатием, поэтому разница.

Также для завершения все свойства zfs:

storage/database  type                  filesystem                       -
storage/database  creation              Thu Apr 19 12:22 2018            -
storage/database  used                  1.33T                            -
storage/database  available             369G                             -
storage/database  referenced            1.33T                            -
storage/database  compressratio         2.13x                            -
storage/database  mounted               yes                              -
storage/database  quota                 none                             default
storage/database  reservation           none                             default
storage/database  recordsize            16K                              inherited from storage
storage/database  mountpoint            /data/                        
local
storage/database  sharenfs              off                              default
storage/database  checksum              on                               default
storage/database  compression           lz4                              inherited from storage
storage/database  atime                 off                              inherited from storage
storage/database  devices               on                               default
storage/database  exec                  on                               default
storage/database  setuid                on                               default
storage/database  readonly              off                              default
storage/database  zoned                 off                              default
storage/database  snapdir               hidden                           default
storage/database  aclinherit            restricted                       default
storage/database  createtxg             1159021                          -
storage/database  canmount              on                               default
storage/database  xattr                 sa                               inherited from storage
storage/database  copies                1                                default
storage/database  version               5                                -
storage/database  utf8only              off                              -
storage/database  normalization         none                             -
storage/database  casesensitivity       sensitive                        -
storage/database  vscan                 off                              default
storage/database  nbmand                off                              default
storage/database  sharesmb              off                              default
storage/database  refquota              none                             default
storage/database  refreservation        none                             default
storage/database  guid                  8214081110063784152              -
storage/database  primarycache          all                              default
storage/database  secondarycache        all                              default
storage/database  usedbysnapshots       0B                               -
storage/database  usedbydataset         1.33T                            -
storage/database  usedbychildren        0B                               -
storage/database  usedbyrefreservation  0B                               -
storage/database  logbias               throughput                       inherited from storage
storage/database  dedup                 off                              default
storage/database  mlslabel              none                             default
storage/database  sync                  disabled                         local
storage/database  dnodesize             legacy                           default
storage/database  refcompressratio      2.13x                            -
storage/database  written               1.33T                            -
storage/database  logicalused           2.82T                            -
storage/database  logicalreferenced     2.82T                            -
storage/database  volmode               default                          default
storage/database  filesystem_limit      none                             default
storage/database  snapshot_limit        none                             default
storage/database  filesystem_count      none                             default
storage/database  snapshot_count        none                             default
storage/database  snapdev               hidden                           default
storage/database  acltype               off                              default
storage/database  context               none                             default
storage/database  fscontext             none                             default
storage/database  defcontext            none                             default
storage/database  rootcontext           none                             default
storage/database  relatime              off                              default
storage/database  redundant_metadata    all                              default
storage/database  overlay               off                              default

Но за последние дни на ZFS-диске ничего не изменилось - и вся эта проблема только началась в пятницу (17 июля).

Кроме того, если я скопирую команду и запущу ее снова, она мгновенно завершится - все еще работающая команда продолжит зависать.

С помощью ls -lah вы можете отслеживать, как временный файл становится все больше и больше (около 150 КБ / с)

Спасибо, что нашли время прочитать это!

Изменить: я добавил запись времени в процесс архива wal, вот результат:

000000080000A57C00000034 1
000000080000A57C00000035 0
000000080000A57C00000036 0
000000080000A57C00000037 1
000000080000A57C00000038 1
000000080000A57C00000039 119
000000080000A57C0000003A 2
000000080000A57C0000003B 1
000000080000A57C0000003C 127
000000080000A57C0000003D 2
000000080000A57C0000003E 1
000000080000A57C0000003F 1
000000080000A57C00000040 1
000000080000A57C00000041 1
000000080000A57C00000042 1
000000080000A57C00000043 1
000000080000A57C00000044 1
000000080000A57C00000045 1
000000080000A57C00000046 1
000000080000A57C00000047 1
000000080000A57C00000048 1
000000080000A57C00000049 105
000000080000A57C0000004A 2
000000080000A57C0000004B 2
000000080000A57C0000004C 1
000000080000A57C0000004D 1
000000080000A57C0000004E 118
000000080000A57C0000004F 2
000000080000A57C00000050 1
000000080000A57C00000051 120
000000080000A57C00000052 2
000000080000A57C00000053 1

Число справа - секунды, затраченные на выполнение команды Rsync для указанного файла.

Изменить 2:

Я воссоздал проблему с двумя приводами RAM с каждой стороны. Я извлек используемые порты и обнаружил, что все они четные (может быть намек)

Я переключился между подключениями к Интернету на моей стороне (цели), и проблема исчезла. Основываясь на обсуждениях, похоже, что это проблема сети на определенном пути (возможно, из-за балансировки нагрузки)

Я обновлю окончательное разрешение.

Изменить 3:

Наш провайдер - Hetzner, у них неисправен один из модулей DECIX (https://www.hetzner-status.de/#16045). После деактивации проблема исчезла.

Поскольку неисправность была связана с сетью, как первоначально предполагалось, я бы порекомендовал всем выполнить те же действия.

  1. Повторите ту же передачу за пределами вашего приложения, соберите метрики для времени выполнения, используемых портов, путей маршрутизации
  2. Повторите для нескольких разных подключений к Интернету, которые маршрутизируются по-разному.
  3. Свяжитесь с вашим интернет-провайдером / хостинг-провайдером с информацией

Оставлять этот вопрос открытым не имеет смысла, поскольку это временная проблема, но, возможно, у кого-то в будущем может возникнуть то же самое.