------------------------------
Elasticsearch cluster unhealthy (RED)
The Elasticsearch cluster state is RED which means shards are unassigned. This usually indicates a crashed and corrupt cluster and needs to be investigated.
~(以下略)~
------------------------------
Elasticsearchがエラーを吐いているようだ。とりあえず原因切り分けしていこう。
原因切り分け
仮想アプライアンスのGraylogの場合、Elasticsearchの動作ログは以下URLに記載のある通り、/var/log/graylog/elasticsearchにあるようなので、そのディレクトリにあるgraylog.log確認してみる。http://docs.graylog.org/en/2.2/pages/configuration/file_location.html#id5
# tail /var/log/graylog/elasticsearch/graylog.log
------------------------------
~(省略)~
at org.elasticsearch.index.engine.InternalEngine.recoverFromTranslog(InternalEngine.java:235)
... 12 more
Caused by: java.io.EOFException: read past EOF. pos [532245] length: [4] end: [532245]
at org.elasticsearch.common.io.Channels.readFromFileChannelWithEofException(Channels.java:102)
at org.elasticsearch.index.translog.ImmutableTranslogReader.readBytes(ImmutableTranslogReader.java:84)
at org.elasticsearch.index.translog.TranslogReader.readSize(TranslogReader.java:91)
... 19 more
[2017-05-12 21:34:21,922][WARN ][cluster.routing.allocation.decider] [Cody Mushumanski Gun Man] high disk watermark [90%] exceeded on [6-FCB92qRk2n76qo6h1PSg][Cody Mushumanski Gun Man][/var/opt/graylog/data/elasticsearch/graylog/nodes/0] free: 987.6mb[6.4%], shards will be relocated away from this node
------------------------------
下線部があやしい…。どうもディスク使用率が90%を超えて、ElasticsearchのShardがNodeから除外された、といったメッセージに見える。
※NodeやShardといった単語はElasticsearchの用語となるが、この説明は今回は割愛する
dfでディスク使用率を確認してみる。
# df -h
------------------------------
Filesystem Size Used Avail Use% Mounted on
udev 2.0G 4.0K 2.0G 1% /dev
tmpfs 396M 692K 395M 1% /run
/dev/dm-0 15G 14G 981M 94% /
none 4.0K 0 4.0K 0% /sys/fs/cgroup
none 5.0M 0 5.0M 0% /run/lock
none 2.0G 0 2.0G 0% /run/shm
none 100M 0 100M 0% /run/user
/dev/sda1 236M 74M 150M 34% /boot
------------------------------
確かに、/のディスク使用率が94%になっている。どうやらディスク使用率が90%を超えると、Graylogの中で動いているElasticsearchは動作を止めてしまうようだ。ということで、ディスク拡張を行い復旧を試みることにした。
なお、先に言っておくと、ディスク拡張自体は成功したが、冒頭のエラーはディスク拡張だけでは解消しなかった。
ディスク拡張手順
ディスク拡張手順は以下にマニュアルが用意されているので、そのまま実施すればよい。解説を加えつつ実施していこう。http://docs.graylog.org/en/2.2/pages/configuration/graylog_ctl.html#extend-ova-disk
1. 仮想マシンにディスクを追加
ログ保存用のディスクとして、vSphere Clientで仮想ハードディスクを追加する。2. Graylogを再起動
ディスクを認識させるため、一度再起動しておく。$ sudo shutdown -r now
3. Graylogのサービスを停止
作業中はGraylogのサービスを停止しておく。$ sudo graylog-ctl stop
------------------------------
timeout: run: elasticsearch: (pid 861) 83s, want down, got TERM
ok: down: etcd: 0s, normally up
ok: down: graylog-server: 0s, normally up
ok: down: mongodb: 1s, normally up
ok: down: nginx: 0s, normally up
------------------------------
4. ディスクが認識確認
以下コマンドで確認できる。/dev/sdbとして認識していればOK。今回は40GiBのディスクを追加してみた。$ sudo lshw -class disk
------------------------------
DMI SMP PA-RISC device-tree SPD memory /proc/cpuinfo CPUID PCI (sysfs) ISA PnP PCMCIA PCMCIA kernel device tree (sysfs) USB IDE SCSI Network interfaces Framebuffer devices Display CPUFreq ABI *-disk
description: SCSI Disk
physical id: 0.0.0
bus info: scsi@2:0.0.0
logical name: /dev/sdb
size: 40GiB (42GB)
configuration: sectorsize=512
*-disk
description: ATA Disk
product: VMware Virtual I
physical id: 0.0.0
bus info: scsi@0:0.0.0
logical name: /dev/sda
version: 0001
serial: 00000000000000000001
size: 19GiB (20GB)
capabilities: partitioned partitioned:dos
configuration: ansiversion=5 sectorsize=512 signature=000c6ec2
------------------------------
5. ディスクフォーマット
以下3つのコマンドで/dev/sdbのフォーマットを行う。
$ sudo parted -a optimal /dev/sdb mklabel gpt
------------------------------
Information: You may need to update /etc/fstab.
------------------------------
$ sudo parted -a optimal -- /dev/sdb unit compact mkpart primary ext3 "1" "-1"
------------------------------
Information: You may need to update /etc/fstab.
------------------------------
$ sudo mkfs.ext4 /dev/sdb1
------------------------------
mke2fs 1.42.9 (4-Feb-2014)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
2621440 inodes, 10485248 blocks
524262 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
320 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624
Allocating group tables: 0/320 done
Writing inode tables: 0/320 done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: 0/320 done
------------------------------
6. /mnt/tmpに新ディスクをマウント
データコピーのため、新ディスクを/mnt/tmpにマウントする。
$ sudo mkdir /mnt/tmp
$ sudo mount /dev/sdb1 /mnt/tmp
$ df -h
------------------------------
Filesystem Size Used Avail Use% Mounted on
udev 2.0G 4.0K 2.0G 1% /dev
tmpfs 396M 692K 395M 1% /run
/dev/dm-0 15G 14G 981M 94% /
none 4.0K 0 4.0K 0% /sys/fs/cgroup
none 5.0M 0 5.0M 0% /run/lock
none 2.0G 0 2.0G 0% /run/shm
none 100M 0 100M 0% /run/user
/dev/sda1 236M 74M 150M 34% /boot
/dev/sdb1 40G 48M 38G 1% /mnt/tmp ←★マウントされた
------------------------------
7. データコピー
Graylogのデータを旧ディスクから新ディスクにコピーする。データは以下ディレクトリに入っているすべてのファイルとなる。
$ ls -l /var/opt/graylog/data/
------------------------------
total 16
drwxr-x--- 3 graylog graylog 4096 Apr 1 11:59 elasticsearch
drwxr-x--- 3 graylog graylog 4096 May 12 21:40 etcd
drwxr-x--- 3 graylog graylog 4096 May 12 21:41 journal
drwxr-x--- 4 graylog graylog 4096 May 12 21:41 mongodb
cpコマンドでデータをコピーする。容量によっては時間がそこそこ必要となる。
$ sudo cp -ax /var/opt/graylog/data/* /mnt/tmp/
コピー完了後、diffでファイル差分の確認を行う。
$ sudo diff -qr --suppress-common-lines /var/opt/graylog/data /mnt/tmp
------------------------------
Only in /mnt/tmp: lost+found ←★この1行だけ表示されればOK
------------------------------
8. 元ディレクトリのデータを削除し、新ディレクトリと入れ替え
旧データを削除する。フォルダを間違えないように注意すること。$ sudo rm -rf /var/opt/graylog/data/*
一時的にマウントしていた/mnt/tmpの新ディスクをアンマウントする。
$ sudo umount /mnt/tmp
アンマウントした新ディスクを/var/opt/graylog/dataにマウントする。
$ sudo mount /dev/sdb1 /var/opt/graylog/data
マウント結果を確認する。
$ df -h
------------------------------
Filesystem Size Used Avail Use% Mounted on
udev 2.0G 4.0K 2.0G 1% /dev
tmpfs 396M 692K 395M 1% /run
/dev/dm-0 15G 2.7G 12G 19% /
none 4.0K 0 4.0K 0% /sys/fs/cgroup
none 5.0M 0 5.0M 0% /run/lock
none 2.0G 0 2.0G 0% /run/shm
none 100M 0 100M 0% /run/user
/dev/sda1 236M 74M 150M 34% /boot
/dev/sdb1 40G 11G 27G 29% /var/opt/graylog/data
------------------------------
9. 起動時にマウントされるよう、fstabに追加
fstabに新ディスクが自動でマウントされるよう、1行設定を追加する。$ echo '/dev/sdb1 /var/opt/graylog/data ext4 defaults 0 0' | sudo tee -a /etc/fstab
/dev/sdb1 /var/opt/graylog/data ext4 defaults 0 0
fstabの中身を確認する。
$ cat /etc/fstab
------------------------------
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
/dev/mapper/graylog--vg-root / ext4 errors=remount-ro 0 1
# /boot was on /dev/sda1 during installation
UUID=dc6ba91f-86f9-4218-bc13-ccba72b15e63 /boot ext2 defaults 0 2
/dev/mapper/graylog--vg-swap_1 none swap sw 0 0
/dev/sdb1 /var/opt/graylog/data ext4 defaults 0 0
------------------------------
10. Graylogを再起動
最後にGraylogを再起動しておく。$ sudo shutdown -r now
以上でディスク拡張作業は完了となるが、前述したとおり、Elasticsearchのエラーは解消しなかった。
解消するために、さらに対応する必要があったが、その方法は別記事にて記載することにする。
0 件のコメント:
コメントを投稿