基于mycat+haproxy+keepalived搭建mysql集群(Haproxy篇)
wptr33 2024-11-24 22:27 42 浏览
概述
数据库性能优化普遍采用集群方式,而oracle集群软硬件投入昂贵,下面介绍下mysql数据库集群环境搭建中的haproxy部分,以下为整体的架构图。
运作理解:主机1与主机2上的keepalived会为该服务器抢占vip,抢占到vip后,对该主机的访问可以通过原来的ip访问,也可以直接通过vip访问,当其中一台宕机时,vip会漂移到另一台机器上,当我们访问VIP时haproxy会根据配置将请求分发到两台Mycat上实现负载均衡,并且haproxy会检测mycat是否存活。
haproxy安装(haproxy-1.8.12)
HAProxy 是一款提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。 HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在时下的硬件上,完全可以支持数以万计的 并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。
1、下载haproxy
国内镜像地址:http://pkgs.fedoraproject.org/repo/pkgs/haproxy/
1.1、查看内核版本
uname -r
根据内核版本选择编译参数:
这里内核是3.10的选择 linux2628,安装haproxy
1.2、创建用户及用户组
groupadd haproxy useradd -g haproxy -m haproxy
1.3、下载haproxy
wget https://src.fedoraproject.org/repo/pkgs/haproxy/haproxy-1.8.12.tar.gz/sha512/2b782a54988cc88d1af0e5f011af062910e8fac28eab13db7e05a58d0d23961f827da47e3871e8d081f5a2d222588480d81dec2e9f14ec9f54a1c3cb5bf3d56a/haproxy-1.8.12.tar.gz
1.4、解压并编译安装
tar -xvf haproxy-1.8.12.tar.gz -C /usr/local cd /usr/local/haproxy-1.8.12 make TARGET=linux2628 PREFIX=/usr/local/haproxy make install PREFIX=/usr/local/haproxy
1.5、授权
chown -R haproxy.haproxy /usr/local/haproxy chmod -R 755 /usr/local/haproxy
1.6、测试
安装成功后,查看版本
/usr/local/haproxy/sbin/haproxy -v
2、配置haproxy
#vim /usr/local/haproxy/haproxy.cfg ===================================================== global #设置日志 log 127.0.0.1 local0 chroot /usr/local/haproxy #用户与用户组 user haproxy group haproxy #定义每个haproxy进程的最大连接数 ,由于每个连接包括一个客户端和一个服务器端,所以单个进程的TCP会话最大数目将是该值的两倍。 maxconn 4096 # 以守护进程的方式运行 daemon defaults log global #日志中不记录空连接 option dontlognull # 定义连接后端服务器的失败重连次数,连接失败次数超过此值后将会将对应后端服务器标记为不可用 retries 3 option redispatch # 设置成功连接到一台服务器的最长等待时间,默认单位是毫秒 timeout connect 5000 # 设置连接客户端发送数据时的成功连接最长等待时间,默认单位是毫秒 timeout client 50000 # 设置服务器端回应客户度数据发送的最长等待时间,默认单位是毫秒 timeout server 50000 #统计页面 listen admin_stats bind 172.26.151.99:48800 mode http #采用http日志格式 option httplog #统计页面自动刷新时间 stats refresh 30s #统计页面url stats uri /admin_stats #统计页面密码框上提示文本 stats realm Haproxy Manager #统计页面用户名和密码设置 stats auth admin:admin #隐藏统计页面上HAProxy的版本信息 stats hide-version listen mycat_service # 绑定172.26.151.99:8067端口访问mycat8066端口 bind 172.26.151.99:8067 # 定义为tcp模式 mode tcp #采用http日志格式 option tcplog # 开启对后端服务器的健康检测 option httpchk OPTIONS * HTTP/1.1\r\nHost:\ www # 设置haproxy的调度算法 balance roundrobin #根据调度分配到真实的后台地址,参数解释:port 48700:检测端口48700, inter 5s:5秒检测一次,rise 2:检测成功2次表示服务器可用,fall 3:检测失败3次后表示服务器不可用 server mycat_96 172.26.151.96:8066 check port 48700 inter 5s rise 2 fall 3 server mycat_97 172.26.151.97:8066 check port 48700 inter 5s rise 2 fall 3 #设置服务器端回应客户度数据发送的最长等待时间,默认单位是毫秒 timeout server 20000 listen mycat_admin #绑定172.26.151.99:9067端口访问mycat9066端口 bind 172.26.151.99:9067 mode tcp option tcplog option httpchk OPTIONS * HTTP/1.1\r\nHost:\ www balance roundrobin server mycat_96 172.26.151.96:8066 check port 48700 inter 5s rise 2 fall 3 server mycat_97 172.26.151.97:8066 check port 48700 inter 5s rise 2 fall 3 timeout server 20000 =====================================================
3、启动和停止haproxy
/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg #启动 killall haproxy #停止
4、查看日志
部署过程常见报错
报错1:/usr/local/bin/mycat_status: line 9: /usr/local/mycat/bin/mycat: Permission denied
授权后就解决了
报错2:Keepalived_vrrp[2924]: Error exec-ing command '/etc/keepalived/scripts/check_haproxy.sh', error 8: Exec format error
日志提示:
思路:其实就是因为你的haproxy没有得到VIP的原因,而你的配置文件又绑定了VIP地址,所以会提示以上错误
当然,你也要确保你的haproxy服务器做了hearbeat或keepalived,绑定VIP,要不就无法高可用了。
解决:
#vi /etc/sysctl.conf net.ipv4.ip_nonlocal_bind = 1 net.ipv4.ip_forward = 1 #sysctl -p
net.ipv4.ip_nonlocal_bind=1 意思是启动haproxy的时候,允许忽视VIP的存在
5、配置haproxy记录日志功能
5.1、安装rsyslog服务
默认haproxy是不记录日志的,为了记录日志还需要配置syslog模块,在linux下是rsyslogd服务,需要先安装rsyslog
yum -y install rsyslog
5.2、配置rsyslog服务
#vi /etc/rsyslog.d/haproxy.conf
$ModLoad imudp $UDPServerRun 514 local0.* /var/log/haproxy.log
#vim /etc/rsyslog.conf
#在#### RULES ####上面一行加入以下内容 #Include all config files in /etc/rsyslog.d/ $IncludeConfig /etc/rsyslog.d/*.conf #在local7.* /var/log/boot.log下面增加 local0.* /var/log/haproxy.log
5.3、重启rsyslog服务并加入自启动服务
systemctl restart rsyslog.service systemctl enable rsyslog.service systemctl status rsyslog.service
觉得有用的朋友多帮忙转发哦!后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注下~
相关推荐
- oracle数据导入导出_oracle数据导入导出工具
-
关于oracle的数据导入导出,这个功能的使用场景,一般是换服务环境,把原先的oracle数据导入到另外一台oracle数据库,或者导出备份使用。只不过oracle的导入导出命令不好记忆,稍稍有点复杂...
- 继续学习Python中的while true/break语句
-
上次讲到if语句的用法,大家在微信公众号问了小编很多问题,那么小编在这几种解决一下,1.else和elif是子模块,不能单独使用2.一个if语句中可以包括很多个elif语句,但结尾只能有一个...
- python continue和break的区别_python中break语句和continue语句的区别
-
python中循环语句经常会使用continue和break,那么这2者的区别是?continue是跳出本次循环,进行下一次循环;break是跳出整个循环;例如:...
- 简单学Python——关键字6——break和continue
-
Python退出循环,有break语句和continue语句两种实现方式。break语句和continue语句的区别:break语句作用是终止循环。continue语句作用是跳出本轮循环,继续下一次循...
- 2-1,0基础学Python之 break退出循环、 continue继续循环 多重循
-
用for循环或者while循环时,如果要在循环体内直接退出循环,可以使用break语句。比如计算1至100的整数和,我们用while来实现:sum=0x=1whileTrue...
- Python 中 break 和 continue 傻傻分不清
-
大家好啊,我是大田。...
- python中的流程控制语句:continue、break 和 return使用方法
-
Python中,continue、break和return是控制流程的关键语句,用于在循环或函数中提前退出或跳过某些操作。它们的用途和区别如下:1.continue(跳过当前循环的剩余部分,进...
- L017:continue和break - 教程文案
-
continue和break在Python中,continue和break是用于控制循环(如for和while)执行流程的关键字,它们的作用如下:1.continue:跳过当前迭代,...
- 作为前端开发者,你都经历过怎样的面试?
-
已经裸辞1个月了,最近开始投简历找工作,遇到各种各样的面试,今天分享一下。其实在职的时候也做过面试官,面试官时,感觉自己问的问题很难区分候选人的能力,最好的办法就是看看候选人的github上的代码仓库...
- 面试被问 const 是否不可变?这样回答才显功底
-
作为前端开发者,我在学习ES6特性时,总被const的"善变"搞得一头雾水——为什么用const声明的数组还能push元素?为什么基本类型赋值就会报错?直到翻遍MDN文档、对着内存图反...
- 2023金九银十必看前端面试题!2w字精品!
-
导文2023金九银十必看前端面试题!金九银十黄金期来了想要跳槽的小伙伴快来看啊CSS1.请解释CSS的盒模型是什么,并描述其组成部分。...
- 前端面试总结_前端面试题整理
-
记得当时大二的时候,看到实验室的学长学姐忙于各种春招,有些收获了大厂offer,有些还在苦苦面试,其实那时候的心里还蛮忐忑的,不知道自己大三的时候会是什么样的一个水平,所以从19年的寒假放完,大二下学...
- 由浅入深,66条JavaScript面试知识点(七)
-
作者:JakeZhang转发链接:https://juejin.im/post/5ef8377f6fb9a07e693a6061目录...
- 2024前端面试真题之—VUE篇_前端面试题vue2020及答案
-
添加图片注释,不超过140字(可选)...
- 今年最常见的前端面试题,你会做几道?
-
在面试或招聘前端开发人员时,期望、现实和需求之间总是存在着巨大差距。面试其实是一个交流想法的地方,挑战人们的思考方式,并客观地分析给定的问题。可以通过面试了解人们如何做出决策,了解一个人对技术和解决问...
- 一周热门
- 最近发表
-
- oracle数据导入导出_oracle数据导入导出工具
- 继续学习Python中的while true/break语句
- python continue和break的区别_python中break语句和continue语句的区别
- 简单学Python——关键字6——break和continue
- 2-1,0基础学Python之 break退出循环、 continue继续循环 多重循
- Python 中 break 和 continue 傻傻分不清
- python中的流程控制语句:continue、break 和 return使用方法
- L017:continue和break - 教程文案
- 作为前端开发者,你都经历过怎样的面试?
- 面试被问 const 是否不可变?这样回答才显功底
- 标签列表
-
- git pull (33)
- git fetch (35)
- mysql insert (35)
- mysql distinct (37)
- concat_ws (36)
- java continue (36)
- jenkins官网 (37)
- mysql 子查询 (37)
- python元组 (33)
- mybatis 分页 (35)
- vba split (37)
- redis watch (34)
- python list sort (37)
- nvarchar2 (34)
- mysql not null (36)
- hmset (35)
- python telnet (35)
- python readlines() 方法 (36)
- munmap (35)
- docker network create (35)
- redis 集合 (37)
- python sftp (37)
- setpriority (34)
- c语言 switch (34)
- git commit (34)
