docker学习系列14 使用haproxy实现mysql集群的负载均衡
在上节中我们创建了 mysql 集群。
实际工作中,我们不希望让某一数据库节点处理所有的请求,这样的话单个负载高,性能差。
在这里我们使用haproxy作为负载均衡的中间件,类似的还有LVS,但是好像不支持虚拟机,在docker中用不了。
实现流程:
- 下载镜像
docker pull haproxy
- 宿主机创建 haproxy 的配置文件,比如路径是 D:\Docker\haproxy\haproxy.cfg
- 最重要的就是配置文件了。这里内容如下:
global daemon # nbproc 1 # pidfile /var/run/haproxy.pid # 工作目录 chroot /usr/local/etc/haproxy defaults log 127.0.0.1 local0 err #[err warning info debug] mode http #默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK retries 2 #两次连接失败就认为是服务器不可用,也可以通过后面设置 option redispatch #当serverId对应的服务器挂掉后,强制定向到其他健康的服务器 option abortonclose #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接 option dontlognull #日志中不记录负载均衡的心跳检测记录 maxconn 4096 #默认的最大连接数 timeout connect 5000ms #连接超时 timeout client 30000ms #客户端超时 timeout server 30000ms #服务器超时 #timeout check 2000 #=心跳检测超时 ######## 监控界面配置 ################# listen admin_status # 监控界面访问信息 bind 0.0.0.0:8888 mode http # URI相对地址 stats uri /dbs # 统计报告格式 stats realm Global\ statistics # 登录账户信息 stats auth admin:123456 ########frontend配置############## ######## mysql负载均衡配置 ############### listen proxy-mysql bind 0.0.0.0:3306 mode tcp # 负载均衡算法 # static-rr 权重, leastconn 最少连接, source 请求IP, 轮询 roundrobin balance roundrobin # 日志格式 option tcplog # 在 mysql 创建一个没有权限的haproxy用户,密码为空。 haproxy用户 # create user 'haproxy'@'%' identified by ''; FLUSH PRIVILEGES; option mysql-check user haproxy # 这里是容器中的IP地址,由于配置的是轮询roundrobin,weight 权重其实没有生效 server MYSQL_1 172.18.0.2:3306 check weight 1 maxconn 2000 server MYSQL_2 172.18.0.3:3306 check weight 1 maxconn 2000 server MYSQL_3 172.18.0.4:3306 check weight 1 maxconn 2000 # 使用keepalive检测死链 # option tcpka #########################################
- 启动 haproxy 的容器,镜像名称为 h1,网络名称使用上节中创建的 pxc-network,就是和 mysql 集群处于同一网络。
docker run -it -d -p 4001:8888 -p 4002:3306 -v D:/Docker/haproxy:/usr/local/etc/haproxy --name h1 --net=pxc-network
- 进去容器,并让 haproxy 加载配置
docker exec -it h1 bash
haproxy -f /usr/local/etc/haproxy/
- 宿主机打开
http://localhost:4001/dbs
这是haproxy 提供的图形界面
可以看到每个mysql节点运行状态是绿色,说明正常。
- 测试,停掉一个数据库节点
docker stop pxc_node1
,发现有一个变红了。
- 项目中可以使用配置的 4002 来连接数据库,这样请求会被分发到各个子节点。
总结:
- 数据库的负载均衡配置还是比较简单的,关键是负载均衡算法,如果每个数据库节点配置都一样,可以使用轮询算法,如果不一样,可以使用权重算法,让配置高的多接收请求。
- 官方的教程
问题:
- 启动停掉的节点
docker start pxc_node1
,mysql恢复不起来了。待研究。有谁知道麻烦告诉我。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
CentOS7下安装Mesos教程
基于centos7,安装mesos以及相关示例运行的教程。 转载请注明出处:https://blog.lzoro.com,谢谢~ Mesos简介 Mesos is built using the same principles as the Linux kernel, only at a different level of abstraction. The Mesos kernel runs on every machine and provides applications (e.g., Hadoop, Spark, Kafka, Elasticsearch) with API’s for resource management and scheduling across entire datacenter and cloud environments. Mesos是根据Linux内核相同原则而创建的,而不同点仅是在于抽象的层面。Mesos内核运行在每一个机器上,同时通过 API 为各种应用提供跨数据中心和云的资源管理调度能力(如:Hadoop、Spark、Kafka、Elasti...
- 下一篇
【云周刊】第185期:现场直击:2018重庆云栖大会,驱动数字中国
本期头条 现场直击:2018重庆云栖大会,驱动数字中国 2018重庆云栖大会将于8月24日在重庆悦来国际会议中心盛大开幕!本届峰会将与重庆智博会强强联合,继续以“驱动数字中国”为主题,聚焦IoT、智能制造等行业,描绘新技术发展趋势和蓝图,展现云计算、大数据、人工智能、物联网等蓬勃发展的科技生态全景,探讨企业数字化转型之路,助力长江经济带发展,加速产业升级,以信息化培育新动能,新动能推动新发展,新发展创造新辉煌。点击查看 阿里云云盾·Web应用防火墙,获“2018网络安全创新产品(技术)评选”一等奖 阿里云助力新加坡“智慧国计划”,生态建设发力巩固亚太第一 阿里健康联手多家连锁药房试水医药新零售 阿里巴巴重新与印度集团沟通以加快其在印度发展 马云在阿里接见马来西亚总理 受启发开始创业 蚂蚁金服区块链新场景:已开近60万张区块链电子票据 美连锁超市巨头
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS6,CentOS7官方镜像安装Oracle11G
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Hadoop3单机部署,实现最简伪集群
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果