Linux软件安装 —— PostgreSQL高可用集群安装(postgreSQL + repmgr主从复制 + keepalived故障转移)

文章目录

  • 一、节点说明
  • 二、软件下载
  • 三、安装PostgreSQL
  • 四、安装repmgr
      • 1、前置准备
      • 2、编译安装(两台节点)
      • 3、配置repmgr
      • 4、添加主从到repmgr集群
  • 五、安装keepalived(root用户)
      • 1、编译并安装(两台节点)
      • 2、配置keepalived
      • 3、启动
  • 六、测试验证
      • 1、初始状态验证
      • 2、主从复制测试
      • 3、手动主从切换触发VIP漂移
      • 4、主节点挂掉后VIP漂移与恢复
      • 5、小结
  • 七、可能发生的问题
      • 1、主节点宕机后主从切换失败
      • 2、手动主从失败

一、节点说明

1、相关软件

IP主机名部署软件
192.168.10.102node02postgresql,keepalived,repmgr
192.168.10.103node03postgresql,keepalived,repmgr
192.168.10.110vip

二、软件下载

PostgreSQL:PostgreSQL: File Browser

Keepalived:Keepalived for Linux

repmgr:repmgr - Replication Manager for PostgreSQL clusters

本文使用:

postgresql-16.10.tar.gz

keepalived-2.2.4.tar.gz

repmgr-5.5.0.tar.gz


三、安装PostgreSQL

参考本人此篇文章:Linux软件安装 —— PostgreSQL集群安装(主从复制集群)

上文是采用postgreSQL原生的流式复制搭建的主从集群,
本文是在原生流式复制的基础上做高可用搭建。


四、安装repmgr

1、前置准备

(1)安装依赖(两台节点)

# 安装依赖包yuminstall-y libcurl-devel json-c-devel openssl-devel\postgresql16-devel libevent-devel ncurses-devel libedit-devel\libselinux-devel libxslt-devel perl-devel systemd-devel libxml2-devel\krb5-devel flex bison popt-devel

2、编译安装(两台节点)

# 使用postgres用户su- postgres# 解压tar-zxvf repmgr-5.5.0.tar.gzcd/opt/module/pgsql16/repmgr-5.5.0# 编译安装./configurePG_CONFIG=/opt/module/pgsql16/pgsql/bin/pg_config# 这里是pg数据库bin目录下的执行文件make&&makeinstall# 检查版本号,验证是否安装成功repmgr --version

3、配置repmgr

(1)配pgsql.conf(配置主节点即可,从节点需要用repmgr重新同步)

# 配置postgresql.confvim$PGDATA/postgresql.conf# 修改shared_preload_libraries='repmgr'# 添加IP段vi$PGDATA/pg_hba.conf# 这允许repmgr用户进行流复制连接,并采用 scram-sha-256 加密认证。hostreplication repmgr192.168.10.102/32 scram-sha-256hostreplication repmgr192.168.10.103/32 scram-sha-256# 这允许repmgr用户连接repmgr数据库进行元数据管理,并采用 scram-sha-256 加密认证。hostrepmgr repmgr192.168.10.102/32 scram-sha-256hostrepmgr repmgr192.168.10.103/32 scram-sha-256# 重启主库pg_ctl -D$PGDATA-l$PGHOME/logfile restart

(2)配置repmgr免密登录(两台节点)

# 需要创建vim/home/postgres/.pgpass# hostname:port:database:username:password192.168.10.102:5432:replication:repmgr:repmgr192.168.10.103:5432:replication:repmgr:repmgr192.168.10.102:5432:repmgr:repmgr:repmgr192.168.10.103:5432:repmgr:repmgr:repmgr192.168.10.102:5432:*:postgres:postgres192.168.10.103:5432:*:postgres:postgres# 权限必须600chmod600/home/postgres/.pgpass

(3)创建用于同步的用户及数据库(主库)

# 进入pgsql客户端psql# 创建repmgr用户,需要超级用户权限CREATEUSERrepmgrWITHSUPERUSER LOGIN ENCRYPTED PASSWORD'repmgr';# 创建repmgr数据库,所属用户为repmgr用户CREATEDATABASErepmgrWITHOWNER repmgr;GRANTALLPRIVILEGESONDATABASErepmgrTOrepmgr;

(4)repmgr.conf

主库配置

