### **haproxy介绍**
haproxy 是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于 TCP 和 HTTP 的应用程序代理。
* HAProxy 特别适用于那些负载特大的 web 站点,这些站点通常又需要会话保持或七层处理。
* HAProxy 运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的 web 服务器不被暴露到网络上。
* HAProxy 实现了一种事件驱动,单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户空间 (User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以使每个 CPU 时间片 Cycle 做更多的工作。
* 相较与 Nginx,HAProxy 更专注与反向代理,因此它可以支持更多的选项,更精细的控制,更多的健康状态检测机制和负载均衡算法。
* 包括 GitHub、Bitbucket、Stack Overflow、Reddit、Tumblr、Twitter 和 Tuenti 在内的知名网站,及亚马逊网络服务系统都使用了 HAProxy。
### **haproxy特性**
1. 可靠性与稳定性都非常出色,可与硬件级设备媲美。
2. 支持连接拒绝,可以用于防止 DDoS 攻击
3. 支持长连接、短连接和日志功能,可根据需要灵活配置
4. 路由 HTTP 请求到后端服务器,基于 cookie 作会话绑定;同时支持通过获取指定的 url 来检测后端服务器的状态
5. HAProxy 还拥有功能强大的 ACL 支持,可灵活配置路由功能,实现动静分离,在架构设计与实现上带来很大方便
6. 可支持四层和七层负载均衡,几乎能为所有服务常见的提供负载均衡功能
7. 拥有功能强大的后端服务器的状态监控 web 页面,可以实时了解设备的运行状态 ,还可实现设备上下线等简单操作。
8. 支持多种负载均衡调度算法,并且也支持 session 保持。
9. Haproxy 七层负载均衡模式下,负载均衡与客户端及后端的服务器会分别建立一次 TCP连接,而在四层负载均衡模式下(DR),仅建立一次 TCP 连接;七层负载均衡对负载均衡设备的要求更高,处理能力也低于四层负载均衡
**1. haproxy 的配置文件由两部分组成:**
1. 全局设定(global settings)
2. 对代理的设定(proxies)
global settings:主要用于定义 haproxy 进程管理安全及性能相关的参数
proxies 共分为4段:defaults,frontend,backend,listen
proxies:代理相关的配置可以有如下几个配置端组成
defaults:为除了 global 以外的其它配置段提供默认参数,默认配置参数可由下一个 “defaults” 重新设定。
frontend:定义一系列监听的套接字,这些套接字可接受客户端请求并与之建立连接。
backend:定义 “后端” 服务器,前端代理服务器将会把客户端的请求调度至这些服务器。
listen:定义监听的套接字和后端的服务器。类似于将 frontend 和 backend 段放在一起
所有代理的名称只能使用大写字母、小写字母、数字、-(中线)、_(下划线)、.(点号)和:(冒号)。此外,ACL 名称会区分字母大小写。
### **haproxy配置文件详细介绍**
**注:** 此处只做配置文件介绍,不做为后期负载均衡配置
~~~cfg
global
log 127.0.0.1 local0 # 定义全局的 syslog 服务器,最多可定义2个,格式:log
[max level [min level]]
chroot /var/lib/haproxy # 修改 haproxy 的工作目录至指定的目录并在放弃权限之前执行,保证haproxy的安全,使用配置文件默认值即可
pidfile /var/run/haproxy.pid
maxconn 10000 # 设定每个haproxy进程所接受的最大并发连接数,其等同于命令行选项“-n”;“ulimit -n”自动计算的结果正是参照此参数设定的;
user haproxy # 以指定的 user 运行haproxy,建议使用专用于运行 haproxy 的 user, 以免因权限问题带来风险;
group haproxy # 以指定的 group 运行haproxy,建议使用专用于运行 haproxy 的 group, 以免因权限问题带来风险;
daemon # 让 haproxy 以守护进程的方式工作于后台,其等同于 “-D” 选项的功能, 当然,也可以在命令行中以 “-db” 选项将其禁用;
ulimit-n 100000 # 设定每进程所能够打开的最大文件描述符数目,默认情况下其会自动进行计算,因此不推荐修改此选项;Linux默认单进程打开文件数为1024个
stats socket /var/lib/haproxy/stats level admin process 1 # 开启一个 socket 管理接口
nbproc 12 # 指定启动的 haproxy 进程个数,只能用于守护进程模式的 haproxy;默认只启动一个进程,
cpu-map 1 0 # 绑定 cpu,和 nbproc 数量相对。进程号从1开始,cpu 核数从0开始;
cpu-map 2 1
cpu-map 3 2
cpu-map 4 3
cpu-map 5 4
cpu-map 6 5
cpu-map 7 6
cpu-map 8 7
cpu-map 9 8
cpu-map 10 9
cpu-map 11 10
cpu-map 12 11
defaults
log global
option tcplog # 启用日志记录;tcplog 请求;
option dontlognull # 日志中将不会记录空连接;
retries 3 # 定义连接后端服务器的失败重连次数
timeout connect 2s # 定义 haproxy 将客户端请求转发至后端服务器所等待的超时时长
timeout client 3600s # 客户端非活动状态的超时时长
timeout server 3600s # 客户端与服务器端建立连接后,等待服务器端的超时时长
maxconn 10000 # 默认和前段的最大连接数,但不能超过 global 中的 maxconn 限制数
listen admin_stats # 开启一个统计报告服务(frontend 和 backend 的组合体,监控组的名称,按需自定义名称)
bind *:1080 # 监听1080端口
mode http # 基于http协议
maxconn 10
stats refresh 10s # 统计页面自动刷新时间间隔
stats uri /haproxy # url 地址
stats realm Haproxy # 统计页面密码框上提示文本
stats auth admin:admin # 账号:密码
stats hide-version # 隐藏统计报告版本信息
stats admin if TRUE # 在制定条件下开启admin 功能
frontend haproxy # 前端应用
bind *:40000 # 端口
mode tcp # tcp 模式
default_backend tidb # 此前端对应的后端应用
backend tidb # 后端应用
balance leastconn # (leastconn :基于最少连接数 roundrobin:轮询 source:ip 最近原则)
mode tcp # tcp 模式
# acl internal_networks src 192.168.0.0/16 172.16.0.0/12 10.0.0.0/8 127.0.0.1 定义一条ACL,ACL是根据数据包的指定属性以指定表达式计算出的true/false值。
# tcp-request content reject if ! internal_networks
# option mysql-check user haproxy post-41
server tidb1 10.0.1.4:4000 check # 后端应用地址,代理将会将对应客户端的请求转发至这些服务器。
server tidb2 10.0.1.10:4000 check
global # 全局配置
log 127.0.0.1 local0 # 定义全局的 syslog 服务器,最多可以定义两个
chroot /var/lib/haproxy # 将当前目录为指定目录,设置超级用户权限启动进程,提高安全性
pidfile /var/run/haproxy.pid # 将 HAProxy 进程写入 PID 文件
maxconn 4000 # 设置每个 HAProxy 进程锁接受的最大并发连接数
user haproxy # 同 uid 参数,使用是用户名
group haproxy # 同 gid 参数,建议专用用户组
nbproc 40 # 启动多个进程来转发请求,需要调整到足够大的值来保证 HAProxy 本身不会成为瓶颈
daemon # 让 HAProxy 以守护进程的方式工作于后台,等同于“-D”选项的功能。当然,也可以在命令行中用“-db”选项将其禁用。
stats socket /var/lib/haproxy/stats # 定义统计信息保存位置
defaults # 默认配置
log global # 日志继承全局配置段的设置
retries 2 # 向上游服务器尝试连接的最大次数,超过此值就认为后端服务器不可用
timeout connect 2s # HAProxy 与后端服务器连接超时时间,如果在同一个局域网内可设置成较短的时间
timeout client 30000s # 定义客户端与 HAProxy 连接后,数据传输完毕,不再有数据传输,即非活动连接的超时时间
timeout server 30000s # 定义 HAProxy 与上游服务器非活动连接的超时时间
listen admin_stats # frontend 和 backend 的组合体,监控组的名称,按需自定义名称
bind 0.0.0.0:8080 # 配置监听端口
mode http # 配置监控运行的模式,此处为 `http` 模式
option httplog # 表示开始启用记录 HTTP 请求的日志功能
maxconn 10 # 最大并发连接数
stats refresh 30s # 配置每隔 30 秒自动刷新监控页面
stats uri /haproxy # 配置监控页面的 URL
stats realm HAProxy # 配置监控页面的提示信息
stats auth admin:pingcap123 # 配置监控页面的用户和密码 admin,可以设置多个用户名
stats hide-version # 配置隐藏统计页面上的 HAProxy 版本信息
stats admin if TRUE # 配置手工启用/禁用,后端服务器(HAProxy-1.4.9 以后版本)
listen tidb-cluster # 配置 database 负载均衡
bind 0.0.0.0:3390 # 配置浮动 IP 和 监听端口
mode tcp # HAProxy 中要使用第四层的应用层
balance leastconn # 连接数最少的服务器优先接收连接。`leastconn` 建议用于长会话服务,例如 LDAP、SQL、TSE 等,而不是短会话协议,如 HTTP。该算法是动态的,对于实例启动慢的服务器,权重会在运行中作调整。(leastconn :基于最少连接数 roundrobin:轮询 source:ip 最近原则)
server tidb-1 10.9.18.229:4000 check inter 2000 rise 2 fall 3 # 检测 4000 端口,检测频率为 2000 毫秒。如果检测出 2 次正常就认定机器已恢复正常使用,如果检测出 3 次失败便认定该服务器不可用。
server tidb-2 10.9.39.208:4000 check inter 2000 rise 2 fall 3
server tidb-3 10.9.64.166:4000 check inter 2000 rise 2 fall 3
### **haproxy安装与环境配置**
**前期:** 环境搭建准备:
**流程:** 写操作去找主节点192.168.244.20(master),读的时候通过负载均衡 haproxy,在所有的从节点 192.168.244.30(slave),192.168.244.40(slave) 前面搭载负载均衡 proxy 节点,这个节点 1192.168.244.10(haproxy)就维护了所有节点的列表,当应用过来的时候只需要请求 haproxy 节点就可以了,这个节点对我们的请求内容进行分发到下面 192.168.244.30(slave),192.168.244.40(slave) 各节点,返回数据该由(haproxy) 节点返回。
| 服务器名称 | IP | 操作系统 | 安装服务 |
| --- | --- | --- | --- |
| mysql-master | 192.168.244.20 | CentOS7 | mysql |
| mysql-slave1 | 192.168.244.30 | CentOS7 | mysql|
| mysql-slave2 | 192.168.244.40 | CentOS7 | mysql|
| mysql-haproxy| 192.168.244.10 | CentOS7 | haproxy|
**1. 在 192.168.244.10 安装haproxy负载均衡器**
yum install -y haproxy
**2. 配置haproxy配置文件,目录:/etc/haproxy/haproxy.cfg**
**2.1 haproxy 客户端配置:**
# haproxy 客户端
listen http_front
# 配置监听端口
bind 0.0.0.0:8100
# 配置监控运行的模式,此处为 `http` 模式
mode http
# 表示开始启用记录 HTTP 请求的日志功能
option httplog
# 配置ui 后缀
stats uri /haproxy
# web界面用户和密码
stats auth root:0000
# 配置每隔 10 秒自动刷新监控页面
stats refresh 10s
stats enable
**2.1.1 访问方式:** ip:8100/haproxy
![](https://img.kancloud.cn/89/c2/89c238a82da00cd26e649215defd0465_2157x1107.png)
**2.2 192.168.244.10 haproxy 服务配置:**
# mysql 负载均衡服务
listen mysql_server
# 配置监听端口
bind 0.0.0.0:3307
# 配置监控运行的模式,此处为 `tcp` 模式
mode tcp
# 日志继承全局配置段的设置
log global
# balance:基于最少连接数 roundrobin:轮询
balance roundrobin
# 服务(rise 2是2次正确认为服务器可用,fall 3是3次失败认为服务器不可用)
server mysql_server_1 192.168.244.30:3306 check inter 5s rise 2 fall 3
server mysql_server_2 192.168.244.40:3306 check inter 5s rise 2 fall 3
**2.2.1 在 两台192.168.244.30(slave)192.168.244.40(slave) 添加用户授权**
grant all privileges on *.* to 'wangqianshun'@'%' identified by 'wangqianshun';flush privileges;
![](https://img.kancloud.cn/2c/e3/2ce3692b797129bef11e8bd06372cc76_1024x471.png)
**2.2.2 直接连接 192.168.244.10(haproxy)端口:3307 进行测试**
mysql -uwangqianshun -pwangqianshun -h192.168.244.10 -P 3307
![](https://img.kancloud.cn/2a/72/2a72c5803c638d61c781833d7e0a5ef8_1201x365.png)
**2.2.3 查看 server_id**
# 只要配置了不同的 server_id 多次退出重新登录 mysql 查看 server_id 则 实现轮询
show variables like 'server_id';
![](https://img.kancloud.cn/f2/f5/f2f5a9143dd4d11dd1fd745d0897cafd_1239x761.png)
**3. 启动/停止 haproxy**
# 启动方式一:直接启动
/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg
# 启动方式二:systemd 启动 HAProxy,默认读取(推荐)
systemctl start haproxy.service
# 停止方式一:
ps -ef | grep haproxy
kill -9 haproxy.pid
# 停止方式二:systemd 停止 haproxy(如果使用 systemd 启动)
systemctl stop haproxy.service
keepalived 是集群管理中保证集群高可用的一个服务软件, 用来防止单点故障。
Keepalived的作用是检测服务器的状态,如果有一台服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其它服务器代替该服务器的工作,当服务器工作 正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。
*****
### **keepalived 工作原理:**
keepalived 是以 VRRP 协议为实现基础的,VRRP 全称 Virtual Router Redundancy Protocol,即虚拟路由冗余协议。
![](https://img.kancloud.cn/fb/52/fb52cbf82cb3b0ac62d389db70e3d9e1_435x257.png)
虚拟路由冗余协议,可以认为是实现路由器高可用的协议, 即将 N 台提供相同功能的路由器组成一个路由器组,这个组 里面有一个 master 和多个 backup,master 上面有一个对外 提供服务的 vip(该路由器所在局域网内其他机器的默认路 由为该 vip),master 会发组播,当 backup 收不到 vrrp 包时就认为 master 宕掉了,这时就需要根据 VRRP 的优先级来选举一个 backup 当 master。这样的话就可以保证路由器的高 可用了。
### **keepalived 工具安装:** (方式一:)
**1. 安装 keepalived 需要用到 openssl**
yum install gcc gcc-c++ openssl openssl-devel
cd /usr/local
# wget -q 不显示任何下载信息
wget -q https://www.keepalived.org/software/keepalived-1.2.18.tar.gz
**2. 解压并编译安装**
tar -zxvf keepalived-1.2.18.tar.gz && cd keepalived-1.2.18
./configure --prefix=/usr/local/keepalived
make && make install
**3. 将 keepalived 安装成 Linux 系统服务**
复制默认配置文件到默认路径:
mkdir /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
复制 keepalived 服务脚本到默认的地址:
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/keepalived/sbin/keepalived /usr/sbin/
**4. 设置 keepalived 服务开机启动**
# 开机启动:
systemctl enable keepalived
# 启动方式一:on off reset
chkconfig keepalived on
# 启动方式二:
service keepalived start
# 启动方式三:
systemctl start keepalived
### **keepalived 工具安装:** (方式二:)
yum install keepalived -y
配置文件默认地址:
/etc/keepalived/keepalived.conf
>[info] keepalived 示例
### **前期:** 环境搭建准备:
注: 已配置好一主二从
| 服务器名称 | IP | 操作系统 | 安装服务 |
| --- | --- | --- | --- |
| mysql-master | 192.168.244.20 | CentOS7 | mysql、keepalived |
| mysql-slave1 | 192.168.244.30 | CentOS7 | mysql、keepalived |
| mysql-slave2 | 192.168.244.40 | CentOS7 | mysql|
### **1. keepalived 配置文件:**
**1.1 keepalived master 节点配置文件(192.168.244.20)**
注: 直接将文件内容清空
注: 只需要修改 2 个 vip ip 和 物理机 ip 即可
注: master 和 backup 有其他配置项不一致,请勿直接复制 master 到 backup 修改。
参数:
>nopreempt //非抢占,配合backup,防止切换后,主库服务恢复正常后,IP 漂移过来。(master backup都设置)
![](https://img.kancloud.cn/a3/e4/a3e493d6055842ddf96271b07aada715_382x471.png)
! Configuration File for keepalived
global_defs {
router_id LVS_MASTER
vrrp_sync_group VG1 {
group {
vrrp_script haproxy_check {
script "/etc/keepalived/haproxy_check.sh" # 检测 haproxy 状态的脚本路径
interval 2 # 检测时间间隔
weight 2 # 如果条件成立,权重+2
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 79
priority 100
advert_int 1
nopreempt
authentication {
auth_type PASS
auth_pass 12345678
virtual_ipaddress {
# 该ip为虚拟出来的vip地址(网段内只要不冲突 随便定义)
192.168.244.240
track_script {
haproxy_check
# 写VIP virtual_server,只配置本地机器
virtual_server 192.168.244.240 3306 {# 定义虚拟服务器,地址与上面的virtual_ipaddress相同
delay_loop 3 # 健康检查时间间隔,3秒
lb_algo rr # 负载均衡调度算法:rr|wrr|lc|wlc|sh|dh|lblc
lb_kind DR # 负载均衡转发规则:NAT|DR|TUN
# persistence_timeout 5 # 会话保持时间5秒,动态服务建议开启
protocol TCP # 转发协议protocol,一般有tcp和udp两种
# real_server 该配置为实际物理机ip地址 以及实际物理机mysql端口
real_server 192.168.244.20 3306 {
weight 1 # 权重越大负载分越大,0表示失效
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 3306
**1.2 keepalived backup 节点配置文件(192.168.244.30)**
注: 直接将文件内容清空
注: 只需要修改 2 个 vip ip 和 物理机 ip 即可
注: master 和 backup 有其他配置项不一致,请勿直接复制 backup 到 master 修改。
! Configuration File for keepalived
global_defs {
router_id LVS_MASTER
vrrp_sync_group VG1 {
group {
vrrp_script haproxy_check {
script "/etc/keepalived/haproxy_check.sh" # 检测 haproxy 状态的脚本路径
interval 2 # 检测时间间隔
weight 2 # 如果条件成立,权重+2
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 79
priority 90
advert_int 1
nopreempt
authentication {
auth_type PASS
auth_pass 12345678
virtual_ipaddress {
# 该ip为虚拟出来的vip地址(网段内只要不冲突 随便定义)
192.168.244.240
track_script {
haproxy_check
# 写VIP virtual_server,只配置本地机器
virtual_server 192.168.244.240 3306 {# 定义虚拟服务器,地址与上面的virtual_ipaddress相同
delay_loop 3 # 健康检查时间间隔,3秒
lb_algo rr # 负载均衡调度算法:rr|wrr|lc|wlc|sh|dh|lblc
lb_kind DR # 负载均衡转发规则:NAT|DR|TUN
# persistence_timeout 5 # 会话保持时间5秒,动态服务建议开启
protocol TCP # 转发协议protocol,一般有tcp和udp两种
# real_server 该配置为实际物理机ip地址 以及实际物理机mysql端口
real_server 192.168.244.30 3306 {
weight 1 # 权重越大负载分越大,0表示失效
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 3306
**1.3 haproxy 状态检测脚本**
1. 创建检测日志文件
mkdir -p /usr/local/keepalived/log && touch /usr/local/keepalived/log/haproxy-check.log
2. 在 192.168.244.20(master)和 192.168.244.30(slave) ``/etc/keepalived/``新建:`haproxy_check.sh`
注: windows 的 sh 复制到 linux 会存在 换行符问题
![](https://img.kancloud.cn/b6/c2/b6c26103094e60392243d7a7efcc8296_1045x402.png)
~~~sh
#!/bin/bash
START_HAPROXY="/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg" #haproxy启动命令
LOG_FILE="/usr/local/keepalived/log/haproxy-check.log" # 日志文件
HAPS=`ps -C haproxy --no-header |wc -l` # 检测haproxy的状态,0代表未启动,1已经启动
date "+%Y-%m-%d %H:%M:%S" >> $LOG_FILE #在日志文件当中记录检测时间
echo "check haproxy status" >> $LOG_FILE # 记录haproxy的状态
if [ $HAPS -eq 0 ];then #执行haproxy判断
echo $START_HAPROXY >> $LOG_FILE #记录启动命令
/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg #启动haproxy
sleep 3
if [ `ps -C haproxy --no-header |wc -l` -eq 0 ];then
echo "start haproxy failed, killall keepalived" >> $LOG_FILE
killall keepalived
service keepalived stop
#!/bin/bash
# 检测 mysql 服务
/usr/bin/mysql -uroot -p'123456' -e "show status" &>/dev/null
# 服务挂掉
if [ $? -ne 0 ] ;then
# 直接停止 keepalived 让其漂移
systemctl stop keepalived
执行授权:
chmod +x /etc/keepalived/haproxy_check.sh
### **2. 测试一:**
**2.1 先从 192.168.244.30(backup) 启动 keepalived 使用 ip a 查看是否存在 192.168.244.240 网卡**
systemctl restart keepalived
ip a | grep 192.168.244.240
![](https://img.kancloud.cn/a4/f5/a4f5a22134dfa2dccb69903f5bff91ec_1151x565.png)
**2.2 再从 192.168.244.20(master) 启动 keepalived 使用 ip a 查看是否存在 192.168.244.240 网卡 存在则ip偏移过来了 则 `backup` 使用 ip a 192.168.244.240 网卡不存在**
systemctl restart keepalived
ip a | grep 192.168.244.240
![](https://img.kancloud.cn/ac/a3/aca367092520d361407770851e423cd8_1004x425.png)
![](https://img.kancloud.cn/55/c8/55c88878d391296b207d3ec2bf0d54b0_1082x576.png)
**2.3 本地通过 虚拟ip 端口:3306 直接连接 mysql 进行测试 server_id** (vip 在 backup master 和外部连接都能成功) (vip 在 master backup 连接失败 外部能够成功)
mysql -uwangqianshun -pwangqianshun -h192.168.244.240 -P 3306
### **3. 测试二:**
1. `master` 或 `backup` 停止 keepalived,查看主从切换。(ip切换)(成功)
2. 停止 `master` 上 `mysql`,查看主从切换(正常本机 keepalived 检查到 mysql不在了,会执行 haproxy_check.sh 脚本直接 kill 掉 keepalived 进程)。(成功)
![](https://img.kancloud.cn/3c/c8/3cc835812c29f9f2146e030112315903_1071x398.png)
注:
haproxy 状态检测脚本不执行问题,如果是使用的 `service keeplived start` 或者是 `systemctl` 方式启动,脚本可能会不执行,可以使用`keepalived -f /etc/keepalived/keepalived.conf` 方式启动 keepalived
注:
keepalived 配置注意点 - 配置完成但是ip不生效;
1. 查看虚拟机/机器系统时间是否一致
2. virtual_router_id 路由id不对,不能冲突。可以通过 /var/log/messages 查看此错误。
如:server-1、server-2为一组,virtual_router_id = 51
如:server-3、server-4为一组,则 virtual_router_id 不能为 51
注:
keepalive 默认的日志写入了 /var/log/messages下。
### **4. 测试三:**
**介绍:**
> 两台mysql互为主从,但只有master写,slave只负责读。主从通过keepalive做成高可用,当master出问题,由slave接替master工作,即读写都在slave操作。当master恢复正常,master自动同步故障时间段数据,接替slave的写工作。
1. master1 直接停止 mysql 使 keepalived 漂移到 backup
![](https://img.kancloud.cn/c4/31/c431093182c0db6a8f321888eee89ed0_840x145.png)
![](https://img.kancloud.cn/be/e9/bee9b2237283793b2015c40210ed274e_860x123.png)