1 Docker的学习-gaogaoTwo 1.1 docker常见问题故障 |
1.1.1 docker容器无法远程连接MySQL |
1.2 Docker基础命令 |
1.2.1 docker logs |
1.2.2 镜像构建优化 |
1.2.3 network |
1.2.4 内部安装应用命令 |
1.2.5 docker ps |
1.3 Docker网络模式 |
1.4 docker compose |
1.4.1 docker-compose安装 |
1.5 部署Tomcat 运行环境 |
1.6 docker(compose) LNMP环境的部署 |
1.7 docker 搭建部署Redis集群 |
1.8 docker 搭建部署MongoDB集群 |
1.8.1 MongoDB(configsvr)配置服务器 |
1.8.2 MongoDB(shared) 分片初始化操作 |
1.8.3 配置MongoDB(Mongos)路由服务器 |
1.8.4 MongoDB测试集群可用性 |
1.9 docker 搭建部署MySQL主从复用 |
1.10 docker+Keepalived+Nginx高可用 |
1.11 docker+Ansible多节点集群管理 |
1.12 docker(compose)+Zabbix 多节点监控服务 |
1.13 docker 部署文件目录下载 |
1.14 docker |
1.14.1 docker镜像管理 |
1.14.2 docker容器 |
1.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 命令
分别进入这三个容器内修改安装配置文件
进入 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
编辑Web2 BACKUP节点
修改Keepalived配置文件
cd /etc/keepalived touch check_nginx.sh chmod +x check_nginx.sh
vim check_nginx.sh (创建一个对于Nginx服务监听的脚本) 分别在两个容器添加该脚本
#!/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配置
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配置
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服务器的时候,可能会存在端口占用的情况
解决方案 仅需修改 vim /etc/nginx/nginx.conf 端口号即可,解除端口占用情况 systemctl restart nginx
Web1 Web2 分别启动Keepalived服务 systemctl start keepalived.service
测试机(Keepalived) curl 172.17.0.200 可以发现目前访问的是MASTER节点 (172.17.0.6)
若我们停止Web1 Keepalived 服务,关闭主节点,继续测试 systemctl stop keepalived.service
测试机(Keepalived) curl 172.17.0.200
OK ! keepalived VIP漂移成功 !
若主MASTER重新启动keeplived服务
测试机(Keepalived) curl 172.17.0.200 可以看见 VIP重新又漂移回来了
|