想要学会MyCat高可用集群搭建,但是这些知识点却还玩不明白?

目录

  • 一、集群架构
    • 1.MyCat实现读写分离架构
    • 2.MyCat集群架构
    • 3.MyCat的高可用集群
  • 二、高可用集群搭建
    • 1.部署环境规划
    • 2.MySQL主从复制搭建
      • A.master
      • B.slave
      • C.测试验证
    • 3.MyCat安装配置
      • A.schema.xml
      • B.server.xml
    • 4.HAProxy安装配置
      • A.安装
      • B.启动访问
    • 5.Keepalived安装配置
      • A.安装配置
      • B.启动测试

一、集群架构

1.MyCat实现读写分离架构

在我前面的文章, 我已经讲解过了通过MyCat来实现MySQL的读写分离, 从而完成MySQL集群的负载均衡 , 如下面的结构图:
想要学会MyCat高可用集群搭建,但是这些知识点却还玩不明白?_第1张图片
但是以上架构存在问题 , 由于MyCat中间件是单节点的服务, 前端客户端所有的压力过来都直接请求这一台MyCat , 存在单点故障。所以这个时候, 我们就需要考虑MyCat的集群 ;

2.MyCat集群架构

通过MyCat来实现后端MySQL的负载均衡 , 通过HAProxy再实现MyCat集群的负载均衡 ;
想要学会MyCat高可用集群搭建,但是这些知识点却还玩不明白?_第2张图片
HAProxy 负责将请求分发到 MyCat 上,起到负载均衡的作用,同时 HAProxy 也能检测到 MyCat是否存活,HAProxy 只会将请求转发到存活的 MyCat 上。如果一台 MyCat 服务器宕机,HAPorxy 转发请求时不会转发到宕机的 MyCat 上,所以 MyCat 依然可用。

HAProxy介绍:

HAProxy 是一个开源的、高性能的基于TCP(第四层)和HTTP(第七层)应用的负载均衡软件。 使用 HAProxy可以快速、可靠地实现基于TCP与HTTP应用的负载均衡解决方案。

具有以下优点:

  1. 可靠性和稳定性好, 可以与硬件级的F5负载均衡服务器媲美 ;
  2. 处理能力强, 最高可以通过维护4w-5w个并发连接, 单位时间处理的最大请求数达到2w个 ;
  3. 支持多种负载均衡算法 ;
  4. 有功能强大的监控界面, 通过此页面可以实时了解系统的运行情况 ;

但是, 上述的架构也是存在问题的, 因为所以的客户端请求都是先到达HAProxy, 由HAProxy再将请求再向下分发, 如果HAProxy宕机的话, 就会造成整个MyCat集群不能正常运行, 依然存在单点故障。

3.MyCat的高可用集群

想要学会MyCat高可用集群搭建,但是这些知识点却还玩不明白?_第3张图片
图解说明:

  1. HAProxy 实现了 MyCat 多节点的集群高可用和负载均衡,而 HAProxy 自身的高可用则可以通过Keepalived 来实现。因此,HAProxy 主机上要同时安装 HAProxyKeepalivedKeepalived 负责为该服务器抢占 vip(虚拟 ip),抢占到 vip 后,对该主机的访问可以通过原来的 ip访问,也可以直接通过 vip访问。
  2. Keepalived 抢占 vip 有优先级,在 keepalived.conf 配置中的 priority 属性决定。但是一般哪台主机上的Keepalived服务先启动就会抢占到vip,即使是slave,只要先启动也能抢到(要注意避免Keepalived的资源抢占问题)。
  3. HAProxy 负责将对 vip 的请求分发到 MyCat 集群节点上,起到负载均衡的作用。同时 HAProxy 也能检测到 MyCat 是否存活,HAProxy 只会将请求转发到存活的 MyCat 上。
  4. 如果 Keepalived+HAProxy 高可用集群中的一台服务器宕机,集群中另外一台服务器上的 Keepalived 会立刻抢占 vip 并接管服务,此时抢占了 vip 的 HAProxy 节点可以继续提供服务。
  5. 如果一台 MyCat 服务器宕机,HAPorxy 转发请求时不会转发到宕机的 MyCat 上,所以 MyCat 依然可用。

综上:MyCat高可用及负载均衡HAProxy 来实现,而 HAProxy高可用,由 Keepalived 来实现。

keepalived介绍:

