Docker學習(七)基於Docker的Tomcat\Nginx\Keepalived集羣安裝部署

1、tomcat部署 html

1)安裝tomcat服務器(版本是V9.0)nginx

docker search tomcatc++

docker pull tomcatweb

docker images|grep tomcatdocker

mkdir -p ~/tomcat ~/tomcat/test (~/tomcat/webapps ~/tomcat/logs ~/tomcat/conf)tomcat

docker run --name tomcat9 -p 8081:8080 -v $PWD/test:/usr/local/tomcat/webapps/test -d tomcat:latestbash

[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
99489935e345 tomcat:latest "catalina.sh run" 26 hours ago Up 9 seconds 0.0.0.0:8081->8080/tcp tomcat9服務器

啓動後便可訪問 192.168.22.152:8081app

2)項目部署。寫一個test1.war,把war包放test目錄curl

[root@localhost ~]# docker exec -it 99489935e345 /bin/bash
root@99489935e345:/usr/local/tomcat# cd webapps/test
root@99489935e345:/usr/local/tomcat/webapps/test# mv test1.war /usr/local/tomcat/webapps

root@99489935e345:/usr/local/tomcat/webapps/test# exit

重啓容器,部署完成,直接訪問應用

[root@localhost ~]# docker restart 99489935e345

3)部署多個服務容器

在上面的基礎上,mkdir -p  ~/tomcat/data

[root@localhost ~] cd tomcat

[root@localhost tomcat]# docker run --name tomcat9.0 -p 8082:8080 -v $PWD/data:/usr/local/tomcat/webapps/test -d tomcat:latest
26641576d375ac77fb53a7178d2b3b5234362ad84e3cf7332af32d990829814c

寫一個test1.war,把war包放test目錄

[root@localhost tomcat]# docker exec -it ede8fecfc165 /bin/bash
root@ede8fecfc165:/usr/local/tomcat# cd webapps/test
root@ede8fecfc165:/usr/local/tomcat/webapps/test# mv test1.war /usr/local/tomcat/webapps

[root@localhost ~]# docker restart ede8fecfc165

4)可在192.168.22.151機器作上述一樣操做。

2、安裝nginx(V1.15.3)

參考:https://blog.csdn.net/wangfei0904306/article/details/77623400

說明:nginx日誌目錄 :/var/log/nginx,部署目錄:/usr/share/nginx/html,配置文件:/etc/nginx/nginx.conf,conf.d是一個目錄:/etc/nginx/conf.d,若是要掛載上述目錄與文件,必須先在宿主機建好目錄,並有正確nginx.conf的配置文件(可能已裝的系統中拷貝)。

一、在主192.168.22.151備192.168.22.152機上建立nginx:

mkdir -p ~/nginx/html ~/nginx/logs ~/nginx/conf.d

[root@localhost nginx]# docker run --name nginx1 -p 80:80 -v $PWD/html:/usr/share/nginx/html -v $PWD/nginx.conf:/etc/nginx/nginx.conf:ro -v $PWD/conf.d:/etc/nginx/conf.d -v $PWD/logs:/var/log/nginx -d nginx:latest
e0071d4c3fe43438a0eec11b09b883274209310288000229cf5750a5a793075f

[root@localhost nginx]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
e0071d4c3fe4        nginx:latest        "nginx -g 'daemon ..."   49 seconds ago      Up 48 seconds       0.0.0.0:80->80/tcp   nginx1

[root@localhost nginx]# docker exec -it e0071d4c3fe4 /bin/bash
root@e0071d4c3fe4:/#
 

二、配置nginx:

1)在nginx.conf文件下在http{}節點內增長下面內容:
    upstream balance{
        server 192.168.22.152:8081 weight=5;
        server 192.168.22.152:8082 weight=5;
        server 192.168.22.151:8083 weight=5;
    }

 balance這個名字能夠任意,但必定要與conf.d/default.conf中配置的proxy_pass http://balance;名稱一致。

2)在conf.d/default.conf內容屬於http{}節點下的server{}節點,在server{}下面增長:

 location / {
        proxy_pass http://balance;
    }

3)保存,重啓容器

[root@localhost logs]# docker restart e0071d4c3fe4

4)兩臺機分別安裝,操做與配置徹底同樣。

3、安裝keepalived主備

說明:keepalived未安裝在docker上,安裝在宿主機上,兩臺宿主機,IP分別爲192.168.22.151(主),192.168.22.152(備),VIP設爲同網段的192.168.22.158

配置參考:http://www.keepalived.org/doc/installing_keepalived.html

                 http://www.keepalived.org/manpage.html

                 https://www.cnblogs.com/lys_013/p/5783107.html

安裝前可對內核升級(不是必須)

[root@localhost ~] yum -y install gcc gcc+ gcc-c++

[root@localhost ~] yum install popt-devel openssl openssl-devel libssl-dev libnl-devel popt-devel libnl3-devel net-snmp-devel curl

[root@localhost ~] yum -y install kernel kernel-devel

一、keepalived 安裝

1)選爲yum安裝,分別安裝在192.168.22.151,192.168.22.152兩臺機上

[root@localhost ~]# yum install keepalived (安裝的是版本:V1.3.5)
2)安裝包安裝

[root@localhost ~]# curl --progress http://keepalived.org/software/keepalived-1.2.15.tar.gz | tar xz
[root@localhost keepalived-1.2.15]# ./configure (默認安裝在/usr/local目錄 ,推薦指定安裝目錄:./configure --prefix=/usr/local/keepalived-1.2.15)

[root@localhost keepalived-1.2.15]# make

[root@localhost keepalived-1.2.15]# sudo make install

