Docker学习(七)基于Docker的Tomcat\Nginx\Keepalived集群安装部署

孤人 提交于 2019-12-07 04:19:26

一、tomcat部署 

1)安装tomcat服务器(版本是V9.0)

docker search tomcat

docker pull tomcat

docker images|grep tomcat

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

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

[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:8081

2)项目部署。写一个test1.war,把war包放test目录

[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机器做上述同样操作。

二、安装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的配置文件(可能已装的系统中拷贝)。

1、在主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:/#
 

2、配置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)两台机分别安装,操作与配置完全一样。

三、安装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

1、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

未操作完。。。

2、配置系统日志(方便监控运行情况)

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服务,测试备机情况:

成功转移。


 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!