linux中,mycat+haproxy+keepalived

发布于:2024-09-18 ⋅ 阅读:(10) ⋅ 点赞:(0)

Haproxy

HAProxy是法国开发者威利塔罗(Willy Tarreau)在2000年使用C语言开发的一个开源软件,是一款具备高并发(一万以上)、高性能的TCP和HTTP负载均衡器,支持基于cookie的持久性,自动故障切换,支持正则表达式及web状态统计,目前最新TLS版本为2.2。

HAProxy是可提供高可用性、负载均衡以及基于TcP和HTTP应用的代理,是免费、快速并且可靠的一种解决方案。HProxy非常适用于并发大(并发达1w以上) web站点,这些站点通常又需要会话保持或七层处理。HAProxy的运行模式使得它可以很简单安全的整合至当前的架构中,同时可以保护web服务器不被暴露到网络上。

支持功能

​ TCP 和 HTTP反向代理

​ SSL/TSL服务器

​ 可以针对HTTP请求添加cookie,进行路由后端服务器

​ 可平衡负载至后端服务器,并支持持久连接

​ 支持所有主服务器故障切换至备用服务器 keepalive

​ 支持专用端口实现监控服务

​ 支持停止接受新连接请求,而不影响现有连接

​ 可以在双向添加,修改或删除HTTP报文首部字段

​ 响应报文压缩

​ 支持基于pattern实现连接请求的访问控制

​ 通过特定的URI(url)为授权用户提供详细的状态信息

主要特性

  1. ​ 可靠性和稳定性非常好,可以与硬件级的F5负载均衡设备相媲美;

  2. ​ 最高可以同时维护40000-50000个并发连接,单位时间内处理的最大请求数为20000个,最大处理能力可达10Git/s;

  3. ​ 支持多达8种负载均衡算法,同时也支持会话保持;

  4. ​ 支持虚拟机主机功能,从而实现web负载均衡更加灵活;

  5. ​ 支持连接拒绝、全透明代理等独特的功能;

  6. ​ 拥有强大的ACL支持,用于访问控制; sendfile

  7. ​ 其独特的弹性二x树数据结构,使数据结构的复杂性上升到了0(1),即数据的查寻速度不会随着数据条日的增加而速度有所下降;·支持客户端的keepalive功能,减少客户端与haproxy的多次三次握手导致资源浪费,让多个请求在一个tcp连接中完成;

  8. ​ 支持TCP加速,零复制功能,类似于mmap机制;

  9. ​ 支持响应池(response buffering) ;

  10. ​ 支持RDP协议;

  11. ​ 基于源的粘性,类似nginx的ip hash功能,把来自同一客户端的请求在一定时间内始终调度到上游的同一服务器;·更好统计数据接口,其web接口显示后端集群中各个服务器的接收、发送、拒绝、错误等数据的统计信息;

  12. ​ 详细的健康状态检测,web接口中有关于对上游服务器的健康检测状态,并提供了一定的管理功能;

  13. ​ 基于流量的健康评估机制;

  14. ​ 基于http认证;

  15. ​ 基于命令行的管理接口;

  16. ​ 日志分析器,可对日志进行分析

负载均衡策略

静态调度算法:不管后端,按照调度器的算法进行 分配

动态调度算法:会考虑后端服务器的负载情况

(调度动态时,服务在运行 也可以不影响服务 不需要重新加载 直接生效)

(1) roundrobin,表示简单的轮询 rr

(2) static-rr,表示根据权重

(3) leastconn,表示最少连接者先处理

( 4) source,表示根据请求源IP

(5) uri,表示根据请求的URI,做cdn需使用;

(6) url param,表示根据请求的URl参数' balance url param’requires an URL parameter name

(7) hdr(name),表示根据HTTP请求头来锁定每一次HTTP请求;

(8) rdp-cookie (name),表示根据据cookie(name)来锁定并哈希每一次TCP请求。

LVS、Nginx和HAproxy

LVS、Nginx和HAproxy是三种常见的负载均衡器,它们在工作原理、功能和使用场景上有一些区别。

LVS (Linux Virtual Server):

