基于docker部署es集群

基于docker部署es集群和kibana

首先得部署docker环境 --此处略过

一、安装es

1.拉取es镜像

docker pull elasticsearch:7.9.3(重点7.x开始不需要手动下载x-pack)

2.es调优

服务器参数调优
#1.===增大进程可打开的文件数======
vi /etc/security/limits.conf
#在文件末尾中增加下面内容

* soft nofile 65536
* hard nofile 65536
  ===增大进程可创建的线程数======
  vim /etc/security/limits.conf
* soft nproc 10240
* hard nproc 20480
* 为所有用户名

#2.===最大虚拟内存太小====
vi /etc/sysctl.conf
#在文件中增加下面内容
vm.max_map_count=655360
#重新加载,输入下面命令:
sysctl -p

#3.关闭swap
swapoff -a  # 临时
sed -ri 's/.*swap.*/#&/' /etc/fstab    # 永久
一个是性能问题,开启swap会严重影响性能(包括内存和I/O);
另一个是管理问题,开启swap后通过cgroups设置的内存上限就会失效。
有的时候可用内存很多也会swap,这时候关闭是为了避免swap带来的性能问题。
es配置调优
#1.jvm堆内存调整
默认为1G启动
合肥云服务器有 46G 的内存,最好分配为总内存的50%,我这边给分配20G
es的config中的jvm.options修改堆内存大小 

#2.elasticsearch.yml 配置调优
1.选举配置,都可以成master
2.配置选举节点(数量安装候选master节点数/2 +1 ,即:N/2 +1)3台master候选节点,此处就算2 (最好master节点数为奇数)当只要一台存活集群会异常
3.开启跨域访问
4.集群安全认证配置
5.docker部署挂载本地目录
es集群 nginx+keepalived高可用负载均衡
对集群做了两台nginx负载均衡配置
配置为:
least_conn;    #把请求转发给连接数较少的后端服务器

keepalived为高可用 vip地址,当一台服务器挂了,vip地址会飘到另外一台上

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bbnRT6nD-1656298259825)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20220621103836430.png)]

3.配置es集群,并启动

我此处使用三台服务器进行部署

es-1:   10.254.0.186

es-2:   10.254.0.187

es-3:   10.254.0.188

http://10.254.1.151:9200/_cat/nodes?v
http://10.254.1.151:9200/_cat/health?v
http://10.254.1.151:9100/?auth_user=elastic&auth_password=123456

首先每台服务器创建需要docker挂载的文件夹

mkdir -p elasticsearch/{data,logs,config,plugins}

es-1配置在config下创建elasticsearch.yml

#集群名称
cluster.name: es-cluster

#节点名称
node.name: es-1

## 这个参数是用来同时设置bind_host和publish_host上面两个参数。访问的IP地址,0.0.0.0表示不限制
network.host: 0.0.0.0

# 设置绑定的ip地址,可以是ipv4或ipv6的,默认为0.0.0.0,绑定这台机器的任何一个ip。
network.bind_host: 0.0.0.0

#设置其它结点和该结点交互的ip地址,如果不设置它会自动判断,值必须是个真实的ip地址,设置当前物理机地址
#如果是docker安装节点的IP将会是配置的IP而不是docker网管ip
network.publish_host: 10.254.0.186

#访问端口
http.port: 9200

#集群通讯端口
transport.tcp.port: 9300

#是不是有资格成为主节点
node.master: true

#是否存储数据
node.data: true

#es7.x  之后新增的配置,节点发现
discovery.zen.ping.unicast.hosts: ["10.254.0.186:9300","10.254.0.187:9300","10.254.0.188:9300"]

# 配置选举节点(数量安装候选master节点数/2 +1 ,即:N/2 +1)
# 3台master候选节点,此处就算2 (最好master节点数为奇数)
discovery.zen.minimum_master_nodes: 2

#master节点默认为es-1
cluster.initial_master_nodes: ["es-1"]

# 跨域
http.cors.enabled: true

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

#允许head插件等访问的相关设置
http.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Type

#集群安全认证配置
xpack.license.self_generated.type: basic
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: certs/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: certs/elastic-certificates.p12
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true

es-2配置在config下创建elasticsearch.yml

cluster.name: es-cluster
node.name: es-2
network.host: 0.0.0.0
network.bind_host: 0.0.0.0
network.publish_host: 10.254.0.187
http.port: 9200
transport.tcp.port: 9300
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true
node.data: true
discovery.zen.ping.unicast.hosts: ["10.254.0.186:9300","10.254.0.187:9300","10.254.0.188:9300"]
discovery.zen.minimum_master_nodes: 2
cluster.initial_master_nodes: ["es-1"]
http.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Type
xpack.license.self_generated.type: basic
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: certs/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: certs/elastic-certificates.p12
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true

es-3配置在config下创建elasticsearch.yml