Keepalived是一种基于VRRP协议来实现的高可用方案,可以利用其来避免单点故障。 通常有两台甚至多台服务器运行Keepalived,一台为主服务器(Master), 其他为备份服务器, 但是对外表现为一个虚拟IP(VIP), 主服务器会发送特定的消息给备份服务器, 当备份服务器接收不到这个消息时, 即认为主服务器宕机, 备份服务器就会接管虚拟IP, 继续提供服务, 从而保证了整个集群的高可用。VRRP(虚拟路由冗余协议-Virtual Router Redundancy Protocol)协议是用于实现路由器冗余的协议,VRRP 协议将两台或多台路由器设备虚拟成一个设备,对外提供虚拟路由器 IP(一个或多个),而在路由器组内部,如果实际拥有这个对外 IP 的路由器如果工作正常的话就是 MASTER,或者是通过算法选举产生。MASTER 实现针对虚拟路由器 IP 的各种网络功能,如 ARP 请求ICMP,以及数据的转发等;其他设备不拥有该虚拟 IP,状态是 BACKUP,除了接收 MASTERVRRP 状态通告信息外,不执行对外的网络功能。当主机失效时,BACKUP 将接管原先 MASTER 的网络功能。VRRP 协议使用多播数据来传输 VRRP 数据VRRP 数据使用特殊的虚拟源 MAC 地址发送数据而不是自身网卡的 MAC 地址VRRP 运行时只有 MASTER 路由器定时发送 VRRP 通告信息,表示 MASTER 工作正常以及虚拟路由器 IP(组),BACKUP 只接收 VRRP 数据,不发送数据,如果一定时间内没有接收到 MASTER 的通告信息,各 BACKUP 将宣告自己成为 MASTER,发送通告信息,重新进行 MASTER 选举状态。


参考资料:《开源数据库中间件MyCat实战笔记》
想要快速获取资料的同学:请添加助理VX:C18173184271,备注一下CSDN+工作年限!免费获取
不要再犹犹豫豫了,不然就要错过金三银四春招了!

二、高可用集群搭建

1.部署环境规划

想要学会MyCat高可用集群搭建,但是这些知识点却还玩不明白?_第4张图片
想要学会MyCat高可用集群搭建,但是这些知识点却还玩不明白?_第5张图片

2.MySQL主从复制搭建

A.master

  1. 在master 的配置文件(/usr/my.cnf)中,配置如下内容:
#mysql 服务ID,保证整个集群环境中唯一 
server-id=1 
#mysql binlog 日志的存储路径和文件名 
log-bin=/var/lib/mysql/mysqlbin 
#设置logbin格式 
binlog_format=STATEMENT 
#是否只读,1 代表只读, 0 代表读写 
read-only=0 
#指定同步的数据库 
binlog-do-db=db01 
binlog-do-db=db02 
binlog-do-db=db03
  1. 执行完毕之后,需要重启Mysql:
service mysql restart ;
  1. 创建同步数据的账户,并且进行授权操作:
grant replication slave on *.* to 'itcast'@'%' identified by 'itcast'; 

flush privileges;
  1. 查看master状态:
show master status;

想要学会MyCat高可用集群搭建,但是这些知识点却还玩不明白?_第6张图片
字段含义:

File : 从哪个日志文件开始推送日志文件 
Position : 从哪个位置开始推送日志 
Binlog_Do_DB : 指定需要同步的数据库

B.slave

  1. 在 slave 端配置文件中,配置如下内容:
#mysql服务端ID,唯一 
server-id=2 
#指定binlog日志 
log-bin=/var/lib/mysql/mysqlbin 
#启用中继日志 
relay-log=mysql-relay
  1. 执行完毕之后,需要重启Mysql:
service mysql restart;
  1. 执行如下指令 :
change master to master_host= '192.168.192.157', master_user='itcast', master_password='itcast', master_log_file='mysqlbin.000002', master_log_pos=120;

指定当前从库对应的主库的IP地址用户名密码从哪个日志文件开始的那个位置开始同步推送日志

  1. 开启同步操作
start slave; 
show slave status;

想要学会MyCat高可用集群搭建,但是这些知识点却还玩不明白?_第7张图片

  1. 停止同步操作
stop slave;

C.测试验证

create database db01; 

user db01; 

create table user( 
	id int(11) not null auto_increment, 
	name varchar(50) not null, 
	sex varchar(1), 
	primary key (id) 
)engine=innodb default charset=utf8; 

