搭建mysql负载均衡及高可用环境(三)
log 127.0.0.1 local0 info #定义日志级别[err warning info debug]
03
#local0 是日志设备,必须为24种标准syslog设备之一;
04
maxconn 4096 #最大链接数
05
uid 0 #运行该程序的用户,此处没有其它用户了,就用的 root
06
gid 0
07
daemon #以后台形式运行
08
nbproc 1 #进程数量
09
10
defaults #默认配置
11
mode tcp #所处理的类别 http | tcp | health
12
option redispatch #serverId对应的服务器挂掉后,强制定向到其他健康的服务器
13
retries 3 #三次连接失败则服务器不用
14
timeout connect 5000 #连接超时
15
timeout client 50000 #客户端超时
16
timeout server 50000 #服务器超时
17
timeout check 2000 #心跳检测超时
18
19
listen proxy
20
bind 192.168.5.111:3306 #监听地址
21
mode tcp
22
balance roundrobin #定义负载方式,此处为轮询
23
24
log 127.0.0.1 local0 info #定义日志类型
25
#rise 3三次正确表示服务器可用,fall 3表示3次失败表示服务器不可用
26
server db1 192.168.5.11:3306 check inter 1200 rise 2 fall 3 weight 1
27
server db2 192.168.5.12:3306 check inter 1200 rise 2 fall 3 weight 1
28
29
#服务器状态监控配置,可以通过定义的地址查看集群状态;
30
listen haproxy_stats
31
log 127.0.0.1 local0 info
32
mode http
33
bind 192.168.5.111:8888
34
option httplog
35
stats uri /status
36
stats realm Haproxy Manager
37
stats auth admin:admin #设置监控地址的帐号与密码
#在keepalived 主配文件中添加刚才在其末端说明的外部定义脚本
#启动服务
/opt/haproxy/sbin/haproxy -f /opt/haproxy/conf/haproxy.cfg
#说明事项,keepalived 的服务主备设备上都可以同时运行,实则只有获得VIP的服务器才有效;
#但是 haproxy 启动的时候需要监听 VIP 地址,所以第一次备用设备是手动起不了服务的;
#需要在 keepalived 的notify_master配置项中设定脚本,当此设备获得VIP地址后才启动 haproxy;
#有个问题在这里,我们只设定了当keepalived 停止服务时,才结束 haproxy ,没有设定移交VIP时是否结束;
#其实这也不用担心,因为主机上已经没有VIP地址了,即便是监听也无效果,并无干扰;
========================================================================
##开始测试
#检测监听
netstat -tunlp | grep ha
netstat -tunlp | grep 3306
# master 设备上才会有两个程序监听不同地址的 3306;
#暂未配置 mysql 互为主备就是为了方便这一阶段的排错,这样能更准确的测试;
mysql -udiaosi -p123456 -h 192.168.5.111 -e "select * from test.mywait;"
#返回值应该是在 server1 server2 之间徘徊;
sed -i 's/^mysql.*$/#&/' /etc/passwd #注释掉mysql的用户
service mysqld stop
#这个时候 mysql 服务已经启动不起了,mysql_chke.sh 脚本会把 keepalived 停止掉;
keepalived 停止前,又会把 haproxy 杀死;当备份的设备获得 vip 后,则会通过start_haproxy.sh 脚本将 haproxy 启动起来;
于是并不会因为服务器当机或mysql故障,影响我们客户端对 111 的查询操作,实验完成一半了;
#但是测试时,在VIP地址切换过程中,客户端会有那么2-3秒不能访问到数据库,这个暂时忽略不计;
sed 's/^#//' /etc/passwd #测试完后,记得恢复mysql用户哦;
#恢复mysql 后,启动主设备的 mysqld keepalived ,然后使用 ip a 查看VIP 地址是否有返回来;
#在其中一台设备上 killall haproxy ,之后查看集群状态;
http://192.168.5.111:8888/status
#查看后再将 haproxy 启动
#至此,已经完成 负载均衡 + 高可用 两部分,负载方式为轮询
========================================================================
##三个脚本,很简单,就不再介绍了哈;主要是做日志和结束服务;
01
#!bin/bash
02
#start_haproxy.sh
03
04
sleep 5
05
get=`ip addr |grep 192.168.5.111 |wc -l`
06
echo $get >> /opt/log/start_haproxy.log
07
08
if [ $get -eq 1 ]
09
then
10
echo "`date +%c` success to get vip" >> /opt/log/start_haproxy.log
11
/opt/haproxy/sbin/haproxy -f /opt/haproxy/conf/haproxy.cfg
12
else
13