记录 Centos7 手动搭建 Elasticsearch 7.2.0 集群


elastic官网:https://www.elastic.co/


准备工作,首先至少准备2台以上服务器,虚拟机也可以


测试如下:

IP:42.192.238.1安装:Elasticsearch、kibana

IP:42.192.70.2安装:Elasticsearch



一、下载安装Elasticsearch-7.2.0


官方下载地址:https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.2.0-linux-x86_64.tar.gz


解压elasticsearch-7.2.0-linux-x86_64.tar.gz 到 /data/ 目录下,然后整一个系统环境


wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.2.0-linux-x86_64.tar.gz

tar xvf elasticsearch-7.2.0-linux-x86_64.tar.gz -C /data/

cd /data/elasticsearch-7.2.0

echo "* soft nofile 65535" >> /etc/security/limits.conf

echo "* hard nofile 65535" >> /etc/security/limits.conf

echo "vm.max_map_count=262144" >> /etc/sysctl.conf

sysctl -p



二、安装jdk,这里因为是elasticsearch7.x所以必须是java11以上的版本


这里在elasticsearch安装包里也自带了jdk版本,但是在实测时发现缺少文件,于是这里重新整理一下


yum search java | grep -i --color JDK

yum install java-1.8.0-openjdk-devel.x86_64

yum install java-11-openjdk.x86_64

#如果有其他版本最好删除,避免意外的问题

vi  /etc/profile

#在最后面追加

export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.8.10-0.el8_2.x86_64 #注意去 /usr/lib/jvm/ 查看具体的版本
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin



source  /etc/profile

java -version



三、各节点修改配置文件 config/elasticsearch.yml 


在 42.192.238.1 上:



cluster.name: cluster-Es
node.name: node_1
network.host: 0.0.0.0
network.publish_host: 42.192.238.1
node.master: true
node.data: true
    # head 插件需要这打开这两个配置
http.cors.allow-origin: "*"
http.cors.enabled: true
http.max_content_length: 200mb
    # 可以选举的主节点
cluster.initial_master_nodes: ["42.192.238.1:9300","42.192.70.2:9300"]
discovery.seed_hosts: ["42.192.238.1:9300","42.192.70.2:9300"]
gateway.recover_after_nodes: 2
network.tcp.keep_alive: true
network.tcp.no_delay: true
transport.tcp.compress: true
    #集群内同时启动的数据任务个数,默认是2个
cluster.routing.allocation.cluster_concurrent_rebalance: 16
    #添加或删除节点及负载均衡时并发恢复的线程个数,默认4个
cluster.routing.allocation.node_concurrent_recoveries: 16
    #初始化数据恢复时,并发恢复线程的个数,默认4个
cluster.routing.allocation.node_initial_primaries_recoveries: 16
    #开启 xpack 功能,如果要禁止使用密码,请将以下内容注释,直接启动不需要设置密码
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12


在 42.192.70.2 上:


 cluster.name: cluster-Es
 node.name: node_2
 network.host: 0.0.0.0
 network.publish_host: 42.192.70.2
 node.master: true
 node.data: true
 # head 插件需要这打开这两个配置
 http.cors.allow-origin: "*"
 http.cors.enabled: true
 http.max_content_length: 200mb
 # 可以选举的主节点
 cluster.initial_master_nodes: ["42.192.238.1:9300","42.192.70.2:9300"]
 discovery.seed_hosts: ["42.192.238.1:9300","42.192.70.2:9300"]
 gateway.recover_after_nodes: 2
 network.tcp.keep_alive: true
 network.tcp.no_delay: true
 transport.tcp.compress: true
 #集群内同时启动的数据任务个数,默认是2个
 cluster.routing.allocation.cluster_concurrent_rebalance: 16
 #添加或删除节点及负载均衡时并发恢复的线程个数,默认4个
 cluster.routing.allocation.node_concurrent_recoveries: 16
 #初始化数据恢复时,并发恢复线程的个数,默认4个
 cluster.routing.allocation.node_initial_primaries_recoveries: 16
 #开启 xpack 功能,如果要禁止使用密码,请将以下内容注释,直接启动不需要设置密码
 xpack.security.enabled: true
 xpack.security.transport.ssl.enabled: true
 xpack.security.transport.ssl.verification_mode: certificate
 xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
 xpack.security.transport.ssl.truststore.path: elastic-certificates.p12



不同节点的配置区别就在于

node.name  #当前节点名称,每个节点不能一样

network.publish_host  #当前节点绑定IP,用于集群下识别对方
cluster.initial_master_nodes: ["42.192.238.1:9300","42.192.70.2:9300"]
discovery.seed_hosts: ["42.192.238.1:9300","42.192.70.2:9300"]

#所有的集群节点,默认排在第一个的master节点,如果第二个挂了就会在随机选举一个master出来


四、各节点修改 config/jvm.options 文件


其中 -Xms4g 和 -Xmx4g 为服务器的内存一半,我的服务器时 8G 内存,所以这里改成了 4G 。当然,这个值最大不要超过 32G 。


