搭建 docker + nginx + keepalived 实现Web应用的高可用(亲测)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了搭建 docker + nginx + keepalived 实现Web应用的高可用(亲测),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4997字,纯文字阅读大概需要8分钟。
内容图文
转自:https://www.cnblogs.com/shulipeng/p/10688450.html
1. 环境准备
下载 VMware : https://www.vmware.com/go/getplayer-win
下载 Centos : https://mirrors.aliyun.com/centos/7.6.1810/isos/x86_64/CentOS-7-x86_64-Minimal-1810.iso
下载之后安装好 VMware,然后创建两个 centos 虚拟机,具体安装步骤直接按照界面提示操作即可,装完操作系统之后重启即可。
主机IP:192.168.65.132 备机IP 192.168.65.129 将两台机器都安装好 docker ,nginx,keepalived 安装方法如下面。
2. 安装启动 docker
yum -y install docker #参数 y 代表自动选择,可以试一下不加 y 会是什么效果
问题:如果是首次使用这个命令,会报错 cannot find a valid baseurl for repo : base/7/x86_64。
解决:1.打开 vi /etc/sysconfig/network-scripts/ifcfg-ens33(每个机子都可能不一样,但格式会是“ifcfg-ens数字”),把ONBOOT=no,改为ONBOOT=yes
2.重启网络 service network restart
问题: 如何校验是否安装成功
解决: 使用命令 docker -v ,会提示所安装的 docker 的版本信息
问题: 如何设置 docker 为开机自启以及后台启动
解决: 1.开机自启 systemctl enable docker
2.启动 docker systemctl start docker
3.检查是否启动 systemctl start docker
3. 安装启动 nginx
1.镜像加速: https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors (这里可能需要注册一个阿里云的账号,用大佬的东西,注册个账号也不费事)
2.拉取镜像:docker pull nginx #这里获取的是最新的 nginx
3.显示已拉取的镜像: docker images
4.创建文件夹用于使用自己定义的配置文件以及日志文件
mkdir -p /app/docker/nginx/conf # 配置文件
mkdir -p /app/docker/nginx/html #主页
mkdir -p /app/docker/nginx/logs #日志存放
5.在 /app/docker/nginx/conf 目录下创建配置文件: vi nginx.conf
nginx.conf在 /app/docker/nginx/html 目录下创建首页(仅仅是后面用来判断请求落在了哪个机器上,主机和备机能区分开就行): vi index.html
?index.html在 /app/docker/nginx/ 目录下创建 docker 启动文件: vi start.sh
?start.sh6.启动 nginx ./start.sh (先执行 chmod +x start.sh 使得脚本可以执行)
7.分别访问两个IP地址
主机:
备机:
8.查看日志进入 cd /app/docker/nginx/logs
5. 安装 keepalived
1.yum install -y curl gcc openssl-devel libnl3-devel net-snmp-devel
2.yum install -y keepalived
3.修改配置文件 /etc/keepalived/keepalived.conf
主机和备机的配置文件在于:state 和 priority 两个地方,修改下这里就行,主机初始状态为 MASTER,优先级为100 备机初始状态为BACKUP,优先级为80
?View Code4.创建定时检测 nginx 是否正常运行的脚本 (执行 chmod +x nginx_check.sh 使得脚本可以执行)
?nginx_check.sh大坑:这里是定时去调用这个脚本去检测 nginx 有没有正常运行,但是由于 crontab 的环境变量问题!脚本手动执行是可以执行的,但是运行就会报 "命令找不到",或者 "没有权限",由于水平有限,研究了两天还不知道怎么搞。附带几个链接,试过了但是还是没有解决,后续等解决之后修改,请大佬指点。
crontab定时任务自动不能执行,手动可以执行的解决办法-亲测解决
5.启动 keepalived
systemctl enable keepalived # 开机自启动
systemctl start keepalived # 启动
systemctl stop keepalived # 暂停
systemctl restart keepalived # 重启
systemctl status keepalived # 查看状态
6.查看日志
tail -f /var/log/messages
6. 验证
第一种情况:两个机器 nginx 都正常运行
1.访问 http://192.168.65.132/ 页面会显示 "Master machine..... IP:192.168.65.132"
2.访问 http://192.168.65.129/ 页面会显示 "Slave machine ... IP:192.168.65.129"
3.访问 http://192.168.65.135/ 页面会显示 "Master machine..... IP:192.168.65.132" 说明现在 主机192.168.65.132 获得 VIP
4.通过 cat /app/docker/logs/access.log 查看到访问记录,日志的格式也是配置文件中定义的
第二种情况 : 主机 nginx 关闭
1.关闭主机 docker : docker stop docker-nginx (docker-nginx 是在 .start.sh 定义的容器的名称)
2.由于 keepalived 定时监控 nginx 运行状态,发现 nginx 关闭了,此时会将 keepalived 关闭,备机获得 VIP ,在关闭主机docker时,可以观察备机的日志,tail -f /var/log/messages
3.此时访问 http://192.168.65.135/ 页面提示: “Slave machine ... IP:192.168.65.129”
4.查看备机 192.168.65.129 的 cat /app/docker/logs/access.log 能查看到访问记录
第三种情况:主机 nginx 关闭之后重启
1.重启主机 docker : docker restart docker-nginx (docker-nginx 是在 .start.sh 定义的容器的名称)
2.重启已关闭的 keepalived : systemctl restart keepalived
3.观察主机和备机的日志 : tail -f /var/log/messages
主机:
备机:
5.会发现主机马上获取到了 VIP,此时再访问 http://192.168.65.135/ 页面会显示 "Master machine..... IP:192.168.65.132"
7. 结束
参考博客 : https://blog.51cto.com/andyxu/2286045
https://blog.csdn.net/jomexiaotao/article/details/83271458
水平有限,如有错误的地方,希望大家可以友情指出 你我共同进步,开开心心的就好
内容总结
以上是互联网集市为您收集整理的搭建 docker + nginx + keepalived 实现Web应用的高可用(亲测)全部内容,希望文章能够帮你解决搭建 docker + nginx + keepalived 实现Web应用的高可用(亲测)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。