images\cherry_red.png1 Docker的学习-gaogaoTwo
      images\cherry_blue.png1.1 docker常见问题故障
         images\cherry_orange.png1.1.1 docker容器无法远程连接MySQL
      images\cherry_blue.png1.2 Docker基础命令
         images\cherry_orange.png1.2.1 docker logs
         images\cherry_orange.png1.2.2 镜像构建优化
         images\cherry_orange.png1.2.3 network
         images\cherry_orange.png1.2.4 内部安装应用命令
         images\cherry_orange.png1.2.5 docker ps
      images\cherry_blue.png1.3 Docker网络模式
      images\cherry_blue.png1.4 docker compose
         images\cherry_orange.png1.4.1 docker-compose安装
      images\cherry_blue.png1.5 部署Tomcat 运行环境
      images\cherry_blue.png1.6 docker(compose) LNMP环境的部署
      images\cherry_blue.png1.7 docker 搭建部署Redis集群
      images\cherry_blue.png1.8 docker 搭建部署MongoDB集群
         images\cherry_orange.png1.8.1 MongoDB(configsvr)配置服务器
         images\cherry_orange.png1.8.2 MongoDB(shared) 分片初始化操作
         images\cherry_orange.png1.8.3 配置MongoDB(Mongos)路由服务器
         images\cherry_orange.png1.8.4 MongoDB测试集群可用性
      images\cherry_blue.png1.9 docker 搭建部署MySQL主从复用
      images\cherry_blue.png1.10 docker+Keepalived+Nginx高可用
      images\cherry_blue.png1.11 docker+Ansible多节点集群管理
      images\cherry_blue.png1.12 docker(compose)+Zabbix 多节点监控服务
      images\cherry_blue.png1.13 docker 部署文件目录下载
      images\cherry_blue.png1.14 docker
         images\cherry_orange.png1.14.1 docker镜像管理
         images\cherry_orange.png1.14.2 docker容器
         images\cherry_orange.png1.14.3 docker容器高级操作
Keepalived是基于VRRP协议(虚拟路由冗余协议)的一个服务软件,VRRP协议就是将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(虚拟ip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以及时将业务切换到其他设备

可能会出现脑裂现象,多个节点出现了 多个VIP

nginx -s reload 重新加载配置文件
nginx -t 校验配置文件是否正确
利用Docker部署3个(centos)多服务器环境

docker run -d --name Web1 --privileged=true centos /usr/sbin/init
docker run -d --name Web2 --privileged=true centos /usr/sbin/init
docker run -d --name Keepalived --privileged=true centos /usr/sbin/init

--privileged=true 容器服务以root的身份运行
/usr/sbin/init 容器内使用systemctl 命令
images\13-1.png



分别进入这三个容器内修改安装配置文件

进入 Web1 Web2 容器内
docker exec -it Web1 /bin/bash

docker exec -it Web2 /bin/bash
分别执行
安装配置默认运行环境 nginx keepalived vim net-tools(ifconfig命令网卡) initscripts(service命令)
yum install -y nginx keepalived vim net-tools initscripts

编辑Web1 主节点
vim /usr/share/nginx/html/index.html

images\13-2.png


编辑Web2 BACKUP节点
images\13-3.png


修改Keepalived配置文件


cd /etc/keepalived
touch check_nginx.sh
chmod +x check_nginx.sh


vim check_nginx.sh (创建一个对于Nginx服务监听的脚本)
分别在两个容器添加该脚本
images\13-4.png


#!/bin/bash

A='ps -C nginx --no-header | wc -l'
if [ $A -eq 0 ]; then
/usr/sbin/nginx
sleep 2
if [ 'ps -C nginx --no-header | wc -l' -eq 0 ]; then
killall keepalived
fi
fi



修改两容器内 Keepalived.conf 文件

vim /etc/keepalived/keepalived.conf

MASTER配置
images\13-5.png


global_defs {
   router_id LVS_DEVEL  #节点名,一般使用默认的就可以
}

vrrp_script chk_nginx {
    script "/etc/keepalived/check_nginx.sh" #检测nginx脚本的路径
    interval 2  #运行脚本的间隔时间
    weight -20  #变更的权重
}

vrrp_instance VI_1 {
    state MASTER  #此节点为MASTER,如果此节点down掉,再重启时,会立即抢占回主节点
    #mcast_src_ip 172.17.0.2  本机ip,不声明则默认绑定本机ip
    interface eth0  #绑定的网卡,可以通过ifconfig查看网卡信息
    virtual_router_id 70  #虚拟路由标识,同一组的必须相同
    priority 100  #权重
    nopreempt  #定义为非抢占式,因为多次主备切换对请求量大的服务器不太好
    
    advert_int 1  #与组内其他节点发送心跳的间隔:s
    virtual_ipaddress {
        172.17.0.200
    }  #绑定的虚拟ip组
    track_script {
        chk_nginx
    }  #执行前面声明的脚本
}


BACKUP配置
images\13-6.png

global_defs {
   router_id LVS_DEVEL  #节点名,一般使用默认的就可以
}

vrrp_script chk_nginx {
    script "/etc/keepalived/check_nginx.sh" #检测nginx脚本的路径
    interval 2  #运行脚本的间隔时间
    weight -20  #变更的权重
}

vrrp_instance VI_1 {
    state BACKUP  #此节点为backup
    # mcast_src_ip 172.17.0.3  本机ip,不声明则默认绑定本机ip
    interface eth0  #绑定的网卡,可以通过ifconfig查看网卡信息
    virtual_router_id 70  #虚拟路由标识,同一组的必须相同
    priority 90  #权重,备节点的权重要比主节点小
    advert_int 1  #与组内其他节点发送心跳的间隔:s。组内间隔必须相同
    virtual_ipaddress {
        172.17.0.200
    }  #绑定的虚拟ip组
    track_script {
        chk_nginx
    }  #执行前面声明的脚本
}


需要注意一个问题,当你启动两台nginx服务器的时候,可能会存在端口占用的情况

images\13-7.png

解决方案
仅需修改 vim /etc/nginx/nginx.conf 端口号即可,解除端口占用情况
systemctl restart nginx


Web1 Web2 分别启动Keepalived服务
systemctl start keepalived.service
images\13-8.png


测试机(Keepalived)
curl 172.17.0.200
可以发现目前访问的是MASTER节点 (172.17.0.6)
images\13-9.png


若我们停止Web1 Keepalived 服务,关闭主节点,继续测试
systemctl stop keepalived.service

测试机(Keepalived)
curl 172.17.0.200
images\13-10.png



OK ! keepalived VIP漂移成功 !


若主MASTER重新启动keeplived服务
images\13-11.png

测试机(Keepalived)
curl 172.17.0.200
可以看见 VIP重新又漂移回来了
images\13-12.png