insert into user(id,name,sex) values(null,'Tom','1'); 
insert into user(id,name,sex) values(null,'Trigger','0'); 
insert into user(id,name,sex) values(null,'Dawn','1');

3.MyCat安装配置

A.schema.xml

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd"> 
<mycat:schema xmlns:mycat="http://io.mycat/"> 
	<schema name="ITCAST" checkSQLschema="true" sqlMaxLimit="100"> 
		<table name="user" dataNode="dn1" primaryKey="id"/> 
	</schema> 
	<dataNode name="dn1" dataHost="localhost1" database="db01" /> 
	<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> 
		<heartbeat>select user()</heartbeat> 
		<writeHost host="hostM1" url="192.168.192.157:3306" user="root" password="itcast"> 
			<readHost host="hostS1" url="192.168.192.158:3306" user="root" password="itcast" /> 
		</writeHost> 
	</dataHost> 
</mycat:schema>

B.server.xml

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

<user name="test"> 
	<property name="password">123456</property> 
	<property name="schemas">ITCAST</property> 
</user>

两台MyCat服务, 做相同的配置 ;

4.HAProxy安装配置

A.安装

  1. 准备好HAProxy安装包,传到/root目录下
haproxy-1.5.16.tar.gz
  1. 解压到/usr/local/src目录下
tar -zxvf haproxy-1.5.16.tar.gz -C /usr/local/src
  1. 进入解压后的目录,查看内核版本,进行编译
cd /usr/local/src/haproxy-1.5.16 
uname -r 
make TARGET=linux2632 PREFIX=/usr/local/haproxy ARCH=x86_64 

# TARGET=linux310,内核版本,使用uname -r查看内核,如:2.6.32-431.el6.x86_64,此时该参数就为linux2632; 
# ARCH=x86_64,系统位数; 
# PREFIX=/usr/local/haprpxy #/usr/local/haprpxy,为haprpxy安装路径。
  1. 编译完成后,进行安装
make install PREFIX=/usr/local/haproxy
  1. 安装完成后,创建目录
mkdir -p /usr/data/haproxy/
  1. 创建HAProxy配置文件

vim /usr/local/haproxy/haproxy.conf

global
	log 127.0.0.1 local0 
	maxconn 4096 
	chroot /usr/local/haproxy 
	pidfile /usr/data/haproxy/haproxy.pid
	uid 99 
	gid 99 
	daemon 
	node mysql-haproxy-01 
	description mysql-haproxy-01 
defaults 
	log global 
	mode tcp 
	option abortonclose 
	option redispatch 
	retries 3 
	maxconn 2000 
	timeout connect 50000ms 
	timeout client 50000ms 
	timeout server 50000ms 
listen proxy_status 
	bind 0.0.0.0:48066 
		mode tcp 
		balance roundrobin 
		server mycat_1 192.168.192.157:8066 check 
		server mycat_2 192.168.192.158:8066 check 
frontend admin_stats 
	bind 0.0.0.0:8888 
		mode http 
		stats enable 
		option httplog 
		maxconn 10 
		stats refresh 30s 
		stats uri /admin 
		stats auth admin:123123 
		stats hide-version 
		stats admin if TRUE

内容解析如下 :

#global 配置中的参数为进程级别的参数,通常与其运行的操作系统有关
global
	#定义全局的syslog服务器, 最多可定义2; local0 是日志设备, 对应于/etc/rsyslog.conf中 的配置 , 默认收集info级别日志 
	log 127.0.0.1 local0 
	#log 127.0.0.1 local1 notice 
	#log loghost local0 info 
	#设定每个haproxy进程所接受的最大并发连接数 ; 
	maxconn 4096 
	#修改HAproxy工作目录至指定的目录并在放弃权限之前执行chroot操作, 可以提升haproxy的安全级别 
	chroot /usr/local/haproxy 
	#进程ID保存文件 
	pidfile /usr/data/haproxy/haproxy.pid 
	#指定用户ID 
	uid 99 
	#指定组ID 
	gid 99 
	#设置HAproxy以守护进程方式运行 
	daemon 
	#debug 
	#quiet 
	node mysql-haproxy-01 ## 定义当前节点的名称,用于 HA 场景中多 haproxy 进程共享同一 个 IP 地址时 
	description mysql-haproxy-01 ## 当前实例的描述信息 

