docker 搭建keepalived+nginx高可用
前言
最近工作 中 有用到keepalived,就想着 在 本地 搭建一套环境验证一下相关的功能。因为创建虚拟机比较麻烦,就借助 docker来搭建这样 一套 环境 ,顺带学习 巩固下docker的相关 命令;
1.准备工作
本地 安装好docker环境,我本地 使用的win10,已经安装好了docker环境;
2.下载centos7.6基础镜像
docker pull centos:7.6.
我已经安装好了,所以执行结果 如下

3.在centos7.6中安装keepalived和nginx 以及其他软件
启动容器:
docker run -it f1cb7c7d58b7 /bin/bash

使用 ip和 ifconfig命令需要安装 下面两个
yum install iproute yum install net-tools
4.使用yum 安装 keepalived
yum install keepalived

一直确认 y即可,安装完成

Keepalived检测nginx的脚本
/etc/keepalived 中 新建 check_nginx.sh
脚本 如下 :注意grep nginx: 冒号 ,因为执行的 时候脚本 的名字中也有nginx,会导致计算出来 的 数量不对 ,所以要 用nginx:
#!/bin/bash
A=$(ps -ef | grep nginx: | grep -v grep | wc -l)
if [ $A -eq ];then
nginx
echo "restart nginx, sleep 2 s"
sleep
num=$(ps -ef | grep nginx: | grep -v grep | wc -l)
if [ $num -eq ];then
ps -ef | grep keepalived | grep -v grep | awk '{print $2}'| xargs kill -
echo "start nginx failed,kill keepalived"
fi
else
echo "nginx not dead"
fi

查看 本机 IP
ip a

Keepalived配置
注释vrrp_strict 否则会导致 VIP 无法访问

增加检测脚本
添加VIP,注意 VIP 和本机IP在 同一个 网段内,否则也 无法访问
本机172.17.0.6/16 虚IP设置 为172.17.0.8/16

5.使用yum安装nginx
参考链接:https://www.cnblogs.com/opsprobe/p/10773582.html
yum install yum-utils

添加源
到 cd /etc/yum.repos.d/ 目录下
新建
vim nginx.repo
文件
输入以下信息
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=
enabled=
gpgkey=https://nginx.org/keys/nginx_signing.key [nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=
enabled=
gpgkey=https://nginx.org/keys/nginx_signing.key

yum install nginx

安装完成

启动查看是否成功
nginx
curl localhost:

6.退出 ,制作 镜像
docker ps -a
找到 刚才 的容器

docker commit 5f781fbe483e keepavled_nginx:v1

7.启动主备keepalived容器
docker run --privileged -it --name keepalived_master 8dfe8c83bfae /usr/sbin/init docker run --privileged -it --name keepalived_salve 8dfe8c83bfae /usr/sbin/init


8.进入容器
docker ps
找到 启动 的容器

分别 进入容器
主 :172.17.0.7
备:172.17.0.6

备 keepalived修改 配置

9.验证keepalived
启动主keepalived,发现虚IP 已经绑定

systemctl status keepalived
查看启动状态

备keepalived启动,虚IP没有绑定

Kill 掉主的keepalived进程 后,主不再绑定VIP


重新查看 备,发现 绑定了VIP

再启动主keepalived,会发现VIP重新绑定在 主keepalived服务器
10.验证 nginx
Kill 掉nginx进程之后,再次查看 会发现nginx被重新 启动,因为 keepalived检测 脚本 会 自动检查 ,没有 进程 会自动重启,启动不成功则把keepalived kill掉。
见脚本check_nginx.sh
注意:check_nginx.sh必须要 加 权限 ,否则 不会执行;
chmod +x check_nginx.sh
VIP访问nginx测试
先分别修改主备 nginx的页面并重启
vi /usr/share/nginx/html/index.html


主备分别启动keepalived,此时 VIP绑定在主服务器 ;
访问nginx: curl 172.17.0.8:80,此时访问的是主服务器

把主服务器 的keepalived kill掉 之后验证 ,此时VIP绑定在备服务器,访问 的备服务器 的nginx

