开发者社区> 科技小能手> 正文

B7-Haproxy 四层负载均衡

简介:
+关注继续查看

Haproxy 四层负载均衡


拓扑:                  
  app  ---->  mysql_master(write)
    | 
 haproxy(read)
    | 
mysql_slave*N



一 Haproxy 部分 
1 haproxy 代码


  1. listen  bbs_slave   10.0.100.82:3306  
  2.         mode tcp          #配置TCP模式  
  3.         maxconn 2000  
  4.         balance roundrobin  
  5.         #option httpchk OPTIONS * HTTP/1.1\r\nHost:\ www 
  6.         server  slave01 10.0.100.75:3306 check port 9120 inter 5000 rise 3 fall 3 weight 3 
  7.         server  slave02 10.0.100.76:3306 check port 9120 inter 5000 rise 3 fall 3 weight 3 
  8.         srvtimeout      20000   



二 Mysql 部分 
2.1 mysql replication 监控脚本


  1. cat /usr/local/bin/mysqlrep_status.sh 
  2. #!/bin/bash 
  3. # /usr/local/bin/mysqlrep_status.sh 
  4. # This script checks if a mysql server is healthy running on localhost. It will 
  5. # return: 
  6. # "HTTP/1.x 200 OK\r" (if mysql is running smoothly) 
  7. # – OR – 
  8. # "HTTP/1.x 503 Internal Server Error\r" (else) 
  9.  
  10. mysql=/usr/local/bin/mysql 
  11. mysql_host="localhost" 
  12. mysql_port="3306" 
  13. mysql_username="root" 
  14. mysql_password="dongnan" 
  15. $mysql -u${mysql_username} -p${mysql_password} -e "show full processlist;" >/tmp/processlist.txt 
  16. $mysql -u${mysql_username} -p${mysql_password} -e "show slave status\G;" >/tmp/rep.txt 
  17. iostat=`awk '/Slave_IO_Running/ {print $2}' /tmp/rep.txt` 
  18. sqlstat=`awk '/Slave_SQL_Running/ {print $2}' /tmp/rep.txt`  
  19.  
  20. if [ "$iostat" = "Yes" ] && [ "$sqlstat" = "Yes" ];then 
  21.     /bin/echo -e "HTTP/1.1 200 OK\r\n" 
  22. else 
  23.     /bin/echo -e "HTTP/1.1 503 Service Unavailable\r\n" 
  24. fi 


2.2 配置 xinetd  
//定义服务,服务名一定要在 /etc/services列出


  1. tail -n1 /etc/services  

mysql_rep_check 9120/tcp

//定义 super daemon    


  1. cat >> /etc/xinetd.d/mysql_rep_check << EOF 
  2. # default: off 
  3. service mysql_rep_check 
  4.         flags           = REUSE 
  5.         socket_type     = stream 
  6.         wait            = no 
  7.         user            = nobody 
  8.         server          = /usr/local/bin/mysqlrep_status.sh 
  9.         log_on_failure  += USERID 
  10.         disable         = no 
  11.         
  12.  
  13. EOF 



2.3 重启xinetd


  1. /etc/init.d/xinetd restart 


2.4 xinetd 日志


  1. tail -n1 /var/log/messages 

Nov  8 16:44:27 one xinetd[12224]: Started working: 1 available service

2.5 查看自定义服务端口


  1. lsof -i :9120 

COMMAND   PID USER   FD   TYPE  DEVICE SIZE NODE NAME
xinetd  12224 root    5u  IPv4 1078320       TCP *:mysql_rep_check (LISTEN)

2.6 测试


  1. telnet 127.0.0.1 9120 

Trying 127.0.0.1...
Connected to one.test.com (127.0.0.1).
Escape character is '^]'.
HTTP/1.1 200 OK

Connection closed by foreign host.

流程
(1)应用服务器
(2)连接HAProxy的10.0.100.82:3306,根据算法,分配到一台mysql slave。
(3)检测slave的9120端口是否返回http 200状态码
(4)返回200 状态码,HAProxy 返回正常,继续服务
(5)返回503,剔除该slave,并将mysql请求转发到另外一台slave


参考
基于Keepalived+Haproxy搭建四层负载均衡器

MySQL从库集群方案之HAProxy篇


更多请:
linux 相关  274134275 , 37275208(已满)
vmware 虚拟化相关  166682360



本文转自 dongnan 51CTO博客,原文链接:http://blog.51cto.com/dngood/1120487

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
23639 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
16701 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
21344 0
使用OpenApi弹性释放和设置云服务器ECS释放
云服务器ECS的一个重要特性就是按需创建资源。您可以在业务高峰期按需弹性的自定义规则进行资源创建,在完成业务计算的时候释放资源。本篇将提供几个Tips帮助您更加容易和自动化的完成云服务器的释放和弹性设置。
20943 0
如何设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云安全组设置详细图文教程(收藏起来) 阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程。阿里云会要求客户设置安全组,如果不设置,阿里云会指定默认的安全组。那么,这个安全组是什么呢?顾名思义,就是为了服务器安全设置的。安全组其实就是一个虚拟的防火墙,可以让用户从端口、IP的维度来筛选对应服务器的访问者,从而形成一个云上的安全域。
21015 0
阿里云服务器ECS登录用户名是什么?系统不同默认账号也不同
阿里云服务器Windows系统默认用户名administrator,Linux镜像服务器用户名root
17491 0
阿里云服务器安全组设置内网互通的方法
虽然0.0.0.0/0使用非常方便,但是发现很多同学使用它来做内网互通,这是有安全风险的,实例有可能会在经典网络被内网IP访问到。下面介绍一下四种安全的内网互联设置方法。 购买前请先:领取阿里云幸运券,有很多优惠,可到下文中领取。
23145 0
腾讯云服务器 设置ngxin + fastdfs +tomcat 开机自启动
在tomcat中新建一个可以启动的 .sh 脚本文件 /usr/local/tomcat7/bin/ export JAVA_HOME=/usr/local/java/jdk7 export PATH=$JAVA_HOME/bin/:$PATH export CLASSPATH=.
14929 0
23704
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载