LVS(Linux Virtual Server)集群,即Linux虚拟服务器集群,是一个在Unix/Linux平台下实现负载均衡集群功能的系统。它由国人章文嵩博士在1998年开发,是中国国内最早出现的自由软件项目之一,现在LVS已经是Linux内核标准的一部分。LVS集群通过将多台服务器组织起来,共同对外提供服务,以提高系统的整体性能、可扩展性和高可用性。

​ LVS是一个基于Linux内核的负载均衡解决方案,通过网络地址转换(NAT)或直接路由(Direct Routing)来实现负载均衡。

​ LVS通常作为网络层(第四层)的负载均衡器,可以实现TCP和UDP等传输层协议的负载均衡。

​ LVS的优点包括高性能、低延迟和可靠性。

Nginx:

​ Nginx是一种高性能的开源Web服务器,也可以用作反向代理和负载均衡器。

​ Nginx通常作为应用层(第七层)的负载均衡器,可以基于HTTP和HTTPS等应用层协议进行负载均衡。

​ Nginx的优点包括高度灵活性、高性能和丰富的功能。

HAproxy:

​ HAproxy是一种高性能的开源负载均衡器和代理服务器,专注于TCP和HTTP应用层的负载均衡。

​ HAproxy支持多种负载均衡算法,包括轮询、最小连接数等。

​ HAproxy的优点包括高性能、低延迟、丰富的特性和灵活的配置选项。

如何选择

在选择负载均衡器时,通常需要考虑以下因素:

​ 负载均衡需求:根据具体的应用场景和需求确定是需要基于网络层还是应用层的负载均衡。

​ 性能需求:考虑负载均衡器的性能指标,如吞吐量、延迟等。

​ 功能需求:根据具体的功能需求选择合适的负载均衡器,例如是否需要支持HTTPS、WebSocket等。

​ 可扩展性:考虑负载均衡器的可扩展性,以应对未来业务增长带来的挑战。

​ 成本:考虑开发、部署和维护负载均衡器的成本。

根据具体情况,可以选择最适合的负载均衡器。例如,对于纯粹的HTTP负载均衡,Nginx可能是一个不错的选择;而对于复杂的负载均衡需求,HAproxy可能更适合一些;对于需要基于网络层的负载均衡,LVS可能是一个更好的选择。

安装Haproxy

 yum -y install haproxy

重新配置镜像

如果下载不了的话更新镜像

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
​
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
​
yum clean all
yum makecache

安装依赖

yum -y install epel-release

这是我们准备实现的效果

需要准备两个mycat,并配置好主从数据库,两个haproxy和两个keepalived,最后用keepalived的虚拟ip去访问数据库

配置haproxy

安装好后进入 /etc/haproxy/haproxy.cnf 中

vim /etc/haproxy/haproxy.cnf

进入cfg文件

配置

global
 log 127.0.0.1 local0
 maxconn 4096  # 置全局的最大并发连接数为4096
 chroot /var/lib/haproxy # 使运行中的haproxy进程被限制在/var/lib/haproxy目录下,以增强安全性。
 pidfile /var/run/haproxy.pid
 uid 99
 gid 99 # 设置HAProxy进程运行时的用户ID和组ID
 daemon  # 使haproxy以守护进程模式运行于后台。 
​
​
​
defaults
 log global 
 mode tcp   # 指定默认的模式为tcp
 option abortonclose
 option redispatch
 retries 3 # 重试3次
 maxconn 2000  #设置每个frontend或backend的最大并发连接数为2000
 timeout connect 5000 #设置建立连接超时时间为5000
 timeout client 50000 #设置客户端超时时间也为5000
 timeout server 50000 #置后端服务器超时时间同样为5000
listen proxy_status 
 bind :48066 # 监听的端口号是48066
  mode tcp
  balance roundrobin # 负载均衡的测策略是 轮询
  server mycat_1 192.168.184.34:8066 check inter 10s # 每隔10s检测一次
  server mycat_2 192.168.184.38: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:admin # 访问的用户名和密码的信息
  stats hide-version    # 隐藏版本号
  stats admin if TRUE   # 必须是admin登录

启动haproxy

systemctl start haproxy

查看haproxy状态

systemctl status haproxy

注:如果失败,可能是防火墙和selinux为设置,关闭防火墙和selinux

