docker雖然能夠部署有狀態服務,但若是不是有特別須要,仍是建議不要部署有狀態服務
K8S同理,也不建議部署有狀態服務,如mysql,zk等。
所以手動將zookeeper建立集羣提供給dubbo使用java
集羣分佈:7-11,7-12,7-21
zk是java服務,須要依賴jdkmysql
jdk請自行下載,只要是1.8版本的就能夠,rpm安裝或二進制安裝都可:linux
mkdir /opt/src mkdir /usr/java cd /opt/src tar -xf jdk-8u221-linux-x64.tar.gz -C /usr/java/ ln -s /usr/java/jdk1.8.0_221/ /usr/java/jdk
cat >>/etc/profile <<'EOF' #JAVA HOME export JAVA_HOME=/usr/java/jdk export PATH=$JAVA_HOME/bin:$JAVA_HOME/bin:$PATH export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar EOF # 使環境變量生效 source /etc/profile
驗證結果nginx
[root@hdss7-11 ~]# java -version java version "1.8.0_221" Java(TM) SE Runtime Environment (build 1.8.0_221-b11) Java HotSpot(TM) 64-Bit Server VM (build 25.221-b11, mixed mode)
下載地址git
wget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz tar -zxf zookeeper-3.4.14.tar.gz -C /opt/ ln -s /opt/zookeeper-3.4.14/ /opt/zookeeper
cat >/opt/zookeeper/conf/zoo.cfg <<'EOF' tickTime=2000 initLimit=10 syncLimit=5 dataDir=/data/zookeeper/data dataLogDir=/data/zookeeper/logs clientPort=2181 server.1=zk1.zq.com:2888:3888 server.2=zk2.zq.com:2888:3888 server.3=zk3.zq.com:2888:3888 EOF
建立相關目錄sql
mkdir -p /data/zookeeper/data mkdir -p /data/zookeeper/logs
給每一個zk不一樣的myid,以便區分主從docker
#7-11上 echo 1 > /data/zookeeper/data/myid #7-12上 echo 2 > /data/zookeeper/data/myid #7-21上 echo 3 > /data/zookeeper/data/myid
到7.11
上增長dns解析記錄apache
vi /var/named/zq.com.zone ... zk1 A 10.4.7.11 zk2 A 10.4.7.12 zk3 A 10.4.7.21 #驗證結果 ~]# dig -t A zk1.zq.com +short 10.4.7.11
在每臺zk機器上都執行此操做架構
/opt/zookeeper/bin/zkServer.sh start
~]# ss -ln|grep 2181 tcp LISTEN 0 50 :::2181 :::*
[root@hdss7-11 ~]# /opt/zookeeper/bin/zkServer.sh status ZooKeeper JMX enabled by default Using config: /opt/zookeeper/bin/../conf/zoo.cfg Mode: follower [root@hdss7-12 ~]# /opt/zookeeper/bin/zkServer.sh status ZooKeeper JMX enabled by default Using config: /opt/zookeeper/bin/../conf/zoo.cfg Mode: leader [root@hdss7-21 ~]# /opt/zookeeper/bin/zkServer.sh status ZooKeeper JMX enabled by default Using config: /opt/zookeeper/bin/../conf/zoo.cfg Mode: follower
到此,zookeeper集羣就搭建好了。運維
運維主機上操做
docker pull stanleyws/jre8:8u112 docker tag fa3a085d6ef1 harbor.zq.com/public/jre:8u112 docker push harbor.zq.com/public/jre:8u112
mkdir -p /data/dockerfile/jre8/ cd /data/dockerfile/jre8/
cat >Dockerfile <<'EOF' FROM harbor.zq.com/public/jre:8u112 RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime &&\ echo 'Asia/Shanghai' >/etc/timezone ADD config.yml /opt/prom/config.yml ADD jmx_javaagent-0.3.1.jar /opt/prom/ WORKDIR /opt/project_dir ADD entrypoint.sh /entrypoint.sh CMD ["sh","/entrypoint.sh"] EOF
添加config.yml
此文件是爲後面用普羅米修斯監控作準備的
cat >config.yml <<'EOF' --- rules: - pattern: '.*' EOF
下載jmx_javaagent,監控jvm信息:
wget https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.3.1/jmx_prometheus_javaagent-0.3.1.jar -O jmx_javaagent-0.3.1.jar
建立entrypoint.sh啓動腳本:
使用exec 來運行java的jar包,可以使腳本將本身的pid 爲‘1’ 傳遞給java進程,避免docker容器因沒有前臺進程而退出。而且不要加&符。
cat >entrypoint.sh <<'EOF' #!/bin/sh M_OPTS="-Duser.timezone=Asia/Shanghai -javaagent:/opt/prom/jmx_javaagent-0.3.1.jar=$(hostname -i):${M_PORT:-"12346"}:/opt/prom/config.yml" C_OPTS=${C_OPTS} JAR_BALL=${JAR_BALL} exec java -jar ${M_OPTS} ${C_OPTS} ${JAR_BALL} EOF
在harbor中建立名爲base
的公開倉庫,用來存放本身自定義的底包
docker build . -t harbor.zq.com/base/jre8:8u112 docker push harbor.zq.com/base/jre8:8u112