docker 快速部署ES集群 spark集群

时间:2023-03-08 15:45:05
docker 快速部署ES集群  spark集群

1) 拉下来 ES集群  spark集群 两套快速部署环境, 并只用docker跑起来,并保存到私库。

2)弄清楚怎么样打包 linux镜像(或者说制作)。

3)试着改一下,让它们跑在集群里面。

4) 弄清楚

Dockerfile 怎么制作镜像

docker-compose 里面的启动项 及 与 mesos里面怎么对应起来。

5)写一个spack程序

及在ES环境里造少量数据查一下。

ES 环境docker :参考贴子来跑的,https://cloud.tencent.com/developer/article/1098820

记录下主要步骤:

1)拉镜像到私库

2)内网虚拟机环境,禁用其它服务没有就跳过,ip修改,免密,等。

systemctl disable mesos-slave
systemctl stop mesos-slave
systemctl disable zookeeper
systemctl stop zookeeper
systemctl disable mesos-master
systemctl stop mesos-master
systemctl disable marathon
systemctl stop marathon
systemctl enable docker
systemctl start docker
systemctl daemon-reload
systemctl restart docker

3)从私库拉镜象,不需要每个全拉下来,拉对应的。

docker pull 192.168.1.153:31809/kafka.new.es
docker pull 192.168.1.153:31809/zookeeper.new.es docker pull 192.168.1.153:31809/elastic/elasticsearch:5.6.8.new.es
docker pull 192.168.1.153:31809/elastic/kibana:5.6.8.new.es
docker pull 192.168.1.153:31809/elastic/logstash:5.6.8.new.es docker pull 192.168.1.153:31809/elastic/elasticsearch:5.6.8.new.es

4)

写脚本主要有   cp.test.sh  和 docker.run.sh

cp.test.sh 主要是测试 脚本流程 及 处理免密登陆第一次时需要输入yes问题

4.1

将 cp.test.sh 放在任意一台 ,将自己发送给所有节点,在每台这样操作,输入yes.

再发一次确保没漏

4.2

执行 docker.run.sh 启动容器

docker.run.sh主要做和三件事

1)将自己发给其它节点

2)处理自己 相关docker 的启动

3)通过ssh 向其它节点发送命令 在其它节点执行 docker.run.sh(当然这时根据参数是不会再次shh其它节点)

总之就是  docker.run.sh 将会停止和删除所有节点中原来的所有容器,并且启动该启动的容器。

另外附上相关操作脚本。

ip有修改

  -------------------公共库---------------------------------------

