array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 keepalived+LVS+Mycat+MySQL双主及主从高可用负载均衡集群 - 爱码网

系统集群架构图如下:

keepalived+LVS+Mycat+MySQL双主及主从高可用负载均衡集群

一、部署90主机和77主机的MySQL主主配置和90主机和89主机的MySQL主从配置

详情请见(

MySQL主主同步:https://blog.csdn.net/baidu_38432732/article/details/80773634

MySQL主从同步:https://blog.csdn.net/baidu_38432732/article/details/80653873

二、部署mycat的读写分离控制,详情请见(https://blog.csdn.net/baidu_38432732/article/details/80708847)

三、配置keepalived+LVS对mycat的高可用及负载均衡集群

1、在117主机和116主机上分别安装keepalived+LVS

[[email protected] ~]# yum -y install keepalived ipvsadm
安装完后修改配置文件:

117Master主机

[[email protected] ~]# vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived
global_defs {
   notification_email {
     [email protected]
     [email protected]
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
#   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}
vrrp_instance VI_1 {
    state MASTER  #(从的改成backup)
    interface ens33
    virtual_router_id 51 
    priority 100  #(从主机的值低于100即可)
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.120
    }
}
virtual_server 192.168.1.120 8066 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 0 #注意改成0,否则会出现异常
    protocol TCP
    real_server 192.168.1.130 8066 {
        weight 1
        SSL_GET {
            url {
              path /
              digest ff20ad2481f97b1754ef3e12ecd3a9cc
            }
            url {
              path /mrtg/
              digest 9b3a0c85a887a256d6939da88aabd8cd
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_port 8066
        }
    }
    real_server 192.168.1.76 8066 {
        weight 1
        SSL_GET {
            url {
              path /
              digest ff20ad2481f97b1754ef3e12ecd3a9cc
            }
            url {
              path /mrtg/
              digest 9b3a0c85a887a256d6939da88aabd8cd
            }
            connect_timeout 3
            nb_get_retry 3

            delay_before_retry 3
            connect_port 8066
        }
    }
}

2、在130主机和76主机上分别执行以下脚本:

[[email protected] ~]# vim realserver.sh


#!/bin/bash
#description: Config realserver
VIP=192.168.1.120
/etc/rc.d/init.d/functions
case "$1" in
start)
       /sbin/ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
       /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
       sysctl -p >/dev/null 2>&1
       echo "RealServer Start OK"
       ;;
stop)
       /sbin/ifconfig lo:0 down
       /sbin/route del $VIP >/dev/null 2>&1
       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 "RealServer Stoped"
       ;;
*)
       echo "Usage: $0 {start|stop}"
       exit 1
esac
exit 0

两台服务器上执行一样的,然后执行以下,命令验证是否执行成功,当两台主机都出现以下则成功

keepalived+LVS+Mycat+MySQL双主及主从高可用负载均衡集群

3、回到117和116主机启动keepalived

[[email protected] ~]# service keepalived start
Redirecting to /bin/systemctl start keepalived.service
此时验证后虚拟IP在Master主机上,具体那个获取IP要看先启动那个

keepalived+LVS+Mycat+MySQL双主及主从高可用负载均衡集群

keepalived+LVS+Mycat+MySQL双主及主从高可用负载均衡集群

至此已经部署完毕

四、终极验证

1、部署环境将所有的数据库建表并插入数据

keepalived+LVS+Mycat+MySQL双主及主从高可用负载均衡集群

2、为了方便验证现在统一用navicat登陆数据库

VIP访问后得到所有的数据

keepalived+LVS+Mycat+MySQL双主及主从高可用负载均衡集群

情景一:停掉90Master主机,验证数据是否正常显示

keepalived+LVS+Mycat+MySQL双主及主从高可用负载均衡集群

keepalived+LVS+Mycat+MySQL双主及主从高可用负载均衡集群

数据可以正常访问

keepalived+LVS+Mycat+MySQL双主及主从高可用负载均衡集群

情景二:启动90主机,停掉77的Master主机

keepalived+LVS+Mycat+MySQL双主及主从高可用负载均衡集群

keepalived+LVS+Mycat+MySQL双主及主从高可用负载均衡集群

keepalived+LVS+Mycat+MySQL双主及主从高可用负载均衡集群

keepalived+LVS+Mycat+MySQL双主及主从高可用负载均衡集群

此时我们用120IP访问:还可以获取数据

keepalived+LVS+Mycat+MySQL双主及主从高可用负载均衡集群

情景一、二:证明两个数数据库可以达到高可用

情景三:关闭一个130mycat服务

keepalived+LVS+Mycat+MySQL双主及主从高可用负载均衡集群

keepalived+LVS+Mycat+MySQL双主及主从高可用负载均衡集群keepalived+LVS+Mycat+MySQL双主及主从高可用负载均衡集群

第一遍访问报错

keepalived+LVS+Mycat+MySQL双主及主从高可用负载均衡集群

第二遍访问:

keepalived+LVS+Mycat+MySQL双主及主从高可用负载均衡集群

重复多少点几次发现是一边正常一遍不正常说明起到负载作用而且是权重比相等的负载均衡

情景三:我们停止任何一个keepalived都可以访问数据库数据

情景四:验证读写分离

构造环境,在从服务器上插入数据,以便数据读取来区分

刚开始是如下数据

keepalived+LVS+Mycat+MySQL双主及主从高可用负载均衡集群

现插入数据如下:

keepalived+LVS+Mycat+MySQL双主及主从高可用负载均衡集群此时查看从服务器数据如下:

keepalived+LVS+Mycat+MySQL双主及主从高可用负载均衡集群

则此时直接访问主数据库无法看到刚插入的数据,但用120IP访问后就可以看到刚插入的数据

keepalived+LVS+Mycat+MySQL双主及主从高可用负载均衡集群

keepalived+LVS+Mycat+MySQL双主及主从高可用负载均衡集群


相关文章: