银河麒麟系统部署3节点es集群

部署前准备:

三台银河麒麟Server V10 SP3主机(虚拟机),2核4G

es节点主机IP
es-master192.168.131.101
es-node1192.168.131.102
es-node2192.168.131.103

虚拟机内部软件版本:

软件版本
docker19.03.15
docker-compose1.22.0
elasticsearch7.12.1
kibana7.12.1

集群部署

部署es-master

es-master节点是es的主节点,因为es的集群认证需要密钥,所以master节点需要先进行部署,生成密钥。 如果已经有了密钥,可以直接从第九步开始。 这里采用的是docker-compose的方式部署:

1. 创建一个网络(用于连接kibana)

docker network create es_net

2. 准备docker-compose.yml文件。

version: '3'
services:
  es-master:
    image: elasticsearch:7.12.1
    container_name: es-master
    environment:
      - "ES_JAVA_OPTS=-Xms1024m -Xmx1024m"  #es是java写的,可以进行jvm调优,生产环境可以调高这个参数,如4G
    ulimits:
      memlock:
        soft: -1
        hard: -1
      nofile:
        soft: 65536
        hard: 65536
    volumes:
      - /data/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:ro  # 配置文件挂载
      - /data/elasticsearch/data:/usr/share/elasticsearch/data:rw # 数据挂载
      - /data/elasticsearch/log:/usr/share/elasticsearch/log:rw # 日志挂载
      - /data/elasticsearch/plugins:/usr/share/elasticsearch/plugins:rw # 插件挂载
    ports:
      - 9200:9200
      - 9300:9300
    networks:
      - es_net
    extra_hosts:                        # 设置容器 hosts
      - "es-master:192.168.131.101"
      - "es-node1:192.168.131.102"
      - "es-node2:192.168.131.103"
networks:
  es_net:
    external: true

3. 创建挂载目录

