2019-10-12

利用LVS+Keepalived搭建Mysql双主复制高可用负载均衡环境

应用背景

 MySQL复制(主主,主从...)能在保证数据的备份的同时也能够做读写分离分摊系统压力,但是发生单点故障时,需要手动

切换到另外一台主机。LVS和Keppalived可以设定一个VIP来实现统一访问入口,实现单点故障时,VIP自动切换至另外一台

主机上达到高可用效果,同时LVS可以提供多种调度算法来实现负载均衡机制。


测试环境

MySQL主主复制,利用Keepalived控制LVS的高可用,在利用LVS的某种调度算法对2台MySQL实现负载均衡。


操作步骤

1. MySQL复制(双主)

  略

2. 安装LVS和Keepalived(在两台LVS上操作)

1

2

3

4

[root@server-8 ~]# yum install epel-release -y

[root@server-8 ~]# yum install ipvsadm keepalived -y

[root@server-8 ~]# echo "" > /etc/keepalived/keepalived.conf

[root@server-8 ~]# vim  /etc/keepalived/keepalived.conf

! Configuration Fileforkeepalivedglobal_defs {  router_idLVS1#另外一台就写LVS2}vrrp_instance VI_1 {    stateMASTER#指定instance初始状态,当前是主MASTER,另外一节点填BACKUP    interface eth0                      #请查看网卡名,CentOS6和7命名不一样    virtual_router_id51                #VRID,相同VRID为一个组,决定多播MAC地址,重要!主备一致

    priority 100                        #优先级,另一台改为低一点,比如90

    advert_int 1                        #检查间隔

    authentication {

        auth_type PASS                  #认证方式,可以是pass或ha

        auth_pass 1111                  #认证密码

    }

    virtual_ipaddress {

        138.138.82.222                  #VIP

    }

}

virtual_server 138.138.82.2223306 {

    delay_loop 6#服务轮询的时间间隔    lb_algo wlr                        #加权最小连接调度算法,LVS调度算法rr|wrr|lc|wlc|lblc|lblcr|sh|dh|sed|nq    lb_kind DR                          #LVS集群模式 NAT|DR|TUN,其中DR模式要求负载均衡器网卡必须有一块与物理网卡在同一个网段    persistence_timeout 50#会话保持时间    protocol TCP                        #健康检查协议

#

=== Real Server设置,3306就是MySQL连接端口 ===#

    real_server 138.138.82.103306 {

        weight 3                        #权重

        TCP_CHECK {

            connect_timeout 3            nb_get_retry 3            delay_before_retry 3            connect_port 3306        }

    }

    real_server 138.138.82.113306 {

        weight 3        TCP_CHECK {

            connect_timeout 3            nb_get_retry 3            delay_before_retry 3            connect_port 3306        }

    }

}

保存,退出;

另外一台LVS主机的Keepalived配置同上,修改上面的提到的router_id,state,priority值即可,不在赘述;

接下来启动Keepalived

1

2

3

[root@server-8 ~]# service keepalived start

[root@server-9 ~]# service keepalived start

[root@server-8 ~]# ip a

1[root@server-8 ~]# ipvsadm -ln

目前VIP只在MASTER上,如果MASTER节点挂了,VIP自动飘到BACKUP节点上;


3. 配置两台MySQL所需脚本(在两台MySQL上操作)

1[root@server-10 ~]# vim lvs.sh

#!/bin/bash

VIP=138.138.82.222case"$1"instart)

          echo"start LVS of RealServer DR"/sbin/ifconfiglo:0$VIP broadcast $VIP netmask255.255.255.255 up

          /sbin/route add -host $VIP dev lo:0echo"1">/proc/sys/net/ipv4/conf/lo/arp_ignore

          echo"2">/proc/sys/net/ipv4/conf/lo/arp_announce

          echo"1">/proc/sys/net/ipv4/conf/all/arp_ignore

          echo"2">/proc/sys/net/ipv4/conf/all/arp_announce

      ;;

stop)

          /sbin/ifconfiglo:0 down

          echo"close LVS of RealServer DR"echo"0">/proc/sys/net/ipv4/conf/lo/arp_ignore

          echo"0">/proc/sys/net/ipv4/conf/lo/arp_announce

          echo"0">/proc/sys/net/ipv4/conf/all/arp_ignore

          echo"0">/proc/sys/net/ipv4/conf/all/arp_announce

          ;;*)

          echo"Usage: $0 {start|stop}"

          exit 1esacexit 0

保存,退出;

启动脚本:

1

2

[root@server-10 ~]# sh lvs.sh start

[root@server-10 ~]# ip a

另一台MySQL操作如上(脚本内容一致)。

1[root@server-11 ~]# ip a

这样,两台mysql会通过各自的loopback接口与这个VIP通信。

 直此,客户端就可以通过统一个接口IP(138.138.82.222)来访问数据了。

原文:https://www.cnblogs.com/ding2016/p/8964778.html

你可能感兴趣的:(2019-10-12)