LINUX.ORG.RU

Сообщения blind_oracle

 

SSH Agent Forwarding не работает с Yubikey

Дано:

  • Ноут с макосью
  • Ключ yubikey с SSH ключом внутре
  • Серваки на линухе

Публичный ключ добавлен везде в authorized_keys и вход напрямую на любой из них работает на ура.

На хосте я вижу свой ключ, т.е. агент его перенаправляет:

root@dc2:~# ssh-add -L
ssh-ed25519 xxxx cardno:20 637 055

Но если попытаться пойти дальше на другой сервак - болт, давайте пароль. Т.е. на хост А и хост B я захожу, но зайдя на А потом на B - уже нет.

В дебаге ничего особо интересного, но ключ оно видит и вроде пробует:

debug1: Will attempt key: cardno:20 637 055 ED25519 SHA256:sZZdEc/uz8D9Dw9IFL7MIjJfiAJ3MEw4DbXWn+txTZo agent
debug1: Will attempt key: /root/.ssh/id_rsa
debug1: Will attempt key: /root/.ssh/id_ecdsa
debug1: Will attempt key: /root/.ssh/id_ecdsa_sk
debug1: Will attempt key: /root/.ssh/id_ed25519
debug1: Will attempt key: /root/.ssh/id_ed25519_sk
debug1: Will attempt key: /root/.ssh/id_xmss
debug1: Will attempt key: /root/.ssh/id_dsa
debug1: Next authentication method: publickey
debug1: Offering public key: cardno:20 637 055 ED25519 SHA256:sZZdEc/uz8D9Dw9IFL7MIjJfiAJ3MEw4DbXWn+txTZo agent
debug2: we sent a publickey packet, wait for reply
debug1: Authentications that can continue: publickey,password

Куда копать - идеи кончились.

 , , ,

blind_oracle
()

NVME диски: после ребута увеличиваются ошибки

Есть железяка, там в качестве диска под ОС стоит пара Seagate Firecuda 520 в MDRAID.

После ребута в SMART каждый раз увеличиваются ошибки на обоих:

Error Information Log Entries:      203

Проблем вроде не доставляет, но напрягает и smartd паникует. В чём может быть причина?

 , ,

blind_oracle
()

hostapd + bridge: пакеты то ходят то нет

Есть железяка с Ubuntu 22.04 в качестве роутера, в нём две ath10k карточки через hostapd раздают вайфай и три медных интерфейса (не суть важно)

Стандартная конфигурация, в общем: в бридж br0 добавлены пара медных интерфейсов и оба вайфай-интерфейса (2.4 и 5). На br0 висит IP шлюза и DHCP-сервер.

Проблема: иногда (закономерность не понятна) после загрузки вайфай клиенты (с обоих интерфейсов) не могут достучаться до IP br0, причём IP по DHCP они спокойно получают, т.е. на физ уровне пакеты ходят в обе стороны… делаем ребут - и пинг начинает проходить (ну, и прочий траффик). Или не начинает :)

В tcpdump -i br0 вижу ICMP от клиентов (когда пингую IP br0), но ответов нет. iptables очищал для верности, разницы нет.

Что-то мысли кончились куда копать.

 ,

blind_oracle
()

ath10k: не могу выставть regdomain для одной из карт

Дано: PCEngines APU2 с двумя идентичными Compex WLE600VX (ath10k)

В EEPROM у них стоит 0x0, что по идее равняется US и проблем быть не должно.

# dmesg | grep regdomain
[   19.347826] ath: EEPROM regdomain: 0x0
[   19.527663] ath: EEPROM regdomain: 0x0

iw reg get показывает что на обоих картах стоит US:

# iw reg get
global
country US: DFS-FCC
        (902 - 904 @ 2), (N/A, 30), (N/A)
        (904 - 920 @ 16), (N/A, 30), (N/A)
        (920 - 928 @ 8), (N/A, 30), (N/A)
        (2400 - 2472 @ 40), (N/A, 30), (N/A)
        (5150 - 5250 @ 80), (N/A, 23), (N/A), AUTO-BW
        (5250 - 5350 @ 80), (N/A, 24), (0 ms), DFS, AUTO-BW
        (5470 - 5730 @ 160), (N/A, 24), (0 ms), DFS
        (5730 - 5850 @ 80), (N/A, 30), (N/A), AUTO-BW
        (5850 - 5895 @ 40), (N/A, 27), (N/A), NO-OUTDOOR, AUTO-BW, PASSIVE-SCAN
        (5925 - 7125 @ 320), (N/A, 12), (N/A), NO-OUTDOOR, PASSIVE-SCAN
        (57240 - 71000 @ 2160), (N/A, 40), (N/A)