##  创建es配置数据日志目录
mkdir /data/elasticsearch/{config,data,log,plugins} -pv
​
## 创建kibana配置目录
mkdir /data/kibana/config -pv
​
## 修改es目录权限,否则容器启动报错,es容器使用es用户启动,用户id=1000
chown 1000:1000 /data/elasticsearch/* -R

4. 编辑 elasticsearch.yml配置文件

# vim /data/elasticsearch/config/elasticsearch.yml
​
cluster.name: test-es-cluster  #集群名称, es会自动发现在同一网段下的es,使用该属性可以区分同一网段下的多个es集群
node.name: es-master 
node.master: true # 该节点是否有选主资格(es集群中的第一台es默认为主节点)
node.data: true # 是否为数据节点
​
network.bind_host: 0.0.0.0 #设置绑定ip,默认是0.0.0.0
network.publish_host: 192.168.131.101 #设置其它节点和该节点交互的ip地址,必须是真实ip
http.port: 9200
transport.tcp.port: 9300 
http.cors.enabled: true 
http.cors.allow-origin: "*"
​
discovery.zen.ping.unicast.hosts: ["es-master:9300", "es-node1:9300", "es-node2:9300"] # 设置集群中节点的初始列表
discovery.zen.minimum_master_nodes: 2 # 集群中的节点可以直到其他n个有master资格的节点,默认1
discovery.zen.ping_timeout: 5s # 自动发现其他节点时,ping连接超时时间,默认3s
​
bootstrap.memory_lock: true # 禁止es节点进行swap
action.destructive_requires_name: true #禁止通过正则或_all进行index的删除
cluster.initial_master_nodes: ["es-master"] #集群第一次启动时的候选master列表

5. 启动es-master服务

# 进入docker-compose文件所属目录下
docker-compose up -d
​
# 启动后可以查看容器日志
docker logs -f es-master

注: 启动时报错:bootstrap checks failed## max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]的解决方案

vim /etc/sysctl.conf

在行尾追加 vm.max_map_count=655360

然后执行 sysctl -p

参考文档: ERROR: [1] bootstrap checks failed [1]: max virtual memory areas vm.max_map_count [65530] is too low_mischen520的博客-CSDN博客

访问 http://192.168.131.101:9200/ 可以看到节点启动信息

 

6. 编写kibana.yml配置文件

# vim /data/kibana/config/kibana.yml        
​
server.name: kibana
server.host: "0.0.0.0"
# elasticsearch.hosts: "http://192.168.131.101:9200"
xpack.monitoring.ui.container.elasticsearch.enabled: true

7. 运行kibana容器, 执行代码

docker run -d \
--name kibana \
-v /data/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml:ro  \
-e ELASTICSEARCH_HOSTS=http://es-master:9200 \
--network=es_net \
-p 5601:5601  \
kibana:7.12.1

因为 kibana已经和es在同一个docker网络下, 所以可以直接使用容器名进行访问;

如果kibana和es不在同一个网络,可以打开kibana.yml的注释配置,

并删除 -e ELASTICSEARCH_HOSTS=http://es-master:9200 \

证书生成

8. 启动es_xpack认证, 生成证书

集群认证首先需要配置密钥,否则在给内置用户创建密钥时,会报错。 这里直接用master节点去生成证书,生成后直接传到其他节点即可

docker exec -it es-master bash #进入容器
/usr/share/elasticsearch/bin/elasticsearch-certutil ca
/usr/share/elasticsearch/bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
## 两条命令均一路回车即可,不需要给秘钥再添加密码。
​
## 证书创建完成之后,默认在es的数据目录,这里统一cp 到宿主机目录中
mv elastic-* /usr/share/elasticsearch/data/
​
## 退出容器
exit 
​
## 复制 /data/elasticsearch/data/ 下证书到 config 目录
cd /data/elasticsearch/config/
cp /data/elasticsearch/data/elastic-*  ./
chmod 644 elastic-*
chown 1000:1000 elastic*

elastic-certificates.p12elastic-stack-ca.p12就是生成好的证书文件。

9. 将证书cp到其他节点上,注意提前创建好文件目录

前往192.168.131.102192.168.131.103, 执行如下命令

mkdir/data/elasticsearch/{config,data,log,plugins} -pv chown 1000:1000 /data/elasticsearch/* -R

然后回到 192.168.131.101 节点 执行如下命令 (也可以使用工具)

scp /data/elasticsearch/config/elastic-* 192.168.131.102:/data/elasticsearch/config/ 
scp /data/elasticsearch/config/elastic-* 192.168.131.103:/data/elasticsearch/config/

输入目标机的密码。(第一次执行请先输入yes接收密钥)

10. 修改docker-compose.yml 和elasticsearch.yml, 删除es容器,重新执行docker-compose。

        配置 elasticsearch.yml

# vim /data/elasticsearch/config/elasticsearch.yml
​
cluster.name: test-es-cluster  #集群名称, es会自动发现在同一网段下的es,使用该属性可以区分同一网段下的多个es集群
node.name: es-master 
node.master: true # 该节点是否有选主资格(es集群中的第一台es默认为主节点)
node.data: true # 是否为数据节点
​
network.bind_host: 0.0.0.0 #设置绑定ip,默认是0.0.0.0
network.publish_host: 192.168.131.101 #设置其它节点和该节点交互的ip地址,必须是真实ip
http.port: 9200
transport.tcp.port: 9300 
http.cors.enabled: true 
http.cors.allow-origin: "*"
​
discovery.zen.ping.unicast.hosts: ["es-master:9300", "es-node1:9300", "es-node2:9300"] # 设置集群中节点的初始列表
discovery.zen.minimum_master_nodes: 2 # 集群中的节点可以直到其他n个有master资格的节点,默认1
discovery.zen.ping_timeout: 5s # 自动发现其他节点时,ping连接超时时间,默认3s
​
bootstrap.memory_lock: true # 禁止es节点进行swap
action.destructive_requires_name: true #禁止通过正则或_all进行index的删除
cluster.initial_master_nodes: ["es-master"] #集群第一次启动时的候选master列表
​
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: /usr/share/elasticsearch/config/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: /usr/share/elasticsearch/config/elastic-certificates.p12

配置 docker-compose.yml

version: '3'
services:
  es-master:
    image: elasticsearch:7.12.1
    container_name: es-master
    environment:
      - "ES_JAVA_OPTS=-Xms1024m -Xmx1024m"  #es是java写的,可以进行jvm调优,生产环境可以调高这个参数,如4G
    ulimits:
      memlock:
        soft: -1
        hard: -1
      nofile:
        soft: 65536
        hard: 65536
    volumes:
      - /data/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:ro  # 配置文件挂载
      - /data/elasticsearch/data:/usr/share/elasticsearch/data:rw # 数据挂载
      - /data/elasticsearch/log:/usr/share/elasticsearch/log:rw # 日志挂载
      - /data/elasticsearch/plugins:/usr/share/elasticsearch/plugins:rw # 插件挂载
      - /data/elasticsearch/config/elastic-certificates.p12:/usr/share/elasticsearch/config/elastic-certificates.p12:ro # 证书挂载
      - /data/elasticsearch/config/elastic-stack-ca.p12:/usr/share/elasticsearch/config/elastic-stack-ca.p12:ro

    ports:
      - 9200:9200
      - 9300:9300
    networks:
      - es_net
    extra_hosts:                        # 设置容器 hosts
      - "es-master:192.168.131.101"
      - "es-node1:192.168.131.102"
      - "es-node2:192.168.131.103"
networks:
  es_net:
    external: true

访问9200端口,出现密码提示,说明配置成功。

 

11. 配置es账户,并为内置账户设置密码

ES 中内置了几个管理其他集成组件的账号

即:apm_system, beats_system, elastic,kibana, logstash_system, remote_monitoring_user

使用之前,首先需要添加一下密码。这里我给所有的账户设置的密码都是123456

注意必须先开启认证,才能设置密码,否则第二条命令无法设置

docker exec -it es-master bash
/usr/share/elasticsearch/bin/elasticsearch-setup-passwords interactive

配置完成后,可以使用如下方式访问es服务

curl -XGET -u elastic 'localhost:9200/_xpack/security/user?pretty'

此时前端也可以使用 elastic 123456成功访问

12. 修改kibana配置文件,添加用户名和密码

# vim /data/kibana/config/kibana.yml		

server.name: kibana
server.host: "0.0.0.0"
# elasticsearch.hosts: "http://192.168.131.101:9200"
xpack.monitoring.ui.container.elasticsearch.enabled: true

elasticsearch.username: "elastic"
elasticsearch.password: "123456"

然后重启kibana容器:

 docker restart kibana

部署es-node1

部署其他节点的流程和部署es-master节点类似,因为我们已经创建好了目录,并且将证书传递过去,只需要编写好配置文件,直接通过docker-compose启动即可。且其他节点不需要配置kibana。下面只列出配置文件。

1. docker-compose.yml

# vim /data/elasticsearch/config/elasticsearch.yml

version: '3'
services:
  es-node1:
    image: elasticsearch:7.12.1
    container_name: es-node1
    environment:
      - "ES_JAVA_OPTS=-Xms1024m -Xmx1024m"    # 设置Jvm内存大小
    ulimits:
      memlock:
        soft: -1
        hard: -1
      nofile:
        soft: 65536
        hard: 65536
    volumes:
      - /data/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:ro  # 配置挂载
      - /data/elasticsearch/data:/usr/share/elasticsearch/data:rw # 数据挂载
      - /data/elasticsearch/log:/usr/share/elasticsearch/log:rw # 日志挂载
      - /data/elasticsearch/config/elastic-certificates.p12:/usr/share/elasticsearch/config/elastic-certificates.p12:ro # 证书挂载
      - /data/elasticsearch/config/elastic-stack-ca.p12:/usr/share/elasticsearch/config/elastic-stack-ca.p12:ro
    ports:
      - 9200:9200
      - 9300:9300
    extra_hosts:                        # 设置容器 hosts
      - "es-master:192.168.131.101"
      - "es-node1:192.168.131.102"
      - "es-node2:192.168.131.103"

2. elasticsearch.yml

cluster.name: test-es-cluster
node.name: es-node1
node.master: true
node.data: true

#network.host: 0.0.0.0
network.bind_host: 0.0.0.0
network.publish_host: 192.168.131.102
http.port: 9200
transport.tcp.port: 9300
http.cors.enabled: true
http.cors.allow-origin: "*"

discovery.zen.ping.unicast.hosts: ["es-master:9300", "es-node1:9300", "es-node2:9300"]
discovery.zen.minimum_master_nodes: 2
discovery.zen.ping_timeout: 5s

bootstrap.memory_lock: true
action.destructive_requires_name: true
cluster.initial_master_nodes: ["es-master"]

xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: /usr/share/elasticsearch/config/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: /usr/share/elasticsearch/config/elastic-certificates.p12

启动容器

docker-compose up -d

访问http://192.168.131.102:9200/, 如果正确,应提示输入密码,且可以通过主节点配置的密码成功登录。

 

部署es-node2

1. docker-compose.yml

# vim /data/elasticsearch/config/elasticsearch.yml

version: '3'
services:
  es-node2:
    image: elasticsearch:7.12.1
    container_name: es-node2
    environment:
      - "ES_JAVA_OPTS=-Xms1024m -Xmx1024m"    # 设置Jvm内存大小
    ulimits:
      memlock:
        soft: -1
        hard: -1
      nofile:
        soft: 65536
        hard: 65536
    volumes:
      - /data/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:ro  # 配置挂载
      - /data/elasticsearch/data:/usr/share/elasticsearch/data:rw # 数据挂载
      - /data/elasticsearch/log:/usr/share/elasticsearch/log:rw # 日志挂载
      - /data/elasticsearch/config/elastic-certificates.p12:/usr/share/elasticsearch/config/elastic-certificates.p12:ro # 证书挂载
      - /data/elasticsearch/config/elastic-stack-ca.p12:/usr/share/elasticsearch/config/elastic-stack-ca.p12:ro
    ports:
      - 9200:9200
      - 9300:9300
    extra_hosts:                        # 设置容器 hosts
      - "es-master:192.168.131.101"
      - "es-node1:192.168.131.102"
      - "es-node2:192.168.131.103"

2. elasticsearch.yml

cluster.name: test-es-cluster
node.name: es-node2
node.master: true
node.data: true

#network.host: 0.0.0.0
network.bind_host: 0.0.0.0
network.publish_host: 192.168.131.103
http.port: 9200
transport.tcp.port: 9300
http.cors.enabled: true
http.cors.allow-origin: "*"

discovery.zen.ping.unicast.hosts: ["es-master:9300", "es-node1:9300", "es-node2:9300"]
discovery.zen.minimum_master_nodes: 2
discovery.zen.ping_timeout: 5s

bootstrap.memory_lock: true
action.destructive_requires_name: true
cluster.initial_master_nodes: ["es-master"]

xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: /usr/share/elasticsearch/config/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: /usr/share/elasticsearch/config/elastic-certificates.p12

启动容器

docker-compose up -d

访问http://192.168.131.103:9200/, 如果正确,应提示输入密码,且可以通过主节点配置的密码成功登录。

 

部署完成查看

查看集群状态 http://192.168.131.101:9200/_cluster/health?pretty

 

访问 http://192.168.131.101:9200/_cat/health?v 会打印一个简易图标

访问 http://192.168.131.101:9200/_cat/nodes 可以看到集群节点信息, 带 * 的为主节点

 

es集群搭建完成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值