Игорь Олемской — практические заметки по системному администрированию Linux CentOS

Архив рубрики ‘Мои записи’

Новые статьи по системному администрированию нагруженных серверов

Комментариев нет

Читайте наши новые статьи по системному администрированию на Хабрахабре.

21.11.2014

Написал Игорь Олемской

Рубрики: Мои записи

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

11.11.2012

Написал Игорь Олемской

CentOS 6 — обновление сетевого драйвера Realtek r8168

3 комментария

По-умолчанию CentOS определяет некоторые сетевые платы realtek как r8169, что вызывает потери пакетов, медленную скорость и т.п. Решение простое — обновите драйвер.

Драйвер доступен в репозитории elrepo под названием kmod-r8168.

rpm -Uvh http://elrepo.org/elrepo-release-6-4.el6.elrepo.noarch.rpm
yum install kmod-r8168

Если вы используете OpenVZ, последний собранный rpm драйвера доступен в репозитории Southbridge (собранный драйвер требует определенную версию ядра — мы используем последнюю стабильную версию OpenVZ-ядра на момент сборки rpm kmod-r8168):

rpm -Uvh http://rpms.southbridge.ru/southbridge-rhel6-stable.rpm
yum install kmod-r8168

11.11.2012

Написал Игорь Олемской

Рубрики: Мои записи

Теги: , , , ,

CentOS 6 — обновление сетевого драйвера e1000e

4 комментария

Стандартный драйвер 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. Драйвер доступен в репозитории elrepo.
Если вы используете OpenVZ, последний собранный rpm драйвера доступен в репозитории Southbridge (собранный драйвер требует определенную версию ядра — мы используем последнюю стабильную версию OpenVZ-ядра на момент сборки rpm kmod-e1000e).

11.11.2012

Написал Игорь Олемской

Рубрики: Мои записи

Теги: , , ,

Hetzner — решение ACPI conflict и падающего сервера

2 комментария

Новые серверы в 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 для установленного ядра, а так же делаем это автоматически после обновлений.

11.11.2012

Написал Игорь Олемской

Ошибка GIT «error: RPC failed; result=22, HTTP code = 411»

Комментариев нет

По-умолчанию максимальный размер POST для git — 1 Mb. Чтобы увеличить это значение, достаточно запустить команду:

git config http.postBuffer 524288000

11.11.2012

Написал Игорь Олемской

Рубрики: Мои записи

Теги:

Как запустить два 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

08.08.2011

Написал Игорь Олемской

Рубрики: Мои записи

Настройка 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;
    }
}

07.06.2011

Написал Игорь Олемской

Рубрики: Мои записи

Увеличиваем производительность файловой системы ext3 / ext4

Один комментарий

Включаем writeback по-умолчанию:

tune2fs -o journal_data_writeback /dev/md2

Добавляем параметр «noatime» в файл /etc/fstab (обратите внимание, что вместо ext3 может быть ext4):

/dev/md2 / ext3 defaults,noatime,data=writeback 0 0

И перезагружаем сервер.

22.04.2011

Написал Игорь Олемской

Рубрики: Мои записи

Настройка GlusterFS 3.1.2 под CentOS 5 в контейнере OpenVZ

2 комментария

Если вам нужен 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. Загружаем по ссылке «http://download.gluster.com/pub/gluster/glusterfs/3.1/LATEST/» RPM-пакеты «glusterfs-core» и «glusterfs-fuse», а так по ссылке «http://download.gluster.com/pub/gluster/glusterfs/fuse/» — fuse.
Устанавливаем на 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» (подробнее о replication и stripe):

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

08.02.2011

Написал Игорь Олемской

Рубрики: Мои записи