defaults是什么意思啊,defaults是什么

  

  在我前面的一、集群架构's文章中,我已经解释过1.MyCat实现读写分离架构,如下图3360所示的结构。   

  

     

  

  但是,上述架构存在问题。因为MyCat中间件是单节点服务,所有来自前端客户端的压力都是直接请求这个MyCat,存在单点故障。所以这个时候就需要考虑MyCat的集群了;   

  

  通过MyCat来实现MySQL的读写分离, 从而完成MySQL集群的负载均衡2.MyCat集群架构,的MyCat实现,后端MySQL的负载均衡由HAProxy实现;   

  

     

  

  HAProxy负责将请求分发给MyCat,MyCat同时充当MyCat集群的负载均衡.HAProxy还可以检测MyCat是否活着,HAProxy只会将请求转发给存活的MyCat。如果MyCat服务器关闭,HAPorxy不会将请求转发给关闭的MyCat,因此MyCat仍然可用。   

  

  负载均衡   

  

  HAProxy介绍:   

  

  具有以下优点:   

  

  并且可靠性和稳定性都不错,堪比硬件级别的F5负载均衡服务器。处理能力强,最高可维持4w-5w并发连接数,单位时间处理的请求数最高可达2w;支持多种负载均衡算法;有强大的监控界面,通过它可以实时了解系统的运行情况;但是上述架构也有问题,因为所有客户端请求都是先到达HAProxy,然后HAProxy再向下分发请求。如果HAProxy 是一个开源的、高性能的基于TCP(第四层)和HTTP(第七层)应用的负载均衡软件。 使用 HAProxy可以快速、可靠地实现基于TCP与HTTP应用的负载均衡解决方案。发生,整个MyCat集群将无法正常工作,仍然会有单点故障。   

  

  HAProxy宕机   

  

  插图:   

  

  HAProxy实现了3.MyCat的高可用集群,而HAProxy本身的高可用性可以通过Keepalived实现。所以HAProxy和Keepalived要同时安装在HAProxy主机上,Keepalived负责为服务器抢占vip(虚拟ip)。抢占vip后,可以通过原ip或者直接通过vip访问主机。Keepalived抢占vip有优先权,由MyCat 多节点的集群高可用和负载均衡在keepalived.conf配置中决定。不过一般来说,主机先启动的Keepalived服务会抢vip,甚至slave只要先启动就可以抢VIP(要注意避免Keepalived的资源抢问题)。HAProxy负责向扮演priority 属性.的MyCat 集群节点上,分发vip请求的同时,HAProxy还可以检测MyCat是否活着,HAProxy只会将请求转发给存活的MyCat。如果Keepalived HAProxy高可用性群集中的一台服务器出现故障,群集中另一台服务器上的Keepalived将立即抢占vip并接管服务。此时,抢占了vip的HAProxy节点可以继续提供服务。如果MyCat服务器关闭,HAPorxy不会将请求转发给关闭的MyCat,因此MyCat仍然可用。综上所述,MyCat的负载均衡是由HAProxy实现的,而HAProxy的高可用及负载均衡是由Keepalived实现的。   

  

  高可用   

  

  通常在keepalived介绍:,有两台或多台服务器运行Keepalived一台是Keepalived是一种基于VRRP协议来实现的高可用方案,可以利用其来避免单点故障。,一台是备份服务器,但对外是虚拟IP(VIP),主服务器会向备份发送特定的消息。   

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

  


  

二、高可用集群搭建1.部署环境规划

  


  

  

2.MySQL主从复制搭建A.master在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=db03123456789101112执行完毕之后,需要重启Mysql:service mysql restart ;1创建同步数据的账户,并且进行授权操作:grant replication slave on *.* to 'itcast'@'%' identified by 'itcast'; flush privileges;123查看master状态:show master status;1

  


字段含义:

  

File : 从哪个日志文件开始推送日志文件 Position : 从哪个位置开始推送日志 Binlog_Do_DB : 指定需要同步的数据库123B.slave在 slave 端配置文件中,配置如下内容:#mysql服务端ID,唯一 server-id=2 #指定binlog日志 log-bin=/var/lib/mysql/mysqlbin #启用中继日志 relay-log=mysql-relay123456执行完毕之后,需要重启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;1指定当前从库对应的主库的IP地址用户名密码从哪个日志文件开始的那个位置开始同步推送日志

  

开启同步操作start slave; show slave status;12

  

停止同步操作stop slave;1C.测试验证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');12345678910111213143.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>1234567891011121314B.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>123456789两台MyCat服务, 做相同的配置 ;

  

4.HAProxy安装配置A.安装准备好HAProxy安装包,传到/root目录下haproxy-1.5.16.tar.gz1解压到/usr/local/src目录下tar -zxvf haproxy-1.5.16.tar.gz -C /usr/local/src1进入解压后的目录,查看内核版本,进行编译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安装路径。1234567编译完成后,进行安装make install PREFIX=/usr/local/haproxy1安装完成后,创建目录mkdir -p /usr/data/haproxy/1创建HAProxy配置文件vim /usr/local/haproxy/haproxy.conf

  

globallog 127.0.0.1 local0 maxconn 4096 chroot /usr/local/haproxy pidfile /usr/data/haproxy/haproxy.piduid 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 TRUE12345678910111213141516171819202122232425262728293031323334353637内容解析如下 :

  

#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> <:> # weight : 权重,默认为 1,最大值为 256,0 表示不参与负载均衡 # 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 TRUE1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677HAProxy的负载均衡策略:

  

  

B.启动访问启动HAProxy/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.conf1查看HAProxy进程ps -ef|grep haproxy1访问http://192.168.192.162:8888/admin

  

界面:

  

  

5.Keepalived安装配置

  

A.安装配置上传安装包到Linuxalt + p --------> put D:/tmp/keepalived-1.4.5.tar.gz1解压安装包到目录 /usr/local/srctar -zxvf keepalived-1.4.5.tar.gz -C /usr/local/src1安装依赖插件yum install -y gcc openssl-devel popt-devel1进入解压后的目录,进行配置,进行编译cd /usr/local/src/keepalived-1.4.5 ./configure --prefix=/usr/local/keepalived123进行编译,完成后进行安装make && make install1运行前配置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/12345修改配置文件 /etc/keepalived/keepalived.confMaster:

  

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 } }1234567891011121314151617181920212223242526272829303132333435363738394041BackUP:

  

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} }123456789101112131415161718192021222324252627282930313233343536373839404142434445编写检测haproxy的shell脚本 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 fi123456789101112131415161718192021B.启动测试启动Keepalivedservice keepalived start1登录验证mysql -uroot -p123456 -h 192.168.192.200 -P 480661

相关文章