博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
B7-Haproxy 四层负载均衡
阅读量:6136 次
发布时间:2019-06-21

本文共 2404 字,大约阅读时间需要 8 分钟。

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

 
  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
参考
更多请:
linux 相关  274134275 , 37275208(已满)
vmware 虚拟化相关  166682360

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

转载地址:http://wjrua.baihongyu.com/

你可能感兴趣的文章
摄像机与绕任意轴旋转
查看>>
rsync 服务器配置过程
查看>>
预处理、const与sizeof相关面试题
查看>>
爬虫豆瓣top250项目-开发文档
查看>>
Elasticsearch增删改查
查看>>
oracle归档日志增长过快处理方法
查看>>
有趣的数学书籍
查看>>
teamviewer 卸载干净
查看>>
多线程设计模式
查看>>
解读自定义UICollectionViewLayout--感动了我自己
查看>>
SqlServer作业指定目标服务器
查看>>
UnrealEngine4.5 BluePrint初始化中遇到编译警告的解决办法
查看>>
User implements HttpSessionBindingListener
查看>>
抽象工厂方法
查看>>
ubuntu apt-get 安装 lnmp
查看>>
焊盘 往同一个方向增加 固定的长度方法 总结
查看>>
eclipse的maven、Scala环境搭建
查看>>
架构师之路(一)- 什么是软件架构
查看>>
jquery的冒泡和默认行为
查看>>
USACO 土地购买
查看>>