編譯以後,建立一個init腳本以控制keepalived守護程序。

cp /root/keepalived-1.2.15/keepalived/etc/init.d/keepalived.init /etc/rc.d/init.d/

ln -s /etc/rc.d/init.d/keepalived.init /etc/rc.d/rc3.d/S99keepalived

未操做完。。。

二、配置系統日誌(方便監控運行狀況)

1)修改keepalived的日誌輸入(由於keepalived的日誌輸出在/var/log/message裏面,很差查看,可進行修改)

[root@localhost ~]# vi /etc/sysconfig/keepalived

把KEEPALIVED_OPTIONS="-D" 修改成KEEPALIVED_OPTIONS="-D -d -S 0"

最後設置syslog,修改/etc/rsyslog.conf
最後添加:
# keepalived -S 0 
local0.*                                                /var/log/keepalived.log
從新啓動日誌

[root@localhost log]# systemctl restart rsyslog

[root@localhost log]# systemctl restart keepalived

[root@localhost log]# tail keepalived.log
Sep  8 20:51:58 localhost Keepalived_healthcheckers[39423]: Activating healthchecker for service [10.10.10.3]:1358

2)配置主備機/etc/keepalived/keepalived.conf

主機192.168.22.151配置

[root@localhost ~]# cat  /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}
vrrp_script chk_nginx{
   script "killall -0 nginx"
   interval 1
   weight -10
   fall 2
   rise 1

}
vrrp_instance VI_1 {
    state MASTER
    interface eno16777736
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.22.158
    }
    track_script {
        chk_nginx
    }
}

備機 192.168.22.152:

[root@localhost ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}
vrrp_script chk_nginx{
   script "killall -0 nginx"
   interval 1
   weight -10
   fall 2
   rise 1
}
vrrp_instance VI_1 {
    state BACKUP
    interface eno16777736
    virtual_router_id 51
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.22.158
    }
    track_script {
        chk_nginx
    }
}

兩個配置要注意的地方,interface 必定與主機的網卡名稱一致,可經過ifconfig查看主機與備機的網卡名稱

配置完成後,重啓服務:

[root@localhost ~]# systemctl restart keepalived


 在master機器上面查看虛擬是否綁定上了

[root@localhost ~]# ip -a addr

[root@localhost ~]# ip -a addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:d7:d9:71 brd ff:ff:ff:ff:ff:ff
    inet 192.168.22.151/24 brd 192.168.22.255 scope global eno16777736
       valid_lft forever preferred_lft forever
    inet 192.168.22.158/32 scope global eno16777736
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fed7:d971/64 scope link
       valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN
    link/ether 02:42:4a:66:2f:c5 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 scope global docker0
       valid_lft forever preferred_lft forever

並查看主機日誌狀況:

[root@localhost ~]# tail /var/log/keepalived.log
Sep  9 17:14:37 localhost Keepalived_vrrp[1223]: VRRP_Instance(VI_1) Transition to MASTER STATE
Sep  9 17:14:38 localhost Keepalived_vrrp[1223]: VRRP_Instance(VI_1) Entering MASTER STATE
Sep  9 17:14:38 localhost Keepalived_vrrp[1223]: VRRP_Instance(VI_1) setting protocol iptable drop rule
Sep  9 17:14:38 localhost Keepalived_vrrp[1223]: VRRP_Instance(VI_1) setting protocol VIPs.
Sep  9 17:14:38 localhost Keepalived_vrrp[1223]: Sending gratuitous ARP on eno16777736 for 192.168.22.158
Sep  9 17:14:38 localhost Keepalived_vrrp[1223]: VRRP_Instance(VI_1) Sending/queueing gratuitous ARPs on eno
Sep  9 17:14:38 localhost Keepalived_vrrp[1223]: Sending gratuitous ARP on eno16777736 for 192.168.22.158
Sep  9 17:14:38 localhost Keepalived_vrrp[1223]: Sending gratuitous ARP on eno16777736 for 192.168.22.158
Sep  9 17:14:38 localhost Keepalived_vrrp[1223]: Sending gratuitous ARP on eno16777736 for 192.168.22.158
Sep  9 17:14:38 localhost Keepalived_vrrp[1223]: Sending gratuitous ARP on eno16777736 for 192.168.22.158

備機日誌:

[root@localhost ~]# tail /var/log/keepalived.log
Sep  9 17:14:56 localhost Keepalived_vrrp[1251]: IPv4 address = 172.17.0.1
Sep  9 17:14:56 localhost Keepalived_vrrp[1251]: IPv6 address = ::
Sep  9 17:14:56 localhost Keepalived_vrrp[1251]: MAC = 02:42:67:b0:b8:e5
Sep  9 17:14:56 localhost Keepalived_vrrp[1251]: is UP
Sep  9 17:14:56 localhost Keepalived_vrrp[1251]: MTU = 1500
Sep  9 17:14:56 localhost Keepalived_vrrp[1251]: HW Type = ETHERNET
Sep  9 17:14:56 localhost Keepalived_vrrp[1251]: Using LinkWatch kernel netlink reflector...
Sep  9 17:14:56 localhost Keepalived_vrrp[1251]: VRRP_Instance(VI_1) Entering BACKUP STATE
Sep  9 17:14:56 localhost Keepalived_vrrp[1251]: VRRP sockpool: [ifindex(2), proto(112), unicast(0), fd(10,1
Sep  9 17:14:56 localhost Keepalived[1249]: Starting VRRP child process, pid=1251

測試界面:

中止主機的keepalived服務,測試備機狀況:

成功轉移。

相關文章
相關標籤/搜索