phy#1
country US: DFS-FCC
        (902 - 904 @ 2), (N/A, 30), (N/A)
        (904 - 920 @ 16), (N/A, 30), (N/A)
        (920 - 928 @ 8), (N/A, 30), (N/A)
        (2400 - 2472 @ 40), (N/A, 30), (N/A)
        (5150 - 5250 @ 80), (N/A, 23), (N/A), AUTO-BW
        (5250 - 5350 @ 80), (N/A, 24), (0 ms), DFS, AUTO-BW
        (5470 - 5730 @ 160), (N/A, 24), (0 ms), DFS
        (5730 - 5850 @ 80), (N/A, 30), (N/A), AUTO-BW
        (5850 - 5895 @ 40), (N/A, 27), (N/A), NO-OUTDOOR, AUTO-BW, PASSIVE-SCAN
        (5925 - 7125 @ 320), (N/A, 12), (N/A), NO-OUTDOOR, PASSIVE-SCAN
        (57240 - 71000 @ 2160), (N/A, 40), (N/A)

phy#0
country US: DFS-FCC
        (902 - 904 @ 2), (N/A, 30), (N/A)
        (904 - 920 @ 16), (N/A, 30), (N/A)
        (920 - 928 @ 8), (N/A, 30), (N/A)
        (2400 - 2472 @ 40), (N/A, 30), (N/A)
        (5150 - 5250 @ 80), (N/A, 23), (N/A), AUTO-BW
        (5250 - 5350 @ 80), (N/A, 24), (0 ms), DFS, AUTO-BW
        (5470 - 5730 @ 160), (N/A, 24), (0 ms), DFS
        (5730 - 5850 @ 80), (N/A, 30), (N/A), AUTO-BW
        (5850 - 5895 @ 40), (N/A, 27), (N/A), NO-OUTDOOR, AUTO-BW, PASSIVE-SCAN
        (5925 - 7125 @ 320), (N/A, 12), (N/A), NO-OUTDOOR, PASSIVE-SCAN
        (57240 - 71000 @ 2160), (N/A, 40), (N/A)

Но iw list говорит что на одной из карт точку доступа делать нельзя (No-IR):

                        * 5180 MHz [36] (23.0 dBm) (no IR)
                        * 5200 MHz [40] (23.0 dBm) (no IR)
                        * 5220 MHz [44] (23.0 dBm) (no IR)
                        * 5240 MHz [48] (23.0 dBm) (no IR)
                        * 5260 MHz [52] (24.0 dBm) (no IR, radar detection)
                        * 5280 MHz [56] (24.0 dBm) (no IR, radar detection)
                        * 5300 MHz [60] (24.0 dBm) (no IR, radar detection)
                        * 5320 MHz [64] (24.0 dBm) (no IR, radar detection)
                        * 5500 MHz [100] (disabled)
                        * 5520 MHz [104] (disabled)
                        * 5540 MHz [108] (disabled)
                        * 5560 MHz [112] (disabled)
                        * 5580 MHz [116] (disabled)
                        * 5600 MHz [120] (disabled)
                        * 5620 MHz [124] (disabled)
                        * 5640 MHz [128] (disabled)
                        * 5660 MHz [132] (disabled)
                        * 5680 MHz [136] (disabled)
                        * 5700 MHz [140] (disabled)
                        * 5720 MHz [144] (disabled)
                        * 5745 MHz [149] (30.0 dBm) (no IR)
                        * 5765 MHz [153] (30.0 dBm) (no IR)
                        * 5785 MHz [157] (30.0 dBm) (no IR)
                        * 5805 MHz [161] (30.0 dBm) (no IR)
                        * 5825 MHz [165] (30.0 dBm) (no IR)
                        * 5845 MHz [169] (27.0 dBm) (no IR)
                        * 5865 MHz [173] (disabled)