# 这个配置文件是没有的,需要新建,不要放在pgsql数据目录就行mkdir-p /opt/module/pgsql16/repmgr/cd/opt/module/pgsql16/repmgr/vimrepmgr.confnode_id=2# 节点唯一IDnode_name='node02'# 节点名称conninfo='host=192.168.10.102 port=5432 user=repmgr dbname=repmgr connect_timeout=2'# 连接信息data_directory='/opt/module/pgsql16/pgdata'# 数据目录pg_bindir='/opt/module/pgsql16/pgsql/bin'repmgr_bindir='/opt/module/pgsql16/pgsql/bin'use_replication_slots=yes# 使用复制槽,避免WAL日志被过早删除# repmgrdrepmgrd_service_start_command='repmgrd -f /opt/module/pgsql16/repmgr/repmgr.conf -p /opt/module/pgsql16/repmgr/repmgrd.pid -d'# 开启repmgrd_service_stop_command='kill `cat /opt/module/pgsql16/repmgr/repmgrd.pid`'# 关闭promote_command='repmgr standby promote -f /opt/module/pgsql16/repmgr/repmgr.conf --log-to-file'# 提升命令follow_command='repmgr standby follow -f /opt/module/pgsql16/repmgr/repmgr.conf --log-to-file -W --upstream-node-id=%n'# 跟随命令# 复制配置failover=automatic# 故障转移模式monitor_interval_secs=5# 监控间隔connection_check_type=ping# 连接检查类型reconnect_attempts=3# 重连尝试次数reconnect_interval=5# 重连间隔(秒)# 日志配置log_level=INFO# 日志级别log_file='/opt/module/pgsql16/repmgr/repmgr.log'# 日志文件log_status_interval=300# 状态日志间隔

从库配置

# 这个配置文件是没有的,需要新建,不要放在pgsql数据目录就行mkdir-p /opt/module/pgsql16/repmgr/cd/opt/module/pgsql16/repmgr/vimrepmgr.confnode_id=3# 节点唯一IDnode_name='node03'# 节点名称conninfo='host=192.168.10.103 port=5432 user=repmgr dbname=repmgr connect_timeout=2'# 连接信息data_directory='/opt/module/pgsql16/pgdata'# 数据目录pg_bindir='/opt/module/pgsql16/pgsql/bin'repmgr_bindir='/opt/module/pgsql16/pgsql/bin'use_replication_slots=yes# 使用复制槽,避免WAL日志被过早删除# repmgrdrepmgrd_service_start_command='repmgrd -f /opt/module/pgsql16/repmgr/repmgr.conf -p /opt/module/pgsql16/repmgr/repmgrd.pid -d'# 开启repmgrd_service_stop_command='kill `cat /opt/module/pgsql16/repmgr/repmgrd.pid`'# 关闭promote_command='repmgr standby promote -f /opt/module/pgsql16/repmgr/repmgr.conf --log-to-file'# 提升命令follow_command='repmgr standby follow -f /opt/module/pgsql16/repmgr/repmgr.conf --log-to-file --upstream-node-id=%n'# 跟随命令# 复制配置failover=automatic# 故障转移模式monitor_interval_secs=5# 监控间隔connection_check_type=ping# 连接检查类型reconnect_attempts=3# 重连尝试次数reconnect_interval=5# 重连间隔(秒)# 日志配置log_level=INFO# 日志级别log_file='/opt/module/pgsql16/repmgr/repmgr.log'# 日志文件log_status_interval=300# 状态日志间隔

4、添加主从到repmgr集群

(1)添加主库到repmgr(操作主库)

# 添加主库repmgr -f /opt/module/pgsql16/repmgr/repmgr.conf primary register -F# 启动repmgrrepmgr -f /opt/module/pgsql16/repmgr/repmgr.conf daemon start# 查看repmgr信息repmgr -f /opt/module/pgsql16/repmgr/repmgr.conf cluster show repmgr -f /opt/module/pgsql16/repmgr/repmgr.confservicestatus

(2)从库同步主库数据(操作从库)

# 停止从库pg_ctl -D$PGDATA-l$PGHOME/logfile stop# 先清空从库数据目录rm-rf /opt/module/pgsql16/pgdata/*# 检查从库是否具备同步条件repmgr -h192.168.10.102 -U repmgr -d repmgr -f /opt/module/pgsql16/repmgr/repmgr.conf standby clone --dry-run# 同步从库repmgr -h192.168.10.102 -U repmgr -d repmgr -f /opt/module/pgsql16/repmgr/repmgr.conf standby clone# 此时postgresql.auto.conf中显示的是repmgr账号的信息# primary_conninfo = 'host=192.168.10.102 user=repmgr application_name=''pg-node2'' password=repmgr port=5432'# 启动从库pg_ctl -D$PGDATA-l$PGHOME/logfile start

主库从库分别查看同步状态

psql-U repmgr repmgr=# \x# 主库查看repmgr=# select * from pg_stat_replication;# 从库查看repmgr=# SELECT * FROM pg_stat_wal_receiver;


同步没问题就可以将从库添加到repmgr

(3)添加从库到repmgr(操作从库)

# 添加从库repmgr -f /opt/module/pgsql16/repmgr/repmgr.conf standby register -F# 启动repmgrrepmgr -f /opt/module/pgsql16/repmgr/repmgr.conf daemon start# 查看repmgr信息repmgr -f /opt/module/pgsql16/repmgr/repmgr.conf cluster show repmgr -f /opt/module/pgsql16/repmgr/repmgr.confservicestatus


五、安装keepalived(root用户)

1、编译并安装(两台节点)

# 解压tar-zxvf keepalived-2.2.4.tar.gzcdkeepalived-2.2.4# 编译安装mkdir-p /opt/module/keepalived/ ./configure --prefix=/opt/module/keepalived/make&&makeinstall# 配置环境变量vim/etc/profile.d/my_env.sh# KEEPALIVED_HOMEexportKEEPALIVED_HOME=/opt/module/keepalivedexportPATH=$PATH:$KEEPALIVED_HOME/bin:$KEEPALIVED_HOME/sbinsource/etc/profile.d/my_env.sh# 检查版本号,验证是否安装成功keepalived --version# 创建软链接方便系统调用ln-s /opt/module/keepalived/sbin/keepalived /usr/sbin/

2、配置keepalived

# 备份原文件cd/opt/module/keepalived/etc/keepalivedcpkeepalived.conf keepalived.conf.bakvimkeepalived.conf

(1)主节点配置

!Configuration Fileforkeepalived global_defs{router_id node02}vrrp_script check_pg_alived{script"/opt/module/keepalived/etc/keepalived/check_postgres.sh"interval5# 检查间隔5秒weight20# 优先级降低加减20fall2# 连续2次失败才认为KOrise1# 1次成功就认为恢复timeout5# 脚本执行超时时间}vrrp_instance VI_PG{state BACKUP# nopreempt # 非抢占模式interface ens33# 网络接口(根据实际修改)virtual_router_id110# 虚拟路由ID,各节点配置必须一致priority100# 节点优先级,advert_int1authentication{auth_type PASS auth_pass1111# 加入集群密码,需保持一致}track_script{check_pg_alived}virtual_ipaddress{# VIP网卡信息192.168.10.110/24 dev ens33 label ens33:pgvip# VIP地址}}

(2)从节点配置

!Configuration Fileforkeepalived global_defs{router_id node03}vrrp_script check_pg_alived{script"/opt/module/keepalived/etc/keepalived/check_postgres.sh"interval5# 检查间隔5秒weight20# 优先级降低加减20fall2# 连续2次失败才认为KOrise1# 1次成功就认为恢复timeout5# 脚本执行超时时间}vrrp_instance VI_PG{state BACKUP# nopreempt # 非抢占模式interface ens33# 网卡名virtual_router_id110# 虚拟路由ID,各节点配置必须一致priority90# 节点优先级,抢占模式与权重weight组合使用advert_int1# VRRP通告间隔1秒authentication{auth_type PASS auth_pass1111# 加入集群密码,需保持一致}track_script{check_pg_alived}virtual_ipaddress{# VIP网卡信息192.168.10.110/24 dev ens33 label ens33:pgvip# VIP地址}}

(3)check_postgres.sh配置(主从一样配置)

# 在两台服务器的 /opt/keepalived/conf 目录下创建脚本vim/opt/module/keepalived/etc/keepalived/check_postgres.sh#!/bin/bash# 1. 检查PostgreSQL服务是否运行count=`ps-ef|greppostgres|grep-vgrep|wc-l`if[$count-eq0];thenexit1# 服务停止fi# 2. 检查数据库连接if!su- postgres -c"psql -tAc 'SELECT 1;'">/dev/null2>&1;thenexit1# 无法连接fi# 3. 检查是否是主节点ROLE=$(su - postgres -c"psql -tAc 'SELECT pg_is_in_recovery();'"2>/dev/null)if["$ROLE"="f"];thenexit0# 主节点elseexit1# 从节点fichmod+x /opt/module/keepalived/etc/keepalived/check_postgres.sh

3、启动

# 启动keepalived -f /opt/module/keepalived/etc/keepalived/keepalived.conf -D# 查看进程psaux|grepkeepalived# 停止pkill-TERMkeepalived

六、测试验证

1、初始状态验证

# 1. 在node02,node03分别执行,检查VIP位置(应在Node02)ipaddr show ens33|grep192.168.10.110# 或者执行ssh远程命令,应跳转到node02ssh192.168.10.110# 2. 检查repmgr集群状态repmgr -f /opt/module/pgsql16/repmgr/repmgr.conf cluster show repmgr -f /opt/module/pgsql16/repmgr/repmgr.confservicestatus# 3. 检查流复制状态(在主节点执行)psql -c"SELECT client_addr, state, sync_state FROM pg_stat_replication;"# 4. 测试通过VIP连接psql -h192.168.10.110 -U postgres -c"SELECT inet_server_addr(), pg_is_in_recovery();"

2、主从复制测试

# 当前主节点node02,到主节点node02操作psql-h192.168.10.102-U postgres-c"CREATE TABLE test_rep2 (id int, name text);"psql-h192.168.10.102-U postgres-c"INSERT INTO test_rep2 VALUES (1, 'Hello from Master');"# VIP写入psql-h192.168.10.110-U postgres-c"INSERT INTO test_rep2 VALUES (2, 'Hello from VIP');"# 从库查询psql-h192.168.10.103-U postgres-c"SELECT * FROM test_rep2;"# 此外,从库是只读状态,进行增删改会报错psql-h192.168.10.103-U postgres-c"INSERT INTO test_rep2 VALUES (2, 'Hello from Slave');"

3、手动主从切换触发VIP漂移

# 当前主节点node02,到从节点node03操作# 查看当前状态repmgr -f /opt/module/pgsql16/repmgr/repmgr.conf cluster show repmgr -f /opt/module/pgsql16/repmgr/repmgr.confservicestatus# 从库执行,升级为主节点repmgr -f /opt/module/pgsql16/repmgr/repmgr.conf standby switchover --siblings-follow# 查看当前状态repmgr -f /opt/module/pgsql16/repmgr/repmgr.conf cluster show repmgr -f /opt/module/pgsql16/repmgr/repmgr.confservicestatus# 查看 VIP 是否漂移到node03ipaddr show ens33|grep192.168.10.110# 或者执行ssh远程命令,应跳转到node03ssh192.168.10.110# 验证主从复制# 主库操作psql -h192.168.10.103 -U postgres -c"INSERT INTO test_rep2 VALUES (3, 'Repmgr from Master');"# VIP写入psql -h192.168.10.110 -U postgres -c"INSERT INTO test_rep2 VALUES (4, 'Repmgr from VIP');"# 从库查询psql -h192.168.10.102 -U postgres -c"SELECT * FROM test_rep2;"# 此外,从库是只读状态,进行增删改会报错psql -h192.168.10.102 -U postgres -c"INSERT INTO test_rep2 VALUES (5, 'Hello from Slave');"


4、主节点挂掉后VIP漂移与恢复

# 当前主节点为node03# 停止主节点pg_ctl -D$PGDATA-l$PGHOME/logfile stop# 到node02查看repmgr状态,node02已经成为主节点repmgr -f /opt/module/pgsql16/repmgr/repmgr.conf cluster show repmgr -f /opt/module/pgsql16/repmgr/repmgr.confservicestatus# 查看 VIP 是否漂移到node02ipaddr show ens33|grep192.168.10.110# 或者执行ssh远程命令,应跳转到node02ssh192.168.10.110# 在node03执行,此命令功能重启pgsql并成为node02从节点repmgr -h192.168.10.102 -U repmgr -p5432-d repmgr -f /opt/module/pgsql16/repmgr/repmgr.confnoderejoin --force-rewind# 查看当前状态repmgr -f /opt/module/pgsql16/repmgr/repmgr.conf cluster show repmgr -f /opt/module/pgsql16/repmgr/repmgr.confservicestatus# 验证主从复制# 主库操作psql -h192.168.10.102 -U postgres -c"INSERT INTO test_rep2 VALUES (5, 'Repmgr02 from Master');"# VIP写入psql -h192.168.10.110 -U postgres -c"INSERT INTO test_rep2 VALUES (6, 'Repmgr02 from VIP');"# 从库查询psql -h192.168.10.103 -U postgres -c"SELECT * FROM test_rep2;"# 此外,从库是只读状态,进行增删改会报错psql -h192.168.10.103 -U postgres -c"INSERT INTO test_rep2 VALUES (6, 'Hello from Slave');"



5、小结

# 手动主从切换在从节点执行repmgr -f /opt/module/pgsql16/repmgr/repmgr.conf standby switchover --siblings-follow# 主节点挂掉发生主从切换在挂掉的节点执行,重启pgsql并成为从节点,-h 指向新的主节点repmgr -h192.168.10.103 -U repmgr -p5432-d repmgr -f /opt/module/pgsql16/repmgr/repmgr.confnoderejoin --force-rewind# 查看repmgr状态repmgr -f /opt/module/pgsql16/repmgr/repmgr.conf cluster show repmgr -f /opt/module/pgsql16/repmgr/repmgr.confservicestatus

七、可能发生的问题

1、主节点宕机后主从切换失败


上图可以看见Paused?表示repmgr集群被逻辑暂停了,此时主节点宕机,repmgr集群无法检测psql状态,导致主从切换不过去,生产环境确保Paused?值为no

# 从启主节点pg_ctl -D$PGDATA-l$PGHOME/logfile start# 立即解除暂停repmgr -f /opt/module/pgsql16/repmgr/repmgr.confserviceunpause# 手动暂停# repmgr -f /opt/module/pgsql16/repmgr/repmgr.conf service pause

2、手动主从失败

这个问题是系统找不到/opt/module/pgsql16/pgsql/lib这个目录

# 配置系统环境变量sudovim/etc/profile.d/my_env.shexportPGHOME=/opt/module/pgsql16/pgsqlexportPGDATA=/opt/module/pgsql16/pgdataexportPATH=$PATH:$PGHOME/binexportLD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PGHOME/lib# 重新加载环境变量sudosource/etc/profile.d/my_env.sh

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

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

相关文章

Linux软件安装 —— ClickHouse集群安装(集成Zookeeper)+ chproxy负载均衡

文章目录一、节点规划二、JDK安装三、Zookeeper安装四、ClickHouse安装1、软件下载(1)tar安装包下载(2)rpm安装包下载2、前置准备(1)CentOS取消打开文件数限制(2)CentOS取消SELINUX3…

Linux软件安装 —— ClickHouse单节点安装(rpm安装、tar安装两种安装方式)

文章目录 一、节点说明二、软件下载1、tar安装包下载2、rpm安装包下载 三、前置准备1、CentOS取消打开文件数限制2、CentOS取消SELINUX 四、安装1、tar安装2、rpm安装 五、配置clickhouse六、启动clickhouse七、密码配置1、default用户密码设置2、新建用户(1&#x…

HarmonyOS PC 多窗口,到底在解决什么

子玥酱 (掘金 / 知乎 / CSDN / 简书 同名) 大家好,我是 子玥酱,一名长期深耕在一线的前端程序媛 👩‍💻。曾就职于多家知名互联网大厂,目前在某国企负责前端软件研发相关工作,主要聚…

【无线传感器】基于遗传算法GA无线传感器网络中聚类以增强网络寿命附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和数学建模资料 &#x1f34…

那 HarmonyOS PC 应用到底该怎么落代码?

子玥酱 (掘金 / 知乎 / CSDN / 简书 同名) 大家好,我是 子玥酱,一名长期深耕在一线的前端程序媛 👩‍💻。曾就职于多家知名互联网大厂,目前在某国企负责前端软件研发相关工作,主要聚…

【机械臂路径规划】基于RRT算法规划一个6自由度路径,用于将SM-465变速箱的主轴从壳体中移出,同时避免与主箱体或已安装的副轴发生碰撞附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 🍎 往期回顾关注个人主页:Matlab科研工作室 👇 关注我领取海量matlab电子书和数学建模资料 &#…

基于51单片机的自动豆浆机系统 智能豆浆机

目录 系统概述硬件设计软件设计安全保护机制扩展功能 源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式! 系统概述 基于51单片机的自动豆浆机系统是一种智能化厨房设备,通过单片机控制实现豆浆制作全流程自动化。系统具备水位…

基于51单片机红外测温 非接触式红外测温仪 MLX90614 嵌入式系统

目录 MLX90614红外测温模块概述硬件连接与接口软件驱动实现温度数据处理校准与误差修正典型应用场景 源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式! MLX90614红外测温模块概述 MLX90614是一款非接触式红外测温传感器,由Me…

基于51单片机红外线感应自动门 液晶显示 自动 手动

目录 系统概述硬件组成功能实现核心代码片段注意事项 源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式! 系统概述 基于51单片机的红外线感应自动门系统结合了红外传感、液晶显示和自动/手动控制功能。该系统通过红外传感器检测人体信号&…

01.Nginx简介

01.Nginx简介01.Nginx简介 01.1 背景介绍———————————————————————————————————————————————————————————————————————————无敌小马爱学习…

计算机想学习某个方向,怎么知道学习路线

前言 最近很多初学计算机的同学,一直在问,说“甘哥,我对XXX方向比较感兴趣。现在我应该怎么规划,毕业的时候才能找到这个方向的好的公司的岗位呢” 针对同学的疑惑,阿甘总结下来,其实主要分为两类&#xff…

如何通过提示词减少AICG费片的痛点

在 AIGC 视频(如 Sora, Runway, Pika, Kling 等)领域,“费片率”(Wasted Footage Rate)是最大的痛点。 针对 视频 CG 生成,原本的通用文本“五维量规”需要进行深度的领域化改造。我们不再关注“回答是否礼…

基于SpringBoot的社区老人健康信息管理系统毕业设计源码

博主介绍:✌ 专注于Java,python,✌关注✌私信我✌具体的问题,我会尽力帮助你。 一、研究目的 本研究旨在设计并实现一个基于SpringBoot框架的社区老人健康信息管理系统。该系统旨在通过整合现代信息技术与社区养老服务,提高社区老人健康管理…

从玄学到工程:解构AI Agent开发的“铁三角”法则(分工/方法论/预算)

AI的“涌现”既是惊喜也是惊吓,微小的扰动都可能引发崩坏。驾驭它的关键在于建立“协作框架”:用【分工】隔离职责,用【方法论】固化思考路径,用【预算】设定止损边界。别让AI在“裸奔”中失控,要用工程化的铁律&#…

基于SpringBoot的车辆违章信息管理系统毕设源码

博主介绍:✌ 专注于Java,python,✌关注✌私信我✌具体的问题,我会尽力帮助你。 一、研究目的 本研究旨在设计并实现一个基于SpringBoot框架的车辆违章信息管理系统,以满足现代交通管理对于高效、便捷、智能化的需求。具体研究目的如下&…

基于SpringBoot的高校就业招聘系统毕设

博主介绍:✌ 专注于Java,python,✌关注✌私信我✌具体的问题,我会尽力帮助你。 一、研究目的 本研究旨在构建一个基于SpringBoot的高校就业招聘系统,以满足当前高校就业市场的需求,提升高校就业服务的质量和效率。具体研究目的如…

基于SpringBoot的宠物健康顾问系统毕设源码

博主介绍:✌ 专注于Java,python,✌关注✌私信我✌具体的问题,我会尽力帮助你。 一、研究目的 本研究旨在开发一套基于SpringBoot框架的宠物健康顾问系统,以实现对宠物健康问题的智能诊断与建议。具体研究目的如下: 构建一个功能…

LLM 裁判(LLM-as-a-judge)

LLM 裁判(LLM-as-a-judge) 是指利用强大的大语言模型(如 GPT-4, Claude 3.5, Gemini 1.5 Pro 等)作为“考官”,去评估其他模型生成的回复质量。 所谓的 “五维评分量规” 并没有一个绝对统一的国际标准,但在…

基于SpringBoot的扶贫助农系统毕业设计

博主介绍:✌ 专注于Java,python,✌关注✌私信我✌具体的问题,我会尽力帮助你。 一、研究目的 本研究旨在设计并实现一个基于SpringBoot框架的扶贫助农系统,以解决我国农村地区扶贫工作面临的实际问题。具体研究目的如下: 首先&a…

简洁深刻古典诗歌欣赏:孤舟系古树,不见渡人来

八十五野渡 孤舟系古树,不见渡人来。 唯有双凫影,时从水底开。 八十六早行 露重鞋帮湿,天低月尚悬。 忽闻山后语,挑担卖笋人。 八十七题竹 风吹千叶响,影扫一阶苔。 不为清虚意,何曾长此来…