打造高可用集群的基石:深度解析Keepalived实践与优化

news2024/9/21 22:50:31

高可用集群

集群类型

集群类型主要分为负载均衡集群(LB)、高可用集群(HA)和高性能计算集群(HPC)三大类。每种集群类型都有其特定的应用场景和优势。

1. 负载均衡集群(LB)

负载均衡集群主要用于提高系统的性能、响应效率和可靠性,通过将访问请求分散到多个服务器上,以减少单个服务器的负载压力,从而提高整体的处理能力和访问速度。在负载均衡集群中,LVS(Linux Virtual Server)和haproxy是两种常用的软件解决方案。

  • LVS(Linux Virtual Server)
    • LVS是一个开源的负载均衡器,它工作在OSI模型的第四层(传输层),通过IP负载均衡技术实现高效的请求分发。
    • LVS支持多种工作模式,包括NAT(网络地址转换)、DR(直接路由)和TUN(IP隧道)等,每种模式都有其特定的应用场景和优缺点。
    • LVS通过IPVS(IP Virtual Server)模块实现负载均衡,IPVS是LVS集群系统的核心软件,负责将客户端的请求转发到后端的真实服务器上。
  • haproxy
    • haproxy是一个高性能的TCP/HTTP反向代理服务器和负载均衡器,支持大量的并发连接和高可用性。
    • haproxy提供了灵活的负载均衡算法,如轮询、最少连接数、源地址哈希等,可以根据实际需求进行配置。
    • haproxy还支持SSL卸载、HTTP压缩、会话保持等高级功能,可以进一步提升系统的性能和安全性。

2. 高可用集群(HA)

高可用集群主要用于提高系统的可靠性和可用性,确保在部分服务器出现故障时,整个系统仍然能够持续提供服务。在高可用集群中,keepalived是一款常用的开源软件。

  • keepalived
    • keepalived通过虚拟路由冗余协议(VRRP)实现高可用性,它可以在主服务器出现故障时,自动将虚拟IP地址和服务切换到备份服务器上,从而确保服务的连续性。
    • keepalived还提供了多种健康检查机制,如ICMP Ping、TCP端口检测和HTTP GET等,用于监测后端服务器的运行状态。
    • keepalived的配置相对简单,易于管理和维护,是构建高可用集群的常用选择之一。

3. 高性能计算集群(HPC)

高性能计算集群主要用于处理大规模的计算任务,如科学计算、数据分析、工程仿真等。HPC集群通过将多个高性能计算机连接在一起,利用并行计算和分布式计算技术,提高整体的计算能力和处理速度。

  • HPC集群的特点
    • 高性能:HPC集群采用高性能的计算机和存储设备,能够提供卓越的计算能力和存储性能。
    • 可扩展性:HPC集群可以根据实际需求进行扩展,增加更多的计算节点和存储设备,以满足更大规模的计算任务。
    • 灵活性:HPC集群支持多种操作系统和应用程序,可以灵活配置和部署,以适应不同的计算需求。

实现高可用

提升系统高用性的解决方案:降低MTTR- Mean Time To Repair(平均故障时间)

解决方案:建立冗余机制

主备、主主

active/passive 主/备

active/active 双主

active --> HEARTBEAT --> passive

active <--> HEARTBEAT <--> active

VRRP虚拟路由冗余协议

解决单点故障

VIP

VMAC

工作方式:抢占、非抢占、延时抢占

keepalived部署

简介

vrrp协议的软件实现,设计目的是为了高可用ipvs服务

 负载均衡是一种在真实集群之间分配 IP 流量的方法 服务器,提供一个或多个高可用性虚拟服务。在设计负载均衡拓扑时,必须考虑负载均衡器本身以及后面的真实服务器的可用性。

        Keepalived 为负载均衡和高可用性提供了框架。 负载均衡框架依赖于众所周知且广泛使用的 Linux 虚拟服务器 (IPVS) 内核模块,提供第 4 层负载均衡。 Keepalived 实现了一组健康检查器,以动态和自适应的方式 根据服务器池的运行状况维护和管理负载均衡的服务器池。 高可用性是通过虚拟冗余路由协议实现的 (VRRP)。VRRP是路由器故障切换的基础砖块。keepalived也 实现了一组到 VRRP 有限状态机的钩子 提供低级和高速协议交互。每个Keepalived 框架可以单独使用,也可以一起使用,以提供弹性基础设施。

