ES 数据转移目录

环境描述

备区ES集群由6台服务器组成,3台master节点作为主节点的同时还做为数据节点,另外3台为纯data数据节点。

ES节点名称IP地址ES节点类型
es-01192.168.1.40master,data
es-02192.168.1.8master,data
es-03192.168.1.60master,data
es-04192.168.1.64data
es-05192.168.1.47data
es-06192.168.1.166data

目前各节点ES数据还是存储在/根目录下,通过 df 查看磁盘使用已超过80%。

1
2
3
4
[mms@es-05 mms]$ df -hT|grep -v tmpfs
Filesystem Type Size Used Avail Use% Mounted on
/dev/vda1 ext3 1004G 798G 165G 83% /
192.168.1.144:/ nfs 30T 11T 20T 36% /baklog

面对即将使用完的/根目录,决定对ES磁盘进行扩充并单独挂载到新的目录下;方案是挂载一个新磁盘,对磁盘做lvm逻辑卷,将逻辑卷挂到新目录,然后将ES的数据目录拷贝到新目录下,把旧数据目录重命名 新目录改名为旧目录名称,重启ES服务等待数据平衡完成。

ES 磁盘扩充

基于上面所描述的方案,进行实施操作。

磁盘分区

查看新添加的磁盘

1
2
3
4
5
[mms@es-05 mms]$ lsblk 
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda 253:0 0 1020G 0 disk
└─vda1 253:1 0 1020G 0 part /
vdb 253:16 0 4T 0 disk

对磁盘进行分区,对超过2TB磁盘分区建议使用 parted 工具

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
[root@es-05 ~]# parted /dev/vdb
GNU Parted 3.1
Using /dev/vdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel gpt #将MBR格式的磁盘转换为GPT
Warning: The existing disk label on /dev/vdb will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No? y
(parted) print
Model: Virtio Block Device (virtblk)
Disk /dev/vdb: 4392GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number Start End Size File system Name Flags

(parted) mkpart primary 2048s 100% #使用4k对齐将整块磁盘分成一个分区
(parted) print #查看分区
Model: Virtio Block Device (virtblk)
Disk /dev/vdb: 4392GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number Start End Size File system Name Flags
1 17.4kB 4392GB 4392GB primary

(parted) quit #退出
Information: You may need to update /etc/fstab.

[root@es-05 ~]# lsblk #查看磁盘 已经创建了vdb1分区
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda 253:0 0 1020G 0 disk
└─vda1 253:1 0 1020G 0 part /
vdb 253:16 0 4T 0 disk
└─vdb1 253:17 0 4T 0 part

GPT分区的磁盘可以使用parted来查看4k是否对齐:parted /dev/vdb unit s print

1
2
3
4
5
6
7
8
9
[root@es-06 ~]# parted /dev/vdb unit s print
Model: Virtio Block Device (virtblk)
Disk /dev/vdb: 8577351680s
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number Start End Size File system Name Flags
1 2048s 8577349631s 8577347584s primary

start开始的扇区能被8整除,就表示4k对齐了

创建lvm逻辑卷

没有lvm命令可以使用yum安装:yum install lvm2

创建物理卷PV

1
2
3
4
5
6
7
8
##创建物理卷PV
[root@es-05 ~]# pvcreate /dev/vdb1
Physical volume "/dev/vdb1" successfully created.