#defaults:用于为所有其他配置段提供默认参数,这默认配置参数可由下一个"defaults"所重新设定 
defaults 
	#继承global中的log定义 
	log global 
	#所使用的处理模式(tcp:四层 , http:七层, health:状态检查,只返回OK) 
	### tcp: 实例运行于纯 tcp 模式,在客户端和服务器端之间将建立一个全双工的连接,且不会对 7 层报文做任何类型的检查,此为默认模式 
	### http:实例运行于 http 模式,客户端请求在转发至后端服务器之前将被深度分析,所有不与 RFC 模式兼容的请求都会被拒绝 
	### health:实例运行于 health 模式,其对入站请求仅响应“OK”信息并关闭连接,且不会记录任 何日志信息 ,此模式将用于相应外部组件的监控状态检测请求 
	mode tcp
	#当服务器负载很高的时候,自动结束掉当前队列处理时间比较长的连接 
	option abortonclose 
	
	#当使用了cookie时,haproxy将会将请求的后端服务器的serverID插入到cookie中,以保证会话的 session持久性,而此时,后端服务器宕机,但是客户端的cookie不会刷新,设置此参数,将会将客户请求 强制定向到另外一个后端server上,以保证服务的正常。 
	option redispatch 
	retries 3 
	# 前端的最大并发连接数(默认为 2000) 
	maxconn 2000 
	# 连接超时(默认是毫秒,单位可以设置 us,ms,s,m,h,d) 
	timeout connect 5000 
	# 客户端超时时间 
	timeout client 50000 
	# 服务器超时时间 
	timeout server 50000 

#listen: 用于定义通过关联“前端”和“后端”一个完整的代理,通常只对 TCP 流量有用 
listen proxy_status 
	bind 0.0.0.0:48066 # 绑定端口 
		mode tcp 
		balance roundrobin # 定义负载均衡算法,可用于"defaults""listen""backend",默认为轮询 
		#格式: server <name> <address> [:[port]] [param*] 
		# weight : 权重,默认为 1,最大值为 2560 表示不参与负载均衡 
		# backup : 设定为备用服务器,仅在负载均衡场景中的其他 server 均不可以启用此 server 
		# check : 启动对此 server 执行监控状态检查,其可以借助于额外的其他参数完成更精细的设定 
		# inter : 设定监控状态检查的时间间隔,单位为毫秒,默认为 2000,也可以使用 fastinter 和 downinter 来根据服务器端专题优化此事件延迟 
		# rise : 设置 server 从离线状态转换至正常状态需要检查的次数(不设置的情况下,默认值为 2) 
		# fall : 设置 server 从正常状态转换至离线状态需要检查的次数(不设置的情况下,默认值为 3) 
		# cookie : 为指定 server 设定 cookie 值,此处指定的值将会在请求入站时被检查,第一次为此值挑选的 server 将会被后续的请求所选中,其目的在于实现持久连接的功能
		# maxconn: 指定此服务器接受的最大并发连接数,如果发往此服务器的连接数目高于此处指定的值,其将被放置于请求队列,以等待其他连接被释放 
		server mycat_1 192.168.192.157:8066 check inter 10s 
		server mycat_2 192.168.192.158:8066 check inter 10s 

# 用来匹配接收客户所请求的域名,uri等,并针对不同的匹配,做不同的请求处理 
# HAProxy 的状态信息统计页面 
frontend admin_stats 
	bind 0.0.0.0:8888 
		mode http 
		stats enable 
		option httplog 
		maxconn 10 
		stats refresh 30s 
		stats uri /admin 
		stats auth admin:123123 
		stats hide-version 
		stats admin if TRUE

HAProxy的负载均衡策略:
想要学会MyCat高可用集群搭建,但是这些知识点却还玩不明白?_第8张图片

B.启动访问

  1. 启动HAProxy
/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.conf
  1. 查看HAProxy进程
ps -ef|grep haproxy
  1. 访问

http://192.168.192.162:8888/admin

界面:
想要学会MyCat高可用集群搭建,但是这些知识点却还玩不明白?_第9张图片

5.Keepalived安装配置

想要学会MyCat高可用集群搭建,但是这些知识点却还玩不明白?_第10张图片

A.安装配置

  1. 上传安装包到Linux
alt + p --------> put D:/tmp/keepalived-1.4.5.tar.gz
  1. 解压安装包到目录 /usr/local/src
tar -zxvf keepalived-1.4.5.tar.gz -C /usr/local/src
  1. 安装依赖插件
yum install -y gcc openssl-devel popt-devel
  1. 进入解压后的目录,进行配置,进行编译
cd /usr/local/src/keepalived-1.4.5 

./configure --prefix=/usr/local/keepalived
  1. 进行编译,完成后进行安装
make && make install
  1. 运行前配置
cp /usr/local/src/keepalived-1.4.5/keepalived/etc/init.d/keepalived /etc/init.d/ 
mkdir /etc/keepalived 
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/ 
cp /usr/local/src/keepalived-1.4.5/keepalived/etc/sysconfig/keepalived /etc/sysconfig/ 
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
  1. 修改配置文件 /etc/keepalived/keepalived.conf

Master:

global_defs {
      
	notification_email {
      
		javadct@163.com 
	}
	notification_email_from keepalived@showjoy.com 
	smtp_server 127.0.0.1 
	smtp_connect_timeout 30 
	router_id haproxy01 
	vrrp_skip_check_adv_addr 
	vrrp_garp_interval 0 
	vrrp_gna_interval 0 
}

vrrp_script chk_haproxy {
      
	script "/etc/keepalived/haproxy_check.sh"
	interval 2 
	weight 2 
}

vrrp_instance VI_1 {
      
	#主机配MASTER,备机配BACKUP 
	state MASTER 
	#所在机器网卡 
	interface eth1 
	virtual_router_id 51 
	#数值越大优先级越高 
	priority 120 
	advert_int 1 
	authentication {
      
		auth_type PASS 
		auth_pass 1111 
	}
	## 将 track_script 块加入 instance 配置块 
	track_script {
      
		chk_haproxy ## 检查 HAProxy 服务是否存活 
	}
	virtual_ipaddress {
      
		#虚拟IP 
		192.168.192.200 
	} 
}

BackUP:

global_defs {
      
	notification_email {
      
		javadct@163.com 
	}
	notification_email_from keepalived@showjoy.com 
	smtp_server 127.0.0.1 
	smtp_connect_timeout 30
	#标识本节点 
	router_id haproxy02 
	vrrp_skip_check_adv_addr 
	vrrp_garp_interval 0 
	vrrp_gna_interval 0 
}

# keepalived 会定时执行脚本并对脚本执行的结果进行分析,动态调整 vrrp_instance 的优先级 
vrrp_script chk_haproxy {
      
	# 检测 haproxy 状态的脚本路径 
	script "/etc/keepalived/haproxy_check.sh" 
	#检测时间间隔 
	interval 2 
	#如果条件成立,权重+2 
	weight 2 
}

vrrp_instance VI_1 {
      
	#主机配MASTER,备机配BACKUP 
	state BACKUP 
	#所在机器网卡 
	interface eth1 
	virtual_router_id 51 
	#数值越大优先级越高 
	priority 100 
	advert_int 1 
	authentication {
      
		auth_type PASS auth_pass 1111 
	}
	## 将 track_script 块加入 instance 配置块 
	track_script {
      
		chk_haproxy ## 检查 HAProxy 服务是否存活 
	}
	virtual_ipaddress {
      
		#虚拟IP 
		192.168.192.200
	} 
}
  1. 编写检测haproxyshell脚本 haproxy_check.sh
#!/bin/bash 

A=`ps -C haproxy --no-header | wc -l` 

if [ $A -eq 0 ];then 

	/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.conf 
	
	echo "haproxy restart ..." &> /dev/null 
	
	sleep 1 
	
	if [ `ps -C haproxy --no-header | wc -l` -eq 0 ];then 
	
		/etc/init.d/keepalived stop 
		
		echo "stop keepalived" &> /dev/null 
		
	fi 

fi

B.启动测试

  1. 启动Keepalived
service keepalived start
  1. 登录验证
mysql -uroot -p123456 -h 192.168.192.200 -P 48066

想要学会MyCat高可用集群搭建,但是这些知识点却还玩不明白?_第11张图片


如果你需要这份完整版的《开源数据库中间件MyCat实战笔记》,只需你多多支持我这篇文章。

多多支持,即可免费获取资料——三连之后(承诺:100%免费)

快速入手通道:添加助理VX:C18173184271,备注一下CSDN+工作年限! 免费获取!诚意满满!!!

你可能感兴趣的:(java,数据库,分布式,中间件,nginx)