关闭防火墙

systemctl stop firewalld

查看防火墙状态

systemctl status firewalld

进入selinux文件

vim /etc/selinux/config 

将SELINUX后面改为disabled

启动成功后,根据我们cfg里的文件去访问页面

ip地址 + :7777/admin

进入页面时,登录,账号密码都是我们设置的admin,具体都在haproxy的配置里

haproxy配置完成,我们的需求是两个,所以要在配一个,过程省略,一样的步骤,配置好之后就要开始配置keepalived,继续看我们的效果图

配置keepalived

# 全局配置
global_defs { 
   #设置报警邮件地址,可以设置多个,可以不设置
   notification_email {
     2@qq.com
   }
   #发送通知邮件时邮件源地址
   notification_email_from 1@163.com   
   # 发送email时使用的smtp服务器地址,这里可以用本地的sendmail来实现
   smtp_server smtp.163.com
   #连接smtp连接超时时间
   smtp_connection_timeout 30 
   #定义路由标识信息,相同局域网唯一,ip地址
   router_id 192.168.277.99
   script_user root
}
​
# 检测脚本
vrrp_script chk_http_port {
   # 脚本路径
   script "/opt/keepalived/nginx_check.sh"
   #(检测脚本执行的间隔,单位是秒)
   interval 2
   # 当检查失败后,将vrrp_instance的priority减小5
   weight -5
   # 连续监测失败3次,才认为真的健康检查失败。并调整优先级
   fall 3
   # 连续监测2次成功,就认为成功。但不调整优先级
   rise 2 
}
​
​
  
vrrp_instance VI_1 { 
    # 指定keepalived的角色,MASTER为主,BACKUP为备,大写
    state MASTER
    # 当前进行vrrp通讯的网络接口卡(当前centos的网卡)
    interface ens32
    # 虚拟路由编号0-255,主、备机的 virtual_router_id 必须相同
    virtual_router_id 51
    # 主、备机取不同的优先级,主机值较大,备份机值较小
    priority 100
    # 检查间隔,默认为1s(vrrp组播周期秒数)
    advert_int 1
    #设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信
    authentication { 
        auth_type PASS 
        auth_pass 1111 
    } 
    
    # 定义虚拟ip(VIP),可多设,每行一个
    virtual_ipaddress {         
        192.168.227.88
    } 
    
    # 执行检测脚本
    track_script{
        chk_http_port
    }
}
 # 设置虚拟服务器,需要指定虚拟IP地址和服务端口,IP与端口之间用空格隔开
virtual_server 192.168.227.88 48066 { 
 delay_loop 6 # 设置运行情况检查时间,单位是秒
 lb_algo rr # 设置负载调度算法,这里设置为rr,即轮询算法
 lb_kind NAT     # 设置LVS实现负载均衡的机制,有NAT、TUN、DR三个模式可选
 persistence_timeout 50
 #会话保持时间,单位是秒。这个选项对动态网页是非常有用的,为集群系统中的session共享提供了一个很好的解决方案。
                            #有了这个会话保持功能,用户的请求会被一直分发到某个服务节点,直到超过这个会话的保持时间。
                            #需要注意的是,这个会话保持时间是最大无响应超时时间,也就是说,用户在操作动态页面时,如果50秒内没有执行任何操作,
                                #那么接下来的操作会被分发到另外的节点,但是如果用户一直在操作动态页面,则不受50秒的时间限制
 protocol TCP                          # 指定转发协议类型,有TCP和UDP两种
​
real_server 192.168.227.99 48066 { #HA地址(备机r)
 weight 1
 TCP_CHECK {
 connect_timeout 3
 nb_get_retry 3
 delay_before_retry 3
 }
 } }

登录验证

mysql -uroot -proot -h 192.168.174.100 -P 48066 

此时是:

HA隐藏mycat的ip

KeepAlive隐藏HA的ip

现在用虚拟ip访问haproxy页面也可以进入

http://192.168.227.88:7777/admin

虚拟ip也是我们在keepalived上自己设置的

数据库测试也可以,创建一个新连接,

用虚拟ip连接也是可以连接上的

此时我们随便在表里添加或删除一个数据,其他的数据库也都会跟着一起变动