简而言之,Keepalived 提供了两个主要功能:

  • LVS系统的健康检查
  • 实施 VRRPv2 堆栈以处理负载均衡器故障切换

架构

用户空间核心组件:

vrrp stack:VIP消息通告

checkers:监测real server

system call:实现 vrrp 协议状态转换时调用脚本的功能

SMTP:邮件组件

IPVS wrapper:生成IPVS规则

Netlink Reflector:网络接口

WatchDog:监控进程

控制组件:提供keepalived.conf 的解析器,完成Keepalived配置

IO复用器:针对网络目的而优化的自己的线程抽象

内存管理组件:为某些通用的内存管理功能(例如分配,重新分配,发布等)提供访问权限

特点

  • 部署简单,只需要配置一个配置文件即可
  • 加入了虚拟路由冗余协议,可以保证业务或网络不间断稳定运行

核心功能

  • 健康检查

        1、采用tcp三次握手,icmp请求,http请求,udp 、

        2、echo请求等方式对负载均衡器后面的实际的服务器(通常是承载真实业务的服务器)进行保活

  • 故障切换

        1、主要应用在配置了主备的服务器上,使用虚拟路由冗余协议维持主备之间的心跳

        2、当主服务器出现问题时,由备服务器承载对应的业务,从而在最大限度上减少损失,并提供服务的稳定性

环境部署

四台主机 vip:100

realserver1:110

realserver2:120

KA1:10

KA2:20

关闭selinux、防火墙

[root@realserver1 ~]# getenforce

Disabled

[root@realserver1 ~]# systemctl status firewalld

realserver1/2中安装httpd

[root@realserver1 ~]# yum install httpd -y

[root@realserver1 ~]# echo 192.168.86.110 > /var/www/html/index.html

[root@realserver1 ~]# systemctl enable --now httpd

[root@realserver2 ~]# echo 192.168.86.120 > /var/www/html/index.html

安装配置服务

KA1/2中

[root@Ka1 ~]# yum install keepalived -y

配置文件都是以块(block)的形式组成,每一个块的内容都包含在{ }中

主配置文件

[root@Ka1 ~]# vim /etc/keepalived/keepalived.conf

修改全局配置

! Configuration File for keepalived
global_defs {
notification_email {
594233887@qq.com #keepalived 
timiniglee-zln@163.com
}
notification_email_from keepalived@KA1.timinglee.org
smtp_server 127.0.0.1         
smtp_connect_timeout 30         
router_id KA1.timinglee.org     

vrrp_skip_check_adv_addr 

vrrp_strict 
vrrp_garp_interval 0 
vrrp_gna_interval 0 
vrrp_mcast_group4 224.0.0.18 
}

vrrp_gna_interval 0  后面有0

vrrp_route_id--必须唯一


vrrp_instance VI_1 {
  state MASTER
  interface eth0
  virtual_router_id 100
  priority 100
  advert_int 1
  authentication {
    auth_type PASS
    auth_pass 1111
  }
  virtual_ipaddress {
    192.168.86.100/24 dev eth0 label eth0:1
  }
}

修改后重启

[root@Ka1 ~]# systemctl enable --now keepalived.service

把配置复制到另一台

[root@Ka1 ~]# scp /etc/keepalived/keepalived.conf root@192.168.86.20:/etc/keepalived/keepalived.conf

修改优先级、state

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 100

测试效果--抓包命令

[root@Ka1 ~]# tcpdump -i eth0 -nn host 224.0.0.18

解决VIP不能通信

global_defs {
   notification_email {
     1540509690@qq.com
   }
   notification_email_from keepalived@timinglee.org
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id ka1.timinglee.org
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
   vrrp_mcast_group4 224.0.0.18
   vrrp_iptables
}

日志

生成日志

[root@ka1 ~]# vim /etc/sysconfig/keepalived

指定0-7

KEEPALIVED_OPTIONS="-D -S 6"

[root@ka1 ~]# systemctl restart keepalived.service

[root@ka1 ~]# vim /etc/rsyslog.conf

