В книге описаны теория и практические советы по настройке, оптимизации и масштабированию PostgreSQL. Очень рекомендую!
Архив рубрики ‘Мои записи’
ip_conntrack perfomance
Интересный комментарий из статьи
Some readers may be interested to know what ip_conntrack is in the first place, and why it fills up. If you run an iptables firewall, and have rules that act upon the state of a packet, then the kernel uses ip_conntrack to keep track of what state what connections are in so that the firewall rule logic can be applied against them. If you have a system that's getting a lot of network activity (high rates of connections, lots of concurrent connections, etc) then the table will accumulate entries.
The entries remain until an RST packet is sent from the original IP address. If you have a flaky network somewhere between you, and the clients accessing your server, it can cause the RST packets to be dropped due to the packet loss, and leave orphaned entries in your ip_conntrack table. This can also happen if you have a malfunctioning switch or NIC card... not necessarily a routing problem out on the internet somewhere.
Typically when I've seen this trouble crop up is when a server is the target of a DDoS attack. Filling up the ip_conntrack table is a relatively easy way to knock a server off line, and attackers know this.
As Major suggested, you can get short term relief by increasing the size of the table. However, these entries are held in memory by the kernel. The bigger you make the table, the more memory it will consume. That memory could be used by your server to serve requests if you really don't need the stateful firewall capability. Don't waste resources on this feature if you really don't need it.
Another option to consider is turning OFF iptables rules that use ip_conntrack so the state able is not used at all. Anything with «-m state» or «-t nat» can be turned off. If you want to just flush all your iptables rules you can do an «iptables -P» to set a default allow policy and «iptables -F» to flush all the rules. On an RHEL or CentOS system you can just do «service iptables stop».
Once iptables is no longer using ip_conntrack, you can reclaim the memory the table was using by unloading the related kernel modules.
rmmod ipt_MASQUERADE rmmod iptable_nat rmmod ipt_state rmmod ip_conntrack
Then you will have an empty ip_conntrack that will stay empty. I mention this because a lot of sysadmins have hordes of iptables rules installed as a matter of course, and don't recognize the downside of having them present. You can still use iptables, but to avoid the use of ip_conntrack simply don't use rules based on stateful logic.
Логирование медленных запросов Apache
Для логирования медленных запросов Apache очень удобно использовать модуль mod_log_slow, домашняя страница которого находится по адресу
Для установки модуля под CentOS 5 64bit можно воспользоваться репозиторием Southbridge:
yum install modlogslow
или установить пакет по прямой ссылке:
rpm -ihv http://rpms.southbridge.ru/stable/x86_64/modlogslow-1.0.6-1.southbridge.x86_64.rpm
Пример конфигурации можно посмотреть в файле /etc/httpd/conf.d/logslow.conf
Как удобно копировать файлы и папки между серверами, соблюдая доступы
Это удобнее всего сделать используя tar через ssh:
tar zcvf - /files | ssh root@192.168.0.1 "cat > /files.tar.gz"
CentOS + OpenVZ: iptables ssh-anti-bruteforce в контейнере
Для того, чтобы в контейнере OpenVZ под CentOS заработала блокировка iptables вида (разрешается не больше 4 соединений для порта 22 в течение 180 секунд):
-A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --update --seconds 180 --hitcount 4 --name DEFAULT --rsource -j DROP -A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --set --name DEFAULT --rsource
Необходимо в файле /etc/vz/vz.conf разрешить следующие iptables-модули:
IPTABLES="iptable_filter ipt_multiport ip_conntrack ipt_REJECT"
По-умолчанию ip_conntrack отсутствует в этом списке, iptables при добавлении приведенных выше правил не ругается, но и ничего не работает.
PostgreSQL: read-only доступ ко всем таблицам БД
Чтобы в PostgreSQL предоставить readonly доступ ко всем созданным к текущему моменту таблицам определенной БД (но за исключением системных таблиц), можно воспользоваться командой:
psql -U postgres -qAt -c "select 'grant select on ' || tablename || ' to username;' from pg_tables where schemaname = 'public'" db_name | psql -U postgres db_name
Где вместо «grant select on» можно указать список доступов, к примеру "grant select, update, insert, delete on ".
Имя супер-пользователя: postgres, название БД, к таблицам которой предоставляется доступ: db_name, название пользователя, которому предоставляется ограниченный доступ: username.
CentOS 5: решение проблемы большого пинга (2000+ ms)
Если ваш сервер под ОС CentOS 5 начинает тормозить, еле откликаться и т.п., при этом загрузка процессора и Load Average в норме — наиболее вероятно, что вам нужно обновить сетевой драйвер.
Данная проблема неоднократно замечена при аренде немецких серверов (hetzner.de, тариф EQ).
Проверить, в этом ли проблема, просто. Запустите:
lspci -v
И найдите ваше Ethernet-устройство. Если в описании указано «RTL8111/8168B» и «rev2», значит это ваш случай.
Подробно о решении задачи написано по ссылке:
Если вы пользуетесь OpenVZ, предлагаем универсальное решение — собранный пакет dkms-r8168-openvz (приложение, которое автоматически после переустановки ядра, при загрузке системы компилирует и устанавливает нужный сетевой драйвер). Установить его можно из :
wget http://rpms.southbridge.ru/southbridge-stable.repo --output-document=/etc/yum.repos.d/southbridge-stable.repo yum install dkms-r8168-openvz
Перезагрузите систему и наберите
dmesg | grep r816
Если на экране появятся ссылки на «r8168», значит вы уже работаете на новом драйвере. Если — «r8169», значит загрузился старый драйвер и необходимо еще раз перезагрузиться (после второй перезагрузки будет установлен драйвер «r8168»).
В дальнейшем, при обновлении ядра, dkms будет автоматически компилировать и устанавливать нужный драйвер для сетевой карты.