docker下用keepalived+Haproxy实现高可用负载均衡集群

先记录下遇到的坑,避免之后忘了;花时间最多去解决的一个题是:在docker下启动haproxy服务后在这个docker服务内安装keepalived无法ping通的问题,虽然最后也是莫名其妙就好了,但是加强了不少对docker的理解和还需深入学习的地方。 为什么要用keepalived+haproxy实现docker下的高可用负载均衡?在不同环境下有哪些方式可以实现高可用负载均衡?...
摘要由CSDN通过智能技术生成

先记录下遇到的坑,避免之后忘了;

花时间最多去解决的一个题是:在docker下启动haproxy服务后在这个docker服务内安装keepalived无法ping通的问题,虽然最后也是莫名其妙就好了,但是加强了不少对docker的理解和还需深入学习的地方。

 

为什么要用keepalived+haproxy实现docker下的高可用负载均衡?在不同环境下有哪些方式可以实现高可用负载均衡?

首先第一点,实现负载均衡并不是只有haproxy一个中间件,网上还有很多方案是用keepalived+LVS等等,所以对于docker下的高可用负载均衡不一定只有keepalived+haproxy。只是本次我是基于之前搭建的pxc集群进行继续搭建的,所以用的是haproxy。

 

为什么这里强调的是docker、keepalived?

首先我们运行环境是docker,keepalived的作用是抢占虚拟ip,docker环境下,镜像内的网段外网是无法访问的,所以我们需要一个外网在宿主机上映射到docker内的ip上,keepalived一方面可以映射ip到docker服务内,二可以在docker服务内强占虚拟ip。所以在docker搭建负载均衡的多种方案中都常见会出现keepalived。

 

为什么要抢占虚拟ip?为什么要用keepalived呢?

负载均衡中间件(haproxy,lvs)等等在实际中不可能只是单节点存在(单节点不需要keepalived),都要有冗余设计,即集群设计,和数据库集群不一样的是,docker中实现负载均衡中间件的集群是通过抢占一个ip地址实现的,有主备和主主方式,虽然方式不一样,但都有一个心跳检测的共同点,在主节点抢占虚拟ip时,主从节点上会有心跳检测线,如果发现主节点心跳检测连不上,则从节点会主动抢占ip实现数据不中断的冗余机制;

 

总结描述:由于是在docker环境下,我们要搭建负载均衡集群需要通过keepalived抢占虚拟ip实现,而负载均衡功能需要haproxy中间件实现,所以本次我搭建的是一个在docker环境下高可用的负载均衡方案是:keepalived+haproxy。

 

haproxy具体方法:

下载docker镜像;
Docker pull haproxy

重命名
docker tag docker.io/haproxy haproxy 

删除多余镜像
docker rmi docker.io/haproxy

ftp上传docker配置文件,目录自行定义,目录映射根据定义目录名映射

查看配置文件(需要编辑可编辑)
cat haproxy.cfg

启动创建docker-haproxy服务
docker run -it -d -p 4001:8888 -p 4002:3306 -v /data/haproxy/config:/usr/local/etc/haproxy --name haproxy01 --privileged --net=net1 --ip 172.20.0.07  haproxy

端口8888是监控页面端口,3006是MySQL服务端口,参数都可以在配置文件中调整


进入docker-haproxy服务
docker exec -it haproxy01 /bin/bash


启用配置文件(启用完配置文件才算是真的启动了haproxy服务)
haproxy -f /usr/local/etc/haproxy/haproxy.cfg

退出haproxy交互,回到宿主机
ctrl+D

haproxy配置信息:

global
	#工作目录
	chroot /usr/local/etc/haproxy
	#日志文件,使用rsyslog服务中local5日志设备(/var/log/local5),等级info
	log 127.0.0.1 local5 info
	#守护进程运行
	daemon

defaults
	log	global
	mode	http
	#日志格式
	option	httplog
	#日志中不记录负载均衡的心跳检测记录
	option	dontlognull
    #连接超时(毫秒
  • 5
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 17
    评论
您可以通过在同一台Docker主机上部署负载均衡和Nginx来实现。以下是一种可能的方式: 1. 首先,您需要安装DockerDocker Compose。您可以按照官方文档的说明进行安装。 2. 创建一个名为`docker-compose.yml`的文件,并在其中定义您的负载均衡和Nginx服务。以下是一个示例配置: ```yaml version: '3' services: load_balancer: image: your_load_balancer_image ports: - 80:80 networks: - app_network nginx: image: nginx ports: - 8080:80 volumes: - ./nginx.conf:/etc/nginx/conf.d/default.conf networks: - app_network networks: app_network: driver: bridge ``` 在上面的示例中,我们定义了两个服务:`load_balancer`和`nginx`。`load_balancer`是您自己创建的负载均衡服务的Docker镜像,而`nginx`是官方的Nginx镜像。 3. 创建一个名为`nginx.conf`的文件,并将其挂载到`nginx`服务的容器中。在该文件中,您可以定义Nginx的配置,例如反向代理到负载均衡器的地址。以下是一个示例配置: ```nginx server { listen 80; server_name localhost; location / { proxy_pass http://load_balancer; } } ``` 在上面的示例配置中,Nginx通过反向代理将所有请求转发到`load_balancer`服务的地址。 4. 使用以下命令启动Docker容器: ```bash docker-compose up -d ``` 这将使用`docker-compose.yml`文件中的配置启动负载均衡和Nginx服务。 现在,您可以通过访问主机的IP地址和端口号(例如`http://localhost:8080`)来访问Nginx服务器。Nginx将会将请求转发到负载均衡器,然后由负载均衡器将请求分发给后端服务。 请注意,上述示例仅提供了一种实现方式,您可能需要根据您的具体需求进行调整和配置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值