##查看PV
[root@es-05 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/vdb1 lvm2 --- 3.99t 3.99t

创建卷组VG

1
2
3
4
5
6
7
8
9
##创建卷组VG 同时把分区/dev/vdb1加入到vg0组里,可以同时添加多个;
##后续将分区添加到vg0可以使用vgextend vg0 /dev/vdc1
[root@es-05 ~]# vgcreate vg0 /dev/vdb1
Volume group "vg0" successfully created

##查看VG
[root@es-05 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vg0 1 0 0 wz--n- 3.99t 3.99t

创建逻辑卷LV

1
2
3
4
5
6
7
8
9
10
##创建逻辑卷LV
##创建lv大小3.99T名称lv0 绑定上面创建的卷组vg0
[root@es-05 ~]# lvcreate -L 3.99T -n lv0 vg0 #这里只有3.99T如果创建4T会失败
Rounding up size to full physical extent 3.99 TiB
Logical volume "lv0" created.

##查看LV
[root@es-05 ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv0 vg0 -wi-a----- 3.99t

磁盘初始化和挂载

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
##格式化磁盘
[root@es-05 ~]# mkfs.xfs /dev/vg0/lv0
meta-data=/dev/vg0/lv0 isize=512 agcount=4, agsize=267764480 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=1071057920, imaxpct=5
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=521728, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0

##创建挂载目录
[root@es-05 tmp]# mkdir /data2
[root@es-05 tmp]# chown mms.mms -R /data2
[root@es-05 tmp]# ll -d /data2
drwxr-xr-x 2 mms mms 4096 Oct 11 10:08 /data2

##通过UUID挂载磁盘
[root@es-05 ~]# blkid |grep lv0
/dev/mapper/vg0-lv0: UUID="ccc08e5b-1209-4585-9e47-782543215dbf" TYPE="xfs"
[root@es-05 tmp]# vim /etc/fstab
UUID=ccc08e5b-1209-4585-9e47-782543215dbf /data2 xfs defaults 1 1
[root@es-05 tmp]# mount -a #挂载fstab中的磁盘
[root@es-05 tmp]# df -hT|grep -v tmpfs #df查看磁盘已经挂载到了新的目录
Filesystem Type Size Used Avail Use% Mounted on
/dev/vda1 ext3 1004G 799G 165G 83% /
192.168.1.144:/ nfs 30T 11T 20T 36% /baklog
/dev/mapper/vg0-lv0 xfs 4.0T 33M 4.0T 1% /data2

后续扩容

1
2
3
4
5
6
7
8
9
10
##扩展vg容量
##在添加一块硬盘创建好PV后,执行vgextend vg0
# vgextend vg0 /dev/sdc1 #添加sdc1分区加入到vg0组
# vgs

##扩展lv容量
# lvextend -L +20G /dev/vg0/lv0 #增加20G

# lvdisplay #查看显示为120G容量,可是挂载后发现还是100G,需要执行xfs_growfs扩展文件系统
# xfs_growfs /dev/vg0/lv0 #不需要卸载分区,扩展文件系统大小

扩展知识:LVM管理命令

功能PV管理命令VG管理命令LV管理命令
Scan(扫描)pvscanvgscanlvscan
Create (建立)pvcreatevgcreatelvcreate
Display (显示)pvdisplayvgdisplaylvdisplay
Remove (移除)pvremovevgremovelvremove
Extend (扩展)vgextendlvextend
Reduce (减少)vgreducelvreduce

ES 切换数据存储目录

在切换数据目录前,我们需要将现在有ES数据目录拷贝到新创建目录下

拷贝ES数据到新目录

使用rsync工具增量同步

1
2
##先同步一份ES目录数据,后面在进行切换的时候再重新同步增量数据
[root@es-05 ~]$ rsync -avL --delete /data/ /data2/

重启ES服务及注意事项

以下操作务必同时只操作一台ES服务器,一台服务器切换完等待集群变为green后再操作另一台

查看ES集群状态

1
2
3
4
5
6
7
8
##查看集群状态
curl -u elastic http://192.168.1.8:9200/_cluster/health?pretty

##查看索引状态
curl -u elastic http://192.168.1.8:9200/_cat/indices?v

##查看集群节点信息
curl -u elastic http://192.168.1.8:9200/_cat/nodes

关闭ES索引自动平衡

1
curl -XPUT -u elastic "http://192.168.1.8:9200/_cluster/settings" -H 'Content-Type: application/json' -d' { "transient" : { "cluster.routing.allocation.enable" : "none" } }'

停止ES服务

1
2
3
4
5
6
7
##先操作data数据节点
##停止ES服务
[mms@es-05 ~]# supervisorctl stop es #在supervisor中关闭ES
[mms@es-05 ~]$ su - mms #在切换到运行用户,结束进程
[mms@es-05 ~]$ ps -ef |grep java
[mms@es-05 ~]$ kill 12759
##等待ES服务终止

增量同步ES数据

1
2
##增量同步一份最新ES数据
[root@es-05 ~]$ rsync -avL --delete /data/ /data2/

ES更换存储目录

修改ES配置文件,更换存储目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[mms@es-05 ~]$ su - root

##把旧数据目录重命名
[root@es-05 ~]# mv -f /data /data_lod
[root@es-05 ~]# mkdir /data

##将LVM卷重新挂载到 /data 下,只需要修改挂载的目录就行
[root@es-05 ~]# vim /etc/fstab #
UUID=9774a133-c3aa-494f-b6ad-b22f377e466d /data xfs defaults 1 1
[root@es-05 ~]# mount -a

##查看挂载是否生效
[root@es-05 ~]# df -hT | grep lv0
/dev/mapper/vg0-lv0 xfs 4.0T 709G 3.3T 18% /data

启动ES服务

确保配置生效后,就可以启动ES服务了

1
[mms@es-05 ~]# supervisorctl start es

开启ES索引自动平衡

1
curl -XPUT -u elastic "http://192.168.1.8:9200/_cluster/settings" -H 'Content-Type: application/json' -d' { "transient" : { "cluster.routing.allocation.enable" : "all" } }'

查看ES集群状态

1
2
3
4
5
6
7
8
##查看集群状态
curl -u elastic http://192.168.1.8:9200/_cluster/health?pretty

##查看索引状态
curl -u elastic http://192.168.1.8:9200/_cat/indices?v

##查看集群节点信息
curl -u elastic http://192.168.1.8:9200/_cat/nodes

重复 ES 切换数据存储目录 中的操作,直到所有ES节点切换完成

集群操作完确保没有问题后,及时清理无用数据 /data2 和 旧数据目录 /data_old

-------------本文结束感谢您的阅读-------------