公司手头上有千万级数据,起先用单机版es去入库这些数据,写到100多W,总是各种崩,分片时效,主分片丢失,status都是yellow->red。。。。 后面排查了大量的log后发现,还是因为单机版es的分片,以及副本机制在分片错误时候,没能恢复数据,导致整个节点损坏。。。。没办法,直接找了几台机器来,直接上分布式。。。。
1、避免在不同机器上,环境不同导致后面各种灵异事件,直接用docker容器化技术,[具体安装参考其他教学]。
拉取es 镜像 :
docker pull elasticsearch:7.6.0
创建docker对应的路径目录
mkdir -p /usr/local/docker/elasticsearch/config
mkdir -p /usr/local/docker/elasticsearch/data
mkdir -p /usr/local/docker/elasticsearch/plugins
docker可读取es配置文件
echo "http.host: 0.0.0.0">>/usr/local/docker/elasticsearch/config/elasticsearch.yml
这条命令要运行下,无权限访问很 坑~~~
chmod -R 777 /usr/local/docker/elasticsearch/
2、命令执行完之后开始配置es的配置文件
#es集群名
cluster.name: my-es
#节点名称,不同节点不同名
node.name: node-1
node.master: true
#是否存储数据
node.data: true
#你有几台机器就配置几台数量
node.max_local_storage_nodes: 3
#给当前节点自定义属性(可以省略)
#node.attr.rack: r1
#数据存档位置
path.data: /usr/share/elasticsearch/data
#日志存放位置
path.logs: /usr/share/elasticsearch/log
#默认true
#bootstrap.memory_lock: true
#为避免麻烦直接0.0.0.0
network.bind_host: 0.0.0.0
#当前节点ip
network.publish_host: 你的ip
#设置映射端口
http.port: 9200
#内部节点之间沟通端口
transport.tcp.port: 9300
http.cors.enabled: true
http.cors.allow-origin: "*"
# node写你机器的ip或者节点名都行
discovery.seed_hosts: ["node-1:9300","node-2:9300","node-3:9300"]
#没有zookeeper,所以主节点都是随机选举的
cluster.initial_master_nodes: ["node-1", "node-2","node-3"]
#在群集完全重新启动后阻止初始恢复,直到启动N个节点
#z这个数量一般是总机器数量-1,我3台所以是2
gateway.recover_after_nodes: 2
#删除索引是是否需要显示其名称,默认为显示
#action.destructive_requires_name: true
到这里没有运行条命令会有个小细节的错误
error :max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144】
解决方法
# 文件最后添加一行
vm.max_map_count=262144
刷新系统配置
sysctl -p /etc/sysctl.conf/
3、最后运行docker启动命令
docker run -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -d -p 9200:9200 -p 9300:9300 -v /usr/local/docker/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /usr/local/docker/elasticsearch/data:/usr/share/elasticsearch/data -v /usr/local/docker/elasticsearch/plugins:/usr/share/elasticsearch/plugins --name elasticsearch elasticsearch:7.6.0
查看下docker镜像, 很nice
[root@iZqma4tjnp9e66Z plugins]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
61b84e1aa263 elasticsearch:7.6.0 "/usr/local/bin/dock…" 2 hours ago Up About an hour 0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp elasticsearch
三台机器重复三次 百分百高可用、 status:green ,搞定收工下班
{
"cluster_name" : "my-es",
"status" : "green",
"timed_out" : false,
"number_of_nodes" : 3,
"number_of_data_nodes" : 3,
"active_primary_shards" : 6,
"active_shards" : 12,
"relocating_shards" : 0,
"initializing_shards" : 0,
"unassigned_shards" : 0,
"delayed_unassigned_shards" : 0,
"number_of_pending_tasks" : 0,
"number_of_in_flight_fetch" : 0,
"task_max_waiting_in_queue_millis" : 0,
"active_shards_percent_as_number" : 100.0
}