一、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服务,测试备机情况:
成功转移。
来源:oschina
链接:https://my.oschina.net/u/1253780/blog/2045631