# Save boot messages also to boot.log
local7.*                                                /var/log/boot.log
local6.*                                                /var/log/keepalived.log

查看是否生成

[root@ka1 ~]# systemctl restart rsyslog.service

[root@ka1 ~]# systemctl restart keepalived.service

测试

[root@ka1 ~]# ll /var/log/keepalived.log
-rw------- 1 root root 8168 Aug 11 21:11 /var/log/keepalived.log

独立配置子文件

创建子配置目录

[root@Ka1 ~]# mkdir -p /etc/keepalived/conf.d

[root@Ka1 ~]# vim /etc/keepalived/conf.d/192.168.86.100.conf

修改主配置文件

[root@Ka1 ~]# vim /etc/keepalived/keepalived.conf
#vrrp_instance VI_1 {
#    state MASTER
#    interface eth0
#    virtual_router_id 100
#    priority 100
#    advert_int 1
#    authentication {
#        auth_type PASS
#        auth_pass 1111
#    }
#    virtual_ipaddress {
#        192.168.86.100/24 dev eth0 label eth0:1
#    }
#}
include "/etc/keepalived/conf.d/*.conf"

注释掉上面的加入指向子配置文件路径

include "/etc/keepalived/conf.d/*.conf"

在子配置文件写配置

[root@Ka1 ~]# cat /etc/keepalived/conf.d/192.168.86.100.conf

vrrp_instance VI_1 {

    state MASTER

    interface eth0

    virtual_router_id 100

    priority 100

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        192.168.86.100/24 dev eth0 label eth0:1

    }

}
 

[root@Ka1 ~]#

 

然后重启服务

[root@Ka1 ~]# systemctl restart keepalived.service

[root@Ka1 ~]# systemctl restart rsyslog.service

Keepalived企业应用示例

抢占模式和非抢占模式

默认为抢占模式,推荐使用非抢占模式

[root@Ka1 ~]# vim /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 100
    priority 100
    advert_int 1
    nopreempt          #设置非抢占模式
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.86.100/24 dev eth0 label eth0:1
    }
}

#include "/etc/keepalived/conf.d/*.conf"

重启keepalived

延时抢占

[root@Ka1 ~]# vim /etc/keepalived/keepalived.conf

    preempt_delay 5s   #设置延迟5s抢占

VIP单播配置

[root@Ka1 ~]# vim /etc/keepalived/keepalived.conf

禁用vrrp_strict

10:

    unicast_src_ip 192.168.86.10
    unicast_peer {
        192.168.86.20
   }

20:

    unicast_src_ip 192.168.86.20
    unicast_peer {
        192.168.86.10
   }

效果:

[root@Ka1 ~]# tcpdump -i eth0 -nn src host 192.168.86.10 and dst 192.168.86.20

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode

listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes

14:46:13.904625 IP 192.168.86.10 > 192.168.86.20: VRRPv2, Advertisement, vrid 100, prio 100, authtype simple, intvl 1s, length 20

邮件通知

[root@ka1 ~]# yum install mailx -y

[root@ka1 ~]# vim /etc/mail.rc

[root@ka1 ~]# echo hello world | mail -s test 2584896723@qq.com

set from=2584896723@qq.com

set smtp=smtp.qq.com

set smtp-auth-user=2584896723@qq.com

set smtp-auth-password=rbdnzxqskffidjjj

set smtp-auth=login

set ssl-verify=ignore

QQ邮箱-->账号与安全-->安全设置

[root@ka1 ~]# vim /etc/keepalived/mail.sh

#! /bin/bash

 

mail_dst="2584896723@qq.com"

send_message()

{

   mail_sub="$HOSTNAME to be $1 vip move"

   mail_msg="`date +%F\ %T`:vrrp move $HOSTNAME chage $1"

   echo $mail_msg | mail -s "$mail_sub" $mail_dst

}

 

case $1 in

        master)

        send_message master

        ;;

        backup)

        send_message backup

        ;;

        fault)

        send_message fault

        ;;

        *)

        ;;

esac

[root@ka1 ~]# chmod +x /etc/keepalived/mail.sh

[root@ka1 ~]# vim /etc/keepalived/keepalived.conf

   #按如下添加的配置
   notify_master "/etc/keepalived/mail.sh master"
   notify_backup "/etc/keepalived/mail.sh backup"
   notify_fault "/etc/keepalived/mail.sh fault"

实现master/master的keepalived双主架构

ka1第二个

ka2第二个

实现IPVS的高可用性(LVS+keepalived)

[root@realserver2 ~]# vim /etc/sysctl.d/arp.conf

net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2
net.ipv4.conf.lo.arp_ignore=1
net.ipv4.conf.lo.arp_announce=2

[root@realserver2 ~]# sysctl -p
[root@realserver2 ~]# sysctl --system


[root@ka1 ~]# vim /etc/keepalived/keepalived.conf

virtual_server 192.168.86.100 80 {

    delay_loop 6

    lb_algo wrr

    lb_kind DR.

    #persistence_timeout 50

    protocol TCP

 

    real_server 192.168.86.110 80 {

        weight 1

        HTTP_GET {

            url {

              path /

              status_code 200

            }

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

        }

    }

}

    real_server 192.168.86.110 80 {
        weight 1
        SSL_GET {
            url {
              path /
              status_code 200
            }
            connect_timeout 3
            nb_get_retry 2
            delay_before_retry 2
        }
    }
###############################################################
    real_server 192.168.86.120 80 {
        weight 1
        SSL_GET {
            url {
              path /
              status_code 200
            }
            connect_timeout 3
            nb_get_retry 2
            delay_before_retry 2
        }
    }
}

[root@ka2 ~]# vim /etc/keepalived/keepalived.conf

virtual_server 192.168.86.100 80{
    delay_loop 6
    lb_algo wrr
    lb_kind DR
    #persistence_timeout 50
    protocol TCP

    real_server 192.168.86.110 80 {
        weight 1
        SSL_GET {
            url {
              path /
              status_code 200
            }
            connect_timeout 3
            nb_get_retry 2
            delay_before_retry 2
        }
    }
##################################################################
    real_server 192.168.86.120 80 {
        weight 1
        SSL_GET {
            url {
              path /
              status_code 200
            }
            connect_timeout 3
            nb_get_retry 2
            delay_before_retry 2
        }
    }

}


[root@ka2 ~]# curl 172.25.254.110
172.25.254.110

[root@ka2 ~]# systemctl restart keepalived.service

实现其他应用的高可用性 VRRP Script(keepalived+haproxy)

利用脚本实现主从角色切换

[root@ka1 ~]# vim /etc/keepalived/test.sh
#! /bin/bash
[ ! -f /mnt/lee ]

[root@ka1 ~]# sh /etc/keepalived/test.sh

[root@ka1 ~]# echo $?
​0

[root@ka1 ~]# touch /mnt/lee

[root@ka1 ~]# chmod +x /etc/keepalived/test.sh

[root@ka1 ~]# sh /etc/keepalived/test.sh

[root@ka1 ~]# vim /etc/keepalived/keepalived.conf

vrrp_script check_file {
    script "/etc/keepalived/test.sh"
    interval 1
    weight -30
    fall 2
    rise 2
    timeout 2
}

...

    track_script {
        check_file
    }

...

[root@ka1 ~]# systemctl restart keepalived.service



[root@ka1 ~]# ls /mnt/lee

/mnt/lee

keepalived+haproxy实现高可用

[root@ka1 ~]# yum install haproxy -y

两台主机都做

[root@ka1 ~]# vim /etc/sysctl.conf

# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.

#For more information, see sysctl.conf(5) and sysctl.d(5).
net.ipv4.ip_nonlocal_bind=1

[root@ka1 ~]# sysctl -p

net.ipv4.ip_nonlocal_bind = 1

[root@ka1 ~]# systemctl enable --now haproxy.service

listen webcluster

    bind 192.168.86.100:80

    mode http

    balance roundrobin

    server web1 192.168.86.110:80 check inter 3 fall 2 rise 5

    server web2 192.168.86.120:80 check inter 3 fall 2 rise 5

[root@ka1 ~]# vim /etc/sysctl.d/arp.conf

net.ipv4.conf.all.arp_ignore=0

net.ipv4.conf.all.arp_announce=0

net.ipv4.conf.lo.arp_ignore=0

net.ipv4.conf.lo.arp_announce=0