cluster.name: es-cluster
node.name: es-3
network.host: 0.0.0.0
network.bind_host: 0.0.0.0
network.publish_host: 10.254.0.188
http.port: 9200
transport.tcp.port: 9300
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true
node.data: true
discovery.zen.ping.unicast.hosts: ["10.254.0.186:9300","10.254.0.187:9300","10.254.0.188:9300"]
discovery.zen.minimum_master_nodes: 2
cluster.initial_master_nodes: ["es-1"]
http.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Type
xpack.license.self_generated.type: basic
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: certs/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: certs/elastic-certificates.p12
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true

设置ES的JVM占用内存参数

启动之前,设置ES的JVM占用内存参数,防止内存不足错误
config/jvm.options
默认情况下,ES启动JVM最小内存1G,最大内存1G

-Xms256m
-Xmx256m

一般设置为服务器内存一半比较合适

docker启动命令

docker run  --name elasticsearch \
--restart=always \
-p 9200:9200 -p 9300:9300  \
-v /mnt/share/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml  \
-v /mnt/share/elasticsearch/data:/usr/share/elasticsearch/data \
-v  /mnt/share/elasticsearch/logs:/usr/share/elasticsearch/logs \
-v  /mnt/share/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-d elasticsearch:7.9.3

二.安装ik分词器

docker exec -it elasticsearch  bash
elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.9.3/elasticsearch-analysis-ik-7.9.3.zip

三.安装elasticsearch-head:5

docker pull mobz/elasticsearch-head:5
docker run -d -p 9100:9100 --name head5  mobz/elasticsearch-head:5

页面访问
http://10.254.1.151:9100/?auth_user=elastic&auth_password=123456

访问页面
http://ip:9100/

四、安装Kibana

docker pull kibana:7.9.3
mkdir -p kibana/config
vim kibana.yml

server.name: kibana
server.host: "0"
elasticsearch.hosts: [ "http://ip:9200","http://ip:9201","http://ip:9202" ]
xpack.monitoring.ui.container.elasticsearch.enabled: true
#elasticsearch.username: elastic
#elasticsearch.password: "123456"
#xpack.security.enabled: true
xpack.security.encryptionKey: "c77effba756146d382ebc79b279fd694"
i18n.locale: "zh-CN"

启动:
docker run -d --name kibana \
--restart=always \
-p 5601:5601 \
-v /mnt/share/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml \
-d kibana:7.9.3

五、开启安全认证

生成证书
放开elasticsearch.yml中的认证配置
docker exec -it elasticsearch bash

bin/elasticsearch-certutil ca  一路回车

bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12  一路回车

cd config 
mkdir certs 
将生成的两个文件移到certs下
chown elasticsearch elastic-certificates.p12 
chomd 777 elastic-certificates.p12 

这时将这个文件夹,cp到其他两个服务器docker中去
重启es

再进es
docker exec -it elasticsearch bash
执行如下命令需要一直设置密码,可以全部设置一样
bin/elasticsearch-setup-passwords interactive

打开上面kibana.yml的注释

elasticsearch.username: elastic
elasticsearch.password: "123456"
xpack.security.enabled: true
重启kibana

es-head访问方式
http://10.254.0.186:9100/?auth_user=elastic&auth_password=123456


六、安装metricbeat

docker pull docker.elastic.co/beats/metricbeat:7.9.3
cd /data
mkdir -p metricbeat/config
cd metricbeat/config
vim metricbeat.yml 

配置如下

metricbeat.modules:

- module: system
  period: 10s
  metricsets:
    - cpu
    - load
    - memory
    - network
    - process
    - process_summary
      #- core
        #- diskio
        #- socket
      processes: ['.*']
      process.include_top_n:
        by_cpu: 5      # include top 5 processes by CPU
        by_memory: 5   # include top 5 processes by memory
- module: system
  period: 1m
  metricsets:
    - filesystem
    - fsstat
      processors:
  - drop_event.when.regexp:
    system.filesystem.mount_point: '^/(sys|cgroup|proc|dev|etc|host|lib)($|/)'
- module: system
  period: 15m
  metricsets:
    - uptime

# 直接发送elasticsearch

output.elasticsearch:
  hosts: ["10.254.0.186:9200","10.254.0.187:9200","10.254.0.188:9200"]
  username: "elastic"
  password: "geovis123"

# 要加载仪表板,可以在metricbeat设置中启用仪表板加载。当仪表板加载被启用时,Metricbeat使用Kibana API来加载样本仪表板。只有当Metricbeat启动时,才会尝试仪表板加载。

# 设置kibana服务地址

setup.kibana:
  host: "10.254.0.186:5601"
  username: "elastic"
  password: "123456"

# 加载默认的仪表盘样式

setup.dashboards.enabled: true

# 设置如果存在模板,则不覆盖原有模板

setup.template.overwrite: false

启动命令

docker run -d --name=metricbeat \
--privileged=true  \
--user=root \
--volume="$(pwd)/metricbeat.yml:/usr/share/metricbeat/metricbeat.yml:ro" \
--volume="/run/docker.sock:/var/run/docker.sock:ro" \
--volume="/sys/fs/cgroup:/hostfs/sys/fs/cgroup:ro" \
--volume="/proc:/hostfs/proc:ro" \
--volume="/:/hostfs:ro" \
docker.elastic.co/beats/metricbeat:7.9.3

