在上一篇我们说到了ElasticSearch的下载与运行,但是目前只有一个实例在运行,并且只能本地访问。那么本章将会说到如何配置实现外网访问以及分布式。
关闭之前运行的ElasticSearch,进入ElasticSearch下载目录
cd ~/elasticSearch/
可以看到之前解压出来的文件,由于手上只有一只服务器,所以就用一台服务器来模拟分布式了。
为了方便管理,先把elasticsearch-6.5.4目录改名为elasticsearch1
mv elasticsearch-6.5.4/ elasticsearch1
然后将elasticsearch1复制一份,并改名为elasticsearch2
cp -r elasticsearch1 elasticsearch2
OK,现在有elasticsearch1和elasticsearch2两个了,分别给他们配置不同的端口。
先配置第一个
vim ./elasticsearch1/config/elasticsearch.yml
我们关注的是Cluster、Node、Network三个配置。其中Cluster是集群配置,cluster.name相同的elasticsearch会加入到同一个集群中,实现分布式;Node是当前节点,node.name在集群中拥有唯一性,可以理解为服务器的名称;Network为网络配置,主要配置端口等。
# ---------------------------------- Cluster -----------------------------------
#
# Use a descriptive name for your cluster:
#
cluster.name: my-application-dev
将cluster.name前面的#去掉,将cluster.name设置为my-application-dev
# ------------------------------------ Node ------------------------------------
#
# Use a descriptive name for the node:
#
node.name: node-1
#
# Add custom attributes to the node:
#
#node.attr.rack: r1
#
将node.name设置为node-1
# ---------------------------------- Network -----------------------------------
#
# Set the bind address to a specific IP (IPv4 or IPv6):
#
network.host: 0.0.0.0
#
# Set a custom port for HTTP:
#
http.port: 9201
将network.host设置为:0.0.0.0,表示所有的IP都可以访问。将http.port设置为9201,即网络访问的端口号。
设好第一个后,同样设置第二个
vim ./elasticsearch2/config/elasticsearch.yml
cluster.name要跟第一个保持一致,node.name设置为"node-2",network.host跟第一个一样,http.port设置为"9202",如下图所示
两个都设置好了之后,就分别启动两个ElasticSearch了。首先启动第一个
./elasticsearch1/bin/elasticsearch
然后发现,报错了~~~
ERROR: [2] bootstrap checks failed
[1]: max file descriptors [65535] for elasticsearch process is too low, increase to at least [65536]
[2]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
可能会出现上面两个错误,也可能只出现一个或者不出现错误,根据实际情况来。
针对错误一:max file descriptors [65535] for elasticsearch process is too low, increase to at least [65536]
sudo vim etc/security/limits.conf
在文件的后面加上: * - nofile 65536 * - memlock unlimited 两行,如下图
针对错误二:max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
sudo vim /etc/sysctl.conf
在文件的最后一行添加以下语句:vm.max_map_count=262144
然后 执行下面命令,不用重启服务器。
sudo sysctl -p
修改完之后,重新启动第一个
./elasticsearch1/bin/elasticsearch
新建个窗口,启动第二个
./elasticsearch2/bin/elasticsearch
不出意外的话,可以在另外一台电脑的浏览器上输入"服务器ip:9201"和"服务器ip:9202",分别查看到两个ElasticSearch
{ "name" : "node-1", "cluster_name" : "my-application-dev", "cluster_uuid" : "MwHYQNWXSfyTv4ImCCKNJw", "version" : { "number" : "6.5.4", "build_flavor" : "default", "build_type" : "tar", "build_hash" : "d2ef93d", "build_date" : "2018-12-17T21:17:40.758843Z", "build_snapshot" : false, "lucene_version" : "7.5.0", "minimum_wire_compatibility_version" : "5.6.0", "minimum_index_compatibility_version" : "5.0.0" }, "tagline" : "You Know, for Search" }
{ "name" : "node-2", "cluster_name" : "my-application-dev", "cluster_uuid" : "MwHYQNWXSfyTv4ImCCKNJw", "version" : { "number" : "6.5.4", "build_flavor" : "default", "build_type" : "tar", "build_hash" : "d2ef93d", "build_date" : "2018-12-17T21:17:40.758843Z", "build_snapshot" : false, "lucene_version" : "7.5.0", "minimum_wire_compatibility_version" : "5.6.0", "minimum_index_compatibility_version" : "5.0.0" }, "tagline" : "You Know, for Search" }
可以看到,两台ElasticSearch的cluster_name跟cluster_uuid是一样的,表示两个节点都加入了同一个集群中 。如何证明呢,在浏览器中输入"[ip]:9201/_cat/nodes?v",就可以看到下面的信息了:
浏览器输入"[ip]:9201/_cat/health?v",可以看到集群的健康情况及节点总数 。
可以看到集群的状态为"green",绿色的健康状态,节点有2个。
到此为止,我们已经实现了ElasticSearch的运行与集群,ElasticSearch现在处于可以使用的状态了