Читайте наши новые статьи по системному администрированию на
Новые статьи по системному администрированию нагруженных серверов
CentOS 6 — child pid XXXX exit signal Segmentation fault (11)
Чтобы понять, почему падает приложение, воспользуйтесь gdb. А если корки еще не генерируются, включите их — дальше описано, как это сделать.
По-умолчанию в CentOS 6 отключена генерация coredump. Чтобы включить, добавьте скрипт /etc/profile.d/coredump.sh:
#!/bin/sh ulimit -c unlimited
Включите CoreDumpDirectory в Apache. Добавьте файл /etc/httpd/conf.d/coredump.conf и перезагрузите httpd:
CoreDumpDirectory /tmp
Теперь можно смотреть coredump:
gdb /usr/sbin/httpd /tmp/XXXX.core backtrace
CentOS 6 — обновление сетевого драйвера Realtek r8168
По-умолчанию CentOS определяет некоторые сетевые платы realtek как r8169, что вызывает потери пакетов, медленную скорость и т.п. Решение простое — обновите драйвер.
Драйвер доступен в
rpm -Uvh http://elrepo.org/elrepo-release-6-4.el6.elrepo.noarch.rpm yum install kmod-r8168
Если вы используете OpenVZ, последний собранный rpm драйвера доступен в
rpm -Uvh http://rpms.southbridge.ru/southbridge-rhel6-stable.rpm yum install kmod-r8168
CentOS 6 — обновление сетевого драйвера e1000e
Стандартный драйвер e1000e то и дело глючит или вообще падает.
Рекомендую выполнить следующие шаги, чтобы добиться стабильной работы сервера с использованием e1000e.
1. Добавьте в /etc/rc.local:
echo performance >/sys/module/pcie_aspm/parameters/policy /sbin/grubby --args=pcie_aspm=off --update-kernel=ALL
Таким образом pcie_aspm будет добавляться в grub.conf после обновления ядра автоматически.
2. Создайте и запустите скрипт, который при необходимости исправит баг в настройках сетевой платы:
eth_make () { echo "This fixup is applicable to your hardware" var=$(ethtool -e $1 | grep 0x0010 | awk '{print $16}') new=$(echo ${var:0:1}`echo ${var:1} | tr '014589bc' '2367abef'`) if [ ! ${var:0:1}${var:1} == $new ]; then echo "executing command: ethtool -E $1 magic $dev offset 0x1e value 0x$new" ethtool -E $1 magic $dev offset 0x1e value 0x$new echo "Change made. You *MUST* reboot your machine before changes take effect!" fi } eth () { bdf=$(ethtool -i $1 | grep "bus-info:" | awk '{print $2}') dev=$(lspci -s $bdf -x | grep "00: 86 80" | awk '{print "0x"$5$4$3$2}') case $dev in 0x10d38086) echo "$1: is a \"82574L Gigabit Network Connection\"" eth_make $1 ;; 0x10f68086) echo "$1: is a \"82574L Gigabit Network Connection\"" eth_make $1 ;; 0x150c8086) echo "$1: is a \"82583V Gigabit Network Connection\"" eth_make $1 ;; *) #echo "No appropriate hardware found for this fixup" ;; esac } eth eth0 eth eth1
3. Установите драйвер kmod-e1000e. Драйвер доступен в
Если вы используете OpenVZ, последний собранный rpm драйвера доступен в
Hetzner — решение ACPI conflict и падающего сервера
Новые серверы в Hetzner, работающие на CentOS 6.3 (OpenVZ), время от времени зависают — помогает только Manual hardware reset.
Единственное подозрение вызывает строка "ACPI: resource 0000:00:1f.3 [io 0xf040-0xf05f] conflicts with ACPI region SMBI [io 0xf040-0xf04f]" в dmesg.
Красивого решения пока не придумали, зато есть решение надежное, которое исключает падения в будущем. Добавляем строку в /etc/rc.local
/sbin/grubby --args=acpi=off --update-kernel=ALL
Таким образом, отключаем ACPI для установленного ядра, а так же делаем это автоматически после обновлений.
Ошибка GIT «error: RPC failed; result=22, HTTP code = 411»
По-умолчанию максимальный размер POST для git — 1 Mb. Чтобы увеличить это значение, достаточно запустить команду:
git config http.postBuffer 524288000
Как запустить два PostgreSQL 9 на одном CentOS-сервере
Назовем второй сервер баз данных «db2». Создаем второй init.d-конфиг и добавляем его в автозагрузку:
ln -s /etc/init.d/postgresql-9.0 /etc/init.d/postgresql-db2 chkconfig --add postgresql-db2 chkconfig postgresql-db2 on
Добавляем соответствующий конфиг запуска:
cat << EOF >/etc/sysconfig/pgsql/postgresql-db2 PGDATA=/var/lib/pgsql/db2/data PGPORT=5433 PGLOG=/var/lib/pgsql/db2/pgstartup.log EOF
Если у PostgreSQL дефолтная локаль должна быть ru_RU.UTF-8, достаточно на время инициализации в файл «/etc/sysconfig/i18n» добавить строку
LANG="ru_RU.UTF-8"
Инициализируем вторую БД:
service postgresql-db2 initdb
Запускаем:
service postgresql-db2 start
Настройка nginx-passenger для CentOS
В репозиторий Southbridge добавлен RPM для CentOS nginx-passenger 1.0.4-3.0.7.
Для установки выполните следующие команды:
yum install ruby-enterprise-rubygems gem install passenger yum install nginx-passenger
Пример конфига:
passenger_root /usr/local/lib/ruby/gems/1.8/gems/passenger-3.0.7; passenger_ruby /usr/local/bin/ruby; passenger_max_pool_size 20; passenger_pool_idle_time 3600; passenger_default_user nginx; server { listen 80; server_name domain.ru; charset utf-8; access_log off; error_log /var/log/nginx/domain.ru.log; root /var/www/domain.ru/public; location / { try_files $uri /system/maintenance.html @passenger; } location @passenger { passenger_enabled on; } }
Увеличиваем производительность файловой системы ext3 / ext4
Включаем writeback по-умолчанию:
tune2fs -o journal_data_writeback /dev/md2
Добавляем параметр «noatime» в файл /etc/fstab (обратите внимание, что вместо ext3 может быть ext4):
/dev/md2 / ext3 defaults,noatime,data=writeback 0 0
И перезагружаем сервер.
Настройка GlusterFS 3.1.2 под CentOS 5 в контейнере OpenVZ
Если вам нужен NFS (или Gluster Native FS) в OpenVZ-контейнере, GlusterFS — отличное решение.
Ниже будут встречаться следующие обозначения:
- HN1 — первая физическая нода
- HN2 — вторая физическая нода
- VPS1 — первый OpenVZ-контейнер
- VPS2 — второй OpenVZ-контейнер
1. Создаем на HN1 и HN2 файл «/etc/sysconfig/modules/fuse.modules» со следующим содержанием:
/sbin/modprobe fuse
И делаем его исполняемым:
chmod +x /etc/sysconfig/modules/fuse.modules
2. Добавляем на HN1 и HN2 в файл «/etc/vz/conf/$VEID.conf» следующие строки:
CAPABILITY="NET_ADMIN:on SYS_ADMIN:on" DEVICES="c:10:229:rw"
3. На контейнерах VPS1 и VPS2 создаем файл «/etc/init.d/fusedev» со следующим содержимым:
#!/bin/bash # # chkconfig: 05 05 05 # description: /dev/fuse file creation # # Get function from functions library . /etc/rc.d/init.d/functions /bin/mknod /dev/fuse c 10 229
И делаем его исполняемым, а так же добавляем в автозагрузку fusedev и автоматическое монтирование сетевых файловых систем из /etc/fstab:
chmod +x /etc/init.d/fusedev chkconfig fusedev on chkconfig netfs on
4. В контейнерах VPS1 и VPS2 в файле «/etc/glusterfs/glusterd.vol» удаляем из строки «rdma»:
option transport-type socket
5. Загружаем по ссылке «
Устанавливаем на VPS1 и VPS2 пакеты «fuse, fuse-libs, glusterfs-core, glusterfs-fuse».
6. Прописываем на VPS1 и VPS2 в файле «/etc/hosts»:
10.0.0.11 lapi1.domain.ru lapi1 10.0.0.12 lapi2.domain.ru lapi2
7. На VPS1 и VPS2 создаем папки для хранилища:
mkdir -p /storage/api
8. Перезагружаем HN1 и HN2.
9. Составляем кластер. Запускаем на VPS1 команду (lapi2 — хост из /etc/hosts):
gluster peer probe lapi2
10. Создаем и запускаем для примера реплицируемый volume с названием «api» (
gluster volume create api replica 2 transport tcp lapi1:/storage/api lapi2:/storage/api gluster volume start api
lapi1 и lapi2 — хосты из /etc/hosts.
11. И некоторые оптимизации — добавляем кэш. Выполняем команды на VPS1:
gluster volume set api performance.cache-size 500MB gluster volume set api performance.write-behind-window-size 500MB
12. Добавляем в автозагрузку VPS1 и VPS2 монтирование файловой системы. В файл «/etc/fstab» добавляем:
localhost:/api /mnt/api glusterfs defaults,_netdev,noatime 0 0
Монтируем GlusterFS:
mount -a
Готово!
df -H