Mycat高可用_安装配置HAProxy
安装配置HAProxy
查看列表
yum list | grep haproxy
yum -y install haproxy
修改配置文件
$ vim /etc/haproxy/haproxy.cfg
启动HAProxy
HAProxy配置文件
HAProxy配置文件主要由全局设定和代理设定两部分组成,包含5个域:global、default、frontend、backend、listen。
global
# 全局配置,定义haproxy进程的工作特性和全局配置 global log 127.0.0.1 local2 chroot /var/lib/haproxy #chroot运行的路径 pidfile /var/run/haproxy.pid #haproxy pid的存放位置 maxconn 65536 #最大连接数 nbproc 10 ulimit-n 200000 user haproxy #haproxy的运行用户 group haproxy #haproxy的运行用户的所属组 daemon #守护进程的方式在后台工作 # turn on stats unix socket stats socket /var/lib/haproxy/stats
注意: 全局配置,通常是一些进程级别的配置,与操作系统相关。
default
#------------------------------------------- -------------------------- # common defaults that all the 'listen' and 'backend' sections will # use if not designated in their block #------------------------------------------- -------------------------- defaults mode http #默认使用的七层协议,也可以是tcp四层协议,如果配置为health,则表示健康检查,返回ok log global option tcplog #详细记录tcp日志 option redispatch option dontlognull #不记录健康检查的日志信息 option forwardfor retries 3 #重试次数为3次,失败3次以后则表示服务不可用 timeout http-request 5s #http请求超时时间,客户端建立连接5s但不请求数据的时候,关闭客户端连接 timeout queue 10s #等待最大时间,表示等待最大时长为10s timeout connect 10s #连接超时时间,表示客户端请求转发至服务器所等待的时长为10s timeout client 30m #客户端超时时间,表示客户端非活跃状态的时间为30min timeout server 30m #服务器超时时间,表示客户端与服务器建立连接后,等待服务器的超时时间为30min timeout http-keep-alive 10s #持久连接超时时间,表示保持连接的超时时长为10s timeout check 10s #心跳检测超时时间,表示健康状态监测时的超时时间为10s
参数:
默认参数配置,主要是涉及的公共配置,在 defaults 中一次性添加。
frontend 、 backend 、 listen 未配置时,都可以默认 defaults 中的参 数配置。
若配置了,会覆盖。
frontend & backend
frontend test bind *:8082 default_backend test option httplog acl user-core path_beg /test/v1/user/ use_backend user-core_server if user-core # test backend test mode http balance roundrobin server node1 10.xxx.xxx.1:7000 checkport 7000 inter 5000 rise 5 fall 5 server node2 10.xxx.xxx.2:7000 checkport 7000 inter 5000 rise 5 fall 5 # user-core_server backend user-core_server mode http balance roundrobin server node1 10.xxx.xxx.1:7001 checkport 7001 inter 5000 rise 5 fall 5 server node2 10.xxx.xxx.2:7001 checkport 7001 inter 5000 rise 5 fall 5 backup frontend haproxy_statis_front bind *:8081 mode http default_backend statis_haproxybackend statis_haproxy mode http balance roundrobin stats uri /haproxy/stats stats auth haproxy:zkK_HH@zz stats refresh 30s stats show-node stats show-legends stats hide-version
参数:
frontend 可以看作是前端接收请求的部分,内部指定后端;
backend 可以看作是后端服务接收请求的部分;
listen
listen admin_stats bind *:8080 #监听端口 mode http option httplog log global #统计接口启用开关 stats enable maxconn 10 #页面刷新时长 stats refresh 30s #haproxy ui访问后缀 stats uri /haproxy?stats #认证时的realm,作为提示用的 stats realm haproxy #认证用户名和密码 stats auth admin:admin #隐藏HAProxy版本号 stats hide-version #管理界面只有认证通过后才能在ui上进行管理 stats admin if TRUE
参数: listen 是`frontend和backend的组合,haproxy的监控ui可以通 过这个进行配置。
向配置文件中插入以下配置信息,并保存
global log 127.0.0.1 local0 #log 127.0.0.1 local1 notice #log loghost local0 info maxconn 4096 chroot /var/lib/haproxy pidfile /var/run/haproxy.pid #uid 99 #gid 99 daemon #debug #quiet defaults log global mode tcp option abortonclose option redispatch retries 3 maxconn 2000 timeout connect 5000 timeout client 50000 timeout server 50000 listen proxy_status bind :48066 mode tcp balance roundrobin server mycat_1 192.168.66.101:8066 check inter 10s server mycat_2 192.168.66.102:8066 check inter 10s frontend admin_stats bind :7777 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
启动验证
/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.conf
查看HAProxy进程
ps -ef|grep haproxy
打开浏览器访问 http://192.168.140.125:7777/admin#在弹出框输入
用户名: admin
密码:123123
验证负载均衡,通过HAProxy访问Mycat
mysql -uroot -p123456 -h 192.168.66.101 -P48066
Mycat高可用_安装配置Keepalived
高可用架构
查看列表
yum list | grep keepalived
yum安装
yum install -y keepalived
查看yum安装的配置文件
rpm -ql keepalived
修改主节点配置文件
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived global_defs { ## keepalived 自带的邮件提醒需要开启 sendmail 服务。建议用独立的监控或第三方 SMTP router_id baizhan ## 标识本节点的字条串,通常为 hostname } ## keepalived 会定时执行脚本并对脚本执行的结果进行分析,动态调整 vrrp_instance 的优先级。 ## 如果脚本执行结果为 0,并且 weight 配置的值大于0,则优先级相应的增加。 ## 如果脚本执行结果非 0,并且 weight 配置的值小于0,则优先级相应的减少。 ## 其他情况,维持原本配置的优先级,即配置文件中 priority 对应的值。 vrrp_script chk_haproxy { script "/etc/keepalived/haproxy_check.sh" ## 检测haproxy 状态的脚本路径 interval 2 ## 检测时间间隔 weight 2 ## 如果条件成立,权重+2 } ## 定义虚拟路由, VI_1 为虚拟路由的标示符,自己定义名称 vrrp_instance VI_1 { state MASTER ## 默认主设备(priority 值大的)和备用设备(priority 值小的)都设置为 BACKUP, ## 由 priority 来控制同时启动情况下的默认主备,否则先启动的为主设备 interface ens33 ## 绑定虚拟 IP 的网络接口,与本机 IP 地址所在的网络接口相同,我的是 eth3 virtual_router_id 35 ## 虚拟路由的 ID 号,两个节点设置必须一样,可选 IP 最后一段使用, ## 相同的 VRID 为一个组,他将决定多播的 MAC 地址 priority 120 ## 节点优先级,值范围 0-254,MASTER 要比 BACKUP 高 nopreempt ## 主设备(priority 值大的)配置一 定要加上 nopreempt,否则非抢占也不起作用 advert_int 1 ## 组播信息发送间隔,两个节点设置必须一样,默认 1s ## 设置验证信息,两个节点必须一致 authentication { auth_type PASS auth_pass 1111 ## 真实生产,按需求对应该过来 } ## 将 track_script 块加入 instance 配置块 track_script { chk_haproxy ## 检查 HAProxy 服务是否存活 } ## 虚拟 IP 池, 两个节点设置必须一样 virtual_ipaddress { 192.168.66.200 } }
修改备用节点配置文件
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived global_defs { router_id baizhan } vrrp_script chk_haproxy { script "/etc/keepalived/haproxy_check.sh" interval 2 weight 2 } vrrp_instance VI_1 { state BACKUP interface ens33 virtual_router_id 35 priority 110 advert_int 1 authentication { auth_type PASS auth_pass 1111 } track_script { chk_haproxy } virtual_ipaddress { 192.168.66.200 } }
编写 Haproxy 状态检测脚本
我们编写的脚本为/etc/keepalived/haproxy_check.sh (已在 keepalived.conf 中配置)
脚本要求:如果 haproxy 停止运行,尝试启动,如果无法启动则杀 死本机的 keepalived 进程,keepalied将虚拟 ip 绑定到 BACKUP 机器上。
内容如下:
mkdir -p /usr/local/keepalived/log
vi /etc/keepalived/haproxy_check.sh
#!/bin/bash START_HAPROXY="/usr/sbin/haproxy start" STOP_HAPROXY="/usr/sbin/haproxy stop" LOG_FILE="/usr/local/keepalived/log/haproxy-check.log" HAPS=`ps -C haproxy --no-header |wc -l` date "+%Y-%m-%d %H:%M:%S" >> $LOG_FILE echo "check haproxy status" >> $LOG_FILE if [ $HAPS -eq 0 ];then echo $START_HAPROXY >> $LOG_FILE $START_HAPROXY >> $LOG_FILE 2>&1 sleep 3 if [ `ps -C haproxy --no-header |wc -l` -eq 0 ];then echo "start haproxy failed, killall keepalived" >> $LOG_FILE killall keepalived fi fi
复习:
Mycat分片规则_按日期(天)分片
实现原理
此规则为按天分片,设定时间格式、范围。
实现过程
创建示例表
#用户信息表 create table login_info( id int auto_increment comment '编号', user_id int comment '用户编号', login_date date comment '登录时间', primary key(id) );
修改schema.xml配置文件
<table name="login_info" dataNode="dn1,dn2" rule="sharding_by_date" ></table>
修改rule.xml配置文件
<tableRule name="sharding_by_date"> <rule> <columns>login_date</columns> <algorithm>shardingByDate</algorithm> </rule> </tableRule>
定义function
<function name="shardingByDate" class="io.mycat.route.function.PartitionByDate"> <property name="dateFormat">yyyy-MM-dd</property> <property name="sBeginDate">2040-01-01</property> <property name="sEndDate">2040-01-04</property> <property name="sPartionDay">2</property> </function>
参数:
columns:分片字段,algorithm:分片函数
dateFormat :日期格式 sBeginDate :开始日期
sEndDate:结束日期,则代表数据达到了这个日期的分片后循环从开始分片插入
sPartionDay :分区天数,即默认从开始日期算起,分隔 2 天一个分区
重启Mycat
mycat restart
插入数据
insert into login_info(id,user_id,login_date) values(1,101,'2040-01-01'); insert into login_info(id,user_id,login_date) values(2,102,'2040-01-02'); insert into login_info(id,user_id,login_date) values(3,103,'2040-01-03'); insert into login_info(id,user_id,login_date) values(4,104,'2040-01-04'); insert into login_info(id,user_id,login_date) values(5,105,'2040-01-05'); insert into login_info(id,user_id,login_date) values(6,106,'2040-01-06');
实时学习反馈
1.Mycat技术中按日期进行分片如何设置分区天数___。
A dateFormat
B sBeginDate
C sEndDate
D sPartionDay
Mycat分片规则_全局序列
在实现分库分表的情况下,数据库自增主键已无法保证全局唯一。
解决方案
本地文件
此方式Mycat将sequence配置到文件中,当使用到 sequence中的 配置后,Mycat会更下classpath中的 sequence_conf.properties 文件中sequence当前的值。
注意:
优点:本地加载,读取速度较快
缺点:抗风险能力差,Mycat 所在主机宕机后,无法读取本地文件。
本地时间戳方式
全局序列ID=64位二进制 (42(毫秒)+5(机器 ID)+5(业务编码)+12(重 复累加) 换算成十进制为18位数的long类型,每毫秒可以并发12位 二进制的累加。
优缺点:
优点:配置简单
缺点:18位ID过长