Haproxy+多台MySQL从服务器Slave实现负载均衡Word格式.docx

上传人:b****6 文档编号:20625006 上传时间:2023-01-24 格式:DOCX 页数:8 大小:77.80KB
下载 相关 举报
Haproxy+多台MySQL从服务器Slave实现负载均衡Word格式.docx_第1页
第1页 / 共8页
Haproxy+多台MySQL从服务器Slave实现负载均衡Word格式.docx_第2页
第2页 / 共8页
Haproxy+多台MySQL从服务器Slave实现负载均衡Word格式.docx_第3页
第3页 / 共8页
Haproxy+多台MySQL从服务器Slave实现负载均衡Word格式.docx_第4页
第4页 / 共8页
Haproxy+多台MySQL从服务器Slave实现负载均衡Word格式.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

Haproxy+多台MySQL从服务器Slave实现负载均衡Word格式.docx

《Haproxy+多台MySQL从服务器Slave实现负载均衡Word格式.docx》由会员分享,可在线阅读,更多相关《Haproxy+多台MySQL从服务器Slave实现负载均衡Word格式.docx(8页珍藏版)》请在冰豆网上搜索。

Haproxy+多台MySQL从服务器Slave实现负载均衡Word格式.docx

安装完毕后打开配置文件在/etc/haproxy/ 

haproxy.cfg,配置文件的路径可能不用,别告诉我找不到~~~!

1.global 

2. 

maxconn 

4096 

3. 

daemon 

4. 

chroot 

/var/lib/haproxy 

5. 

pidfile 

/var/run/haproxy.pid 

6. 

#debug 

7. 

#quiet 

8. 

user 

haproxy 

9. 

group 

10. 

11.defaults 

12. 

log 

global 

13. 

mode 

http 

14. 

option 

httplog 

15. 

dontlognull 

16. 

127.0.0.1 

local0 

17. 

retries 

3

18. 

redispatch 

19. 

2000 

20. 

#contimeout 

5000 

21. 

#clitimeout 

50000 

22. 

#srvtimeout 

23. 

timeout 

http-request 

10s

24. 

queue 

1m 

25. 

connect 

10s 

26. 

client 

1m 

27. 

server 

28. 

http-keep-alive 

29. 

check 

30. 

31.listen 

admin_stats 

0.0.0.0:

8888 

32. 

http 

33. 

stats 

uri 

/dbs 

34. 

realm 

Global\ 

statistics 

35. 

auth 

admin:

admin 

36. 

37.listen 

proxy-mysql 

23306 

38. 

tcp 

39. 

balance 

roundrobin 

40. 

tcplog 

41. 

mysql-check 

#在mysql中创建无任何权限用户haproxy,且无密码,这个在MySQL5.7中需要一些技巧来规避无密码的设置

42. 

MySQL1 

3306 

weight 

2000

43. 

MySQL2 

44. 

tcpka 

listen 

这个配置是监控页面,绑定到本机8888端口,账号admin,密码admin 

可以通过web的方式查看所有MySQL节点的使用情况,http:

//你的IP:

8888/dbs即可登录监控后台。

如下图:

1.listen 

5.option 

#在mysql中创建无任何权限用户haproxy,且无密码

代理的端口。

程序连接从库集群时就访问这个端口。

负载均衡方式。

这里是配置健康检查的,也是haproxy自带的功能,需要在mysql中创建无任何权限用户haproxy,且无密码

配置MySQL从库节点,有多少节点就配置多少server项。

有的同学可能不知道如何在MySQL中创建用户,这里也给你写好了。

用户名为haproxy且无密码(重要)否则haproxy无法检测MySQL状态。

CREATEUSER'

haproxy'

@'

%'

IDENTIFIEDBY'

'

;

配置完成后启动代理servicehaproxystart 

如果用过yum方式安装,应该就能启动了,如果是其它方式安装,可能启动方式不同,需要编写脚本启动,应该不难自己研究一下~~~

然后让我们写个demo测试一下代理是否配置成功了没!

1.public 

static 

void 

main(String[] 

args) 

throws 

Exception 

Class.forName("

com.mysql.jdbc.Driver"

);