А на второй всё ок:

                        * 5180 MHz [36] (23.0 dBm)
                        * 5200 MHz [40] (23.0 dBm)
                        * 5220 MHz [44] (23.0 dBm)
                        * 5240 MHz [48] (23.0 dBm)
                        * 5260 MHz [52] (24.0 dBm) (no IR, radar detection)
                        * 5280 MHz [56] (24.0 dBm) (no IR, radar detection)
                        * 5300 MHz [60] (24.0 dBm) (no IR, radar detection)
                        * 5320 MHz [64] (24.0 dBm) (no IR, radar detection)
                        * 5500 MHz [100] (24.0 dBm) (no IR, radar detection)
                        * 5520 MHz [104] (24.0 dBm) (no IR, radar detection)
                        * 5540 MHz [108] (24.0 dBm) (no IR, radar detection)
                        * 5560 MHz [112] (24.0 dBm) (no IR, radar detection)
                        * 5580 MHz [116] (24.0 dBm) (no IR, radar detection)
                        * 5600 MHz [120] (24.0 dBm) (no IR, radar detection)
                        * 5620 MHz [124] (24.0 dBm) (no IR, radar detection)
                        * 5640 MHz [128] (24.0 dBm) (no IR, radar detection)
                        * 5660 MHz [132] (24.0 dBm) (no IR, radar detection)
                        * 5680 MHz [136] (24.0 dBm) (no IR, radar detection)
                        * 5700 MHz [140] (24.0 dBm) (no IR, radar detection)
                        * 5720 MHz [144] (24.0 dBm) (radar detection)
                        * 5745 MHz [149] (30.0 dBm)
                        * 5765 MHz [153] (30.0 dBm)
                        * 5785 MHz [157] (30.0 dBm)
                        * 5805 MHz [161] (30.0 dBm)
                        * 5825 MHz [165] (30.0 dBm)
                        * 5845 MHz [169] (27.0 dBm) (no IR)
                        * 5865 MHz [173] (27.0 dBm) (no IR)

Всё уже перебрал, но никак не могу выровнять их и понять почему отличается.

 

blind_oracle
()

ixgbe и разные SFP

Бодрый день!

Есть Intel X520-DA, ixgbe.allow_unsupported_sfp=1 выставлен, какой-то левый SFP+ от D-Link работает на ура.

Нужно было во второй порт воткнуть SFP на 1Гбит оптический - и хрен там плавал.

kernel: ixgbe 0000:0b:00.1: failed to load because an unsupported SFP+ or QSFP module type was detected.

Есть шансы как-то его завести с этой картой? В Каталисте этот SFP работает на ура.

Заранее спасибо

 

blind_oracle
()

ath10k + hostapd + 5ghz + linux 5.8 = fail

Привет *,

Собсно есть у меня железяка PCEngines APU2 в которую воткнуто 2 двухдиапазонных адаптера Compex WLE600VX на базе ath10k - один дует на 2.4Ггц, второй - на 5Ггц. Стоит Убунта 20.04 и всё было хорошо.

Тут чёрт меня дёрнул обновиться на новый HWE - ядро 5.8 (было 5.4) - и вайфай пропал.

Оказалось что в EEPROM карт вбит по дефолту регион «мир» (0x63) и в 5.8, похоже, закрутили гайки и отметили все 5Ггц частоты в этом регионе как «no IR» т.е. AP на них делать теперь нельзя:

Frequencies:
                        * 5180 MHz [36] (23.0 dBm) (no IR)
                        * 5200 MHz [40] (23.0 dBm) (no IR)
                        * 5220 MHz [44] (23.0 dBm) (no IR)
                        * 5240 MHz [48] (23.0 dBm) (no IR)
                        * 5260 MHz [52] (23.0 dBm) (no IR, radar detection)
                        * 5280 MHz [56] (23.0 dBm) (no IR, radar detection)
                        * 5300 MHz [60] (23.0 dBm) (no IR, radar detection)
                        * 5320 MHz [64] (23.0 dBm) (no IR, radar detection)
                        * 5500 MHz [100] (disabled)
                        * 5520 MHz [104] (disabled)
                        * 5540 MHz [108] (disabled)
                        * 5560 MHz [112] (disabled)
                        * 5580 MHz [116] (disabled)
                        * 5600 MHz [120] (disabled)
                        * 5620 MHz [124] (disabled)
                        * 5640 MHz [128] (disabled)
                        * 5660 MHz [132] (disabled)
                        * 5680 MHz [136] (disabled)
                        * 5700 MHz [140] (disabled)
                        * 5720 MHz [144] (disabled)
                        * 5745 MHz [149] (30.0 dBm) (no IR)
                        * 5765 MHz [153] (30.0 dBm) (no IR)
                        * 5785 MHz [157] (30.0 dBm) (no IR)
                        * 5805 MHz [161] (30.0 dBm) (no IR)
                        * 5825 MHz [165] (30.0 dBm) (no IR)
                        * 5845 MHz [169] (disabled)
                        * 5865 MHz [173] (disabled)

