使用Docker搭建Elasticsearch6.8.6集群及设置集群用户密码
本文基于Docker鏡像搭建Elasticsearch集群,集群搭建完成后設(shè)置集群用戶密碼,主要包含以下內(nèi)容:
- 修改系統(tǒng)參數(shù)
- 安裝docker和docker-compose
- 編寫yml配置文件
- 獲取集群證書
- 修改yml配置文件
- 啟動ES集群并修改密碼
- 配置kibana
(一)修改系統(tǒng)參數(shù)
? ? (1)? ? virtual memory
默認(rèn)情況下,Elasticsearch使用mmapfs目錄存儲其索引,mmap計數(shù)的默認(rèn)操作系統(tǒng)限制可能太低,這可能會導(dǎo)致內(nèi)存不足,需要將其調(diào)至262144。在?/etc/sysctl.conf 添加一行 :
vm.max_map_count=262144運行 sysctl -p 使其生效。
(2)disable swap file
通常,Elasticsearch的內(nèi)存使用由JVM選項控制。不需要啟用交換。Linux系統(tǒng)可執(zhí)行 swapoff -a 不啟用。為了避免每次開機都需要手動執(zhí)行,可將其寫入開機執(zhí)行文件?/etc/rc.local,開機自動執(zhí)行。
(3)ulimit -n
? ? ? 系統(tǒng)默認(rèn)設(shè)置1024。Elasticsearch使用了很多文件描述符,文件描述符用完可能是災(zāi)難性的,并且很可能導(dǎo)致數(shù)據(jù)丟失。因此運行Elasticsearch之前需要將文件描述符的數(shù)量限制增加到65536或更高。在?/etc/security/limits.conf?末尾追加以下內(nèi)容:
root soft nofile 65536 root hard nofile 65536 * soft nofile 65536 * hard nofile 65536 * soft memlock unlimited * hard memlock unlimited如果是Ubuntu系統(tǒng),追加上述內(nèi)容后,ulimit -n可能并沒有從1024變?yōu)?5536,還需要在?/etc/systemd/user.conf和?/etc/systemd/system.conf?中追加?
DefaultLimitNOFILE=65535注意:修改后重啟機器
(二)安裝docker和docker-compose
(1)安裝docker
Ubuntu和Debian可新建docker.sh,添加以下內(nèi)容:
#!/bin/bash OS_NAME=`cat /etc/os-release | grep NAME`sudo apt-get update sudo apt-get install -y apt-transport-https ca-certificates curl gnupg2 software-properties-common iptables sudo apt-get remove docker docker-engine docker.io containerd runcif [[ $OS_NAME =~ "Ubuntu" ]];thensudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" elsecurl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable" fisudo apt-get update sudo apt-get install -y docker-ce sudo systemctl start dockerCentOS系統(tǒng)添加以下內(nèi)容到docker.sh中,賦予可執(zhí)行權(quán)限,運行即可。
#!/bin/bash sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-selinux \docker-engine-selinux \docker-enginesudo yum install -y yum-utils device-mapper-persistent-data lvm2 iptablessudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo sudo yum install -y docker-ce sudo systemctl start docker(2)安裝docker-compose
新建docker-compose.sh,添加以下內(nèi)容并賦予執(zhí)行權(quán)限后執(zhí)行。
#!/bin/bashif [ -f "/usr/local/bin/docker-compose" ]; thensudo rm /usr/local/bin/docker-compose #清除舊版本docker-compose ficurl -L https://github.com/docker/compose/releases/download/1.25.4/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-composesudo chmod +x /usr/local/bin/docker-compose安裝完成后獲取elasticsearch:6.8.6鏡像,為創(chuàng)建集群做準(zhǔn)備。
docker pull elasticsearch:6.8.6(三)編寫yml文件
新建/opt/es目錄,在es目錄下新建config目錄和docker-compose.yml文件。
docker-compose.yml
version: '2.2' services:es01:image: elasticsearch:6.8.6container_name: es01environment:- node.name=es01- cluster.name=bastion-es-cluster- bootstrap.memory_lock=true- "ES_JAVA_OPTS=-Xms128m -Xmx128m"ulimits:memlock:soft: -1hard: -1volumes:- /opt/es-cluster/config/es01.yml:/usr/share/elasticsearch/config/elasticsearch.yml- /opt/es-cluster/data:/usr/share/elasticsearch/data- /opt/es-cluster/logs:/usr/share/elasticsearch/logsports:- 9200:9200network_mode: hostes02:image: elasticsearch:6.8.6container_name: es02environment:- node.name=es02- cluster.name=bastion-es-cluster- bootstrap.memory_lock=true- "ES_JAVA_OPTS=-Xms128m -Xmx128m"ulimits:memlock:soft: -1hard: -1volumes:- /opt/es-cluster/config/es02.yml:/usr/share/elasticsearch/config/elasticsearch.yml- /opt/es-cluster/data:/usr/share/elasticsearch/data- /opt/es-cluster/logs:/usr/share/elasticsearch/logsnetwork_mode: hostes03:image: elasticsearch:6.8.6container_name: es03environment:- node.name=es03- cluster.name=bastion-es-cluster- bootstrap.memory_lock=true- "ES_JAVA_OPTS=-Xms128m -Xmx128m"ulimits:memlock:soft: -1hard: -1volumes:- /opt/es-cluster/config/es03.yml:/usr/share/elasticsearch/config/elasticsearch.yml- /opt/es-cluster/data:/usr/share/elasticsearch/data- /opt/es-cluster/logs:/usr/share/elasticsearch/logsnetwork_mode: host在config目錄下新建es01.yml,es02.yml,es03.yml,內(nèi)容如下:
es01.yml
cluster.name: es-cluster node.name: es01bootstrap.memory_lock: true bootstrap.system_call_filter: falsenetwork.host: 0.0.0.0transport.tcp.port: 9300discovery.zen.minimum_master_nodes: 2 discovery.zen.ping.unicast.hosts:- 127.0.0.1:9300- 127.0.0.1:9301- 127.0.0.1:9302node.data: true node.master: truenode.max_local_storage_nodes: 7es02.yml
cluster.name: es-cluster node.name: es02bootstrap.memory_lock: true bootstrap.system_call_filter: falsenetwork.host: 0.0.0.0transport.tcp.port: 9301discovery.zen.minimum_master_nodes: 2 discovery.zen.ping.unicast.hosts:- 127.0.0.1:9300- 127.0.0.1:9301- 127.0.0.1:9302node.data: true node.master: truenode.max_local_storage_nodes: 7es03.yml
cluster.name: es-cluster node.name: es03bootstrap.memory_lock: true bootstrap.system_call_filter: falsenetwork.host: 0.0.0.0transport.tcp.port: 9302discovery.zen.minimum_master_nodes: 2 discovery.zen.ping.unicast.hosts:- 127.0.0.1:9300- 127.0.0.1:9301- 127.0.0.1:9302node.data: true node.master: truenode.max_local_storage_nodes: 7在docker-compose.yml所在目錄,執(zhí)行docker-compose up即可創(chuàng)建一個Elasticsearch集群。此集群包含3個節(jié)點,每個節(jié)點既是master節(jié)點,又是data節(jié)點。在瀏覽器輸入 Your_IP:9200,看到類似下面的內(nèi)容說明創(chuàng)建成功。
至此,一個包含3個節(jié)點的Elasticsearch集群已經(jīng)搭建完成。但是存在一個問題:只要知道ip,任何人都可以訪問這個進群,進行添加、刪除索引等操作,這顯然不是我們想要的結(jié)果。所以需要設(shè)置用戶和密碼,只有用戶名和密碼正確才有權(quán)限訪問。
(四)獲取集群證書
依次執(zhí)行以下步驟
#查看啟動的容器 docker ps #進入其中一個容器 docker exec -it 容器ID或名稱?/bin/bash #創(chuàng)建證書頒發(fā)機構(gòu) bin/elasticsearch-certutil ca#生成證書和私鑰 bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12#退出容器 exit#從容器中拷貝證書 docker cp 容器ID:/usr/share/elasticsearch/elastic-certificates.p12 .生成的?elastic-certificates.p12 就是我們需要的證書,容器之間通過證書認(rèn)證通信。
(五)修改yml配置文件
新建目錄certificates,將?elastic-certificates.p12 放在certificate中,在es01.yml、es02.yml、es03.yml中添加下列內(nèi)容
xpack.security.enabled: true xpack.security.authc.accept_default_password: true xpack.security.transport.ssl.enabled: true xpack.security.transport.ssl.verification_mode: certificate xpack.security.transport.ssl.keystore.path: /usr/share/elasticsearch/config/certificates/elastic-certificates.p12 xpack.security.transport.ssl.truststore.path: /usr/share/elasticsearch/config/certificates/elastic-certificates.p12修改docker-compose.yml,在每個volume下添加
- /opt/es/certificates:/usr/share/elasticsearch/config/certificates(六)啟動ES集群并修改密碼
再次執(zhí)行docker-compose up啟動集群,再打開一個terminal,進入任意一個容器,執(zhí)行
./bin/elasticsearch-setup-passwords interactive如果出現(xiàn)下面的內(nèi)容,說明不能在這個容器中設(shè)置密碼。
回到執(zhí)行docker-compose up的terminal,可看到類似下面的日志,進入到這個容器中,執(zhí)行上面的命令即可設(shè)置密碼。
執(zhí)行設(shè)置密碼的命令,如果出現(xiàn)下面的內(nèi)容,輸入y即可設(shè)置elastic,apm_system,kibana,logstash_system,beats_system,remote_monitoring_user這幾個內(nèi)置用戶的密碼。
設(shè)置完成后,再訪問Elasticsearch集群時,就需要提供用戶名和密碼才能訪問。
(七)配置kibana
#獲取kibana鏡像 docker pull kibana:6.8.6 #啟動一個kibana容器 docker run -dit -p 5601:5601 --name es_kibana kibana:6.8.6#進入kibana容器 docker exec -dit es_kibana /bin/bash#修改kibana配置文件 vi config/kibana.yml1、將 elasticsearch.hosts 修改為你的ip 2、添加下面兩行 elasticsearch.username: kibana elasticsearch.password: 你設(shè)置的kibana密碼保存退出容器后,執(zhí)行下面的命令重啟es_kibana容器
docker restart es_kibana在瀏覽器中輸入Your_IP:5601,輸入用戶名和密碼即可登錄kibana。
總結(jié)
以上是生活随笔為你收集整理的使用Docker搭建Elasticsearch6.8.6集群及设置集群用户密码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Docker容器日志集中收集(clien
- 下一篇: 最近程序员频繁被抓,如何避免面向监狱编程