五、每个节点添加完后,先启动主节点

1、生成TLS 和身份验证,将会在config下生成elastic-certificates.p12文件,将此文件传到其他两个节点的config目录,注意文件权限。

bin/elasticsearch-certutil cert -out config/elastic-certificates.p12 -pass ""


2、启动集群,es 集群不启动,下面的添加密码操作执行不了。每个节点执行(我是在root用户下指定适用 elastic 用户启动的,如果是在elastic 用户下执行,请直接启动)


useradd elastic

chown -R elastic. /data/elasticsearch-7.2.0

su - elastic -c "/data/elasticsearch-7.2.0/bin/elasticsearch -d"  #后台启动

su - elastic -c "/data/elasticsearch-7.2.0/bin/elasticsearch"  #控制台启动,和后台启动两个选择一个就行


启动时如果出现jdk版本问题启动失败的,可以重新安装一下jdk9:


①.去镜像网站下载jdk(这里是去华为云下载的)


cd /usr/local
wget https://repo.huaweicloud.com/java/jdk/9.0.1+11/jdk-9.0.1_linux-x64_bin.tar.gz


②. 解压

tar -zxvf tar -zxvf jdk-9.0.1_linux-x64_bin.tar.gz


③.配置JAVA_HOME:


vi /etc/profile
内容如下:
export JAVA_HOME=/usr/local/jdk-9.0.1
export JRE_HOME=/usr/local/jdk-9.0.1/jre
export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin


④.使修改生效:

source /etc/profile


⑤.验证是否安装成功:

java -version


3、创建Elasticsearch 集群密码,有两种方式,使用第二种。在主节点上执行,我所有的密码都设置成了 test_elastic

第一种: bin/elasticsearch-setup-passwords auto 各用户生成随机密码。

第二种: bin/elasticsearch-setup-passwords interactive 手动定义密码,可以设置如下图所示的用户密码。


这里需要注意,必须把所有节点都启动成功,才能完成设置密码


bin/elasticsearch-setup-passwords interactive

鼎云博客


设置完毕后测试一下密码是否可用

如果不适用用户密码访问,会报错


加上用户密码访问:

curl -u "elastic:你设置的密码" http://42.192.238.1:9200/_cat/nodes


六、安装kibana-7.2.0-linux-x86_64,这里需要注意版本必须和es一致,否则会出现问题


启动kibana-7.2.0-linux-x86_64 ,随便找个节点,我是在 42.192.238.1 启动的kibana,连接了es的 42.192.238.1 节点

下载和此版本es对应的kibana包, kibana-7.2.0-linux-x86_64.tar.gz


官方下载地址:https://artifacts.elastic.co/downloads/kibana/kibana-7.2.0-linux-x86_64.tar.gz



cd /data
https://artifacts.elastic.co/downloads/kibana/kibana-7.2.0-linux-x86_64.tar.gz 

tar xvf kibana-7.2.0-linux-x86_64.tar.gz

cd /data/kibana-7.2.0-linux-x86_64/


1.修改 config/kibana.yml ,elasticsearch.username 和 elasticsearch.password 添写创建 elasticsearch 时创建的用户密码。


vim config/kibana.yml 
 
  server.port: 5601
  server.host: "0.0.0.0"  
  elasticsearch.hosts: ["http://42.192.238.1:9200"]
  elasticsearch.username: "kibana"
  elasticsearch.password: "你设置的密码"


2、启动


使用root用户启动


nohup ./bin/kibana --allow-root &


3、浏览器访问kibana,输入用户密码,注意这里要用elastic用户登录

http://42.192.238.1:5601


4.登录后可以看到,监控是自带的。

鼎云博客



postman测试:


如果设置了访问密码,那么需要在header中配置Authorization,格式为:Basic 账号:密码,这里账号和密码最终填的是生成base64的结果

鼎云博客


配置文件说明:

cluster.name: ES-Cluster
#ES集群名称,同一个集群内的所有节点集群名称必须保持一致

node.name: ES-master-10.150.55.94
#ES集群内的节点名称,同一个集群内的节点名称要具备唯一性

node.master: true
#允许节点是否可以成为一个master节点,ES是默认集群中的第一台机器成为master,如果这台机器停止就会重新选举

node.data: false
#允许该节点存储索引数据(默认开启)

#关于Elasticsearch节点的角色功能详解,请看:https://www.dockerc.com/elasticsearch-master-or-data/
path.data: /data/ES-Cluster/master/ES-master-10.150.55.94/data1,/data/ES-Cluster/master/ES-master-10.150.55.94/data2
#ES是搜索引擎,会创建文档,建立索引,此路径是索引的存放目录,如果我们的日志数据较为庞大,那么索引所占用的磁盘空间也是不可小觑的
#这个路径建议是专门的存储系统,如果不是存储系统,最好也要有冗余能力的磁盘,此目录还要对elasticsearch的运行用户有写入权限
#path可以指定多个存储位置,分散存储,有助于性能提升,以至于怎么分散存储请看详解https://www.dockerc.com/elk-theory-elasticsearch/

