计算机系统应用教程网站

网站首页 > 技术文章 正文

Nginx集群+Haproxy集群使用以及数据库的负载均衡

btikc 2024-09-06 18:18:35 技术文章 14 ℃ 0 评论

简介;

关注+后台私信;资料;两个字可以免费领取 资料内容包括:C/C++,Linux,golang,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK,嵌入式 等。。。


我们得到了3台实现了PXC集群的MySQL服务器 他们的IP分别是
192.168.117.111
192.168.117.112
192.168.117.113

以及利用Haproxy实现MySQL的负载均衡

我们可以利用VMware克隆一台一模一样的Haproxy负载均衡服务器,得到两台Haproxy+Keepalived服务器

他们的IP 分别是

192.168.117.120

192.168.117.121

这两台服务器上都安装了Keepalived 和Haproxy

如果想实现生产环境上搭建 你可以利用scp、rsync、以及自己写的xsync脚本命令实现分发服务器。这样你就不用再成百上千台服务器上一个一个安装和一个一个配置服务器。重复而且无聊工作量还大的事情我们尽量选择偷懒

如果你是利用VMware虚拟机创建的,比如博主 并没有资金去购买那么多台服务器,而且只是学习为目的,并不是用来生产的。

在创建好一台服务器后我们进行克隆,我们以Haproxy为例,因为我在上篇博客中只创建了一台Haproxy服务器,而且也没有讲清楚Keepalived的具体作用在这台Haproxy服务器上体现了什么作用。

我们进行克隆,都Haproxy服务器右键(需要选中才行,并且需要关机状态,我们先进行关机然后才可以克隆)


选中虚拟机当前状态




这里我们选择链接克隆 这种方式如果删除了原来的,则链接就会无法使用

如果你选择完整克隆则互不影响。

链接克隆会很快完成点完后即可创建成功立马响应,而且占用磁盘空间很小。但是完整克隆则会对文件进行复制这很慢,因为虚拟机Ubuntu本身也挺大。占有磁盘空间大

基于上面的优缺点我这里选择 链接克隆,只要不删除原先的虚拟机即可




这样我们就完成了一台服务器的复制,然后你需要 修改ip

原本我们需要修改一下Keepalived和Haproxy的配置文件但鉴于之前已经修改好了,两台服务器所以可以不用修改,直接使用即可

Haproxy实现负载均衡

负载均衡服务器有很多有大名鼎鼎的Nginx、Apache和LVS

但此次选择的是老牌的数据库中间件Haproxy

之所以选择Haproxy原因是Haproxy经过了时间考验,得到了大量用户的肯定。

先拉取Haproxy镜像


创建一个网络,将mysql集群放在这个环境下



接着创建配置文件(镜像中是没有配置文件的,所以先不要启动容器)


配置文件内容


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
	#连接超时(毫秒)
	timeout connect 5000
	#客户端超时(毫秒)
	timeout client  50000
	#服务器超时(毫秒)
	timeout server  50000
 
#监控界面	
listen  admin_stats
	#监控界面的访问的IP和端口
	bind  0.0.0.0:6666
	#访问协议
	mode        http
	#URI相对地址
	stats uri   /dbs
	#统计报告格式
	stats realm     Global\ statistics
	#登陆帐户信息
	stats auth  admin:123456
#数据库负载均衡
listen  proxy-mysql
	#访问的IP和端口
	bind  0.0.0.0:3306  
	#网络协议
	mode  tcp
	#负载均衡算法(轮询算法、后面的权重不会生效)
	#轮询算法:roundrobin
	#权重算法:static-rr
	#最少连接算法:leastconn
	#请求源IP算法:source 
	balance  roundrobin
	#日志格式
	option  tcplog
	#在MySQL中创建一个没有权限的haproxy用户,密码为空。Haproxy使用这个账户对MySQL数据库心跳检测
	option  mysql-check user haproxy
	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 
	server  MySQL_4 172.18.0.5:3306 check weight 1 maxconn 2000
	server  MySQL_5 172.18.0.6:3306 check weight 1 maxconn 2000
#使用keepalive检测死链
option  tcpka
————————————————
版权声明:本文为CSDN博主「诗水人间」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_41813208/article/details/105440372

创建haproxy容器

docker run -it -d -p 4001:6666 -p 4002:3306 -v /home/soft/haproxy:/usr/local/etc/haproxy --name h1 --privileged --net=net1 --ip 172.18.0.7 --restart=always haproxy

进入容器并将配置文件生效

docker exec -it h1 bash
haproxy -f /usr/local/etc/haproxy/haproxy.cfg

接着你需要在mysql数据库中 创建一个无密码的haproxy用户用来检测mysql集群状态


CREATE USER `haproxy`@`%` IDENTIFIED WITH mysql_native_password;

具体详情查看配置文件的注释说明

然后在浏览器输入宿主机的ip+端口/dbs 会要求输入用户名和密码

在配置文件中规定账号admin 密码123456,端口是在docker run命令指定的



总结;

输入用户名密码后即可查看后台管理中mysql的情况如图所示

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表