精华内容
下载资源
问答
  • mysql负载均衡

    2021-03-17 21:29:36
    在一个服务器集群中尽可能地的平均负载量. 基于这个思路,我们通常的做法是在服务器前端设置一个负载均衡器. 负载均衡器的作用将请求的链接路由到最空闲的可用服务器上
    在一个服务器集群中尽可能地的平均负载量.
    基于这个思路,我们通常的做法是在服务器前端设置一个负载均衡器.
    负载均衡器的作用将请求的链接路由到最空闲的可用服务器上
    

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

    展开全文
  • mysql负载均衡方案

    2021-01-18 19:09:41
    mysql负载均衡方案一、直接连接数据库的读写分离方案很多,这里介绍基于mysql数据库的读写分离方案。比较常见的读写分离方案如下:1 基于查询分离最简单的分离方法是将读和写分发到主和从服务器上,这种策略很容易...

    mysql负载均衡方案

    一、直接连接

    数据库的读写分离方案很多,这里介绍基于mysql数据库的读写分离方案。

    比较常见的读写分离方案如下:

    1 基于查询分离

    最简单的分离方法是将读和写分发到主和从服务器上,这种策略很容易实现,但是仅限于一些能够容忍查询脏数据的操作。

    举个例子来说,用户写入了一条评论,发往主库保存,查询的时候则是从从库拉取数据,由于主从数据库存在复制延迟,用户很可能看不到自己的最新评论,这就是脏数据。

    2 基于脏数据分离

    这种策略是基于查询分离方法的改进。需要做一些额外的工作,让应用检查复制延迟,以确定备库数据是否太旧。许多报表类应用都使用这个策略:只需要晚上加载的数据复制到备库即可,他们并不关心从库是不是100%跟上了主库。

    3 基于会话分离

    另一个决定能否从从库读取数据的稍微复杂一点的方法是判断用户自己是否修改了数据。用户不需要看到其他用户的最新数据,但需要看到自己的更新。可以再会话层设置一个标记位,表明做了更新,就将该用户的查询在一段时间内总是指向主库。这是推荐的一种做法,因为他是在简单和有效性之间的一种很好的妥协。

    我们还可以把基于会话的分离方法和复制延迟监控结合起来,如果用户在10秒前更新了数据,而所有备库延迟在5秒内,就可以安全的从备库中读取数据,但为整个会话选择同一个备库是很好的主意,否则用户可能会奇怪有些备库的数据比较慢。

    4 基于版本分离

    这种策略与基于会话的分离方法相似,你可以跟踪对象的版本号或者时间戳,通过从备库读取对象的版本或时间戳来判断数据是否足够新。如果备库的数据太旧,可以从主库获取最新的数据。

    5 基于全局版本/会话分离

    这个办法是基于版本分离和会话分离的变种.当应用执行写操作时,在提交事务后,执行一次show master status操作。然后在缓存中存储主库日志坐标,作为被修改对象以及/或者会话的版本号。的那个应用连接到备库时,执行show slave status 并将备库上的坐标和缓存中的版本号对比,如果备库相比记录点更新,则可以安全的读取备库数据。

    修改DNS域名

    转移IP地址

    一些负载均衡方案依赖于在服务器间转移虚拟地址,一般能够很好地工作。

    可以通过ARP(地址解析协议)命令强制使IP地址更改快速而且原子性地通知到网络上。

    二、引入中间件

    HaProxy,mycat

    展开全文
  • #keepalived 主和备的配置文件基本相同;只需要修改:state BACKUP #...=======================================================#新建刚才配置keepalived 时所定义的脚本,用于在MySQL 死亡后结束 keepalived#!/...

    #keepalived 主和备的配置文件基本相同;只需要修改:

    state BACKUP #修改为备份设备

    priority 100 #优先级要比主低

    #其它地方根据实际情况也可以做调整;

    =======================================================

    #新建刚才配置keepalived 时所定义的脚本,用于在MySQL 死亡后结束 keepalived

    #!/bin/bash

    #mysql_chke.sh

    #

    a=`ps -C mysqld --no-header | wc -l`

    if [ $a -eq 0 ];then

    sleep 3

    /sbin/service keepalived stop

    echo "`date +%c` stop keepalived" >> /opt/log/stop_keepalived.log

    fi

    fi

    service keepalived start    #在两台设备上面启动

    #开始测试

    ip address

    #查看主设备 11 上是否有生成 vip 地址;

    #注意事项,keepalived 生成的 VIP 对 ifconfig 命令不可见,所以需要使用 ip 命令;

    mysql -udiaosi -p123456 -h 192.168.5.111 -e "select * from test.mywait;"

    #正常情况是只能查询到 MASTER 的数据库的数据;

    1、尝试将 MASTER 的keepalived 停掉

    2、down 掉 MASTER 的网卡

    3、让mysql 启动不了,比如先注释掉mysql这个用户,后killall mysqld ,

    查看mysql_chke 脚本是否会把 keepalived 结束掉;

    #这个时后 vip 地址会移动到 Slave 主机上; HA 搭建的是否成功体现于查询所获取值的变化;

    #当将 MASTER 恢复后,VIP 又会回到 11 的设备上;

    #至此 keepalived 为 mysql 做HA 模式成功;

    ========================================================================

    [install_haproxy]

    #用于将请求分别轮询到 192.168.5.11 192.168.5.12

    tar xf /opt/soft/haproxy-1.4.20.tar.gz -C /opt/soft/

    cd /opt/soft/haproxy-1.4.20/

    make TARGET=linux26 PREFIX=/opt/haproxy install

    mkdir /opt/haproxy/conf

    mkdir /opt/haproxy/logs

    touch /opt/haproxy/conf/haproxy.cfg

    ========================================================================

    [mysql_config]

    #修改 mysql 监听,使 mysql 避开 192.168.5.111,因为 haproxy 也要监听 111:3306 这个IP地址和端口;

    vim /etc/my.cnf

    #server1

    [mysqld]

    bind-address=192.168.5.11 #mysql 的监听,添加这一句就好了

    #server2

    [mysqld]

    bind-address=192.168.5.12

    #重启mysql

    service mysqld restart

    #到现在已经不能通过 192.168.5.111 访问数据库了,接下来配置 haproxy

    ========================================================================

    [config_haproxy]

    #主备服务器的主配文件一致;

    vim /opt/haproxy/conf/haproxy.cfg

    global   #全局系统配置

    log 127.0.0.1 local0 info #定义日志级别[err warning info debug]

    #local0 是日志设备,必须为24种标准syslog设备之一;

    maxconn 4096  #最大链接数

    uid 0   #运行该程序的用户,此处没有其它用户了,就用的 root

    gid 0

    daemon   #以后台形式运行

    nbproc 1  #进程数量

    defaults   #默认配置

    mode tcp  #所处理的类别 http | tcp | health

    option redispatch #serverId对应的服务器挂掉后,强制定向到其他健康的服务器

    retries 3  #三次连接失败则服务器不用

    timeout connect 5000 #连接超时

    timeout client 50000 #客户端超时

    timeout server 50000 #服务器超时

    timeout check 2000 #心跳检测超时

    listen proxy

    bind 192.168.5.111:3306  #监听地址

    mode tcp

    balance roundrobin  #定义负载方式,此处为轮询

    log 127.0.0.1 local0 info #定义日志类型

    #rise 3三次正确表示服务器可用,fall 3表示3次失败表示服务器不可用

    server db1 192.168.5.11:3306 check inter 1200 rise 2 fall 3 weight 1

    server db2 192.168.5.12:3306 check inter 1200 rise 2 fall 3 weight 1

    #服务器状态监控配置,可以通过定义的地址查看集群状态;

    listen haproxy_stats

    log 127.0.0.1 local0 info

    mode http

    bind 192.168.5.111:8888

    option httplog

    stats uri /status

    stats realm Haproxy Manager

    stats auth admin:admin  #设置监控地址的帐号与密码

    #在keepalived 主配文件中添加刚才在其末端说明的外部定义脚本

    #启动服务

    /opt/haproxy/sbin/haproxy -f /opt/haproxy/conf/haproxy.cfg

    #说明事项,keepalived 的服务主备设备上都可以同时运行,实则只有获得VIP的服务器才有效;

    #但是 haproxy 启动的时候需要监听 VIP 地址,所以第一次备用设备是手动起不了服务的;

    #需要在 keepalived 的notify_master配置项中设定脚本,当此设备获得VIP地址后才启动 haproxy;

    #有个问题在这里,我们只设定了当keepalived 停止服务时,才结束 haproxy ,没有设定移交VIP时是否结束;

    #其实这也不用担心,因为主机上已经没有VIP地址了,即便是监听也无效果,并无干扰;0b1331709591d260c1c78e86d0c51c18.png

    展开全文
  • 1.环境:mysql 5ubuntu10.04 x86_64mdb1eth0192.168.5.11mdb2eth0192.168.5.12sdb1eth0192.168.5.21sdb2eth0192.168.5.22sdb3eth0192.168.5.23sdb4...

    1.环境:

    mysql 5

    ubuntu10.04 x86_64

    mdb1        eth0    192.168.5.11

    mdb2        eth0    192.168.5.12

    sdb1        eth0    192.168.5.21

    sdb2        eth0    192.168.5.22

    sdb3        eth0    192.168.5.23

    sdb4        eth0    192.168.5.24

    haproxy

    eth0    192.168.5.10    (mdb  vip write)

    eth1    192.168.5.20    (sdb  vip read)

    说明:mdb vip用于DB的写,sdb vip用于DB读,实现读写分离和负载均衡,带故障检测自动切换

    2.架构图

    web1    web2    web3

    |              |          |

    —————————-

    |

    haproxy(lb db write/read)

    |

    ———————————-

    |                                |

    mdb1                     mdb2

    |                              |

    ————–             —————-

    |             |              |            |

    sdb1    sdb2        sdb3      sdb4

    说明:

    1)mdb1和mdb1配置成主-主模式,相互同步,通过haproxy提供一个lb的写ip

    2)sdb1和sdb2配置为mdb1的从,sdb3和sdb4配置为mdb2的从

    3)sdb1,sdb2,sdb3,sdb4这4台从库,通过haproxy提供一个lb的读ip

    4) 当mdb2停止复制,mdb1为主库,haproxy停止发送请求到mdb2和sdb3,sdb4

    5) 当mdb1停止复制,mdb2为主库,haproxy停止发送请求到mdb1和sdb1,sdb2

    6) 当mdb1和mdb2同时停止复制,这时2台主库变成readonly模式,数据库不能写入

    7)当mdb2 offline时,mdb1进入backup mode,停止发送请求到mdb2,sdb3,sdb4

    8)当mdb1 offline时,mdb2进入backup mode,停止发送请求到mdb1,sdb1,sdb2

    9) 当mdb1 mdb2同时offline,整个DB停止工作

    3.安装mysql-server

    登录mdb1,mdb2,sdb1,sdb2,sdb3,sdb4,输入以下命令进行安装:

    apt-get install mysql-server -y

    安装时会提示输入mysql root用户密码,输入gaojinbo.com

    修改mysql配置,监听所有接口

    vi /etc/mysql/my.cnf

    修改为:

    bind-address            = 0.0.0.0

    重启mysql

    /etc/init.d/mysql restart

    4.配置mdb1,mdb2主-主同步

    1)mdb1:

    vi /etc/mysql/my.cnf

    server-id               = 1

    log_bin                 = mysql-bin

    log-slave-updates                #很重要,从前一台机器上同步过来的数据才能同步到下一台机器

    expire_logs_days        = 10

    max_binlog_size         = 100M

    auto_increment_offset    = 1

    auto_increment_increment = 2

    2)mdb2:

    vi /etc/mysql/my.cnf

    server-id               = 2

    log_bin                 = mysql-bin

    log-slave-updates                #很重要,从前一台机器上同步过来的数据才能同步到下一台机器

    expire_logs_days        = 10

    max_binlog_size         = 100M

    auto_increment_offset    = 2

    auto_increment_increment = 2

    3)mdb1和mdb2:

    重启mysql

    /etc/init.d/mysql restart

    添加复制用户

    mysql -uroot -pgaojinbo.com

    GRANT REPLICATION SLAVE ON *.* TO ‘repl’@’192.168.5.%’ IDENTIFIED BY ‘gaojinbo’;

    记录日志文件和pos

    mysql -uroot -pgaojinbo.com

    show master status\G

    4)mdb1:

    change master to master_host=’192.168.5.12′,master_port=3306,master_user=’repl’,master_password=’gaojinbo’,master_log_file=’mysql-bin.000003′,master_log_pos=106;

    start slave;

    show slave status\G

    说明:mysql-bin.000003和106是主库配置第3)步记录的信息

    出现以下内容,说明同步ok

    Slave_IO_Running: Yes

    Slave_SQL_Running: Yes

    5)mdb2:

    change master to master_host=’192.168.5.11′,master_port=3306,master_user=’repl’,master_password=’gaojinbo’,master_log_file=’mysql-bin.000001′,master_log_pos=249;

    start slave;

    show slave status\G

    说明:mysql-bin.000001和249是主库配置第3)步记录的信息

    出现以下内容,说明同步ok

    Slave_IO_Running: Yes

    Slave_SQL_Running: Yes

    6)测试主-主同步

    mdb1:

    mysql -uroot -pgaojinbo.com

    show databases;

    create database gaojinbo;

    mdb2:

    mysql -uroot -pgaojinbo.com

    show databases;

    即可看到在mdb1上建立的数据库gaojinbo

    至此mdb1,mdb2主-主配置完成!

    5.4台从库配置

    sdb1-4配置(注:server-id不能相同):

    vi /etc/MySQL/my.cnf

    server-id               = 3

    log_bin                 = mysql-bin

    重启mysql

    /etc/init.d/mysql restart

    sdb1和sdb2配置成mdb1的从库:

    mysql -uroot -pgaojinbo.com

    change master to master_host=’192.168.5.11′,master_port=3306,master_user=’repl’,master_password=’gaojinbo’,master_log_file=’mysql-bin.000001′,master_log_pos=345;

    start slave;

    show slave status\G

    说明:mysql-bin.000001和345是主库配置第3)步记录的信息

    出现以下内容,说明同步ok

    Slave_IO_Running: Yes

    Slave_SQL_Running: Yes

    sdb3和sdb4配置成mdb2的从库:

    change master to master_host=’192.168.5.12′,master_port=3306,master_user=’repl’,master_password=’gaojinbo’,master_log_file=’mysql-bin.000003′,master_log_pos=106;

    start slave;

    show slave status\G

    说明:mysql-bin.000003和106是主库配置第3)步记录的信息

    出现以下内容,说明同步ok

    Slave_IO_Running: Yes

    Slave_SQL_Running: Yes

    测试:

    mdb1:

    mysql -uroot -pgaojinbo.com

    show databases;

    create database eossc;

    在其他DB上,这时会看到刚建立的数据库eossc

    至此4台从数据库配置完成!

    6.编写mysql检测脚本

    1)mdb1和mdb2:

    vi /etc/xinetd.d/mysqlchk

    #

    # /etc/xinetd.d/mysqlchk

    #

    service mysqlchk_write

    {

    flags           = REUSE

    socket_type     = stream

    port            = 9200

    wait            = no

    user            = nobody

    server          = /opt/mysqlchk_status.sh

    log_on_failure  += USERID

    disable         = no

    only_from       = 192.168.5.0/24 # recommended to put the IPs that need

    # to connect exclusively (security purposes)

    }

    service mysqlchk_replication

    {

    flags           = REUSE

    socket_type     = stream

    port            = 9201

    wait            = no

    user            = nobody

    server          = /opt/mysqlchk_replication.sh

    log_on_failure  += USERID

    disable         = no

    only_from       = 192.168.5.0/24 # recommended to put the IPs that need

    # to connect exclusively (security purposes)

    }

    添加服务端口

    vi /etc/services

    mysqlchk_write      9200/tcp                #mysqlchk_write

    mysqlchk_replication    9201/tcp                #mysqlchk_replication

    mdb1上操作:

    vi /opt/mysqlchk_status.sh

    #!/bin/bash

    MYSQL_HOST="192.168.5.11"

    MYSQL_PORT="3306"

    MYSQL_USERNAME="root"

    MYSQL_PASSWORD="gaojinbo.com"

    ERROR_MSG=`/usr/bin/mysql –host=$MYSQL_HOST –port=$MYSQL_PORT –user=$MYSQL_USERNAME –password=$MYSQL_PASSWORD -e "show databases;" 2>/dev/null`

    if [ "$ERROR_MSG" != "" ]

    then

    # mysql is fine, return http 200

    /bin/echo -e "HTTP/1.1 200 OK\r\n"

    /bin/echo -e "Content-Type: Content-Type: text/plain\r\n"

    /bin/echo -e "\r\n"

    /bin/echo -e "MySQL is running.\r\n"

    /bin/echo -e "\r\n"

    else

    # mysql is down, return http 503

    /bin/echo -e "HTTP/1.1 503 Service Unavailable\r\n"

    /bin/echo -e "Content-Type: Content-Type: text/plain\r\n"

    /bin/echo -e "\r\n"

    /bin/echo -e "MySQL is *down*.\r\n"

    /bin/echo -e "\r\n"

    fi

    vi /opt/mysqlchk_replication.sh

    #!/bin/bash

    MYSQL_HOST="192.168.5.11"

    MYSQL_PORT="3306"

    MYSQL_USERNAME="root"

    MYSQL_PASSWORD="gaojinbo.com"

    /usr/bin/mysql –host=$MYSQL_HOST –port=$MYSQL_PORT –user=$MYSQL_USERNAME –password=$MYSQL_PASSWORD -e "show slave status\G;" >/tmp/check_repl.txt

    iostat=`grep "Slave_IO_Running" /tmp/check_repl.txt |awk ‘{print $2}’ `

    sqlstat=`grep "Slave_SQL_Running" /tmp/check_repl.txt |awk ‘{print $2}’ `

    #echo iostat:$iostat and sqlstat:$sqlstat

    if [ "$iostat" = "No" ] || [ "$sqlstat" = "No" ];

    then

    # mysql is down, return http 503

    /bin/echo -e "HTTP/1.1 503 Service Unavailable\r\n"

    /bin/echo -e "Content-Type: Content-Type: text/plain\r\n"

    /bin/echo -e "\r\n"

    /bin/echo -e "MySQL replication  is *down*.\r\n"

    /bin/echo -e "\r\n"

    else

    # mysql is fine, return http 200

    /bin/echo -e "HTTP/1.1 200 OK\r\n"

    /bin/echo -e "Content-Type: Content-Type: text/plain\r\n"

    /bin/echo -e "\r\n"

    /bin/echo -e "MySQL replication is running.\r\n"

    /bin/echo -e "\r\n"

    fi

    测试同步检测脚本:

    mysql -uroot -pgaojinbo.com

    stop slave sql_thread; #或者  stop slave io_thread;

    /opt/mysqlchk_replication.sh

    mdb2上操作:

    添加和mdb1一样的脚本,把

    /opt/mysqlchk_status.sh        里面的192.168.5.11修改为192.168.5.12

    /opt/mysqlchk_replication.sh    里面的192.168.5.11修改为192.168.5.12

    2)sdb1,sdb2,sdb3,sdb4上操作:

    vi /etc/xinetd.d/mysqlchk

    #

    # /etc/xinetd.d/mysqlchk

    #

    service mysqlchk_replication

    {

    flags           = REUSE

    socket_type     = stream

    port            = 9201

    wait            = no

    user            = nobody

    server          = /opt/mysqlchk_replication.sh

    log_on_failure  += USERID

    disable         = no

    only_from       = 192.168.5.0/24 # recommended to put the IPs that need

    # to connect exclusively (security purposes)

    }

    vi /opt/mysqlchk_replication.sh

    #!/bin/bash

    MYSQL_HOST="192.168.5.21"

    MYSQL_PORT="3306"

    MYSQL_USERNAME="root"

    MYSQL_PASSWORD="gaojinbo.com"

    /usr/bin/mysql –host=$MYSQL_HOST –port=$MYSQL_PORT –user=$MYSQL_USERNAME –password=$MYSQL_PASSWORD -e "show slave status\G;" >/tmp/check_repl.txt

    iostat=`grep "Slave_IO_Running" /tmp/check_repl.txt |awk ‘{print $2}’ `

    sqlstat=`grep "Slave_SQL_Running" /tmp/check_repl.txt |awk ‘{print $2}’ `

    #echo iostat:$iostat and sqlstat:$sqlstat

    if [ "$iostat" = "No" ] || [ "$sqlstat" = "No" ];

    then

    # mysql is down, return http 503

    /bin/echo -e "HTTP/1.1 503 Service Unavailable\r\n"

    /bin/echo -e "Content-Type: Content-Type: text/plain\r\n"

    /bin/echo -e "\r\n"

    /bin/echo -e "MySQL replication  is *down*.\r\n"

    /bin/echo -e "\r\n"

    else

    # mysql is fine, return http 200

    /bin/echo -e "HTTP/1.1 200 OK\r\n"

    /bin/echo -e "Content-Type: Content-Type: text/plain\r\n"

    /bin/echo -e "\r\n"

    /bin/echo -e "MySQL replication is running.\r\n"

    /bin/echo -e "\r\n"

    fi

    注:脚本/opt/mysqlchk_replication.sh里面的ip

    sdb1    MYSQL_HOST="192.168.5.21"

    sdb2    MYSQL_HOST="192.168.5.22"

    sdb3    MYSQL_HOST="192.168.5.23"

    sdb4    MYSQL_HOST="192.168.5.24"

    添加服务端口

    vi /etc/services

    mysqlchk_replication    9201/tcp                #mysqlchk_replication

    3)所有DB上操作:

    增加检测脚本执行权限

    chmod +x /opt/mysql*.sh

    重启系统

    reboot

    查看监听端口

    netstat -antup|grep xinetd

    tcp        0      0 0.0.0.0:9200            0.0.0.0:*               LISTEN      903/xinetd

    tcp        0      0 0.0.0.0:9201            0.0.0.0:*               LISTEN      903/xinetd

    注:sdb只有9201监听

    7.haproxy安装配置

    下载编译安装:

    wget http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.11.tar.gz

    tar xvzf haproxy-1.4.11.tar.gz

    cd haproxy-1.4.11

    make TARGET=linux26 ARCH=x86_64

    make install

    配置

    vi /etc/haproxy.cfg

    global

    maxconn 40000

    debug

    #quiet

    user haproxy

    group haproxy

    nbproc 1

    log 127.0.0.1 local3

    spread-checks 2

    defaults

    timeout server  3s

    timeout connect 3s

    timeout client  60s

    timeout http-request 3s

    timeout queue   3s

    frontend db_write

    bind 192.168.5.10:3306

    default_backend cluster_db_write

    frontend db_read

    bind 192.168.5.20:3306

    default_backend cluster_db_read

    frontend web_haproxy_status

    bind :80

    default_backend web_status

    frontend monitor_mdb1

    bind 127.0.0.1:9301

    mode http

    acl no_repl_mdb1 nbsrv(mdb1_replication) eq 0

    acl no_repl_mdb2 nbsrv(mdb2_replication) eq 0

    acl no_mdb1 nbsrv(mdb1_status) eq 0

    acl no_mdb2 nbsrv(mdb2_status) eq 0

    monitor-uri /dbs

    monitor fail unless no_repl_mdb1 no_repl_mdb2 no_mdb2

    monitor fail if no_mdb1 no_mdb2

    frontend monitor_mdb2

    bind 127.0.0.1:9302

    mode http

    acl no_repl_mdb1 nbsrv(mdb1_replication) eq 0

    acl no_repl_mdb2 nbsrv(mdb2_replication) eq 0

    acl no_mdb1 nbsrv(mdb1_status) eq 0

    acl no_mdb2 nbsrv(mdb2_status) eq 0

    monitor-uri /dbs

    monitor fail unless no_repl_mdb1 no_repl_mdb2 no_mdb1

    monitor fail if no_mdb1 no_mdb2

    frontend monitor_sdb1

    bind 127.0.0.1:9303

    mode http

    acl no_repl_sdb1 nbsrv(sdb1_replication) eq 0

    acl no_repl_mdb1 nbsrv(mdb1_replication) eq 0

    acl no_mdb2 nbsrv(mdb2_status) eq 1

    monitor-uri /dbs

    monitor fail if no_repl_sdb1

    monitor fail if no_repl_mdb1 no_mdb2

    frontend monitor_sdb2

    bind 127.0.0.1:9304

    mode http

    acl no_repl_sdb2 nbsrv(sdb2_replication) eq 0

    acl no_repl_mdb1 nbsrv(mdb1_replication) eq 0

    acl no_mdb2 nbsrv(mdb2_status) eq 1

    monitor-uri /dbs

    monitor fail if no_repl_sdb2

    monitor fail if no_repl_mdb1 no_mdb2

    frontend monitor_sdb3

    bind 127.0.0.1:9305

    mode http

    acl no_repl_sdb3 nbsrv(sdb3_replication) eq 0

    acl no_repl_mdb2 nbsrv(mdb2_replication) eq 0

    acl no_mdb1 nbsrv(mdb1_status) eq 1

    monitor-uri /dbs

    monitor fail if no_repl_sdb3

    monitor fail if no_repl_mdb2 no_mdb1

    frontend monitor_sdb4

    bind 127.0.0.1:9306

    mode http

    acl no_repl_sdb4 nbsrv(sdb4_replication) eq 0

    acl no_repl_mdb2 nbsrv(mdb2_replication) eq 0

    acl no_mdb1 nbsrv(mdb1_status) eq 1

    monitor-uri /dbs

    monitor fail if no_repl_sdb4

    monitor fail if no_repl_mdb2 no_mdb1

    frontend monitor_splitbrain

    bind 127.0.0.1:9300

    mode http

    acl no_repl01 nbsrv(mdb1_replication) eq 0

    acl no_repl02 nbsrv(mdb2_replication) eq 0

    acl mdb1 nbsrv(mdb1_status) eq 1

    acl mdb2 nbsrv(mdb2_status) eq 1

    monitor-uri /dbs

    monitor fail unless no_repl01 no_repl02 mdb1 mdb2

    backend mdb1_replication

    mode tcp

    balance roundrobin

    option tcpka

    option httpchk

    server mdb1 192.168.5.11:3306 check port 9201 inter 1s rise 1 fall 1

    backend mdb2_replication

    mode tcp

    balance roundrobin

    option tcpka

    option httpchk

    server mdb2 192.168.5.12:3306 check port 9201 inter 1s rise 1 fall 1

    backend sdb1_replication

    mode tcp

    balance roundrobin

    option tcpka

    option httpchk

    server sdb1 192.168.5.21:3306 check port 9201 inter 1s rise 1 fall 1

    backend sdb2_replication

    mode tcp

    balance roundrobin

    option tcpka

    option httpchk

    server sdb2 192.168.5.22:3306 check port 9201 inter 1s rise 1 fall 1

    backend sdb3_replication

    mode tcp

    balance roundrobin

    option tcpka

    option httpchk

    server sdb3 192.168.5.23:3306 check port 9201 inter 1s rise 1 fall 1

    backend sdb4_replication

    mode tcp

    balance roundrobin

    option tcpka

    option httpchk

    server sdb4 192.168.5.24:3306 check port 9201 inter 1s rise 1 fall 1

    backend mdb1_status

    mode tcp

    balance roundrobin

    option tcpka

    option httpchk

    server mdb1 192.168.5.11:3306 check port 9200 inter 1s rise 2 fall 2

    backend mdb2_status

    mode tcp

    balance roundrobin

    option tcpka

    option httpchk

    server mdb2 192.168.5.12:3306 check port 9200 inter 1s rise 2 fall 2

    backend cluster_db_write

    mode    tcp

    option  tcpka

    balance roundrobin

    option  httpchk GET /dbs

    server  mdb1 192.168.5.11:3306 weight 1 check port 9201 inter 1s rise 5 fall 1

    server  mdb2 192.168.5.12:3306 weight 1 check port 9201 inter 1s rise 5 fall 1 backup

    server  mdb1_backup 192.168.5.11:3306 weight 1 check port 9301 inter 1s rise 2 fall 2 addr 127.0.0.1 backup

    server  mdb2_backup 192.168.5.12:3306 weight 1 check port 9302 inter 1s rise 2 fall 2 addr 127.0.0.1 backup

    backend cluster_db_read

    mode    tcp

    option  tcpka

    balance roundrobin

    option  httpchk GET /dbs

    server  mdb1 192.168.5.11:3306 weight 1 track cluster_db_write/mdb1

    server  mdb2 192.168.5.12:3306 weight 1 track cluster_db_write/mdb2

    server  mdb1_backup 192.168.5.11:3306 weight 1 track cluster_db_write/mdb1_backup

    server  mdb2_backup 192.168.5.12:3306 weight 1 track cluster_db_write/mdb2_backup

    server  mdb1_splitbrain 192.168.5.11:3306 weight 1 check port 9300 inter 1s rise 1 fall 2 addr 127.0.0.1

    server  mdb2_splitbrain 192.168.5.12:3306 weight 1 check port 9300 inter 1s rise 1 fall 2 addr 127.0.0.1

    server  sdb1_slave 192.168.5.21:3306 weight 1 check port 9303 inter 1s rise 5 fall 1 addr 127.0.0.1

    server  sdb2_slave 192.168.5.22:3306 weight 1 check port 9304 inter 1s rise 5 fall 1 addr 127.0.0.1

    server  sdb3_slave 192.168.5.23:3306 weight 1 check port 9305 inter 1s rise 5 fall 1 addr 127.0.0.1

    server  sdb4_slave 192.168.5.24:3306 weight 1 check port 9306 inter 1s rise 5 fall 1 addr 127.0.0.1

    backend  web_status

    mode http

    stats enable

    # stats scope

    # stats hide-version

    stats refresh 5s

    stats uri /status

    stats realm Haproxy\ statistics

    stats auth ylmf:gaojinbo

    8.测试

    1)正常情况,backup和splitbrain状态down

    attachment.php?fid=655

    2)停止mdb2复制,mdb2和sdb3,sdb4状态down,数据库仍可读写

    attachment.php?fid=656

    3)同时停止mdb1,mdb2复制,mdb1和sdb1,sdb2,sdb3,sdb4状态down,数据库只能读

    attachment.php?fid=657

    4)关闭mdb1数据库,mdb1,mdb2和sdb1,sdb2状态down,数据库仍可读写

    attachment.php?fid=658

    5)关闭mdb2数据库,mdb1,mdb2和sdb3,sdb4状态down,数据库仍可读写

    attachment.php?fid=659

    展开全文
  • lvs-dr实现mysql负载均衡集群环境说明:服务器的操作系统均为centos7,vip和rip在同一网段,使用lvs-dr模型来实现mysql集群服务所有服务器均已配置好处VIP外的静态IP两台mysql服务器的主机名分别是node1和node2,且已...
  • mysql负载均衡完美解决方案V1.01.环境:mysql 5ubuntu10.04 x86_64mdb1 eth0 192.168.5.11mdb2 eth0 192.168.5.12sdb1 eth0 192.168.5.21sdb2 eth0 192.168.5.22sdb3 eth0 192...
  • MySQL负载均衡

    2021-02-05 22:32:31
    1. 添加监控MySQL状态的端口# vi /etc/servicesmysqlcheck 6033/tcp # MySQL status check2. 使用xinetd守护进程运行MySQL状态检测# cat /etc/xinetd.d/mysqlchkservice mysqlcheck{disable = noflag...
  • 基于2台服务器的MySQL集群。并且实现任意一台服务器出现问题或宕机时MySQL依然能够继续运行。注意:尽管理论上可以建立基于只有2基于2台服务器的MySQL集群。并且实现任意一台服务器出现问题或宕机时MySQL依然能够...
  • # LVS 产生背景把单台计算机无法承受的大规模的并发访问或数据流量分担到多台节点设备上分别处理,为减少用户等待响应的时间,提升用户体验。...在负载均衡集群中,所有计算机节点都应该提供相同的服务(非必须),集...
  • 以上blog己经实现了mysql的主从,本文在主从的基础上用amoeba-mysql实现负载均衡,读写分离.amoeba:采用java NTO框架无阻塞模式;amoeba for mysql是amoeba项目的子项目;1、amoeba要有java环境支持:安装jdk...
  • MySQL作为中小型办公室都会选择的数据库系统,在安装前工作人员需要知道mysql安装前所必需的环境,今天跟大家分享下mysql负载均衡问题。本文将介绍MySQL负载均衡问题,包括环境介绍,操作系统和软件安装和配置...
  • mysql构建主从结构,mysql读写分离一、修改mysql配置二、配置mysql主从连接1. 主mysql数据库操作2. 主mysql数据库操作三、出现的一些问题1. 重启主库后,从库数据不跟着同步了。2. 无法连接主库。3. 遇到其他不明...
  • 摘要:使用rhel5.8,mysql,keepalived,haproxy 搭建一个集高可用、负载均衡的集群; 也有使用到 mysql 的二进制复制来保持数据一致性; 避免了单节点故障,也提供设备的利用率; 虽然这个实验只有两台设备,但可以此...
  • haproxy做mysql负载均衡

    2021-11-07 13:59:29
    log 127.0.0.1 local0 err ########统计页面配置######## listen test1 #这里是配置负载均衡,test1是名字,可以任意 bind 0.0.0.0:9000 #这里是监听的IP地址和端口,端口号可以在0-65535之间,要避>免端口冲突 mode...
  • haproxy实战之haproxy实现mysql负载均衡实验目的haproxy + mysql实现负载均衡1.准备机器,做好时间同步,域名主机名解析192.168.42.151 [node2 haproxy]192.168.42.152 [node3 mariadb]192.168.42.153 [node4 mariadb]...
  • HAProxy 是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于 TCP 和 HTTP 的应用程序代理。 HAProxy 特别适用于那些负载特大的 web 站点,这些站点通常又需要会话保持或七层处理。 ...
  • nbsp数据库MySQL数据库集群+负载均衡(LVS).doc135页本文档一共被下载:次,您可全文免费在线阅读后下载本文档。 下载提示1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予...
  • 之前写过了MySQL的简单MHA环境搭建,但是mha只是保证数据库一致性,对于实现应用访问的固定入口、读写分离、负载均衡需要keepalived、中间件、lvs来解决了。本次搭建使用四台虚拟机,如下manger:192.168.1.10db1 ...
  • 转自:http://www.gaojinbo.com/mysql多主同步-负载均衡.html读到本文前总以为id重复需要修改程序才能解决,原来mysql本身为我们提供了这个功能,自己太小白了!!!解决多台写服务器主自增长ID重复问题,值得参考,...
  • Amoeba简介:amoeba是一个以...基于此可以实现负载均衡、读写分离、高可用性等需求。与MySQL官方的MySQL Proxy相比,作者强调的是amoeba配置的方便(基于XML的配置文件,用SQLJEP语法书写规则,比基于lua脚本的MyS...
  • 在上HAProxy的前面的文章中 ,我们配置的负载均衡HTTP和在这其中,我们会为MySQL这样做。 你所有的MySQL服务器必须被配置为执行主-主复制负载平衡涉及的读取和写入到所有的后端。本文将使用以下三个Droplet:Droplet...
  • LVS+Keepalive实现Apache与MySQL负载均衡跟读写分离主机 iprouter 192.168.10.254 192.168.24.254web分发器 192.168.24.1mysql分发器 192.168.24.2web服务器1 ...
  • 3、负载均衡 activemq 能够实现多个 mq 之间进行路由,假设有两个 mq,分别为 brokerA 和 brokerB,当一条消息发送到 brokerA 的队列 test 中,有一个消费者连上了 brokerB,而且想要获取 test 队列,brokerA 中的 ...
  • MySQL想必大家都不陌生,之前文章也有介绍同步复制与半同步复制,今天先来了解下什么是GTID。GTID(global transaction ID)全局事务ID,是由服务器的UUID+一段随机数事务ID。特性:从服务器从主服务器复制过来的事务...
  • MySQL5.6基于GTID同步复制,与如何实现MySQL负载均衡、读写分离本文将详细介绍如何实现MySQL负载均衡、读写分离!2014/08/23MySQL想必大家都不陌生,之前文章也有介绍同步复制与半同步复制,今天先来了解下什么是...
  • LVS+Mysql集群负载均衡

    2021-01-19 01:35:05
    一、IP信息列表: 名称 IP LVS-DR-VIP 192.168.50.245 LVS-DR-Master 192.168.50.216 LVS-DR-BACKUP 192.168.50.217 MySQL1-Realserver 192.168.50.212 MySQL2-Realserver 192.168.50.213 GateWay 192.168.50.254 ...
  • lvs-dr实现mysql负载均衡集群环境说明:服务器的操作系统均为centos7,vip和rip在同一网段,使用lvs-dr模型来实现mysql集群服务所有服务器均已配置好处VIP外的静态IP两台mysql服务器的主机名分别是node1和node2,且已...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 114,742
精华内容 45,896
关键字:

mysql负载均衡

mysql 订阅