Задать вопрос
  • RAID10: Как ремапить софтварный RAID10, если "вылетел" один из дисков? Как расчитать скорость ремапа RAID10?

    Melkij
    @Melkij
    1) mdadm /dev/md? -f /dev/sd? ; заменяете диск ; mdadm /dev/md? -a /dev/sd?
    операция штатная, если не ошибиться в именах устройств,то дальшележащая файловая система не узнает, что что-то вообще происходило.
    2) фактора два:
    - надо записать объём данных равный размеру этого тома. То есть 10тб / среднюю скорость последовательной записи
    - чтобы было что записать, это что-то сперва надо прочитать. Если у вас layout дефолтный near2 - то 10тб / скорость чтения одного парного диска. То есть зависит от нагрузки на оставшийся парный диск, ведь информацию надо сперва прочитать. Для offset и far - блоки будут размазаны по всем дискам и соответственно больше дисков будет использоваться для чтения. Кроме совсем загруженных случаев упрётся в скорость записи на новый диск.
    3) linux raid10 нельзя рассматривать как зеркало поверх страйпа или страйп поверх зеркала. Это один массив (а для разных layout и пишется по-разному). Ядро отлично понимает, что если выпал один диск - только блоки которые должны быть на нём и надо восстанавливать при ребилде.
  • RAID6 vs RAID10+LVM почему 10тка себя неадекватно ведет после нагрузки на диски больше 50%(LA по iowait лимитирует к 100% )?

    Melkij
    @Melkij
    Ничего касательно "быстрее" у вас на графике не вижу.

    Не сталкивался. Просто прокомментировал что для linux raid 10 по дефолту картина неравномерной утилизации пар дисков характерна, исправляется сборкой offset2
  • RAID6 vs RAID10+LVM почему 10тка себя неадекватно ведет после нагрузки на диски больше 50%(LA по iowait лимитирует к 100% )?

    Melkij
    @Melkij
    При чем первый stripe из RAID10 нагружен при пиковых нагрузках на 10-15% больше за второй

    Это нормально для дефолтного распределения. Соберите его с --layout=o2, будет куда более ровно по всем дискам.
  • Postgresql: пустой ответ на запрос при наличии записей: сбой или есть причина?

    Melkij
    @Melkij
    Просто отключите кеширование данных запросов

    если бы postgresql понял, что кэш устарел, он запросил бы их заново из таблицы

    Мне очень интересно, где вы в postgresql нашли кэш запросов.
    Нет его, никогда не было и не будет. В mysql - единственной мне известной СУБД где когда-то был кэш запросов - его уже тоже нет.

    Ну а если вы про внешний кэш говорите - то откуда бы базе узнать, что тот протух?

    покажите select vesion();
  • Какую версию php лучше поставить 7.0, 7.2 или 7.3?

    Melkij
    @Melkij
    Sanes, вы о чём? mbstring как был так и остался: https://github.com/php/php-src/tree/PHP-7.3/ext/mb...
    И в 7.4 он тоже будет там же где и раньше: https://github.com/php/php-src/tree/PHP-7.4/ext/mb...
  • Как выбрать несколько значений из базы данных?

    Melkij
    @Melkij
    Ну так mysql_fetch_row совершенно очевидно возвращает одну строку из результата. Потому что так и должна работать.
  • Код рабочий только когда имя не содержит пробелов. Имя находится в бд MySQL в чем проблема?

    Melkij
    @Melkij
    все таки проблема в javascript коде

    вот именно к этому я и веду. Это хоть и не непосредственная причина, но отличная точка где всё-таки можно остановиться и задать вопрос уже очень сильно меньше в размере.
    Но зачем вы оставили весь код связанный с БД? var_dump($_POST) в результате ajax запроса - или ещё лучше репорт из средств разработчика браузера, что данные так и были отправлены. То есть обработчик этого ajax запроса можно из рассмотрения выбросить целиком. Какой в нём смысл, если данные ему уже отправляют повреждёнными?
    Раз проблема судя по всему на клиентской стороне - выбросьте из вопроса и формирование html тоже. Замените на статический html. В ajax запросе всё ещё только одно слово? Значит ни субд ни php никакого отношения к проблеме не имеют.
    И вот уже рассматриваем не 3 листинга, а один js плюс одну строку html.

    Отгадка.
    И ошибка не касается языков программирования. JS тоже тут ни при чём. Вообще. Серьёзно. Ошибка просто в HTML
    <input name=user required>
    Чему равен name? "user required"? Нет? Почему? Отличается ли этот пример от вашего HTML?
    <div class=doom data-plusw=my name>
    Нет. Всё тот же самый парсер HTML, который по историческим причинам вынужден пытаться прожевать практически что угодно и не возмущаться при этом. Есть некий атрибут name без значения, а для атрибута data-plusw значением является только my.
    <div class="doom" data-plusw="my name">
    А так есть атрибут data-plusw со значением my name
    Потому пробел и играет решающую роль: он изменяет разметку документа. И потому же это критичная ошибка безопасности, XSS называется.

    '<div class="doom" data-plusw="' . htmlspecialchars($author['user']) . '">'
  • Код рабочий только когда имя не содержит пробелов. Имя находится в бд MySQL в чем проблема?

    Melkij
    @Melkij
    Продолжайте упрощать. Всё ещё слишком много лишнего.
    Что у вас в $_POST пришло? Что отправил браузер?
    spoiler
    div class=doom row или div class="doom row" - в чём разница? Что будет атрибут HTML, а что его значением?
  • Код рабочий только когда имя не содержит пробелов. Имя находится в бд MySQL в чем проблема?

    Melkij
    @Melkij
    Да, проявление ошибки забавное (к слову, эта ошибка критична по безопасности; в этом коде очень много проблем)
    Но ошибка элементарная. И именно вам как начинающему было бы куда лучше овладеть навыком определения места ошибки. Вы привели слишком много кода, никак не связанного с вашей ошибкой в действительности. Если вы ответите на наводящие вопросы - вы сможете выкинуть из рассмотрения почти весь код. После этого, если вам всё ещё будет неясна причина различного поведения, я поясню, конечно.

    Это ключевой навык для разработчика: искать и проверять, в каком месте реальное выполнение кода отличается от задуманного. Затем уже строить гипотезы о причинах различий и их проверять. Но гадать о причинах имея на руках 2 разных языка программирования, один язык запросов и язык разметки - слишком много сущностей. Необходимо проверить, а не лишние ли некоторые из них.
  • Как собрать NAS c минимальным энергопотреблением?

    Melkij
    @Melkij
    smb и стабильные даже полгигабита? Для меня сильно сомнительно безотносительно всего. Под nfs поверю. Под smb - нет.

    Если вам доступ нужен монопольно для одного хоста - то есть ещё такая штука как DAS.
  • Возможно ли делать ALTER на PG10?

    Melkij
    @Melkij
    Для штатной логической репликации - сначала вносить alter на подписчиках, затем на мастере.
    Это цена за логическую репликацию, головной боли в сопровождении куда больше чем с физической репликацией.
  • RAID-1, почему не видно все разделы?

    Melkij
    @Melkij
    Partition #1 contains a linux_raid_member signature.

    На диске уже была метка какого-то другого массива и его попробовали автоматически собрать под номером 127. С 127 номера идут автоматически собранные массивы.

    Если вы уверены, что на диске определившемся как sdb нет ничего полезного (впрочем, уже поздно об этом думать переписав таблицу разделов) - то разберите массив mdadm -S /dev/md127
  • RAID-1, почему не видно все разделы?

    Melkij
    @Melkij
    # mdadm /dev/md0 -a /dev/sda1
    # mdadm /dev/md1 -a /dev/sda2
    # mdadm /dev/md3 -a /dev/sda4
    Правильно?

    да.
    Затем по /proc/mdstat проследить за ребилдом.
  • О чем говорит эта ошибка?

    Melkij
    @Melkij
    Что мне ваши докеры. База на указанном адресе запущена, спрашиваю? Порт доступен? получается с учётом SNAT и, возможно, L3 роутингом по пути. libpq под прикрытием php-pgsql однозначно отвечает: нет, не доступен. Connection refused может ответить ОС т.к. никто не слушает порт либо любой из firewall по пути если так настроен отвечать.
  • Как правильно прописать конфиг для Hibernate?

    Melkij
    @Melkij
    Это лучше отдельным вопросом задайте. Я не знаю java
  • Почему могут падать потоковые реплики postgres?

    Melkij
    @Melkij
    %h - это чтобы найти, кто пытается тянуть сегмент "requested WAL segment 0000000100001B93000000B7 has already been removed" с того хоста, где эта ошибка в логах появлется. Непосредственно к вопросу не относится, это штатная картина для отставшей реплики со вполне очевидной картиной в логах этой реплики и бесконечного цикла старта репликации и получения ошибки что сегмент предоставить апстрим не может.

    А убивать walreceiver... Может фактически кто угодно, walreceiver можно делать kill и отреагирует в лог он именно так. Вот только при standby_mode=on как у вас он должен проверить restore_command и поскольку той нет - перезапускаться через wal_retrieve_retry_interval. Сколько он, кстати?

    Точная версия базы-то такая? Ещё раз спрошу. 9.5.16?
    И с чего начинали- "invalid record length at 1BCA/DA0E0258" при рестарте не повторяется?
  • Почему могут падать потоковые реплики postgres?

    Melkij
    @Melkij
    2019-04-13 15:22:54 - такого времени ещё нет, это же EST, сейчас там 12 только наступило

    Я имел в виду эквивалент для 2019-04-13 15:22:54 UTC. Очень уж интересный ход:

    2019-04-13 15:22:54.761 UTC [2770] LOG: started streaming WAL from primary at 1BCA/DA000000 on timeline 1
    2019-04-13 15:22:54.761 UTC [2770] DEBUG: sending write 1BCA/D9FFFFB0 flush 1BCA/D9FFFFB0 apply 1BCA/D9FFFFB0
    2019-04-13 15:22:54.761 UTC [2770] DEBUG: sending hot standby feedback xmin 0 epoch 0
    2019-04-13 15:22:54.762 UTC [2770] DEBUG: sendtime 2019-04-13 15:22:54.765466+00 receipttime 2019-04-13 15:22:54.762726+00 replication apply delay (N/A) transfer latency 0 ms
    2019-04-13 15:22:54.762 UTC [2770] DEBUG: sending write 1BCA/DA020000 flush 1BCA/D9FFFFB0 apply 1BCA/D9FFFFB0
    2019-04-13 15:22:54.815 UTC [2770] DEBUG: sending write 1BCA/DA020000 flush 1BCA/DA020000 apply 1BCA/D9FFFFB0
    2019-04-13 15:22:54.816 UTC [2770] FATAL: terminating walreceiver process due to administrator command

    walreceiver запустился, отчитался апстриму что сохранил 1BCA/DA020000, а вот дальше его кто-то прибил.

    2019-04-13 10:47:38.334 EST [10121] postgres@[unknown] ERROR: 58P01: requested WAL segment 0000000100001B93000000B7 has already been removed

    Это уже какое-то время назад дохлая реплика пытается подцепиться, база отвечает "прости, такого старья не храню". Стоит добавить %h в log_line_prefix, тогда хоть будет понятно с какого адреса.

    а явно как указать? тут же не путь до файла вроде.....1BCA/DA000000

    это позиция wal, но оно довольно просто отражается в имя файла: 0000000100001BCA000000DA. timeline id да два 32-битных числа в HEX
  • Почему могут падать потоковые реплики postgres?

    Melkij
    @Melkij
    Интересно, что реплика судя по логу пытается перекачать 1BCA/DA000000 с апстрима, но её старательно убивают. 192.168.10.10 - мастер? Или каскад? Рядом с 2019-04-13 15:22:54.761 на 192.168.10.10 ничего в логах не осталось?

    на мастере pg_xlogdump тоже говорит что не может распарсить? А если ему указать явно путь до сегмента?
  • Почему могут падать потоковые реплики postgres?

    Melkij
    @Melkij
    Проблемный сегмент по md5 идентичен тому что на мастере? Это последний WAL на репликах или они загружали WAL дальше?
    Раз при рестарте поведение сохраняется - прикрепите лог с log_min_messages=debug5 , с десяток строк от pg_xlogdump --start=1BCA/DA0E0258
    Ну и продублирую вопрос с ruSO - какая точно версия СУБД?

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