В 5.4 по крайней мере часть каналов была доступна:

  Frequencies:
                        * 5180 MHz [36] (20.0 dBm)
                        * 5200 MHz [40] (20.0 dBm)
                        * 5220 MHz [44] (20.0 dBm)
                        * 5240 MHz [48] (20.0 dBm)
                        * 5260 MHz [52] (20.0 dBm) (no IR, radar detection)
                        * 5280 MHz [56] (20.0 dBm) (no IR, radar detection)
                        * 5300 MHz [60] (20.0 dBm) (no IR, radar detection)
                        * 5320 MHz [64] (20.0 dBm) (no IR, radar detection)
                        * 5500 MHz [100] (disabled)
                        * 5520 MHz [104] (disabled)
                        * 5540 MHz [108] (disabled)
                        * 5560 MHz [112] (disabled)
                        * 5580 MHz [116] (disabled)
                        * 5600 MHz [120] (disabled)
                        * 5620 MHz [124] (disabled)
                        * 5640 MHz [128] (disabled)
                        * 5660 MHz [132] (20.0 dBm) (no IR, radar detection)
                        * 5680 MHz [136] (20.0 dBm) (no IR, radar detection)
                        * 5700 MHz [140] (20.0 dBm) (no IR, radar detection)
                        * 5720 MHz [144] (20.0 dBm) (radar detection)
                        * 5745 MHz [149] (20.0 dBm)
                        * 5765 MHz [153] (20.0 dBm)
                        * 5785 MHz [157] (20.0 dBm)
                        * 5805 MHz [161] (20.0 dBm)
                        * 5825 MHz [165] (20.0 dBm)
                        * 5845 MHz [169] (disabled)
                        * 5865 MHz [173] (disabled)

Насколько я почитал гугл - из юзерспейса это не решается, загрузка новых regulatory domain (wireless-regdb + crda) только может еще больше гайки закрутить, а не открутить.

Как я понял - в том же OpenWRT патчат ядро чтобы это решить.

Пока я откатился на 5.4, но тренд какой-то хреновый. Может есть способ какой-то чтобы это решить не таща своё ядро? А то собирать лень каждый раз.

 , ath10k, , ,

blind_oracle
()

Bird BGP - часть роутов не долетает до пира

Есть два хоста с Bird 1.6.3, между ними iBGP-сессия. Один экспортирует 76974 маршрутов:

# birdc show protocols all bgp1     
BIRD 1.6.3 ready.
name     proto    table    state  since       info
bgp1     BGP      t1       up     10:43:28    Established   
  Preference:     100
  Input filter:   ACCEPT
  Output filter:  ACCEPT
  Routes:         0 imported, 76974 exported, 0 preferred
  Route change stats:     received   rejected   filtered    ignored   accepted
    Import updates:              0          0          0          0          0
    Import withdraws:            0          0        ---          0          0
    Export updates:          76974          0          0        ---      76974
    Export withdraws:            0        ---        ---        ---          0
  BGP state:          Established
    Neighbor address: 192.168.253.30
    Neighbor AS:      65000
    Neighbor ID:      192.168.0.1
    Neighbor caps:    refresh enhanced-refresh restart-aware AS4
    Session:          internal AS4
    Source address:   192.168.253.29
    Hold timer:       134/240
    Keepalive timer:  46/80

А на другой прилетает меньше, причем если перезапускать - всегда разное количество:

# birdc show proto all bgp1
BIRD 1.6.3 ready.
name     proto    table    state  since       info
bgp1     BGP      t1       up     08:43:27    Established   
  Preference:     100
  Input filter:   ACCEPT
  Output filter:  ACCEPT
  Routes:         67387 imported, 0 exported, 67387 preferred
  Route change stats:     received   rejected   filtered    ignored   accepted
    Import updates:          67387          0          0          0      67387
    Import withdraws:            0          0        ---          0          0
    Export updates:          67387      67387          0        ---          0
    Export withdraws:            0        ---        ---        ---          0
  BGP state:          Established
    Neighbor address: 192.168.253.29
    Neighbor AS:      65000
    Neighbor ID:      192.168.111.1
    Neighbor caps:    refresh enhanced-refresh restart-aware AS4
    Session:          internal AS4
    Source address:   192.168.253.30
    Hold timer:       179/240
    Keepalive timer:  67/80

Конфиг BGP тупой:

table t1;

protocol bgp {
    table t1;
    local as 65000;
    neighbor 192.168.253.29 as 65000;
    direct;
    import all;
    export all;
}

