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


    应用背景

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

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

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

    测试环境

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

      

      

    操作步骤

    1. MySQL复制(双主)

      略

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

    [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 File for keepalived
    
    global_defs {
       router_id LVS1              #另外一台就写LVS2
    }
    
    vrrp_instance VI_1 {
        state MASTER                        #指定instance初始状态,当前是主MASTER,另外一节点填BACKUP
        interface eth0                      #请查看网卡名,CentOS6和7命名不一样
        virtual_router_id 51                #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.222 3306 {
        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.10 3306 { weight 3 #权重 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 connect_port 3306 } } real_server 138.138.82.11 3306 { 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

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

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

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

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

    [root@server-10 ~]# vim lvs.sh
    #!/bin/bash 
    VIP=138.138.82.222
    case "$1" in
    start)
               echo "start LVS of RealServer DR" 
               /sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
               /sbin/route add -host $VIP dev lo:0
               echo "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/ifconfig lo: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 1
    esac
    exit 0

    保存,退出;  

    启动脚本:

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

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

    [root@server-11 ~]# ip a

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

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

    关于LVS的10种调度算法介绍

    官网:http://www.linuxvirtualserver.org/docs/scheduling.html

    参考:https://blog.csdn.net/scape1989/article/details/21085659

    结束.

  • 相关阅读:
    启动Django项目报错:django.db.utils.OperationalError: (1193, "Unknown system variable 'storage_engine'")
    vue基础
    创建django项目出现AttrbuteError module 'pip' has no attribute 'main'解决方法
    ipython基本使用方法
    JavaScript(一)
    Spring 框架的设计理念与设计模式
    深入Java网络编程与NIO(三)
    深入Java网络编程与NIO(一)
    Code Jam Kickstart 2018 Round H 题解
    从TiDB学习分布式数据库
  • 原文地址:https://www.cnblogs.com/ding2016/p/8964778.html
Copyright © 2020-2023  润新知