HAProxy负载均衡mycat集群

测试环境
mysql-master1 : 192.168.130.128:3306
mysql-slave1:192.168.130.128:3307

mysql-master2 : 192.168.130.128:3308
mysql-slave2:192.168.130.128:3309

db:my_test
table:user

create table user(id int primary key,name varchar(20),age int,email varchar(20))ENGINE=InnoDB,CHARSET=utf8;

mycat配置
server.xml
配置了mycat 用户名密码

<user name="root" defaultAccount="true">
	 <property name="password">123456</property>
	 <property name="schemas">my_test</property>
</user>

schema.xml

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
        <schema name="my_test" checkSQLschema="false" sqlMaxLimit="100">
                <table name="user" primaryKey="id"  dataNode="dn$1-2" rule="rule1" />
        </schema>
        <dataNode name="dn1" dataHost="dhost1" database="my_test" />
        <dataNode name="dn2" dataHost="dhost2" database="my_test" />
        <dataHost name="dhost1" maxCon="1000" minCon="10" balance="3"
                          writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <writeHost host="hostM1" url="192.168.130.128:3306" user="root" password="qwe123">
                        <readHost host="hostS2" url="192.168.130.128:3307" user="root" password="qwe123" />
                </writeHost>
        </dataHost>
        <dataHost name="dhost2" maxCon="1000" minCon="10" balance="3"
                          writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <writeHost host="hostM2" url="192.168.130.128:3308" user="root" password="qwe123">
                        <readHost host="hostS2" url="192.168.130.128:3309" user="root" password="qwe123" />
                </writeHost>
        </dataHost>
</mycat:schema>

rule.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:rule SYSTEM "rule.dtd">
<mycat:rule xmlns:mycat="http://io.mycat/">
        <tableRule name="rule1">
                <rule>
                        <columns>id</columns>
                        <algorithm>mod-fun</algorithm>
                </rule>
        </tableRule>
        <function name="mod-fun" class="io.mycat.route.function.PartitionByMod">
                <property name="count">2</property>
        </function>
</mycat:rule>

mycat做了数据库的代理,在高并发的情况下,必然也会面临单节点性能问题,所以需要部署多个mycat节点。

搭建伪多节点mycat

cp mycat mycat2 -R
cd mycat2/conf/

设置jmx端口

vim wrapper.conf 

wrapper.conf

wrapper.java.additional.6=-Dcom.sun.management.jmxremote.port=1985

设置服务端口以及管理端口

vim server.xml 

server.xml

<property name="serverPort">8067</property> 
<property name="managerPort">9067</property>

启动服务

mycat/bin/mycat start
mycat2/bin/mycat start

多节点的mycat搭建完成。

负载均衡

虽然对mycat做了集群,保障了mycat的可靠性,但是,应用程序需要连接到多个mycat,显然不是很友好的,也就是说缺少负载均衡的组件,接下来我们使用HAProxy做负载均衡。

简介

HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。

HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。

HAProxy实现了一种事件驱动, 单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户空间(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以 使每个CPU时间片(Cycle)做更多的工作。

部署安装HAProxy
#拉取镜像 
docker pull haproxy:1.9.3
#创建目录,用于存放配置文件 
mkdir /data/haproxy
#创建容器 
docker create --name haproxy --privileged=true --net host -v /data/haproxy:/usr/local/etc/haproxy haproxy:1.9.3

编写配置文件:

vim /data/haproxy/haproxy.cfg

haproxy.cfg

global    
	log         127.0.0.1 local2    
	maxconn     4000    
	daemon
	
defaults    
	mode                    http    
	log                     global    
	option                  httplog    
	option                  dontlognull    
	option http-server-close    
	option forwardfor       except 127.0.0.0/8    
	option                  redispatch    
	retries                 3    
	timeout http-request    10s    
	timeout queue           1m    
	timeout connect         10s    
	timeout client          1m    
	timeout server          1m    
	timeout http-keep-alive 10s    
	timeout check           10s    
	maxconn                 3000
	
listen   admin_stats    
	bind    0.0.0.0:4001    
	mode  http    
	stats uri       /dbs    
	stats realm  Global\ statistics    
	stats auth    admin:admin
	
listen   proxy-mysql    
	bind    0.0.0.0:4002    
	mode  tcp    
	balance  roundrobin
	option   tcplog    
	#代理mycat服务    
	server   mycat_1  192.168.130.128:8066  check  port  8066  maxconn  2000    
	server   mycat_2  192.168.130.128:8067  check  port  8067  maxconn  2000

启动容器:

#启动容器 
docker start haproxy 

通过web界面进行测试:http://192.168.130.128:4001/dbs
此处的用户名和密码为我们配置的用户名和密码 admin:admin
在这里插入图片描述
mycat集群运行正常
在这里插入图片描述

通过mysql客户端进行测试:

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值