检测HAproxy状态

[root@ka2 ~]# killall -0 haproxy
[root@ka2 ~]# echo $?
0
[root@ka2 ~]# 

检测脚本

[root@ka1 ~]# vim /etc/keepalived/test.sh

[root@ka1 ~]# cat /etc/keepalived/test.sh
#!/bin/bash
killall -0 haproxy

[root@ka1 ~]# 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2051583.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

drawio的问题

drawio的问题 先给出drawio的链接https://app.diagrams.net/ 我在用overleaf写论文的过程中&#xff0c;发现了一个问题&#xff0c;就是使用drawio画好图之后&#xff0c;只能保存以下几个选项&#xff1a; 但是不管是什么类型&#xff0c;在overleaf上面图片都不显示。如果…

SpringBoot如何做自动配置

目录 一、什么是springboot的自动配置&#xff1f; 二、Enable注解 三、springboot自动配置流程 ComponentScan SpringBootConfiguration EnableAutoConfiguration注解 condition的几个注解&#xff1a; 四、自定义启动类 需求&#xff1a; 参考&#xff1a; 实现步…

使用JQUERY请求数据出现500报错

我在写项目的时候遇到了一个问题&#xff0c;就是在存商品id的时候我将它使用了JSON.stringify的格式转换了&#xff01;&#xff01;&#xff01;于是便爆出了500这个错误&#xff01;&#xff01;&#xff01; 我将JSON.stringify的格式去除之后&#xff0c;它就正常显示了&a…

【数学建模】趣味数模问题——四人追逐问题

问题描述&#xff1a; 如图所示&#xff0c;在正方形ABCD的四个顶点各有一个人。在初始时刻 t0 时&#xff0c;四人同时出发&#xff0c;以匀速 v 沿顺时针方向朝下一个人移动。如果他们始终对准下一个人为目标行进&#xff0c;最终结果会如何&#xff1f;需要作出各自的运动轨…

路径规划 | 灰狼算法+B样条曲线优化无人机三维路径规划(Matlab)

目录 效果一览基本介绍程序设计参考文献 效果一览 基本介绍 灰狼算法B样条曲线优化无人机三维路径规划&#xff08;Matlab&#xff09; 群智能路径规划算法。三维灰狼算法&#xff08;GWO&#xff09;加B样条曲线优化的matlab代码。无人机&#xff08;UAV&#xff09;路径规划…

QT:安装软件

QT 介绍 QT是一个跨平台的C应用程序开发框架&#xff0c;具有广泛的应用领域和强大的功能。 定义&#xff1a;QT是一个跨平台的C图形用户界面应用程序框架&#xff0c;为开发者提供了建立艺术级图形界面所需的所有功能。 特点&#xff1a;QT具有短平快的优秀特质&#xff0c;即…

csrf漏洞(二)

本文仅作为学习参考使用&#xff0c;本文作者对任何使用本文进行渗透攻击破坏不负任何责任。 前言&#xff1a; 本文依靠phpstudy以及dvwa靶场进行操作&#xff0c;具体搭建流程参考&#xff1a;xss漏洞&#xff08;二&#xff0c;xss靶场搭建以及简单利用&#xff09; 前篇…

Godot关于3d射线投射的一些问题

首先你得把刚体模式激活如图否则将是空对象 为了区分其他坐标颜色园哥把射线设置成紫色以示区别 另外运行模式中貌似射线不可见只在调试模式中可见。最后查看调试器 成功碰撞一个名为主角的物体&#xff0c;也许都命中了但是方法只返回第一个命中的物体&#xff0c;吐槽一下&a…

场外个股期权如何发出行权指令?

场外期权行权指令也就是平仓指令的意思&#xff0c;一般场外个股期权交易有三种方式开仓和行权平仓指令&#xff0c;分别是市价&#xff0c;限价和半小时询价&#xff0c;跟普通股票的买卖和交易方式类似&#xff0c;唯一区别是手动发出场外个股期权的行权指令&#xff0c;下文…

Linux系统中的高级系统资源管理技术:systemd资源控制