docker pull jenkins
docker tag jenkins 192.168.1.153:/jenkins:latest
docker push 192.168.1.153:/jenkins:latest
docker rmi jenkins
docker rmi 192.168.1.153:/jenkins docker pull mysql
docker tag mysql 192.168.1.153:/mysql:latest
docker push 192.168.1.153:/mysql:latest
docker rmi mysql
docker rmi 192.168.1.153:/mysql docker pull tomcat
docker tag tomcat 192.168.1.153:/tomcat:latest
docker push 192.168.1.153:/tomcat:latest
docker rmi tomcat
docker rmi 192.168.1.153:/tomcat docker pull maven
docker tag maven 192.168.1.153:/maven:latest
docker push 192.168.1.153:/maven:latest
docker rmi maven
docker rmi 192.168.1.153:/maven -------------------公共库--------------------------------------- -----------------快速部署ES集群.txt--------------------------
https://cloud.tencent.com/developer/article/1098820
docker pull zookeeper
docker tag zookeeper 192.168.1.153:/zookeeper.new.es
docker push 192.168.1.153:/zookeeper.new.es
docker rmi zookeeper
docker rmi 192.168.1.153:/zookeeper.new.es docker pull wurstmeister/kafka
docker tag wurstmeister/kafka 192.168.1.153:/kafka.new.es
docker push 192.168.1.153:/kafka.new.es
docker rmi wurstmeister/kafka
docker rmi 192.168.1.153:/kafka.new.es docker pull docker.elastic.co/elasticsearch/elasticsearch:5.6.
docker tag docker.elastic.co/elasticsearch/elasticsearch:5.6. 192.168.1.153:/elastic/elasticsearch:5.6..new.es
docker push 192.168.1.153:/elastic/elasticsearch:5.6..new.es
docker rmi docker.elastic.co/elasticsearch/elasticsearch:5.6.
docker rmi 192.168.1.153:/elastic/elasticsearch:5.6..new.es docker pull docker.elastic.co/kibana/kibana:5.6.
docker tag docker.elastic.co/kibana/kibana:5.6. 192.168.1.153:/elastic/kibana:5.6..new.es
docker push 192.168.1.153:/elastic/kibana:5.6..new.es
docker rmi docker.elastic.co/kibana/kibana:5.6.
docker rmi 192.168...:/elastic/kibana:5.6..new.es docker pull docker.elastic.co/logstash/logstash:5.6.
docker tag docker.elastic.co/logstash/logstash:5.6. 192.168.1.153:/elastic/logstash:5.6..new.es
docker push 192.168.1.153:/elastic/logstash:5.6..new.es
docker rmi docker.elastic.co/logstash/logstash:5.6.
docker rmi 192.168.1.153:/elastic/logstash:5.6..new.es -----------------快速部署ES集群.txt------------------------------ -----------------spark:.2镜像--------------------------
https://www.cnblogs.com/hongdada/p/9475406.html
docker pull singularities/spark
docker tag singularities/spark 192.168.1.153:/singularities/spark
docker push 192.168.1.153:/singularities/spark
docker rmi singularities/spark
docker rmi 192.168.1.153:/singularities/spark
----------------- spark:.2镜像------------------------------

-----------------centos7 镜像--------------------------
https://www.jianshu.com/p/4801bb7ab9e0
docker tag 7 192.168.1.153:31809/centos7
docker push 192.168.1.153:31809/centos7
docker rmi 7
docker rmi 192.168.1.153:31809/centos7
----------------- centos7 镜像------------------------------

-----------------singularities/hadoop 2.8 镜像--------------------------
https://www.jianshu.com/p/4801bb7ab9e0
docker tag singularities/hadoop:2.8 192.168.1.153:31809/singularities/hadoop.2.8
docker push 192.168.1.153:31809/singularities/hadoop.2.8
docker rmi singularities/hadoop:2.8
docker rmi 192.168.1.153:31809/singularities/hadoop.2.8
----------------- singularities/hadoop 2.8 镜像 ------------------------------


--docker images
--查看库
curl -X GET http://192.168.1.153:31809/v2/_catalog {"repositories":["nginx"]}
--查看库
curl -X GET http://192.168.1.153:31809/v2/_catalog {"name":"nginx","tags":["latest"]}

免密登陆测试脚本

cp.test.sh

flag=$1
getip()
{
ifconfig|grep 192|awk '{print $2}'
} ip=`getip`
echo "salf IP:" $ip
cpToOtherVM()
{
if [[ "${flag}" == "y" ]]; then if [[ "${ip}" != "$1" ]]; then scp -r /z-hl-c53cc450-62bf-4b65-b7f2-432e2aae9c62-v5.json $1:/ fi
fi } execOtherVmShell()
{
if [[ "${flag}" == "y" ]]; then if [[ "${ip}" != "$1" ]]; then ssh root@$1 "sh /cp.test.sh" fi
fi
} echo "copy to"
cpToOtherVM "192.168.1.100"
cpToOtherVM "192.168.1.101"
cpToOtherVM "192.168.1.102"
sleep 1
cpToOtherVM "192.168.1.110"
cpToOtherVM "192.168.1.111"
cpToOtherVM "192.168.1.112"
sleep 1
cpToOtherVM "192.168.1.120"
cpToOtherVM "192.168.1.121"
cpToOtherVM "192.168.1.122"
cpToOtherVM "192.168.1.123"
sleep 3
echo "exec other"
execOtherVmShell "192.168.1.100"
execOtherVmShell "192.168.1.101"
execOtherVmShell "192.168.1.102" execOtherVmShell "192.168.1.110"
execOtherVmShell "192.168.1.111"
execOtherVmShell "192.168.1.112" execOtherVmShell "192.168.1.120"
execOtherVmShell "192.168.1.121"
execOtherVmShell "192.168.1.122"
execOtherVmShell "192.168.1.123" echo "exec salf action"