path.logs: /data/ES-Cluster/master/ES-master-10.150.55.94/logs
#elasticsearch专门的日志存储位置,生产环境中建议elasticsearch配置文件与elasticsearch日志分开存储

bootstrap.memory_lock: true
#在ES运行起来后锁定ES所能使用的堆内存大小,锁定内存大小一般为可用内存的一半左右;锁定内存后就不会使用交换分区
#如果不打开此项,当系统物理内存空间不足,ES将使用交换分区,ES如果使用交换分区,那么ES的性能将会变得很差

network.host: 10.150.55.94
#es绑定地址,支持IPv4及IPv6,默认绑定127.0.0.1;es的HTTP端口和集群通信端口就会监听在此地址上

network.tcp.no_delay: true
#是否启用tcp无延迟,true为启用tcp不延迟,默认为false启用tcp延迟

network.tcp.keep_alive: true
#是否启用TCP保持活动状态,默认为true

network.tcp.reuse_address: true
#是否应该重复使用地址。默认true,在Windows机器上默认为false

network.tcp.send_buffer_size: 128mb
#tcp发送缓冲区大小,默认不设置

network.tcp.receive_buffer_size: 128mb
#tcp接收缓冲区大小,默认不设置

transport.tcp.port: 9301
#设置集群节点通信的TCP端口,默认就是9300

transport.tcp.compress: true
#设置是否压缩TCP传输时的数据,默认为false

http.max_content_length: 200mb
#设置http请求内容的最大容量,默认是100mb

http.cors.enabled: true
#是否开启跨域访问

http.cors.allow-origin: “*”
#开启跨域访问后的地址限制,*表示无限制

http.port: 9201
#定义ES对外调用的http端口,默认是9200

discovery.zen.ping.unicast.hosts: [“10.150.55.94:9301”, “10.150.55.95:9301”,“10.150.30.246:9301”] #在Elasticsearch7.0版本已被移除,配置错误
#写入候选主节点的设备地址,来开启服务时就可以被选为主节点
#默认主机列表只有127.0.0.1和IPV6的本机回环地址
#上面是书写格式,discover意思为发现,zen是判定集群成员的协议,unicast是单播的意思,ES5.0版本之后只支持单播的方式来进行集群间的通信,hosts为主机
#总结下来就是:使用zen协议通过单播方式去发现集群成员主机,在此建议将所有成员的节点名称都写进来,这样就不用仅靠集群名称cluster.name来判别集群关系了

discovery.zen.minimum_master_nodes: 2 #在Elasticsearch7.0版本已被移除,配置无效
#为了避免脑裂,集群的最少节点数量为,集群的总节点数量除以2加一

discovery.zen.fd.ping_timeout: 120s #在Elasticsearch7.0版本已被移除,配置无效
#探测超时时间,默认是3秒,我们这里填120秒是为了防止网络不好的时候ES集群发生脑裂现象

discovery.zen.fd.ping_retries: 6 #在Elasticsearch7.0版本已被移除,配置无效
#探测次数,如果每次探测90秒,连续探测超过六次,则认为节点该节点已脱离集群,默认为3次

discovery.zen.fd.ping_interval: 15s #在Elasticsearch7.0版本已被移除,配置无效
#节点每隔15秒向master发送一次心跳,证明自己和master还存活,默认为1秒太频繁,

discovery.seed_hosts: [“10.150.55.94:9301”, “10.150.55.95:9301”,“10.150.30.246:9301”]
#Elasticsearch7新增参数,写入候选主节点的设备地址,来开启服务时就可以被选为主节点,由discovery.zen.ping.unicast.hosts:参数改变而来

cluster.initial_master_nodes: [“10.150.55.94:9301”, “10.150.55.95:9301”,“10.150.30.246:9301”]
#Elasticsearch7新增参数,写入候选主节点的设备地址,来开启服务时就可以被选为主节点

cluster.fault_detection.leader_check.interval: 15s
#Elasticsearch7新增参数,设置每个节点在选中的主节点的检查之间等待的时间。默认为1秒

discovery.cluster_formation_warning_timeout: 30s
#Elasticsearch7新增参数,启动后30秒内,如果集群未形成,那么将会记录一条警告信息,警告信息未master not fount开始,默认为10秒

cluster.join.timeout: 30s
#Elasticsearch7新增参数,节点发送请求加入集群后,在认为请求失败后,再次发送请求的等待时间,默认为60秒

cluster.publish.timeout: 90s
#Elasticsearch7新增参数,设置主节点等待每个集群状态完全更新后发布到所有节点的时间,默认为30秒

cluster.routing.allocation.cluster_concurrent_rebalance: 32
#集群内同时启动的数据任务个数,默认是2个

cluster.routing.allocation.node_concurrent_recoveries: 32
#添加或删除节点及负载均衡时并发恢复的线程个数,默认4个

cluster.routing.allocation.node_initial_primaries_recoveries: 32
#初始化数据恢复时,并发恢复线程的个数,默认4个


鼎云博客
  • 最新评论
  • 总共0条评论