在当今信息技术的快速发展中&#xff0c;服务器的性能管理和资源分配变得尤为重要。Linux操作系统以其灵活性和可定制性在服务器领域广受欢迎。而在Linux系统中&#xff0c;systemd资源控制作为一项重要的高级系统资源管理技术&#xff0c;为管理员提供了精细化控制和调整系统服…

STM32标准库学习笔记-2.GPIO

参考教程&#xff1a;【STM32入门教程-2023版 细致讲解 中文字幕】 标准库开发新建工程准备工作&#xff1a; 建立工程文件夹&#xff0c;Keil中新建工程&#xff0c;选择型号STM32F103C8T6工程文件夹里建立Start、Library、User等文件夹&#xff0c;复制固件库里面的文件到工…

【leetcode详解】实现一个魔法字典(思路详解 错误反思)

关于输入的解释&#xff1a; ‘ 输入 ’下方第一个列表是“调用函数”&#xff0c;第二个列表是“提供的字符串”&#xff0c;二者一一对应 如示例中buildDict对应[[“hello”, "leetcode"]]&#xff0c;即构建的字典包含 “hello” 和 "leetcode" 两个字…

基于laravel开发的开源交易所源码|BTC交易所/ETH交易所/交易所/交易平台/撮合交易引擎

开源交易所&#xff0c;基于Laravel开发的交易所 | BTC交易所 | ETH交易所 | 交易所 | 交易平台 | 撮合交易引擎。本项目有完整的撮合交易引擎源码、后台管理&#xff08;后端前端&#xff09;、前台&#xff08;交易页面、活动页面、个人中心等&#xff09; 特色&#xff1a;…

smbms

框架 数据库 项目如何搭建 考虑使不使用maven&#xff0c;依赖与jar包 项目搭建准备工作 搭建一个maven web项目配置tomcat测试项目是否能够跑起来导入项目中会遇到的jar包 //jsp、servlet、mysql驱动、jstl、stand.... <dependency><groupId>junit</groupI…

链表的删除 203、237、19 链表的遍历 430

203. 移除链表元素&#xff08;简单&#xff09; 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 解法一、递归 见代码 链表的定义具有递归的性质&#xff0c;所以遍历也可以以递归的方…

百度AI智能云依赖库OpenSSL库和Curl库及jsoncpp库安装

开发百度AI项目时&#xff0c;需要用到https协议&#xff0c;因此需要安装OpenSSl和curl库。 若只安装curl库&#xff0c;只支持http协议&#xff0c;不支持https协议。此外&#xff0c;还需要jsoncpp库&#xff0c;用以组包及解析与百度AI通信的json格式协议。 1.Ubuntu上安装…

修饰者模式

文章目录 1.简单介绍2.修饰器的优缺点3.模式结构3.案例分析4.总结5.装饰器模式和代理模式对比 1.简单介绍 装饰器模式&#xff08;Decorator Pattern&#xff09;也叫包装模式(Wrapper Pattern),是指在不改变原有对象的基础之上&#xff0c;将功能附加到对象上&#xff0c;提供…

【Linux —— 线程控制】

Linux —— 线程控制 进程和线程进程线程进程和线程的关系进程的优缺点Linux进程VS线程 Linux线程控制POSIX线程库创建线程线程等待线程终止线程分离 进程和线程 进程 进程是一个正在执行的程序实例&#xff0c;拥有独立的地址空间、数据段、代码段、堆栈以及系统资源&#xf…

大型语言模型(LLM)——直接偏好优化完整指南

概述 将大型语言模型 (LLM) 与人类价值观和偏好相结合是一项挑战。传统方法&#xff0c;例如 [从人类反馈中强化学习](&#xff08;RLHF&#xff09;通过整合人类输入来完善模型输出&#xff0c;为这一领域的研究铺平了道路。然而&#xff0c;RLHF 可能非常复杂且资源密集&…

CVE-2024-27198 和 CVE-2024-27199:JetBrains TeamCity 服务器的漏洞利用及其防护措施

引言 JetBrains TeamCity 作为一个广泛使用的持续集成和部署工具&#xff0c;其安全性备受关注。然而&#xff0c;最近披露的CVE-2024-27198和CVE-2024-27199两个漏洞揭示了该平台存在的重大安全隐患。这些漏洞允许攻击者通过绕过身份验证机制&#xff0c;创建未经授权的管理员…