ES集群节点维护
写在前边的话
由于生产环境需要,现将ES集群节点进行精减维护,以下为具体操作步骤:
注:操作时请使用root权限执行
数据迁移
ES集群运行中,每个节点数据都是平均的,下线维护一个节点,先把该节点数据迁移到其他节点,避免发生意外。
以下使用Kibana进行操作。
例如,如果准备对172.31.1.34节点做维护
迁移命令如下:
PUT _cluster/settings { "transient": { "cluster.routing.allocation.exclude._ip": "172.31.1.34" } }
迁移后进行查看:
GET _cluster/settings
返回以下内容:
{ "persistent": {}, "transient": { "cluster": { "routing": { "allocation": { "enable": "all", "exclude": { "_ip": "172.31.1.34" } } } } } }
这样172.31.1.34节点数据会逐步迁移到其他数据节点。最后该节点会保留一个searchguard副本,这个是正常的。根据数据量大小迁移完成时间也不一样,等待完成后可继续操作。
修改开机启动项
目的:
防止启动挂载错误的磁盘,执行错误的定时任务。
具体步骤:
vim /etc/fstab crontab -e
将以上两个位置/es挂载点注释。
容器备份
目的:
防止出问题时候重建本机,保存2两条命令
具体步骤:执行history,把es镜像及启动历史命令记录下来。
docker pull index.alauda.cn/alaudaorg/elasticsearch-basic-http:v20181001.003257 docker run -d --name elasticsearch5 --restart=always --log-driver=json-file --net host -v /es/data:/esdata -e HOST_IP=172.31.1.32 -e NODE_MODEL="data" -e ES_JAVA_OPTS="-Xms31g -Xmx31g" -e ALAUDA_ES_TTL=7d -e ALAUDA_ES_CLUSTERS="172.31.1.40,172.31.1.41,172.31.1.42" -e ALAUDA_ES_USERNAME="xxxxx" -e ALAUDA_ES_PASSWORD=xxxx -e ALAUDA_ES_SHARDING=20 -e ALAUDA_ES_EXPECTED_NODE=14 -e ALAUDA_ES_MASTER_NODE=3 index.alauda.cn/alaudaorg/elasticsearch-basic-http:v20181001.003257
核对:
执行docker ps,
运行的ES版本镜像与历史命令对比,重点核对ES的版本一致即可。
停止容器
- docker ps记录容器id
- docker stop 容器id
更换服务器规格
登陆AWS管理界面。停止ES实例,修改服务器规格,把r4.4xlarge修改为r4.2xlarge。如果主机挂载了es额外硬盘,修改为新硬盘。
稳妥方式先创建新的数据磁盘挂载到/es目录,然后再删除原来数据磁盘。新建的磁盘需要格式化为ext4后挂载到/es。
重启后登陆服务器,首先停止ES容器(因为ES容器是开机自启动的)
格式化新磁盘并进行挂载:
mkfs.ext4 /dev/xvdg
mount /dev/xvdg /es/
最后启动ES实例。
配置ES上线
启动ES容器后用docker logs查看日志,载kibana确认节点加入集群。登陆kibana管理端,查询:
get _cluster/settings
{
"persistent": {},
"transient": {
"cluster": {
"routing": {
"allocation": {
"enable": "all",
"exclude": {
"_ip": "172.31.1.34"
}
}
}
}
}
}
更新节点目前不分片分片数据。重新加入集群后,恢复分片数据,命令:
PUT _cluster/settings
{
"transient": {
"cluster.routing.allocation.exclude._ip": ""
}
}
以下返加True为正确
{
"acknowledged": true,
"persistent": {},
"transient": {
"cluster": {
"routing": {
"allocation": {
"exclude": {
"_ip": ""
}
}
}
}
}
}
再次查询发现已经没有不可用的节点
GET _cluster/settings
{
"persistent": {},
"transient": {
"cluster": {
"routing": {
"allocation": {
"enable": "all",
"exclude": {
"_ip": ""
}
}
}
}
}
}
执行完毕,触发ES的数据再平衡,索引数据会从其他节点重新分配给该节点。多观察。直到各节点shard数一致。
恢复开机启动项
vim /etc/fstab
crontab -e
>将盘符修改为新盘符
至此一个节点从r4.4xlarge变更为r4.2xlarge。