Docker 下的 Keepalived + Haproxy 高可用实现 1 实现结果演示
一. 结果:
1.1 对外虚拟IP “172.16.232.200”,可以访问5659,5660,5661 三个端口,分别对应不同功能模块;
1.2 跳过中间过程,实际是访问的 Haproxy的5659监控界面,再加上负载均衡到“172.18.12.11~12~13”三套Rabbitmq容器的5672(功能端口)和15672(管理界面);
二.高可用演示
通过PIng测试,在宿主机ping Docker内虚拟IP 172.18.12.110,在手工关闭一台Keepalived主机时,IP转移,耗费2.3ms秒左右;
结果表示高可用成功;
三. 坐好,开始描述实现过程;
3.1 详细结果
从外部方位宿主机,本次合计实现了 2个IP,15各端口;
3.2 两个IP
172.16.232.138 是宿主网卡获取的ip(可以访问12个端口);
172.16.232.200是虚拟IP(Keepalived)(多了3个端口,合计可以访问15个端口);
3.3 15个端口;
- 先三个:
5659,5660,5661是虚拟IP专用的3个端口,分别对应了Docker内Keepalived的3个端口(5659,5660,5661)
这3个端口只要不冲突,可以是<65536的任意整数;此次演示项目保持了跟Docker内Keepa的3个端口一致;
这3个端口是通过宿主机的Keepalived虚拟ip 172.16.232.200转发的,并没有给宿主机本身,所以这3个端口不能通过物理ip172.16.232.138来访问;
- 再12个端口:这12个端口,全部是Docker内部的5套容器的端口,分别是:
2套Haproxy容器,每套3个,计6个端口
3套Rabbitmq容器,每套2个,计6个端口
本次演示项目,以上12个端口,可以不用转发给宿主机,但是为了学习Docker,就全部转发了;
根据Docker规则,以上必须转发到宿主12个不同的接口;
示例如下:(学习过程中,Haproxy容器多次创建和删除,图上的是Haproxy4~5)
3.4 5套容器
- 先3个简单的,Rabbitmq 容器,不过多描述;
- 在2个复杂的 Haproxy+Keepalived容器,要多描述
有Haproxy容器,下载和安装就行;也是下载+安装;
没有Keepalived容器,需要自己创建;
3.5 Keeplived 容器的创建
创建Keepalived容器与2中方法,本次测试项目,Keepalived和Haproxy是一体的,所以可以在Haproxy的基础上创建Keepalived容器;
1是运行Haproxy后,在内部安装Keepalived,后再保存成镜像,便于创建第二个Haproxy;体积稍大;
2是通过DockFile生成Keepalived+Haproxy的合体镜像;
由于直连官方链接,这2个方法,都耗费了40多分钟;
示例如下
通过DockFile生成是209m
运行Haproxy后再安装,是257m
- 先运行Haproxy,再内部安装Keepalived,
运行后,命令行,apt-get update,再apt-get install keepalived,再apt-get install nano;
划重点:docker内部默认没有编辑工具,这里安装nano,体积小;也可以安装vim,要大不少;nano用于编辑keepalived的配置文件;
- 通过DockFile生成Keepalived+Haproxy的合体镜像;
FROM haproxy:latest
RUN apt-get update && apt-get install -y nano keepalived
就这2行,第一行,表示基础镜像是 haproxy:lastest, 第二行,表示 运行 “apt-get update && apt-get install -y nano keepalived”命令;
划重点:“&&”符号,在生成Docker时,如果以上命令分成
apt-get update //一行
apt-get install **//二行
的话,会在增加Docker镜像的“层数”,具体描述看Docker专业知识,本次测试项目不详细描述;
- bulid命令 sudo docker build -t "新镜像的名字:版本" .
划重点:最后有个“.” 点字符;要在Dockerfile文件所在的目录下执行命令;不错,文件名就是“Dockerfile”;
篇幅所限,在继续编写实现过程;