LINUX.ORG.RU

Сообщения dari0n

 

Mysql ASYNC проблема с количеством коннектов.

Есть проблема парсинга JSON. Есть класс на PHP, который в CLI режиме, через cron парсит JSON файл (выгрузка с другого микросервиса) с записями. Записей в среднем 150к. Задача заносить их в базу Mysql. Суть работы метода: Беру файл, читаю, преобразую через JSON_DECODE в массив, затем перебором по циклу заношу записи в базу. Для каждого запроса Insert создается новый линк в базу (mysqli_connect к базе), затем сначала БЕЗ параметра метода mysqli_query(MYSQLI_ASYNC) записи добавлялись в течении 10 минут. С данным параметром записи добавляются в течении минуты, но плодятся тысячи запросов в секунду, но в методе после INSERT запроса соединение должно разрываться (присутствует mysqli_close($asyncLink), но в некоторых случаях этого не происходит, и выловить почему не могу. В итоге проблема с тем, что количество запросов превышает максимально допустимый в конфиге. Количество оперативной памяти нет смысла увеличивать(пробовал, VPS), т.к. кол-во запросов будет плодиться больше и проблема оттянется на пару дней, но не решится, и придется снова лезть на сервак и тушить mysql сервер, что не гуд. Все должно работать автоматически (файлик упал, сервер увидел, прочитал, занес, удалил). В общем кусок кода:

 private function parseJson()
    {
        $start = microtime(true);
  
        $json = file_get_contents($this->jsonPath);
        $data = json_decode($json, true);

        $i = 0;
        foreach ($data as $entry) {
            foreach ($entry as $good) {
       
                $asyncLink[$i] = new mysqli('localhost', 'root', 'pass');
                $shopx = mysqli_real_escape_string($asyncLink[$i],$good['shop']);
                $goodx = mysqli_real_escape_string($asyncLink[$i],$good['goods']);
                $amoutx = (int)$good['count'];
                $pricex = mysqli_real_escape_string($asyncLink[$i],$good['price']);
                $pricex = (int)$pricex;
                $query = "INSERT INTO goods.goods (shop,good,amout,price) VALUES('$shopx','$goodx','$amoutx','$pricex');";
                $result = mysqli_query($asyncLink[$i], $query, MYSQLI_ASYNC) or die(mysqli_error($asyncLink[$i]));
                mysqli_close($asyncLink[$i]);
                $i++;
            }
        }

Проблема: MySQL Error “Too many connections” (При этом кол-во активных соединений 4 - 4.5к, добавлено 45к+ записей

Версии:

PHP 7.4.3 (cli) (built: Feb 23 2020 07:24:28) ( NTS )

SQL Ver 14.14 Distrib 5.7.29, for Linux (x86_64)

Есть предложения?

 , ,

dari0n
()

Оптимизация работы почты. (NFS)

Есть 2 сервера.

mail-server (iRedMail). Вся почта хранится на сетевой шаре /mnt/vmail прикрученной по NFS

storage-server (NFS, на SSD)

Скорость передачи данных по сети между серверами 1 Гбит/с.

Количество пользователей почты 600+.

Проблема: При рассылке писем с вложениями(Даже если вложение меньше 1мб) нагрузка на диск доходит до 100%. Почтовый сервер уходит в «out of service». Htop показывает статус «D» у процессов Dovecot на почтовом сервере. На хранилище Atop показывает бешеную нагрузку на диск.

Как я понял, dovecot кладет вложения в папку каждого пользователя, участвующего в рассылке и из-за этого такая нагрузка на диск.

Вопрос: Сталкивался ли кто с таким? И что в таких ситуациях делать.

 , , , ,

dari0n
()

IRedmail и CIFS

Всем доброго времени суток. Есть 2 сервера. Первый сервер на окнах, подключенный к домену, на нем сетевая шара, допустим \\192.168.10.10\share. Для тестирования, права rw в нее имеют все пользователи.

Второй сервер Iredmail. Стоит задача сохранять почту, бэкапы и пр. в сетевую шару (\\192.168.10.10\share\vmail\);

Монтирую шару с помощью CIFS в /mnt/mail (chmod 777), проверяю mount, все ок. Далее провожу установку (уже не первый раз), чаще всего во время установки bash скрипты бэкапов не падают в шару /mnt/vmail/backup по причине отсутствия доступа, иногда при тех же манипуляциях все устанавливается без ошибок, но если я перезагружаю сервер, то вся шара монтируется от рута и dovecot, vmail и им подобные писать туда не могут из-за отсутствия прав.

Что я пробовал: 1) Монтировать автозагрузкой (bash) от gid,uid 2000 (vmail), проблема та-же. 2) Тоже что и в первый раз, но уже с полными правами на папку (dir_mode и file_mode 777), проблема та-же. 3) Монтировать через /etc/fstab. Монтирование проходит, прав снова нет. ls -l показывает полные права и владельца root:root. (При самом первом монтировании и установке права на подпапки в шаре имеют разных владельцев. 4) Добавлять юзеров Iredmail'а в группу рута (ну мало ли), не помогло. 5) Такие же операции только с машиной не в домене. Проблема осталась.

tail -f /var/log/dovecot/imap.log говорит, что ничего не может и permission denied.

Есть какие-нибудь предложения? (NFS поднимать не вариант).

 ,

dari0n
()

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