基于haproxy、keepalived实现MyCat的高可用

1、MyCat高可用架构

在这里插入图片描述
  这里主要是基于haproxy、keepalive实现Mycat的高可用性,所以没有再绘制Mycat后面的数据库分布情况。其中,keepalived主要是为了保证haproxy的高可用,主要用于监控haproxy是否可用,然后进行故障转移;而haproxy主要用来实现负载均衡。

2、服务器规划

服务器 haproxy keepalive mycat mysql
192.168.1.8 部署
192.168.1.9 部署 部署 部署 部署
192.168.1.10 部署 部署 部署

3、部署mysql、mycat

  在前面我们已经再192.168.1.10上部署了mycat,192.168.1.8/9上部署了mysql。我们这里需要在192.168.1.9上再部署一个mycat。我们这里直接把192.168.1.10上的直接复制到192.168.1.9上,命令如下:

scp -r mycat/ 192.168.1.9:$PWD

  然后,启动mycat即可。

3、部署haproxy

  HAProxy负责将请求分发到MyCat上,起到负载均衡的作用,同时HAProxy也能检测到MyCat是否存活,HAProxy只会将请求转发到存活的MyCat上。如果一台MyCat服务器宕机,HAPorxy转发请求时不会转发到宕机的MyCat上,所以MyCat依然可用。

  下面的操作,需要在192.168.1.9/10两个服务器上分别执行。

3.1、查看haproxy并安装
#查看
yum search haproxy

在这里插入图片描述

#安装
yum install haproxy.x86_64

在这里插入图片描述

3.2、修改haproxy配置文件

  通过上述方式安装,默认的配置文件在/etc/haproxy/haproxy.cfg。

在这里插入图片描述

defaults
    mode                    tcp #修改成TCP协议
    log                     global
    option                  tcplog #修改日志
    option                  dontlognull
    #option http-server-close #注释掉,主要用于HTTP协议
    option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 3
    #timeout http-request    10s #注释掉,主要用于HTTP协议
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    #timeout http-keep-alive 10s #注释掉,主要用于HTTP协议
    timeout check           10s
    maxconn                 3000

#省略了其他的配置

#增加了负载均衡的mycat配置
backend app
    balance     roundrobin
    server  app1 192.168.1.9:8066 check
    server  app2 192.168.1.10:8066 check
3.3、启动

  通过如下命令启动,然后通过Navicat,使用haproxy连接(默认端口5000)。

haproxy -f /etc/haproxy/haproxy.cfg

在这里插入图片描述

4、部署keepalived

  下面部署keepalived的操作,需要在192.168.1.9/10两个服务器上分别执行。

4.1、查看并安装
#查看
 yum search keepalived

#安装
 yum install keepalived.x86_64
4.2、修改keepalived配置文件

  通过上述方式安装,默认的配置文件在/etc/keepalived/keepalived.cfg。修改配置文件如下:

! Configuration File for keepalived

global_defs {
    
    
  # notification_email {
    
    
  #   acassen@firewall.loc
  #   failover@firewall.loc
  #   sysadmin@firewall.loc
  # }
  # notification_email_from Alexandre.Cassen@firewall.loc
  # smtp_server 192.168.200.1
  # smtp_connect_timeout 30
   router_id node10
  # vrrp_skip_check_adv_addr
  # vrrp_strict
  # vrrp_garp_interval 0
  # vrrp_gna_interval 0
}

##keepalived会定时执行脚本并对脚本执行的结果进行分析,动态调整vrrp_instance的优先级。
## 如果脚本执行结果为0,并且weight配置的值大于0,则优先级相应的增加。
## 如果脚本执行结果非0,并且weight配置的值小于0,则优先级相应的减少。
## 其他情况,维持原本配置的优先级,即配置文件中priority对应的值。
vrrp_script chk_haproxy {
    
    
    script "killall -0 haproxy" ## 检测haproxy状态的脚本路径,该命令需要安装psmisc
	interval 2  ## 检测时间间隔
    weight 2  ## 如果条件成立,权重+2 
}

## 定义虚拟路由,VI_1 为虚拟路由的标示符,自己定义名称
vrrp_instance VI_1 {
    
    
    state BACKUP ##这一项主从都用BACKUP,MASTER会出现问题,会出现抢占的问题,如果主节点宕机掉,然后切换到备节点,如果主节点起来的话主节点就会把VIP抢占。这样就由优先级(priority)来控制同时启动情况下的默认主备,否则先启动的为主设备
    interface ens33 ## 绑定虚拟IP的网络接口,与本机IP地址所在的网络接口相同
    virtual_router_id 51 ## 虚拟路由的ID号,两个节点设置必须一样,因为属于同一个组,不同组的id一定不要一样,否则冲突
    priority 100 ## 节点优先级,值范围0-254,MASTER要比BACKUP高,万一同时启动呢,一定要有一个高低之分
    advert_int 1 ## 组播信息发送间隔,就是两个虚拟路由节点之间会通过组播检测对方是否正常,如果一个有问题,另一个会抢占vip,这里间隔1秒,时间太长可能会出现系统中断
	
	## 设置验证信息,两个节点必须一致
    authentication {
    
    
        auth_type PASS
        auth_pass 1111
    }
	
	## 将track_script块加入instance 配置块
    track_script {
    
    
        chk_haproxy  ## 检查HAProxy服务是否存活
    }
	
    ## 虚拟IP池, 两个节点设置必须一样
    virtual_ipaddress {
    
    
        192.168.1.13  ## 虚拟ip,可以定义多个,每行一个
    }
}

配置内容参考了《高可用Mysql架构_Haproxy+keepalived+mycat集群的配置》

4.3、安装killall命令

  在上述脚本中,使用了“killall -0 haproxy”判断haproxy是否正常启动,该命令需要安装psmisc,命令如下:

yum -y install psmisc
4.4、启动keepalived

  完成上述配置,然后启动keepalived。命令如下:

keepalived -f /etc/keepalived/keepalived.conf
4.5、测试

  启动了192.168.1.9/10两个服务器上的haproxy、keepalived服务,我们查看两台服务器的地址,发现VIP在192.168.1.9上,如下所示:

在这里插入图片描述

在这里插入图片描述

  为了验证haproxy的高可用,我们把192.168.1.9上的haproxy进程kill掉,然后再查看地址,发现VIP已经切换到了192.168.1.10服务器上。这个时候使用VIP去访问数据库,发现还是可以访问的,说明haproxy的高可用配置成功了。

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/hou_ge/article/details/113059327