Connection 

conn 

DriverManager.getConnection("

jdbc:

mysql:

23306/template?

useUnicode=true"

 

"

root"

sql2008"

for 

(int 

0;

<

100;

i++) 

PreparedStatement 

pr 

null;

ResultSet 

res 

try 

11. 

conn.prepareStatement("

select 

count(*) 

from 

sys_user"

pr.executeQuery();

if(res.next()) 

System.out.println(new 

Date().toLocaleString() 

->

res.getInt

(1));

catch 

(Exception 

e) 

e.printStackTrace();

res.close();

pr.close();

Thread.sleep(25000);

conn.close();

26.} 

输出结果如下:

可以看到代理MySQL成功了,这时你可以随机关掉一个MySQL节点的服务,程序依然能够正常的执行,说明负载均衡也成功了。

1.2015-8-28 

10:

09:

27->

2.2015-8-28 

52->

3.2015-8-28 

17->

4.2015-8-28 

42->

5.2015-8-28 

11:

07->

小小的激动有没有~有没有~。

于是乎我们就把程序中数据源的配置改造一下,让它连接haproxy即可。

propertyname="

jdbcUrl"

value="

/>

是不是以为大功告成了,如果你就这样配置的话,等程序运行起来它就会给你一个大大的surprise

其实这里面是有坑的~~~~,且听我细细道来。

一般的情况下,我相信大家在直接连接MySQL的时候几乎都用到了连接池。

以我的配置为例:

1.<

bean 

id="

dataSource"

class="

com.mchange.v2.c3p0.ComboPooledDataSource"

destroy-method="

close"

>

2.<

property 

name="

driverClass"

value="

/>

3.<

//IP:

23306/数据库名称?

4.<

user"

xx"

5.<

password"

yy"

6.<

initialPoolSize"

5"

7.<

minPoolSize"

8.<

maxPoolSize"

30"

9.<

maxIdleTime"

0"

10.<

idleConnectionTestPeriod"

11.<

acquireIncrement"

3"

12.<

automaticTestTable"

C3p0TestTable_NotDelete"

13.<

autoCommitOnClose"

false"

14.lt;

/bean>

其它的参数这里不解释,大家可以查询C3P0配置信息,网上很多。

这里只说一个:

idleConnectionTestPeriod=30 

这个参数是配置连接池 

每隔多少时间去检查池内链接的有效性,单位秒。

我这里设置成30秒,那么C3P0会每隔30秒 

把连接池内所有的空闲连接拿出来挨个发一个测试SQL语句,已确定这个链接的有效性。

以前我们的数据源是直接连接MySQL数据库的,在正常的情况下MySQL是不会断开这个链接的。

但是我们现在连接的是haproxy,也就是说我们程序的连接(Connection)是与haproxy建立的,这里的坑在于这个连接是会被haproxy断掉的,这样的话你连接池内的链接就变成了无效链接,在下次需要查询数据库时还需要重新创建连接,而且程序由于拿到的连接是无效链接,还有可能报错。

那么haproxy与我们程序之间的连接超时时间在哪设置呢?

#这个参数配置程序与haproxy的链接超时时间

#这个参haproxy与mysql链接超时时间

这里的超时时间不是指连接过程的超时时间,而是指连接上以后,多少时间内没有心跳,操作这个时间就认为超时,然后断开连接。

写的可能有些啰嗦,我们看个例子开说明一下:

{

Thread.sleep(60000);

我上面配置的是 

timeoutclient1m,也就是说客户端连接到haproxy后1分钟之内没有数据请求即为超时,就会断掉链接:

第一次查询没有问题

我把间隔设置为60秒,第二次查询与第一次查询间隔60秒就会报错,因为超时了。

如果把间隔改为 

Thread.sleep(50000);

50秒,就不会报错。

结论就是

1.idleConnectionTestPeriod 

的时间一定要小于 

client的时间。

这样C3P0会在Haproxy断掉链接之前发送一次“心跳”过去,保持链接的有效性。

2.而且 

client与>

尽量保持一致,已达到最佳效果。

3.文本仅供参考,感谢下载!

4.

5.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 视频讲堂

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1