开发者学堂课程【全面讲解开源数据库中间件MyCat使用及原理(三):MyCat-集群-HAProxy 启动访问 】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/757/detail/13289
MyCat-集群-HAProxy 启动访问
内容介绍:
一、 启动访问
二、 集群结构图回顾
一、 启动访问
根据在 159 上的安装步骤,在 160 上同样也安装了 HAProxy , 以同样的步骤,安装并配置 HAProxy ,在 159 和 160 这两台服务器上,HAProxy 都已经安装并配置完成,在配置中涉及到很多配置项,其配置项的含义无需全部了解,主要是要了解需要修改哪些地方,针对 HAProxy ,这个软件中的配置文件当中的每一项的含义在下面的内容解析有详细的介绍,如下:
1 #g1obal 配置中的参数为进程级别的参数,通常与其运行的操作系统有关
2 g1oba1
3 #定义全局的 sys1og 服务器,最多可定义 2 个; 1oca10 是日志设备,对应于 /etc/rsys1og.conf 中的配置,默认收集 info 级别
日志
4 1og127.0.0.1 1oca10
5 #1og 127.0.0.1 local1 notice
6 #1og loghost loca10 info
7 #设定每个 haproxy 进程所接受的最大并发连接数;
8 maxconn 4096
9 #修改 HAproxy 工作目录至指定的目录并在放弃权限之前执行 chroot 操作,可以提升 haproxy 的安全级别
10 chroot /usr/1oca1/haproxy
11 #进程 ID 保存文件
12 pidfile/usr/data/haproxy/haproxy.pid
13 #指定用户 ID
14 uid 99
15 #指定组 ID
16 gid 99
17 #设置 HAproxy 以守护进程方式运行
18 daemon
19 #debug
20 #quiet
21 node mysq1-haproxy-01
##定义当前节点的名称,用于 HA 场景中多 haproxy 进程共享同一个 IP 地址时
22 description mysq1-haproxy-01
##当前实例的描述信息
23
24#defaults
:用于为所有其他配置段提供默认参数,这默认配置参数可由下一个 "defaults" 所重新设定
25 defaults I
26 #继承 g1oba1 中的 1og 定义
27 1og global
28 #所使用的处理模式 (tcp:四层,http: 七层,health: 状态检杳,只返回 OK)
29 ### tcp: 实例运行干纯 tcp 模式,在客户端和服务器端之间将建立一个全双工的连接,且不会对 7 层报文做仟何类型的检查,此为
默认模式
30 ### http: 实例运行干 http 模式,客户端请求在转发至后端服务器之前将被深度分析,所有不与 RFC 模式兼容的请求都会被拒绝
31 ### health: 实例运行于 hea1th 模式,其对入站请求仅响应“OK”信息并关闭连接,且不会记录任何日志信息,此模式将用于相应
外部组件的监控状态检测请求
32 mode tcp
33 #当服务器负载很高的时候,自动结束掉当前队列处理时间比较长的连接
34 option abortonclose
35
36 #当使用了 cookie 时,haproxy 将会将请求的后端服务器的 serverID 插入到cookie 中,以保证会话的 session 持久性,而此时,后端服务器宕机,但是客户端的 cookie 不会刷新,设苦此参数,将会将客户请求强制定向到另外一个后端server 上,以保证服务的正常。
37 option redispatch
38 retries 3
39 前端的最大并发连接数(默认为 2000 )
40 maxconn 2000
41 # 连接超时(默认是毫秒,单位可以设置 us,ms.s.m,h.d )
42 timeout connect 5000
43 # 客户端超时时间
44 timeout client 50000
45 # 服务器超时时间
46 timeout server 50000
47
48 #1isten:用干定义通过关联“前端”和“后端”一个完整的代理,通常只对 TCP 流量有用
49 listen proxy_status
50 bind 0.0.0.0:48066
# 绑定端口
51 mode tcp
52 balance roundrobin
# 定义负载均衡算法,可用干 "defaults"、"1isten" 和 "backend" 中,默认为轮询
53 #格式: server <name> <address> [:[port]] [param*]
54 # weight : 权重,默认为 1,最大值为 256,0 表示不参与负载均衡
55 # backup : 设定为备用服务器,仅在负载均衡场景中的其他 server 均不可以启用此 server
56 # check : 启动对此 server 执行监控状态检查,其可以借助于额外的其他参数完成更精细的设定
57 # inter :设定监控状态检查的时间间隔,单位为豪秒,默认为 2000,也可以使用 fastinter 和 downinter 来根据服
务器端专题优化此事件延迟
58 # rise :设置 server 从离线状态转换至正常状态需要检查的次数(不设置的情况下,默认值为 2)
59 # fal1 :设置 server 从正常状态转换至离线状态需要检查的次数(不设置的情况下,默认值为 3)
60 # cookie :为指定 server 设定 cookie 值,此外指定的值将会在请求入站时被检查,第一次为此值挑选的 server 将会
被后续的请求所选中,其目的在于实现持久连接的功能
61 # maxconn: 指定此服务器接受的最大并发连接数,如果发往此服务器的连接数目高干此处指定的值,其将被放器干请求队列,以 等待其他连接被释放
62 server mycat 1 192.168.192.157:8066 check inter 10s
63 server mycat2 192.168.192.158:8066 check inter 10s
64
65 #用来匹配接收客户所请求的域名,uri 等,并针对不同的匹配,做不同的请求处理
66 # HAProxy 的状态信息统计页面
67 frontend admin_stats
68 bind 0.0.0.0:8888
69 mode http
70 stats enable
71 option httplog
72 maxconn 10
73 stats refresh 30s
74 stats uri /admin
75 stats auth admin:123123
76 stats hide-version
77 stats admin if TRUE
并且这里也罗列了 HAProxy 作为一个负载均衡的策略,如下:
HAProxy 的负载均衡策略:
策略 |
含义 |
roundrobin |
表示简单的轮循,即客户端美访问一次,请求轮循跳转到后端不同的节点机器上 |
Static-rr |
基于权重轮循,根据权重轮循调度到后端不同节点 |
leastconn |
加权最少连接,表示最少流量计者优先处理 |
source |
表示根据请求源 IP,这个跟IP_hash 机制类似,使用其作为解决 session 问题的一种方法 |
uri |
表示根据请求的 URL, 调度到后端不同服务器 |
url_param |
表示根据请求的 URL 参数来进行调度 |
Har(name) |
表示根据 HTTP 请求头来锁定每一次 HTTP 请求 |
Rdp-cookie(name) |
表示根据 cookie(naamw)来锁定并哈希每一次 TCP 请求 |
此时两台 HAProxy 中的配置文件完成了,接下来需要启动它,启动 HAProxy 需要使用一个指令,就是 /usr/local/haproxy/sbin 可执行文件,在 sbin 中有一个脚本HAProxy,在执行这个脚本启动 HAProxy 时,还需要指定一份配置文件,指定配置文件需要跟上一个参数(-F),后面需要指定 /usr/local/haproxy/haproxy.conf, 也就是创建 HAPRoxy 的配置文件
(vim/usr/local/haproxy/haproxy.conf),
执行指令后会发现无任何结果输出,无任何结果输出说明启动成功,可通过 ps-cflgrop haproxy 进行搜索,若存在此节点则说明 haproxy 运行成功,如下图:
接下来在 160 这台服务器上执行相同的指令来启动 haproxy, 先通过 ps-cfgrep haproxy 查看其进程,如下图:
启动成功之后,若要验证是否启动成功,实际上还可以访问它的管理界面,访问管理界面需要通过浏览器来访问,之前操作中绑定的管理端口是 8888,访问时就要用 8888 端口来访问,后面的是 /admin 还是 /aaaabc 之类的是取决于 uri ,落之前的 uri 配置的是 /admin, 则访问时是 /admin,。当点击回车后,页面上需要输入用户名和密码,此用户名和密码也是之前的配置的(auth admin :123123),因此用户名是 admin,密码是 123123,如此操作就成功登陆到 HAProxy 的监控平台。同样的,由于 160 也安装了 HAProxy ,也可进行访问,用户名和密码如上(用户名是admin,密码是 123123),完成操作后,这两台 HAProxy 就已经安装配置并启动完成。
在此监控界面中,可观察到 HAProxy 的运行号、运行时长、以及当前系统的一些限制信息,还有其他的一些数据信息,在中间的表中展示了 HAproxy 负载均衡代理服务的状态( MyCat1 和 MyCat2 的状态信息),在其中包含当前的队列信息、当前会话的信息、以及当前 ao 的一些信息,还有一些警告信息。通过此界面实际上证明了 HAProxy 已经安装并且配置完成。
二、 集群结构图回顾
接下来看之前集群的结构图,此图中 HAProxy 已经安装完成,如果要通过此结构访问底层的数据,目前的情况下,客户端需要连接 HAProxy,通过 HAProxy 的负载均衡机制,来决定当前的请求转发到哪一台 MyCat 上,再由 MyCat 来决定当接收到请求后,要请求哪一台 MySQL 。接下来进行一个测试,如下:
要访问的是 HAproxy, HAproxy 的对外服务端口是 48066,MyCatd 的用户名是 root-p ,密码是 123456,执行完操作后会发现访问但是 159(HAProxy 所在的服务器),-p 48066 也是 HAOroxy,然而最终访问的是 MyCat ,实际上是 HAProry 接收到一个请求后会转发到后端的 MyCat ,接下来切换数据库到 ITCAST ,然后执行 slect * from usr, 执行完请求后是转发给了其中一台 MyCat ,原因是当前的客户端连接上此 MyCat ,请求就会转发给指定的 MyCat ,
注意:此处端口不是 8888,8888 是监控平台的端口。
接下来清空 157 和 158 上的 MyCat 日志,会发现 slect* 的请求到达了第一台 MyCat 上,原因是已经连接上此台 MyCat ,后面的请求就会发送到此台 MyCat 上。
若另一个客户端再次通过 HAProxy 连接上 MyCat ,实际上连接的是另一台 MyCat 。
回顾上述可知:通过 HAProxy 可以实现 MyCat 的负载均衡和集群,并且可以解决 MyCat 的单点故障,也就是说,当 157 上的服务器宕机,执行第一次查询,会发现零件丢失,在执行第二次查询可以查询到,原因是其进行了重试连接,连接请求至 158 上。
也就是相对于当其中一台 MyCat 停止工作,所有的请求到达 HAProxy 之后, HAProxy 会将此请求转发到另一台 MyCat 上。