Есть идеи что можно подкрутить? Покурив доку Bird ничего не увидел…

 , , lost

blind_oracle
()

Тюнинг Suricata на IPS при 2Mpps+

Есть задача сделать сабж в виде L2 моста для анализа траффика и дропа некоторых пакетов по своим правилам.

Целевой траффик около 20Гбит, 2Mpps с перспективой роста.

Собрал тестовый стенд из трех DL360 gen9, карты Intel XL710, ядра 4.9.х, дрова интель последние. Один генератор траффика, второй - приемник, в середине Suricata, она настроена на режим AF_PACKET с копированием пакетов с одного интерфейса на другой и обратно.

Тестирую прогоном pcap-файла через tcpreplay.

Всё, вроде бы, работает отлично - на скоростях до 1.15Mpps на порт ядро и Suricata пакеты не дропают, но вот почему-то дальше во второй порт пакетов *уходит* на ~0.8% меньше чем вошло в первый. Проверял по ethtool -S eno49 | grep tx_packets.

Где оно может теряться? В счетчиках отправляющей карты дропов и оверранов не обнаружил, в сурикате тоже всё по нулям.

 , ,

blind_oracle
()

Вырастает x10 latency OpenVPN на OpenWRT

Имеется TP-Link WR842N с OpenWRT 15.05.1, на нём OpenVPN с конфигом вроде:

dev tap0
nobind
proto udp
remote x.x.x.x 1194
topology subnet
mlock
nice -19
fast-io
ifconfig 192.168.254.22 255.255.255.252
mtu-disc maybe
keepalive 10 120
secret /etc/openvpn/openvpn.key
auth SHA1
cipher BF-CBC
user root
group root
persist-key
persist-tun
verb 3
Туннель устанавливается, всё ок, rtt latency канала между OpenWRT и сервером ~10ms. Через некоторое (пока неопределенное) rtt через туннель вырастает до ~100ms, при этом rtt без туннеля не меняется. Проц ничто не жрёт, idle 90-100%.

После перезапуска openvpn всё становится опять хорошо на какое-то время.

На другом OpenWRT (там Linksys WRT160NL с какой-то старой версией) и на просто Linux-клиентах такой бодяги не наблюдаю. Конфиги идентичные.

OpenVPN пробовал как обычный с OpenSSL, так и кастрированный с PolarSSL - один хрен.

Any ideas?

 , ,

blind_oracle
()

Хитрая настройка Squid для TLS Peek-and-Splice

У меня есть такая задача: есть много клиентов, которым в DNS подменяются IP-адреса некоего небольшого набора доменов на нужный мне адрес.

Мне нужно повесить там Squid (в идеале на прямо на 443 порту) чтобы он ловил TLS-handshake, смотрел имя хоста к которому коннектится клиент в хёдере SNI Client-Hello, резолвил это имя и устанавливал TCP-туннель между клиентом и сервером.

Т.е. мне *не надо* делать MITM, наоборот нужно чтобы у клиента всё было зелено и проверено, но траффик ходил через этот конкретный сервер.

В принципе, я подобного добился, сделав Intercept, SSL bump и завернув траффик с 443 порта на сквид через -j REDIRECT.

Но кальмар валится на том, что он ожидает увидеть IP назначения к которому коннектится клиент среди тех которые он разрезолвил для домена из TLS Hello (это нормально для обычного Intercept), но естественно они не совпадают т.к. коннект по факту не перехватывается, а адресован моему серверу.

Это security precaution и он никак не выключается, бай дизайн, так написано в доках. Я его, конечно, из сорцов выпилил, но хотелось бы узнать может есть способ попроще это сделать?

 , , splice, ,

blind_oracle
()

Правильная работа со сбоящими дисками?

Тема не новая и, в чём-то, стандартная.

Имеется кластер из серверов Hadoop, на каждом сервере 15 дисков. Диски там - это RAID0 из 1 винта через контроллер HP Smart Array 420i (почему так через жопу и почему не HBA - тема отдельная), но в общем и целом это не важно. Каждый диск форматирован в XFS и смонтирован в отдельную директорию (в духе /data/XX) и юзается как HDFS Volume.

В какой-то момент один из винтов сдыхает и начинается веселье:

kernel: sd 0:0:0:8: [sdi]  Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
kernel: sd 0:0:0:8: [sdi]  Sense Key : Medium Error [current]
kernel: sd 0:0:0:8: [sdi]  Add. Sense: Unrecovered read error
kernel: sd 0:0:0:8: [sdi] CDB: Read(10): 28 00 00 00 52 10 00 00 10 00
kernel: end_request: critical medium error, dev sdi, sector 21008
...
kernel: XFS (sdi): metadata I/O error: block 0x5210 ("xfs_trans_read_buf") error 61 buf count 8192
kernel: XFS (sdi): xfs_imap_to_bp: xfs_trans_read_buf() returned error 61.
kernel: XFS (sdi): metadata I/O error: block 0x5210 ("xfs_trans_read_buf") error 61 buf count 8192
kernel: XFS (sdi): xfs_imap_to_bp: xfs_trans_read_buf() returned error 61.
При этом софт (в данном случае - HDFS Data Node) пытается читать\писать файлы усиленно генерируя данные ошибки тоннами и периодически залипая на I/O.

Что было сделано:

  • Сначала пытался убрать ноду из HDFS без его перезапуска, не вышло - процесс реконфигурирования залип.
  • Попытался закрыть дескриптор файла (он там был один) - не вышло, дебаггер gdb зависал при подключении к процессу.
  • Затем была попытка потушить HDFS штатно - не вышло, убил через kill -9 - процесс превратился в зомби но при этом продолжил усиленно насиловать этот диск
  • umount -f не прошло, umount -l выполнился, но это ничего не изменило - ошибки продолжали лезть и зомби мучил диск
  • Финально ребут сервера - тоже залип т.к. не смог отмонтировать все ФС и убить процессы (зомби то висит)
  • В итоге резет

Собсно вопрос - как (и можно ли) эту ситуацию решить *штатно*, без таких радикальных мер. Может это проблемы конкретно XFS что оно не возвращает нормально софту ошибку i/o? Или это проблемы Hadoop что он её штатно не обрабатывает? Если что - пока не экспериментировал.

Ось - центос 6.

 , ,

blind_oracle
()

Pacemaker: одинаковые маршруты на нескольких нодах

В принципе, простая задача - есть кластер из N хостов, на всех поднята некая служба и на нескольких - разные виртуальные IP. Но особенность в том, что после поднятия IP нужно добавить маршруты в определенную таблицу маршрутизации.

Если создать просто два ресурса Route и привязать их к соответствующим IPAddr2, то всё работает, но при переезде на другую ноду вместе с адресом Route грохает за собой маршруты, хотя оставшийся Route должен его держать. Если роутам добавить «op monitor», то оставшийся ресурс восстанавливает маршрут, но это какой-то костыль.

Метрику ресурс Route не поддерживает, поэтому дифференцировать роуты в ядре не получится. Я, конечно, его могу подправить но это опять же костыль.

Может есть какой-то станадртный способ а я туплю?

 ,

blind_oracle
()

Пара вопросов по Aerospike

Может кто щупал уже.

Собсно это достаточно вкусная NoSQL-стайл штука, с master-master репликацией, встроенным шардингом, кластеризацией и прочими плюшками.

Мне, в общем-то, всё нравится, но есть одно но - они везде пишут про супер-пупер умные клиентские биндинги, которые могут прозрачно отрабатывать удаление\добавление ноды в кластере.

Мол, если во время выполнения запроса нода даст дуба - клиент автоматически повторит его на другой ноде:

If a node goes down during a read or write, what happens?

It is possible that a node will go down during a read or write operation. The client API will try to connect to the database but not get a response. When this happens, the client API will automatically try the secondary database. From a coding standpoint, you do not need to be aware of this as the API handles additional attempts at communicating with the database.

(ц) http://www.aerospike.com/docs/dev_reference/FAQ.html

Но по моему опыту - хрен два. Гашу демона штатно на одной из нод (всего их три с репликацией каждой записи на две) - пару секунд все запросы отваливаются с ошибками типа EOF, Timeout и прочая. Затем всё продолжает работать нормально.

Пробовал как питоновский клиент, так и Go - оба официальные, один фиг. В других, подозреваю, аналогично. ЧЯДНТ?

 , ,

blind_oracle
()

Посоветуйте стек технологий для задачи

Задача очень простая, вроде бы:

  • Нужно реализовать HTTP-сервер
  • На него будут приходить простые GET-запросы вида http://x.x.x.x/?a=1&b=2
  • В процессе обработки запроса нужно будет сделать ряд запросов к MySQL, обработать их результаты простой if{}else{} логикой и отдать ответ.
  • Язык не важен
  • Каждый запрос должен гарантированно выполниться за 1-2 секунды

