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

Hetzner — создаем диск на 9 Tb под CentOS

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

В Hetzner существует возможность аренды серверов с большими дисками по 3 Tb. Ниже пойдет речь о том, как запустить сервер с 4 x 3 Tb Software RAID-5 и создать диск размером 9 Tb.

Заказываем RESCUE-mode из панели управления Hetzner.
Заходим по SSH и запускаем установку ОС из образа:

installimage

Выбираем CentOS 6 64bit, а в файле конфигурации прописываем следующие параметры:

SWRAIDLEVEL 1
PART /grub ext3 128M
PART swap swap 8G
PART / ext3 30G
PART /vz ext4 all

После установки запрашиваем еще раз в панели управления Hetzner RESCUE-mode и запускаем

reboot

После перезагрузки удаляем ненужные массивы:

mdadm -S /dev/md0
mdadm -S /dev/md3

mdadm --zero-superblock /dev/sda1
mdadm --zero-superblock /dev/sdb1
mdadm --zero-superblock /dev/sdc1
mdadm --zero-superblock /dev/sdd1
mdadm --zero-superblock /dev/sda5
mdadm --zero-superblock /dev/sdb5
mdadm --zero-superblock /dev/sdc5
mdadm --zero-superblock /dev/sdd5

Конвертируем partition table из MSDOS в GPT (запускаем и нажимаем «w», после чего подтверждаем):

gdisk /dev/sda
gdisk /dev/sdb
gdisk /dev/sdd
gdisk /dev/sdc

Задаем загрузочный раздел для GRUB:

parted /dev/sda set 1 bios_grub on
parted /dev/sdb set 1 bios_grub on
parted /dev/sdc set 1 bios_grub on
parted /dev/sdd set 1 bios_grub on

Дублируем таблицу партиций из GPT в MSDOS:

apt-get install gptsync
gptsync /dev/sda
gptsync /dev/sdb
gptsync /dev/sdc
gptsync /dev/sdd

Загружаем GRUB и перезагружаем сервер:

mount /dev/md2 /mnt
mount --bind /sys /mnt/sys
mount --bind /proc /mnt/proc
mount --bind /dev /mnt/dev
chroot /mnt
grub-install /dev/sda
grub-install /dev/sdb
grub-install /dev/sdd
grub-install /dev/sdc

Удаляем из /etc/fstab следующие строки:

/dev/md0 /grub ext3 defaults 0 0

И перезагружаем:

reboot

Устанавливаем parted:

yum install -y parted

Удаляем маленькие партиции, создаем большие и перезагружаем сервер (чтобы перечиталась таблица партиций):

parted /dev/sda rm 5
parted /dev/sdb rm 5
parted /dev/sdd rm 5
parted /dev/sdc rm 5

parted /dev/sda mkpart RAID ext4 40.9GB 2960GB
parted /dev/sdb mkpart RAID ext4 40.9GB 2960GB
parted /dev/sdd mkpart RAID ext4 40.9GB 2960GB
parted /dev/sdc mkpart RAID ext4 40.9GB 2960GB

parted /dev/sda set 4 raid on
parted /dev/sdb set 4 raid on
parted /dev/sdd set 4 raid on
parted /dev/sdc set 4 raid on
reboot

И, после перезагрузки, заново создаем RAID-5 с использованием всех 4-х дисков (ключи «--spare-devices=0» и «--force» принуждают mdadm использовать все 4 диска для RAID-5, в ином случае 4-й диск становится резервным):

mdadm --create /dev/md3 --raid-devices=4 --spare-devices=0 --force --level=5 /dev/sda4 /dev/sdb4 /dev/sdc4 /dev/sdd4

Записываем в /etc/mdadm.conf новые данные о массивах. Получаем новый вывод командой

mdadm --examine --scan

и копируем его в /etc/mdadm.conf.

Дальше проще всего обновить ядро. :-)
При обновлении ядра, создается новый initrd с правильным mdadm.conf, что исключает появление /dev/md127 вместо /dev/md3.
Для примера, устанавливаем vzkernel из репозитория openvz (этот файл можно положить в /etc/yum.repos.d/). И перезагружаем сервер.

yum install vzkernel
reboot

Создаем файловую систему

mkfs.ext4 -m0 /dev/md3

И дожидаемся, когда синхронизируется рейд:

watch cat /proc/mdstat

12.10.2011

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

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

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

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

Если вам нужен 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

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

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

Как добавить PostgreSQL пользователя только для чтения

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

http://www.ruizs.org/archives/89

14.11.2010

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

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

Как определить, что съело всю память?

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

Устанавливаем valgrind:

yum install valgrind

Запускаем на примере apache:

valgrind --tool=memcheck --num-callers=30 --log-file=apache.log --leak-check=full --trace-children=yes /usr/sbin/httpd

03.11.2010

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

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

Zabbix 1.8.3 CentOS RPM

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

В репозиторий Southbridge добавлен пакет Zabbix 1.8.3 (rpm базируется на пакете Andrew Farley).

03.10.2010

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

Установка Linux IC 2.1-драйверов для Hyper-V

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

Драйвер доступен по ссылке: http://www.microsoft.com/downloads/en/details.aspx?displaylang=en&FamilyID=eee39325-898b-4522-9b4c-f4b5b9b64551


Описание установки: http://howtoforge.com/installing-linux-integration-services-v2.1-hyper-v-r2-on-centos-5


Привязка к DKMS (автоматическая установка модулей после обновления ядра): http://support.microsoft.com/kb/2387594

01.10.2010

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

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

Добавлен nginx с плагином «H.264 Streaming Module»

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

В репозиторий Southbridge добавлен пакет «nginx-mp4» с плагином «H.264 Streaming Module» (http://h264.code-shop.com/trac/wiki/Mod-H264-Streaming-Nginx-Version2).

12.09.2010

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