运行容器脚本

docker.run.sh

[root@docker-master3 /]# cat docker.run.sh 

flag=$1
getip()
{
ifconfig|grep 192|awk '{print $2}'
} ip=`getip`
echo "salf IP:" $ip
cpToOtherVM()
{
if [[ "${flag}" == "y" ]]; then if [[ "${ip}" != "$1" ]]; then scp -r /etc/sysctl.conf $1:/etc/sysctl.conf
scp -r /docker.run.sh $1:/docker.run.sh fi
fi } execOtherVmShell()
{
if [[ "${flag}" == "y" ]]; then if [[ "${ip}" != "$1" ]]; then ssh root@$1 "docker ps -a |grep 192.168.1. |awk -F ' ' '{print $1}'| xargs -i docker kill {}"
echo "stop all docker"
sleep 2
ssh root@$1 "docker ps -a |grep 192.168.1. |awk -F ' ' '{print $1}'| xargs -i docker rm {}"
echo "rm all docker"
sleep 5
ssh root@$1 "sh /docker.run.sh" fi
fi
} echo "copy to"
cpToOtherVM "192.168.1.100"
cpToOtherVM "192.168.1.101"
cpToOtherVM "192.168.1.102"
sleep 1
cpToOtherVM "192.168.1.110"
cpToOtherVM "192.168.1.111"
cpToOtherVM "192.168.1.112"
sleep 1
cpToOtherVM "192.168.1.120"
cpToOtherVM "192.168.1.121"
cpToOtherVM "192.168.1.122"
cpToOtherVM "192.168.1.123"
sleep 1 echo "exec salf action"
docker ps -a |grep 192.168.1. |awk -F ' ' '{print $1}'| xargs -i docker kill {}
sleep 2
docker ps -a |grep 192.168.1. |awk -F ' ' '{print $1}'| xargs -i docker rm {}
sleep 3 function runZookeeper()
{
echo "exec runZookeeper" $1 $2
# 启动
docker run --name zookeeper \
--net=host \
--restart always \
-v /data/zookeeper:/data/zookeeper \
-e ZOO_PORT=2181 \
-e ZOO_DATA_DIR=/data/zookeeper/data \
-e ZOO_DATA_LOG_DIR=/data/zookeeper/logs \
-e ZOO_MY_ID=$2 \
-e ZOO_SERVERS="server.1=192.168.1.100:2888:3888 server.2=192.168.1.101:2888:3888 server.3=192.168.1.102:2888:3888" \
-d 192.168.1.153:31809/zookeeper.new.es
sleep 2
} function runKafka()
{ echo "exec runKafka" $1 $2
# 机器有11块盘,这里都用起来
mkdir -p /data{1..11}/kafka # 启动
docker run --name kafka \
--net=host \
--volume /data1:/data1 \
--volume /data2:/data2 \
--volume /data3:/data3 \
--volume /data4:/data4 \
--volume /data5:/data5 \
--volume /data6:/data6 \
--volume /data7:/data7 \
--volume /data8:/data8 \
--volume /data9:/data9 \
--volume /data10:/data10 \
--volume /data11:/data11 \
-e KAFKA_BROKER_ID=$2 \
-e KAFKA_PORT=9092 \
-e KAFKA_HEAP_OPTS="-Xms8g -Xmx8g" \
-e KAFKA_HOST_NAME=$1 \
-e KAFKA_ADVERTISED_HOST_NAME=$1 \
-e KAFKA_LOG_DIRS=/data1/kafka,/data2/kafka,/data3/kafka,/data4/kafka,/data5/kafka,/data6/kafka,/data7/kafka,/data8/kafka,/data9/kafka,/data10/kafka,/data11/kafka \
-e KAFKA_ZOOKEEPER_CONNECT="192.168.1.100:2181,192.168.1.101:2181,192.168.1.102:2181" \
-d 192.168.1.153:31809/kafka.new.es
sleep 2
} function runMaster()
{
echo "exec runMaster" $1 $2
#!/bin/bash
# 删除已退出的同名容器
#docker ps -a | grep es_master |egrep "Exited|Created" | awk '{print $1}'|xargs -i% docker rm -f % 2>/dev/null
# 启动
docker run --name es_master \
-d --net=host \
--restart=always \
--privileged=true \
--ulimit nofile=655350 \
--ulimit memlock=-1 \
--memory=1G \
--memory-swap=-1 \
--cpus=0.5 \
--volume /data:/data \
--volume /etc/localtime:/etc/localtime \
-e TERM=dumb \
-e ES_JAVA_OPTS="-Xms8g -Xmx8g" \
-e cluster.name="iyunwei" \
-e node.name="MASTER-"$2 \
-e node.master=true \
-e node.data=false \
-e node.ingest=false \
-e node.attr.rack="0402-K03" \
-e discovery.zen.ping.unicast.hosts="192.168.1.110:9301,192.168.1.111:9301,192.168.1.112:9301,192.168.1.110:9300,192.168.1.112:9300,192.168.1.113:9300,192.168.1.120:9300,192.168.1.121:9300,192.168.1.122:9300,192.168.1.123:9300" \
-e discovery.zen.minimum_master_nodes=2 \
-e gateway.recover_after_nodes=5 \
-e network.host=0.0.0.0 \
-e transport.tcp.port=9301 \
-e http.port=9201 \
-e path.data="/data/iyunwei/master" \
-e path.logs=/data/elastic/logs \
-e bootstrap.memory_lock=true \
-e bootstrap.system_call_filter=false \
-e indices.fielddata.cache.size="25%" \
192.168.1.153:31809/elastic/elasticsearch:5.6.8.new.es
sleep 2 } function runClient()
{
echo "exec runClient" $1 $2
#!/bin/bash
#docker ps -a | grep es_client |egrep "Exited|Created" | awk '{print $1}'|xargs -i% docker rm -f % 2>/dev/null
docker run --name es_client \
-d --net=host \
--restart=always \
--privileged=true \
--ulimit nofile=655350 \
--ulimit memlock=-1 \
--memory=1G \
--memory-swap=-1 \
--cpus=0.5 \
--volume /data:/data \
--volume /etc/localtime:/etc/localtime \
-e TERM=dumb \
-e ES_JAVA_OPTS="-Xms31g -Xmx31g" \
-e cluster.name="iyunwei" \
-e node.name="CLIENT-"$2 \
-e node.master=false \
-e node.data=false \
-e node.attr.rack="0402-K03" \
-e discovery.zen.ping.unicast.hosts="192.168.1.110:9301,192.168.1.111:9301,192.168.1.112:9301,192.168.1.110:9300,192.168.1.112:9300,192.168.1.113:9300,192.168.1.120:9300,192.168.1.121:9300,192.168.1.122:9300,192.168.1.123:9300" \
-e discovery.zen.minimum_master_nodes=2 \
-e gateway.recover_after_nodes=2 \
-e network.host=0.0.0.0 \
-e transport.tcp.port=9300 \
-e http.port=9200 \
-e path.data="/data/iyunwei/client" \
-e path.logs=/data/elastic/logs \
-e bootstrap.memory_lock=true \
-e bootstrap.system_call_filter=false \
-e indices.fielddata.cache.size="25%" \
192.168.1.153:31809/elastic/elasticsearch:5.6.8.new.es
sleep 2 } function runDATA ()
{
echo "exec runDATA" $1 $2
#!/bin/bash
#docker ps -a | grep es_data |egrep "Exited|Created" | awk '{print $1}'|xargs -i% docker rm -f % 2>/dev/null
docker run --name es_data \
-d --net=host \
--restart=always \
--privileged \
--ulimit nofile=655350 \
--ulimit memlock=-1 \
--volume /data:/data \
--volume /data1:/data1 \
--volume /data2:/data2 \
--volume /data3:/data3 \
--volume /data4:/data4 \
--volume /data5:/data5 \
--volume /data6:/data6 \
--volume /data7:/data7 \
--volume /data8:/data8 \
--volume /data9:/data9 \
--volume /data10:/data10 \
--volume /data11:/data11 \
--volume /etc/localtime:/etc/localtime \
--ulimit memlock=-1 \
-e TERM=dumb \
-e ES_JAVA_OPTS="-Xms31g -Xmx31g" \
-e cluster.name="iyunwei" \
-e node.name="DATA-"$2 \
-e node.master=false \
-e node.data=true \
-e node.ingest=false \
-e node.attr.rack="0402-Q06" \
-e discovery.zen.ping.unicast.hosts="192.168.1.110:9301,192.168.1.111:9301,192.168.1.112:9301,192.168.1.110:9300,192.168.1.112:9300,192.168.1.113:9300,192.168.1.120:9300,192.168.1.121:9300,192.168.1.122:9300,192.168.1.123:9300" \
-e discovery.zen.minimum_master_nodes=2 \
-e gateway.recover_after_nodes=2 \
-e network.host=0.0.0.0 \
-e http.port=9200 \
-e path.data="/data1/iyunwei/data,/data2/iyunwei/data,/data3/iyunwei/data,/data4/iyunwei/data,/data5/iyunwei/data,/data6/iyunwei/data,/data7/iyunwei/data,/data8/iyunwei/data,/data9/iyunwei/data,/data10/iyunwei/data,/data11/iyunwei/data,/data12/iyunwei/data" \
-e path.logs=/data/elastic/logs \
-e bootstrap.memory_lock=true \
-e bootstrap.system_call_filter=false \
-e indices.fielddata.cache.size="25%" \
192.168.1.153:31809/elastic/elasticsearch:5.6.8.new.es
sleep 2 } function runKibana()
{
echo "exec runKibana" $1 $2
#!/bin/bash
#docker ps -a | grep kibana | egrep "Exited|Create" | awk '{print $1}'|xargs -i% docker rm -f % 2>/dev/null
docker run --name kibana \
--restart=always \
-d --net=host \
-v /data:/data \
-v /etc/localtime:/etc/localtime \
--privileged \
-e TERM=dumb \
-e SERVER_HOST=0.0.0.0 \
-e SERVER_PORT=5601 \
-e SERVER_NAME=Kibana-$2 \
-e ELASTICSEARCH_URL=http://localhost:9200 \
-e ELASTICSEARCH_USERNAME=elastic \
-e ELASTICSEARCH_PASSWORD=changeme \
-e XPACK_MONITORING_UI_CONTAINER_ELASTICSEARCH_ENABLED=false \
-e LOG_FILE=/data/elastic/logs/kibana.log \
192.168.1.153:31809/elastic/kibana:5.6.8.new.es
sleep 2 } function runLogstash()
{
echo "exec runLogstash" $1 $2
#!/bin/bash
#docker ps -a | grep logstash |egrep "Exited|Created" | awk '{print $1}'|xargs -i% docker rm -f % 2>/dev/null
docker run --name logstash \
-d --net=host \
--restart=always \
--privileged \
--ulimit nofile=655350 \
--ulimit memlock=-1 \
-e ES_JAVA_OPTS="-Xms16g -Xmx16g" \
-e TERM=dumb \
--volume /etc/localtime:/etc/localtime \
--volume /data/elastic/config:/usr/share/logstash/config \
--volume /data/elastic/config/pipeline:/usr/share/logstash/pipeline \
--volume /data/elastic/logs:/usr/share/logstash/logs \
192.168.1.153:31809/elastic/logstash:5.6.8.new.es
sleep 2 } function cfgkafka()
{
if [[ "${ip}" = "$1" ]]; then echo "exec cfgkafka" $1 $2 mkdir -p /data/zookeeper runZookeeper $1 $2 runKafka $1 $2 fi
} function cfgMaster()
{
if [[ "${ip}" = "$1" ]]; then echo "exec cfgMaster" $1 $2 mkdir -p /data/iyunwei/master
chown -R 1000:1000 /data/iyunwei mkdir -p /data/iyunwei/client
chown -R 1000:1000 /data/iyunwei runMaster $1 $2 runClient $1 $2 runKibana $1 $2 runLogstash $1 $2
fi
} function cfgDATA()
{
if [[ "${ip}" = "$1" ]]; then echo "exec cfgDATA" $1 $2 mkdir -p /data{1..12}/iyunwei/data
chown -R 1000:1000 /data{1..12}/iyunwei runDATA $1 $2 fi
} index=0
for kafkaClusterIP in "192.168.1.100" "192.168.1.101" "192.168.1.102"
do index=$(($index+1)) echo "cfgkafka" $kafkaClusterIP $index cfgkafka $kafkaClusterIP $index done #Master
MasterIndex=0
for MasterIP in in "192.168.1.110" "192.168.1.111" "192.168.1.112"
do MasterIndex=$(($MasterIndex+1)) echo "cfgMaster" $MasterIP $MasterIndex cfgMaster $MasterIP $MasterIndex done #DATA
DATAIndex=0
for DATAIP in "192.168.1.120" "192.168.1.121" "192.168.1.122" "192.168.1.123"
do
DATAIndex=$(($DATAIndex+1)) echo "cfgDATA" $DATAIP $DATAIndex cfgDATA $DATAIP $DATAIndex
done
sleep 3 echo "exec other vm action"
execOtherVmShell "192.168.1.100"
execOtherVmShell "192.168.1.101"
execOtherVmShell "192.168.1.102" execOtherVmShell "192.168.1.110"
execOtherVmShell "192.168.1.111"
execOtherVmShell "192.168.1.112" execOtherVmShell "192.168.1.120"
execOtherVmShell "192.168.1.121"
execOtherVmShell "192.168.1.122"
execOtherVmShell "192.168.1.123" curl -XPUT http://192.168.1.111:9200/_license?acknowledge=true -d @z-hl-c53cc450-62bf-4b65-b7f2-432e2aae9c62-v5.json -uelastic:changeme