Петрушка в том, что запросов одновременно может приходить много, на данный момент чуть меньше тысячи в секунду, потенциально - больше, поэтому хочется запас. И выполняться каждый запрос, потенциально, может 100-200мсек.

Что пробовал:

  • Банальный nginx + php-fpm. После долгого насилия над конфигами этих двух софтин, MySQL и sysctl.conf оно кое-как научилось держать 1000 одновременных коннектов, при этом php-fpm форкнул, соответственно, 1000 воркеров и сожрал 13Гб памяти. Как-то, мягко говоря, не оптимально. При этом при тестах через wrk и ab были таймауты в процессе получения URL, но они скорее всего связаны с MySQL. Тестил простым скриптом типа (подключиться к mysql, select столбец from table с двумя строками, print столбец, отключиться от mysql).
  • nodejs. Оно однопоточное, поэтому особого толку нет, плюс всякие непонятные глюки - в начале теста идёт ровно, под конец сервер дико напрягается ksoftirq и нода падает с ошибкой в духе «too many open files». Либо глючт mysql-модуль, коих там море в ноде и все разной степени кривзины, либо ещё что... разбираться лень. Скорость, в любом случае, достаточно низкая. Скрипт аналогичный.
  • Perl в виде PSGI приложения и разных серверов для его исполнения, как форкающихся (starman), так и на базе event loop (twiggy). Форкающиеся работали хорошо, но проблемы аналогичные php-fpm - каждый форк жрёт кучу памяти. event-овые опять таки однопоточные, да и доступ в SQL их блокирует.
  • Python + twisted. Оно event-овое, один поток. Проблемы аналогичные.

В результате пришёл к выводу, что мне нужно что-то тредовое т.к. каждый запрос к SQL выполняется какое-то время и если использовать event loop реализации - блокирует остальных. Форкающиеся сервера хороши, но памяти жрут мама не горюй.

Можно, конечно, написать свой HTTP-сервер с тредами и танцовщицами, на том же перле, но велосипед изобретать не хочется. Есть перл-модуль HTTP::Daemon::Threaded, но я его пока что-то не до конца осилил. Всякие apache+mpm_worker+mod_perl пока не смотрел, но выглядит достаточно вкусно.

Может я чего-то элементарного не вижу? Или просто дохрена хочу?

 , , ,

blind_oracle
()

FreeRADIUS + rlm_perl + прогрев

Есть у меня сабж последней 3.0.11 версии, логика авторизации полностью вынесена в Perl модуль через rlm_perl. Работает это всё под большой нагрузкой около 1000 Access-Request в секунду.

Настроики тред пула в радиусе:

thread pool {
    start_servers = 256
    max_servers = 512
    min_spare_servers = 256
    max_spare_servers = 512
    max_queue_size = 1048576
    max_requests_per_server = 0
    auto_limit_acct = no
}
То есть, он по идее должен при запуске инициализировать 256 тредов. Но на самом деле, он их не запускает нифига при старте, а только когда приходят запросы на авторизацию.

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

Собсно вопрос - это бага или фича? Я конечно могу его прогреть парой тысяч тестовых запросов, но это мне кажется костылём.

 , , rlm

blind_oracle
()

Вопрос по блокировкам MySQL/InnoDB

Есть у меня некая таблица, допустим из двух столбцов: id int (primary key, autoincrement), name varchar(255) (unique index).

С этой таблицей работают (пишут и читают) много потоков одновременно.

Задача:

  • Клиент подключается, проверяет есть ли в таблице в поле name некое значение: SELECT `id` FROM `table` WHERE `name` = 'Vasya'
  • Если оно есть, то id возвращается клиенту, тут вопросов нет
  • Если же его нет, то нужно добавить туда строку и опять же вернуть id клиенту (last_insert_id)
  • При этом важно что одну и ту же строку могут искать и пытаться добавить сразу много клиентов. Хочется чтобы этот момент не вызывал deadlock-ов, отката транзакций и подобных бед.
  • То есть, должна быть некая атомарность - кто первый пришёл и спросил о наличии строки в таблице, в случае её отсутствия, и должен иметь возможность её добавить. А остальные уже должны будут получить её id.

Я правильно понимаю, что без блокировки *всей* таблицы на чтение и запись на время транзакции этого реализовать не получится?

 ,

blind_oracle
()

Постоянно поднятый туннель через Strongswan - как?

Я уже затрахался, если честно :) Есть два хоста, между ними тоннель, хочу чтобы он поднимался всегда после дисконнекта и пытался это сделать вечно. В OpenVPN с этим проблем нет, а тут... иногда всё же падает каким-то образом и подниматься сам не хочет - ipsec restart на любом из хостов и всё взлетает.