11.遇到的几个 问题
VIP无法访问的问题:
Vrrp_strict 注释掉
VIP在一个网段
Check_nginx.sh脚本 问题:
grep nginx: 冒号要加上否则执行过程中会grep 到脚本名称导致判断进程数量一直不为0;
脚本必须加权限,否则无法执行
参考链接:
https://www.cnblogs.com/jinjiangongzuoshi/p/9313438.html
docker 搭建keepalived+nginx高可用的更多相关文章
- Nginx(四):Keepalived+Nginx 高可用集群
Keepalived+Nginx 高可用集群 (主从模式) 集群架构图 安装keepalived [root@localhost ~]# yum install -y keepalived 查看状态 ...
- Keepalived+Nginx高可用实例
Keepalived+Nginx高可用实例 注意事项: 1.VIP不需要在服务器网络配置文件中配置. 2.nginx主不可用时,需要kill掉nginx主的keepalived服务,这样才可以实现VI ...
- Keepalived+nginx高可用
这种方法会把Keepalived进程结束掉,在教育机构学习到的方法,我个人对这种方法不认可. 参考: https://www.cnblogs.com/gshelldon/p/14504236.html ...
- keepalived+nginx高可用负载均衡环境搭建
上篇说道keepalived的环境搭建,本来keepalived结合lvs更有优势,但是也可以结合nginx来使用.下面接着说下nginx的环境搭建 环境信息: nginx(master) 192. ...
- LVS+KeepAlived+Nginx高可用实现方案
文章目录概念LVSKeepAlived为什么要使用准备软件安装KeepAlived 安装源码安装yum安装服务启动.重启.关闭安装ipvsadmnginx安装防火墙(iptables)防火墙配置(方式 ...
- Keepalived+Nginx高可用集群
Keepalived简介 Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替 ...
- keepalived+nginx 高可用集群
一.什么是高可用? nginx做负载均衡,能达到分发请求的目的,但是不能很好的避免单点故障. 1.nginx集群单点问题 分发器宕机怎么处理? 假如nginx服务器挂掉了,那么所有的服务也会跟着瘫 ...
- keepalived+nginx高可用实现
1.keepalived介绍 keepalived最初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了实现高可用的VRRP功能.keepalived除了能 ...
- centos安装与配置keepalived+nginx高可用
一.安装启动keepalived 1.下载keepalived 在centos系统中,用wget下载最新版本: mkdir tool cd tool wget https://www.keepaliv ...
随机推荐
- redis如何在spring里面的bean配置
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.spr ...
- Java锁的理解
目录: 1.为什么要使用锁? 2.锁的类型? 1.为什么要使用锁? 通俗的说就是多个线程,也可以说多个方法同时对一个资源进行访问时,如果不加锁会造成线程安全问题.举例:比如有两张票,但是有5个人进来买 ...
- 前端传json数组 ,后端的接收
前端传输: var updateGoodsId=$(this).val();//get id var updateGoodsPrice=$("#IngoodsPrice"+upda ...
- 「从零单排HBase 06」你必须知道的HBase最佳实践
前面,我们已经打下了很多关于HBase的理论基础,今天,我们主要聊聊在实际开发使用HBase中,需要关注的一些最佳实践经验. 1.Schema设计七大原则 1)每个region的大小应该控制在10G到 ...
- Python学习字典.基础三
元组 Python的元组与列表类似,不同之处在于元组的元素不能修改. 元组使用小括号,列表使用方括号. 元组中要定义的元组中只有一个元素需要再元素后面加逗号,用来消除数学歧义.例 t=(1,) ...
- MATLAB神经网络(2) BP神经网络的非线性系统建模——非线性函数拟合
2.1 案例背景 在工程应用中经常会遇到一些复杂的非线性系统,这些系统状态方程复杂,难以用数学方法准确建模.在这种情况下,可以建立BP神经网络表达这些非线性系统.该方法把未知系统看成是一个黑箱,首先用 ...
- python3.6 单文件爬虫 断点续存 普通版 文件续存方式
# 导入必备的包 # 本文爬取的是顶点小说中的完美世界为列.文中的aa.text,bb.text为自己创建的text文件 import requests from bs4 import Beautif ...
- JAVAEE学习day06,面向对象
1.面向对象与面向过程思想 什么时面向过程: 面向过程的每一个步骤和过程,把每一个步骤和过程完成,然后又这些功能相互调用,完成需求 强调的时过程,所有的事情都需要自己完成 什么时面向过程: 面向对象思 ...
- Unity 随机数与随机种子
随机数几乎应用于游戏开发的方方面面,例如,随机生成的地图,迷宫,怪物属性等,在Unity中,使用随机数非常方便: // // 摘要: // Return a random integer number ...
- Python - 变量的作用域
变量作用域 Python能够改变变量作用域的代码段是 def . class . lamda. if/elif/else.try/except/finally.for/while 并不能涉及变量作用域 ...