前一篇介绍了2种单结点安装的方式,现在我们看下2台CentOS7如何搭建一套Cluster,不同ES版本配置略有出入,自报家门我使用的是5.6.1版本。
前面讲过ES的结点配置在/conf/elasticsearch.yml中,里面的英文描写已经很详细,es通过发现机制寻找默认集群名称的所有节点,最终拥有相同集群名称的节点就自动的构成了一个ElasticSearch集群。
(此时有个大胆的想法,前面介绍过每个节点默认的集群名都是elasticsearch,节点自己的nodeName也是随机的,是不是说我什么配置都不修改用默认配置启动节点会自动组成一个名为elasticsearch的集群呢)
试验结果:
"cluster_uuid" :"Mi95DBK5QVqxWzHYtWVBcw",
"cluster_uuid" :"wXkyAyb2RxaRmeA79plYfg",
Cluster的uuid不相同,说明虽然cluster名字都叫“elasticsearch”但是两个集群,用默认的配置是达不到集群效果的。
按照yml里的注释修改配置:
Node1:
cluster.name: my-es//自定义集群名称
node.name: node-1//当前结点名称
network.host: 192.168.226.132//当前node的IP
discovery.zen.ping.unicast.hosts:["192.168.226.133", "192.168.226.132"]//集群发现节点的地址
Node2:
cluster.name: my-es//自定义集群名称
node.name: node-2//当前结点名称
network.host: 192.168.226.133//当前node的IP
discovery.zen.ping.unicast.hosts:["192.168.226.133", "192.168.226.132"]//集群发现节点的地址
集群的启动日志中看到
publish_address {192.168.226.133:9300},bound_addresses {192.168.226.133:9300}
这样的敏感信息,node之间是通过内置的9300这个端口来互相发现和通信的,所以节点的centos需要允许访问9300端口。
firewall-cmd --zone=public--add-port=9300/tcp --permanent
firewall-cmd --zone=public--add-port=9300/udp --permanent
firewall-cmd --reload
启动时遇到了2个报错:
ERROR: [2] bootstrap checks failed
[1]: max file descriptors [4096] forelasticsearch 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]
解决问题1:执行下命令ulimit -n 65536
解决问题2:需要修改/etc/sysctl.conf配置文件
echo "vm.max_map_count=262144">>/etc/sysctl.conf
sysctl –p//立刻生效
启动成功,检查集群效果:
再回到一开始那个大胆的想法,配置是否可以更精简一些?
Cluster的名称默认是elasticsearch,所以这个配置可以去掉。
Node的名称默认会随机给个名字,所以这个配置也可以去掉。
network.host我试图去掉过,去掉后es会将主机映射成127.0.0.1,不靠谱,不能被外部发现和访问。
discovery.zen.ping.unicast.hosts是不是可以不配置自己,只需要配置其它node就可以,跟eureka那种配置类似呢?试验结果是肯定的。
最后精简后配置是
Node1:
network.host: 192.168.226.132
discovery.zen.ping.unicast.hosts:["192.168.226.133"]
Node2:
network.host: 192.168.226.133
discovery.zen.ping.unicast.hosts:["192.168.226.132"]
(还是感觉是在配置eureka)