内核参数 cat /etc/sysctl.conf

vm.max_map_count = 655360
vm.swappiness = 1

ip:规划与原贴不同

为保证通信方便,不组建复杂网络环境,全部放在同一网段。

192.168.1.100-102 相同为kafka

192.168.1.110-112 对应  192.168.2.100-102

192.168.1.120-123 对应  192.168.3.100-103

现在,容器布署成功

kafka镜像配置文件有权限问题

es-master主面kibana 可访问 但登不进云

http://192.168.1.110:5601/login?next=%2F#?_g=()

应该是没有注册的问题

     curl 命令注册时端口不能访问,需要看一下

   容器 ps -a 全部者在

   容器 ps kafka没有运行

 因为ip和原镜像的ip不一样,有可能要进入容器里面去拿配置文件,修改对应ip
拿出来后还要重新打镜象才行,目前不了解要哪些配置要改
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.151 docker-slave1 docker-slave1.com
192.168.1.152 docker-slave2 docker-slave2.com
192.168.1.153 docker-slave3 docker-slave3.com
192.168.1.161 docker-master1 docker-master1.com
192.168.1.162 docker-master2 docker-master3.com
192.168.1.163 docker-master3 docker-master3.com
192.168.1.110 es-master1 es-master1.com
192.168.1.111 es-master2 es-master2.com
192.168.1.112 es-master3 es-master3.com
192.168.1.110 es-kafka1 es-kafka1.com
192.168.1.101 es-kafka2 es-kafka2.com
192.168.1.102 es-kafka3 es-kafka3.com
192.168.1.120 es-data1 es-data1.com
192.168.1.121 es-data2 es-data2.com
192.168.1.122 es-data3 es-data3.com
192.168.1.124 es-data4 es-data4.com