DPD настроен, keyingretries=%forever - что ему не хватает?

config setup

conn %default
    ikelifetime=60m
    keylife=20m
    rekeymargin=3m
    keyingtries=%forever
    authby=secret
    keyexchange=ikev2
    mobike=no
    dpddelay=30s
    dpdtimeout=120s
    dpdaction=restart

conn vpn1
    left=1.1.1.1
    leftid=@host1
    right=2.2.2.2
    rightid=@host2
    type=transport
    auto=start
На втором хосте симметришно.

 dpd, ,

blind_oracle
()

Посоветуйте Video CMS

Есть желание иметь какую-то минималистичную штуку, чтобы выкладывать туда свои видео, эдакий мини-ютуб.

Из хотелок: HTML5-плеер, минимальные удобства типа иерархии папка-подпапка, да и всё. Транскодинг не нужен.

Из того что пробовал:

MediaDrop - большой комбайн на питоне, всякие проблемы с работой не на отдельном домене, много других траблов, не помню точно.

ZenPhoto - фотогалерея с поддержкой видео, убогие темы шириной 400пикс, очень дикая система управления и перемещения объектов в иерархии...

CumulusClips - обязательно транскодирует видео в какое-то убого качество, как я понял не отключаемо. Обошёл аргументами ffmpeg -vcodec copy -acodec copy, изврат. Механизм загрузки тоже косой, отвлечёшься во время загрузки - окончится сессия и качай заново.

В общем, разочарован) Есть что-то простое, тупое и удобное? Можно и самому написать, но велосипедостроительством я как-то уже переболел...

 , ,

blind_oracle
()

Самый быстрый Syslog-сервер?

Привет, камрады.

Есть задача логгировать запросы нагруженного DNS-сервера (Unbound) на сторонний коллектор.

Без логгирования на 4 тредах я могу выжать из него где-то 550к запросов в секунду, чего более чем достаточно. Если включить логгирование, то упираюсь в syslog-демона (100% ядра съедает).

С syslog-ng получаю 130к без regexp-матчинга и около 95к с ним (отфильтровываю только логи DNS-запросов для отправки на коллектор).

В последних версиях syslog-ng добавили мультитрединг, но оно только снижает производительность, кушая при этом 150% CPU.

Может есть какие-то более производительные syslog-сервера? Или может имеет смысл влезть в исходники Unbound и научить его писать в два syslog-сокета в round-robin и повесить на них два syslog-сервера.

Кто-то решал подобную задачу?

 , , ,

blind_oracle
()

Stub-зоны в Unbound - вопрос

Есть сабжевый резолвер, который занимается рекурсивными запросами для клиентов. Кроме этого, у него сконфигурированы несколько зон второго-третьего уровня, за которыми он должен обращаться к локальному DNS сереверу, примерно так:

stub-zone:
    name: "domain1.com"
    stub-addr: 1.2.3.4

stub-zone:
    name: "sub.domain2.com"
    stub-addr: 1.2.3.4
Всё работает хорошо.

Но тут понадобилось добавить туда же зону вида «sub.sub.domain3.com»... и, почему-то, это его смутило.

С авторитативного сервера всё приходит хорошо:

# host sub.sub.domain3.com 1.2.3.4
Using domain server:
Name: 1.2.3.4
Address: 1.2.3.4#53
Aliases: 

sub.sub.domain3.com has address 10.1.1.1
sub.sub.domain3.com has address 10.1.1.2

А с рекурсоров хрен:

# dig sub.sub.domain3.com @10.1.0.100

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6_7.4 <<>> sub.sub.domain3.com @10.1.0.100
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 24066
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 2, ADDITIONAL: 0

;; QUESTION SECTION:
;sub.sub.domain3.com.              IN      A

;; AUTHORITY SECTION:
sub.sub.domain3.com.       3263    IN      NS      ns1.domain3.com.
sub.sub.domain3.com.       3263    IN      NS      ns2.domain3.com.

;; Query time: 1 msec
;; SERVER: 10.1.0.100#53(10.1.0.100)
;; WHEN: Mon Jan 25 13:59:36 2016
;; MSG SIZE  rcvd: 77
То есть AUTHORITY SECTION он возвращает правильный, а ANSWER SECTION тупо отсутствует.

Камрады, что я делаю не так? Какого лешего домен третьего уровня его устраивает, а чётвертого - уже нет?

 

blind_oracle
()

RSS подписка на новые темы