七、nginx做负载均衡

ubuntu系统部署nginx

安装依赖包

apt-get install gcc
apt-get install libpcre3 libpcre3-dev
apt-get install zlib1g zlib1g-dev

# Ubuntu14.04的仓库中没有发现openssl-dev,由下面openssl和libssl-dev替代

#apt-get install openssl openssl-dev
sudo apt-get install openssl 
sudo apt-get install libssl-dev

/configure --prefix=/usr/local/nginx

make && make install 
在nginx.conf中添加 

include    /usr/local/nginx/conf/conf.d/*.conf;

在nginx conf下创建 conf.d

在conf.d下创建 es.conf

配置如下:
upstream es{
        least_conn;    #把请求转发给连接数较少的后端服务器
        server 10.254.0.186:9200;
        server 10.254.0.187:9200;
        server 10.254.0.188:9200;
    }
    
    server {
        listen       9400;
        server_name  localhost;
        underscores_in_headers on;
    
        location / {
            proxy_set_header   Host $host:$server_port;
            proxy_redirect off;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://es;
        }
    }

重载nginx  ./nginx -s reload


八、部署keepalived

centos版本不做介绍 下载tar包解压后进行操作,下面主要介绍ubuntu系统

apt-cache madison keepalived
apt -y install keepalived
cp /usr/share/doc/keepalived/samples/keepalived.conf.sample /etc/keepalived/keepalived.conf

keepalived.conf配置如下

master节点配置

#全局配置:
global_defs {
   router_id es-1                  ## 标识本节点的字条串,通常为 hostname
}

vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh" ## 检测 nginx 状态的脚本路径
interval 2 ## 检测时间间隔
weight -20 ## 如果条件成立,权重-20
}

#VRRP实例配置
vrrp_instance VI_1 {
state MASTER      ## 主节点为 MASTER, 对应的备份节点为 BACKUP
interface enp1s0      ## 绑定虚拟 IP 的网络接口,与本机 IP 地址所在的网络接口相同, 我的是 enp1s0
virtual_router_id 33     ## 虚拟路由的 ID 号, 两个节点设置必须一样, 可选 IP 最后一段使用, 相同的 VRID 为一个组,他将决定多播的 MAC 地址
mcast_src_ip 10.254.0.186    ## 本机 IP 地址
priority 100    ## 节点优先级, 值范围 0-254, MASTER 要比 BACKUP 高
nopreempt    ## 优先级高的设置 nopreempt 解决异常恢复后再次抢占的问题
advert_int 1   ## 组播信息发送间隔,两个节点设置必须一样, 默认 1s

## 设置验证信息,两个节点必须一致

authentication {
auth_type PASS
auth_pass 1111 ## 真实生产,按需求对应该过来
}

## 将 track_script 块加入 instance 配置块

track_script {
chk_nginx ## 执行 Nginx 监控的服务
} 

# 虚拟 IP 池, 两个节点设置必须一样

virtual_ipaddress {
10.254.0.20  ## 虚拟 ip,可以定义多个
}
}

backup节点配置

global_defs {
   router_id es-2                ## 标识本节点的字条串,通常为 hostname
}

vrrp_script chk_nginx {
        script "/etc/keepalived/nginx_check.sh" ## 检测 nginx 状态的脚本路径
        interval 2 ## 检测时间间隔
        weight -20 ## 如果条件成立,权重-20
}

#VRRP实例配置
vrrp_instance VI_1 {
        state BACKUP      ## 主节点为 MASTER, 对应的备份节点为 BACKUP
        interface enp1s0      ## 绑定虚拟 IP 的网络接口,与本机 IP 地址所在的网络接口相同, 我的是 enp1s0
        virtual_router_id 33     ## 虚拟路由的 ID 号, 两个节点设置必须一样, 可选 IP 最后一段使用, 相同的 VRID 为一个组,他将决定多播的 MAC 地址
        mcast_src_ip 10.254.0.187    ## 本机 IP 地址
        priority 90    ## 节点优先级, 值范围 0-254, MASTER 要比 BACKUP 高
        nopreempt    ## 优先级高的设置 nopreempt 解决异常恢复后再次抢占的问题
        advert_int 1   ## 组播信息发送间隔,两个节点设置必须一样, 默认 1s
        ## 设置验证信息,两个节点必须一致
        authentication {
                auth_type PASS
                auth_pass 1111 ## 真实生产,按需求对应该过来
        }
        ## 将 track_script 块加入 instance 配置块
        track_script {
                chk_nginx ## 执行 Nginx 监控的服务
        } 
        # 虚拟 IP 池, 两个节点设置必须一样
        virtual_ipaddress {
                10.254.0.20  ## 虚拟 ip,可以定义多个
        }
}

systemctl start keepalived 启动即可

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值