LoginSignup
22
23

More than 5 years have passed since last update.

GlusterFS

Last updated at Posted at 2013-08-26

サーバー側

インストール

wget -P /etc/yum.repos.dhttp://download.gluster.org/pub/gluster/glusterfs/LATEST/EPEL.repo/glusterfs-epel.repo
sed -i 's/^enabled=1/enabled=0/g' /etc/yum.repos.d/glusterfs-epel.repo
yum install --enablerepo=glusterfs-epel glusterfs{-fuse,-server}
chkconfig glusterd on
service glusterd start

データー領域(ブリック)の作成

Red Hat Storageの場合、ストレージブリックのファイルシステムはLVM + XFSじゃないとサポートされない。

LVM作成

pvcreate {DEVICE-PATH}
vgcreate {VG-NAME} {DEVICE-PATH}
lvcreate -L 100G -n {LV-NAME} {VG-NAME}

ファイルシステムのフォーマット

xfsかext4どちらか選択

xfsフォーマット
yum install xfsprogs
mkfs.xfs -i size=512 {DEVICE-PATH}
mkdir -p {PATH}
vi /etc/fstab
    /dev/{VG-NAME}/{LV-NAME} {PATH} xfs  defaults 1 2
mount -a
ext4フォーマット
mkfs.ext4 -I 512     {DEVICE-PATH}
mkdir -p {PATH}
vi /etc/fstab
        /dev/mapper/{VG-NAME}-{LV-NAME} {PATH} ext4 defaults 1 2
mount -a

peer

gluster peer probe {GLUSTERIP|HOST}
gluster peer status

volume

Distributed Volume

  • ファイル分散方式でGlusterFSデフォルトの構成
  • ファイルはいずれかのサーバーに格納
  • サーバーに障害が発生した場合は、そのサーバー内に保存されているファイルだけが参照できない
gluster volume create {VOLNAME} \
{GLUSTERIP|HOST}:{PATH} \
{GLUSTERIP|HOST}:{PATH}

Striped Volume

  • RAID 0 方式
  • ひとつのファイルをサーバー間で分割(ストライプサイズ:デフォルト128KB)格納
  • サーバーに障害が発生した場合は、全てのファイルにアクセスできなくなる
gluster volume create {VOLNAME} \
stripe  {COUNT} \
{GLUSTERIP|HOST}:{PATH} \
{GLUSTERIP|HOST}:{PATH}

Replicated Volume

  • RAID 1 方式
  • ひとつのファイルをサーバー間でミラーリングする
  • サーバーに障害が発生した場合は、片方のサーバーからファイルにアクセスできる
gluster volume create {VOLNAME} \
replica {REPLICA_COUNT} \
{GLUSTERIP|HOST}:{PATH} \
{GLUSTERIP|HOST}:{PATH}

起動

gluster volume start {VOLNAME}

確認

gluster volume info
gluster volume status

nfsインストール(nfsマウントする場合のみ)

yum install nfs-utils rpcbind
chkconfig rpcbind on
service rpcbind start
service nfs stop

クライアント側

インストール

wget -P /etc/yum.repos.dhttp://download.gluster.org/pub/gluster/glusterfs/LATEST/EPEL.repo/glusterfs-epel.repo
sed -i 's/^enabled=1/enabled=0/g' /etc/yum.repos.d/glusterfs-epel.repo
yum install --enablerepo=glusterfs-epel glusterfs-fuse

マウント

mkdir -p {MOUNT_PATH}

glusterfs/nfsどちらか選択

glusterfsによるマウント

mount -t glusterfs {GLUSTERIP|HOST}:/{VOLNAME} {MOUNT_PATH}

nfsによるマウント

OS 標準の nfs でなはくgluster専用の nfs を使うため、nfsは起動してはいけない。

mount -t nfs -o mountproto=tcp,vers=3 {GLUSTERIP|HOST}:/{VOLNAME} /{MOUNT_PATH}

GlusterFS用チューニング

kernel_tuner.sh
#!/bin/sh

#--- memo --
# 参考:https://sites.google.com/site/glusterfstech/install

#--- vm.swappiness [デフォルト:60]
# 0にすると物理メモリを使いきるまでswapしなくなる。

#--- vm.dirty_background_ratio [デフォルト:10]
#メモリに対してdirtyデータが指定の%になるとバックグラウンドでpdflushが動作
#値を小さくすればこまめに掃除をし、メモリが空く可能性がある。

#--- kernel.sched_wakeup_granularity_ns [デフォルト:2000000]

#--- /sys/block/sda/queue/scheduler [デフォルト:cfq]
#------ noop
#------ anticipatory
#------ cfq
# 全てのプロセスに均等にI/Oを割り当てる。
# 多数のプロセスが細かいI/Oを大量に発生させる場合はこれが良い。
#------ deadline
# I/O待ち時間の限界点(deadline)を設けて、
# それが近付いたものを優先的に処理していく。
# 少数のプロセスが大量のI/Oを発生させる環境に適している。

#--- /sys/block/sda/queue/nr_requests [デフォルト:128]
# 数値を増やすことによりより多くのI/O要求を受け付けられるようになるが、
# I/Oデバイスの種類によってはQueueが長過ぎる状態となり、
# 逆にパフォーマンスが悪化する場合もある

function set_sysctl(){

    local SYSCTL_NAME=$1
    local SYSCTL_NEW=$2

    SYSCTL_OLD=$(sysctl -n "${SYSCTL_NAME}")
    sysctl -w ${SYSCTL_NAME}=${SYSCTL_NEW}
    local MESSAGE="${SYSCTL_NAME} ${SYSCTL_OLD} >> ${SYSCTL_NEW}"
    logging "${MESSAGE}"

}

function logging(){

    local MESSAGGE=$1
    echo "${MESSAGE}"
    logger -ip local0.info ${MESSAGE}

}

function set_sys(){

    local SCHEDULER_NEW="deadline"
    local NR_REQUESTS_NEW=256

    for IOSCHED_PATH in $(ls -d /sys/block/*/queue/iosched 2>/dev/null); do

        if [ -z ${IOSCHED_PATH} ]
        then
            continue
        else

            QUEUE_DIR=$(dirname ${IOSCHED_PATH})
            SCHEDULER_PATH="${QUEUE_DIR}/scheduler"
            NR_REQUESTS_PATH="${QUEUE_DIR}/nr_requests"


            if [ -f ${SCHEDULER_PATH} ]
            then
                SCHEDULER_OLD=$(cat "${SCHEDULER_PATH}")
                echo "${SCHEDULER_NEW}" > ${SCHEDULER_PATH}
                MESSAGE="${SCHEDULER_PATH} ${SCHEDULER_OLD} >> ${SCHEDULER_NEW}"
                logging "${MESSAGE}"
            fi

            if [ -f ${NR_REQUESTS_PATH} ]
            then
                NR_REQUESTS_OLD=$(cat ${NR_REQUESTS_PATH})
                echo "${NR_REQUESTS_NEW}" > ${NR_REQUESTS_PATH}
                MESSAGE="${NR_REQUESTS_PATH} ${NR_REQUESTS_OLD} >> ${NR_REQUESTS_NEW}"
                logging "${MESSAGE}"

            fi
        fi

    done


}

set_sysctl "vm.swappiness" "10"
set_sysctl "vm.dirty_background_ratio" "1"
set_sysctl "kernel.sched_wakeup_granularity_ns" "15"
set_sys
22
23
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
23