小阿轩yx-LVS+Keepalived群集

小阿轩yx-LVS+Keepalived群集

Keepalived 双机热备份基础知识

  • 起初是专门针对 LVS 设计的一款强大的辅助工具
  • 主要用来提供故障切换(Failover)和健康检査(HealthChecking)功能—判断LVS 负载调度器、节点服务器的可用性
  • 当 master 主机出现故障及时切换到backup 节点保证业务正常
  • 当master 故障主机恢复后将其重新加入群集并且业务重新切换回 master 节点

Keepalived 概述及安装

官方网站 http://www.keepalived.org/

  • 非 LVS 群集环境中使用时,Keepalived 也可以作为热备软件使用
Keepalived 的热备方式
  • 采用 VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议)热备份协议,以软件的方式实现Linux服务器的多机热备功能。
  • VRRP是针对路由器的一种备份解决方案—由多台路由器组成一个热备组,通过共用的虚拟 IP地址对外提供服务;
  • 每个热备组内同一时刻只有一台主路由器提供服务,其他路由器处于冗余状态。
  • 若当前在线的路由器失效,则其他路由器会自动接替(优先级决定接替顺序)虚拟IP地址,以继续提供服务
  • 热备组内的每台路由器都可能成为主路由器,虚拟路由器的IP地址(VIP)可以在热备组内的路由器之间进行转移,别称:漂移 IP地址
  • 使用 Keepalived 时,漂移地址的实现不需要手动建立虚接口配置文件(如 ens33:0),而是由Keepalived 根据配置文件自动管理。

Keepalived 的安装与服务控制

安装 Keepalived

首先关闭防火墙、内核机制,还要再关闭网络软件包

[root@localhost ~]# systemctl stop NetworkManager
[root@localhost ~]# setenforce 0
[root@localhost ~]# systemctl stop firewalld

安装 Keepalived ipvsadm 所需软件包 

[root@localhost ~]# yum -y install keepalived ipvsadm

安装之后设置开机启动

[root@localhost ~]# systemctl enable keepalived

使用 Keepalived 实现双机热备

  • 基于 VRRP的热备方式,Keepalived可以用作服务器的故障切换
  • 每个热备组可以有多台服务器—最常用的就是双机热备
  • 双机热备方案中,故障切换主要针对虚拟 IP地址的漂移来实现,因此能够适用于各种应用服务器(不管是 Web、FTP、Mail,还是 SSH、DNS……)。
  • 主、备服务器中都需要安装Keepalived,使用 YUM 方式安装 httpd 提供 Web 服务。

主服务器的配置
  • Keepalived 服务的配置目录位于/etc/keepalived/。
  • keepalived.conf 是主配置文件。
  • 另外包括一个子目录 samples/
  • 在 Keepalived 的配置文件中,使用“global defs {…}”区段指定全局参数,使用vrrp_instance 实例名称{…}”区段指定 VRRP 热备参数,注释文字以“!”符号开头。

关闭防火墙

[root@localhost ~]# systemctl stop firewalld

进入keepalived文件 

[root@localhost ~]# cd /etc/keepalived/

复制keepalived文件 

[root@localhost keepalived]# cp keepalived.conf keepalived.conf.bak

  全局定义又包括两个子配置

[root@localhost keepalived]# vim keepalived.conf
//全局定义
global_defs {//本路由器(服务器)的名称router_id HA_TEST_R1notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 192.168.200.1smtp_connect_timeout 30router_id LVS_01vrrp_skip_check_adv_addr#vrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0
}//定义 VRRP 热备实例
vrrp_instance VI_1 {//热备状态,MASTER 表示主服务器state MASTER//承载 VIP 地址的物理接口interface ens33//虚拟路由器的ID号,每个热备组保持一致virtual_router_id 1//优先级,数值越大优先级越高priority 100//通告间隔秒数(心跳频率)advert_int 1//认证信息,每个热备组保持一致authentication {//认证类型auth_type PASS//密码字串auth_pass 1111}//指定漂移地址(VIP),可以有多个virtual_ipaddress {192.168.10.172}
}

vrrp_strict #严格执行VRRP协议规范,此模式不支持节点单播,如果配置了此参数,vip可以漂移到这台服务器,但是ping vip不通,因此需要将此参数去掉

notification_email: 表示keepalived在发生诸如切换操作时需要发送email通知以及email发送给哪些邮件地址邮件地址可以多个每行一个

notification_email_from admin@example.com: 表示发送通知邮件时邮件源地址是谁

smtp_server 127.0.0.1: 表示发送email时使用的smtp服务器地址这里可以用本地的sendmail来实现

smtp_connect_timeout 30: 连接smtp连接超时时间

router_id node1: 机器标识,fa

启动 Keepalived 服务

[root@localhost keepalived]# systemctl start keepalived

用 ip 命令查看自动添加 VIP 地址

[root@localhost keepalived]# ip a
2: ns33: <BROADCAST,MULTICAST,UP, LOWER UP>mtu 1500 qdisc pfifo fast state UP qlen1000link/ether 00:0c:29:93 :80:fb brd ff:ff:ff:ff:ff:ffinet 172.16.16.173/24 brd 172.16.16.255 scope global ens33valid lft forever preferred lft forever//自动设置的 VIP 地址inet 172.16.16.172/32 scope global ens33valid lft forever preferred lft foreverinet6 fe80::56be:f27:2b9b:823e/64 scope linkvalid lft forever preferred lft forever
备用服务器的配置 

同一个 Keepalived 热备组中,所有服务器 Keepalived 配置文件基本相同,包括虚拟路由器

  • ID 号
  • 认证信息
  • 漂移地址
  • 心跳频率

不同之处主要在于

  • 路由器名称
  • 热备状态
  • 优先级

路由器名称

  • 建议为每个参与热备的服务器指定不同的名称

热备状态

  • 至少应有一台主服务器,将状态设为MASTER;可以有多台备用的服务器,将状态设为 BACKUP

优先级

  • 数值越大则取得 VIP 控制权的优先级越高,因此主服务器的优先级应设为最高;其他备用服务器的优先级可依次递减,但不要相同,以免在争夺 VIP 控制权时发生冲突

配置备用服务器(可以有多台)时,可以参考主服务器的keepalived.conf 配置文件内容

只需修改

  • 路由器名称
  • 热备状态
  • 优先级

关闭防火墙、内核机制,还要再关闭网络软件包

[root@localhost ~]# systemctl stop NetworkManager
[root@localhost ~]# setenforce 0
[root@localhost ~]# systemctl stop firewalld

进入 keepalived

[root@localhost ~]# cd /etc/keepalived/

 复制 keepalived 文件

[root@localhost keepalived]# cp keepalived.conf keepalived.conf.bak

修改 keepalived 文件

[root@localhost keepalived]# vi keepalived.conf
global_defs {//本路由器(服务器)的名称router_id HA_TEST_R2
}notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.loc#vrrp_strictsmtp_server 192.168.200.1smtp_connect_timeout 30router_id LVS_02
}vrrp_instance VI_1 {//热备状态,BACKUP表示备用服务器state BACKUPinterface ens33virtual_router_id 1//优先级,数值应低于主服务器priority 99advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.10.172}
}

启动 Keepalived 服务

[root@localhost ~]# systemctl start keepalived

使用 ip 命令查看地址

[root@localhost keepalived]# ip a
2: ns33: <BROADCAST,MULTICAST,UP, LOWER UP>mtu 1500 qdisc pfifo fast state UP qlen1000link/ether 00:0c:29:93 :80:fb brd ff:ff:ff:ff:ff:ffinet 172.16.16.174/24 brd 172.16.16.255 scope global ens33valid lft forever preferred lft foreverinet6 fe80::56be:f27:2b9b:823e/64 scope linkvalid lft forever preferred lft forever

使用 curl 命令测试虚拟  ip 连通性

[root@localhost ~]# curl 192.168.10.172
测试双机热备功能

Keepalived 的日志消息保存在/var/log/messages 文件中,在测试主、备故障自动切换功能时,可以跟踪此日志文件来观察热备状态的变化。以针对连通性和 Web 服务的测试为例

连通性测试

  • 在客户机中执行“ping-t 172.16.16.172”命令,能够正常、持续 ping通,根据以下操作继续观察测试结果。
  • 停止启用主服务器的 Keepalived 服务,发现 ping 测试只中断了1或2个包即恢复正常,说明己有其他服务器接替 VIP地址,并及时响应客户机请求。
  • 重新启用主服务器的 Keepalived 服务,发现 ping 测试再次中断1或2个包即恢复正常,说明主服务器已恢复正常,并夺回 VIP 地址的控制权。

web访问测试

  • 客户机中访问 http://172.16.16.172/,将看到由主服务器 172.16.16.173 提供的网页文档
  • 停止启用主服务器的Keepalived 服务,再次访问上述 Web 服务,将看到由备用服务器 172.16.16.174 提供的网页文档,说明 VIP 地址已切换至备用服务器
  • 重新启用主服务器的 Keepalived 服务,再次访问上述 Web 服务,将看到重新由主服务器 172.16.16.173 提供的网页文档,说明主服务器已重新夺取 VIP 地址

查看日志记录

  • 在执行主、备服务器故障切换的过程中,分别观察各自的/var/log/messages 日志文件,可以看到 MASTER、SLAVE 状态的迁移记录。
  • 主服务器中,Keepalived 服务状态先变为“stop”,移除 VIP 地址,恢复后重新变为 MASTER
  • 备用服务器中,状态先切换为 MASTER,待主服务器恢复后再交回控制权

LVS+Keepalived 高可用群集

  • Keepalived 的设计目标是构建高可用的 LVS 负载均衡群集
  • 可以调用 ipvsadm 工具来创建虚拟服务器、管理服务器池,而不仅仅用作双机热备。
  • 使用Keepalived 构建 LVS 群集更加简便易用

主要优势体现

  • 对LVS负载调度器实现热备切换,提高可用性;
  • 对服务器池中的节点进行健康检查,自动移除失效节点,恢复后再重新加入。

  • 使用 Keepalived 构建 LVS 群集时,也需要用到 ipvsadm 管理工具
  • 但大部分工作会由 Keepalived 自动完成

配置主调度器

全局配置、热备配置

关闭防火墙、内核机制,还要关闭网络软件包

[root@localhost ~]# systemctl stop NetworkManager
[root@localhost ~]# setenforce 0
[root@localhost ~]# systemctl stop firewalld

安装 Keepalived ipvsadm 软件包

[root@localhost ~]# yum -y install keepalived ipvsadm

启动 Keepalived 服务

[root@localhost ~]# systemctl start keepalived

 进入 Keepalived 目录并复制 Keepalived 文件

[root@localhost ~]# cd /etc/keepalived/
[root@localhost keepalived]# cp keepalived.conf keepalived.conf.bak

主服务器 Keepalived 配置

[root@localhost keepalived]# vim keepalived.conf
global_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.loc//注释掉#vrrp_strictsmtp_server 192.168.200.1smtp_connect_timeout 30//主调度器的名称router_id LVS_01
}vrrp_instance VI_1 {//主调度器的热备状态state MASTERinterface ens33virtual_router_id 51//主调度器的优先级priority 100advert_int 1authentication {//主、从热备认证信息auth_type PASSauth_pass 1111}virtual_ipaddress {//指定群集 VIP 地址192.168.10.172}
}virtual_server 192.168.10.172 80 {delay_loop 6lb_algo rrlb_kind DRnat_mask 255.255.255.0
!    persistence_timeout 50protocol TCPreal_server 192.168.10.103 80 {weight 1TCP_CHECK {connect_port 80connect_timeout 3nb_get_retry 3delay_before_retry 3}}real_server 192.168.10.104 80 {weight 1TCP_CHECK {connect_port 80connect_timeout 3nb_get_retry 3delay_before_retry 3}}
}

persistence_timeout 50:这个参数的意义是保持客户端的请求在这个时间段内全部发到同一个真实服务器

主服务器内核参数配置

[root@localhost ~]# vim /etc/sysctl.conf
//在末尾添加
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0

重载 

[root@localhost ~]# sysctl -p

重启 Keepalived 服务

[root@localhost keepalived]# systemctl restart keepalived
[root@localhost keepalived]# ip add show dev ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000link/ether 00:0c:29:ae:7f:64 brd ff:ff:ff:ff:ff:ffinet 192.168.10.101/24 brd 172.16.16.255 scope global ens33valid_lft forever preferred_lft foreverinet 192.168.10.172/32 scope global ens33valid_lft forever preferred_lft forever

配置从调度器

与主调度器基本相同,也包括

  • 全局配置
  • 热备配置
  • 服务器池配置

只需调整下面参数

  • router_id
  • state
  • priority

关闭防火墙、内核机制,还要关闭 NetworkManager

[root@localhost ~]# systemctl stop NetworkManager
[root@localhost ~]# setenforce 0
[root@localhost ~]# systemctl stop firewalld

安装 Keepalived 服务

[root@localhost ~]# yum -y install keepalived ipvsadm

启动服务

[[root@localhost ~]# systemctl start keepalived

进入 Keepalived 目录

[root@localhost ~]# cd /etc/keepalived/

复制 Keepalived 文件 

[root@localhost keepalived]# cp keepalived.conf keepalived.conf.bak

修改 Keepalived 文件

[root@localhost keepalived]# vim keepalived.conf
global_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.loc#vrrp_strictsmtp_server 192.168.200.1smtp_connect_timeout 30//从调度器名称router_id LVS_02
}vrrp_instance VI_1 {//从调度器热备状态state BACKUPinterface ens33virtual_router_id 51//从调度器优先级priority 99advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.10.172}
}virtual_server 192.168.10.172 80 {delay_loop 6lb_algo rrlb_kind DRnat_mask 255.255.255.0
!    persistence_timeout 50protocol TCPreal_server 192.168.10.101 80 {weight 1TCP_CHECK {connect_port 80connect_timeout 3nb_get_retry 3delay_before_retry 3}}real_server 192.168.10.102 80 {weight 1TCP_CHECK {connect_port 80connect_timeout 3nb_get_retry 3delay_before_retry 3}}
}

从调度器内核参数的配置

[root@localhost ~]# vim /etc/sysctl.conf
//在末尾添加
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0

重载 

[root@localhost ~]# sysctl -p

重启 Keepalived 服务

[root@localhost keepalived]# systemctl restart keepalived
服务器池配置

web01 服务器配置

关闭防火墙

[root@localhost ~]# systemctl stop firewalld

安装 httpd 服务

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

进入网络目录

[root@localhost ~]# cd /etc/sysconfig/network-scripts/

复制 lo 文件

[root@localhost network-scripts]# cp ifcfg-lo ifcfg-lo:0

修改 lo:0 文件

[root@localhost network-scripts]# vim ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.10.172
NETMASK=255.255.255.255
ONBOOT=yes

添加配置文件 

[root@localhost network-scripts]# vim /etc/rc.local
/sbin/route add -host 192.168.10.172 dev lo:0

添加路由

[root@localhost network-scripts]# route add -host 192.168.10.172 dev lo:0

 内核参数设置 

[root@localhost ~]# vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2

添加测试页面 

[root@localhost ~]# vim /var/www/html/index.html
test web01

重启网络服务

[root@localhost network-scripts]# systemctl restrt network

web02 服务配置

关闭防火墙

[root@localhost ~]# systemctl stop firewalld

安装 httpd 服务 

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

进入 network 目录

[root@localhost ~]# cd /etc/sysconfig/network-scripts/

复制 lo 文件

[root@localhost network-scripts]# cp ifcfg-lo ifcfg-lo:0

修改 lo:0 文件

[root@localhost network-scripts]# vim ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.10.172
NETMASK=255.255.255.255
ONBOOT=yes

添加配置文件

[root@localhost network-scripts]# vim /etc/rc.local
/sbin/route add -host 192.168.10.172 dev lo:0

内核参数设置 

[root@localhost ~]# vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2

添加测试页面 

[root@localhost ~]# vim /var/www/html/index.html
test web02

 添加路由

[root@localhost network-scripts]# route add -host 192.168.10.172 dev lo:0

重启服务 

[root@localhost network-scripts]# systemctl restrt network
测试LVS+Keepalived高可用性

客户端访问网站

[root@localhost ~]# curl 192.168.10.172

刷新页面并观察网页的变化

客户端使用脚本测试

[root@localhost ~]# for i in $(seq 10);do curl http://192.168.10.172;done

生产环境中可以使用NFS服务器保证网站代码的一致性,在测试环境中为了观察效果,web服务器池中的网站代码可以不一样,更加便于观察实验效果。

测试计算机不要使用master调度器,在master调度器上访问VIP时,调度器不会将访问的请求调度到web服务器,而是自己尝试解析;在web服务器上测试时只能访问到自己的网页,无法实现调度。所以客户端一定要使用独立的测试计算机,或者使用处于BACKUP状态的调度器。

小阿轩yx-LVS+Keepalived群集

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

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

相关文章

LeetCode-刷题记录-滑动窗口合集(本篇blog会持续更新哦~)

一、滑动窗口概述 滑动窗口&#xff08;Sliding Window&#xff09;是一种用于解决数组&#xff08;或字符串&#xff09;中子数组&#xff08;或子串&#xff09;问题的有效算法。 Sliding Window核心思想&#xff1a; 滑动窗口技术的基本思想是维护一个窗口&#xff08;一般…

odoo 物联网 设备数据采集方案

图一 架构手稿(许老师专属) 图二 架构简图 部署 方案一&#xff1a; odoo业务数据库与设备采集数据库使用一个instance。 缺点&#xff1a;重启pg服务相互影响。 方案二&#xff1a; odoo业务数据库与设备采集数据库独立部署&#xff0c;使用两个instance。 优点&#xff1a;…

简单的git pull fail Can‘t update has no tracked branch解决记录

简单的git pull fail Can‘t update has no tracked branch解决记录 1. 问题描述 上午同事使用idea拉取代码的时候&#xff0c;发现拉取不了&#xff0c;提示用户权限问题&#xff0c;之后修改了git用户信息&#xff0c;发现还是拉取不了分支代码&#xff0c;然后删除了git r…

Java基础:爬虫

1.本地爬虫 Pattern:表示正则表达式 Matcher:文本匹配器&#xff0c;作用按照正则表达式的规则去读取字符串&#xff0c;从头开始读取。在大串中去找符合匹配规则的子串。 1.2.获取Pattern对象 通过Pattern p Pattern.compile("正则表达式");获得 1.3.…

Spire.PDF for .NET【文档操作】演示:以特定的缩放比例/百分比打开 PDF 文件

有时&#xff0c;我们可能需要在显示 PDF 文件时更改缩放比例以满足我们的要求。在本文中&#xff0c;我们将演示如何使用 Spire.PDF for .NET 以特定的缩放比例/百分比&#xff08;例如默认值、100% 或任何其他所需的缩放比例&#xff09;打开 PDF 文件。 Spire.PDF for .NET…

一种频偏估计与补偿方法

一种简易的频偏估计补偿方法&#xff0c;使用QAM等信号。估计精度受FFT长度限制&#xff0c;可以作为粗频偏估计。 Nfft 1024; % FFT长度 N 10*Nfft; % 仿真符号数 M 16; % 调制QAM16 freq 1e…

【SpringBoot3学习 | 第2篇】SpringBoot3整合+SpringBoot3项目打包运行

文章目录 一. SpringBoot3 整合 SpringMVC1.1 配置静态资源位置1.2 自定义拦截器&#xff08;SpringMVC配置&#xff09; 二. SpringBoot3 整合 Druid 数据源三. SpringBoot3 整合 Mybatis3.1 Mybatis整合3.2 声明式事务整合配置3.3 AOP整合配置 四. SpringBoot3 项目打包和运行…

三万字带你一遍跑通uer

三万字带你一遍跑通uer 参考文档 今天给大家介绍个非常强大的项目uer&#xff0c;集成了许多可以做自然语言的东西&#xff0c;效果的话也非常好&#xff0c;很适合企业级的应用&#xff01; 1. 先将项目uer从github拉取下来&#xff08;zip或git都ok&#xff09; 2. 用pycha…

Qt项目:基于Qt实现的网络聊天室---注册模块

文章目录 基本页面设计创建登录界面创建注册界面优化样式完善注册类界面 客户端逻辑完善客户端增加post逻辑客户端配置管理 邮箱注册服务认证服务读取配置邮箱验证服务联调设置验证码过期封装redis操作类封装redis连接池注册功能Server端接受注册请求封装mysql连接池封装DAO操作…

【CV炼丹师勇闯力扣训练营 Day24:§7 回溯3】

CV炼丹师勇闯力扣训练营 代码随想录算法训练营第24天 93 复原IP地址 有效 IP 地址 正好由四个整数&#xff08;每个整数位于 0 到 255 之间组成&#xff0c;且不能含有前导 0&#xff09;&#xff0c;整数之间用 ‘.’ 分隔。 例如&#xff1a;“0.1.2.201” 和 “192.168.…

智慧校园变革之路:资产标签设置功能的关键应用

在智慧校园的资产管理实践中&#xff0c;资产标签设置扮演着桥梁角色&#xff0c;将实体资产与数字化信息紧密相连&#xff0c;极大地提升了管理的效率与精确度。这项功能的核心在于&#xff0c;为校园内的每一项固定资产配备独一无二的标识——可能是传统的条形码、二维码&…

适合金融行业的国产传输软件应该是怎样的?

对于金融行业来说&#xff0c;正常业务开展离不开文件传输场景&#xff0c;一般来说&#xff0c;金融行业常用的文件传输工具有IM通讯、邮件、自建文件传输系统、FTP应用、U盘等&#xff0c;这些传输工具可以基础实现金融机构的文件传输需求&#xff0c;但也存在如下问题&#…

科普文:一文搞懂nginx原理和实战

1. Nginx简介与核心架构 1.1 Nginx简介 Nginx (engine x) 是一个高性能的 HTTP 和反向代理服务器&#xff0c;也是一个 IMAP/POP3/SMTP 邮件代理服务器。 由 Igor Sysoev 于2004年首次发布&#xff0c;其设计目标是解决 C10K 问题&#xff0c;即在一台服务器上同时处理一万个并…

2024年7月6日 十二生肖 今日运势

小运播报&#xff1a;2024年7月6日&#xff0c;星期六&#xff0c;农历六月初一 &#xff08;甲辰年庚午月辛未日&#xff09;&#xff0c;法定节假日。 红榜生肖&#xff1a;猪、马、兔 需要注意&#xff1a;狗、鼠、牛 喜神方位&#xff1a;西南方 财神方位&#xff1a;正…

C# 类型转换之显式和隐式

文章目录 1、显式类型转换2. 隐式类型转换3. 示例4. 类型转换的注意事项5. 类型转换的应用示例总结 在C#编程中&#xff0c;类型转换是一个核心概念&#xff0c;它允许我们在程序中处理不同类型的数据。类型转换可以分为两大类&#xff1a;显式类型转换&#xff08;Explicit Ca…

AR视频技术与EasyDSS流媒体视频管理平台:打造沉浸式视频体验

随着增强现实&#xff08;AR&#xff09;技术的飞速发展&#xff0c;其在各个领域的应用日益广泛。这项技术通过实时计算摄影机影像的位置及角度&#xff0c;将虚拟信息叠加到真实世界中&#xff0c;为用户带来超越现实的感官体验。AR视频技术不仅极大地丰富了我们的视觉体验&a…

c++重定向输出和输出(竞赛讲解)

1.命令行重定向 在命令行中指定输出文件 指令 .\重定向学习.exe > 1.txt 效果 命令行输入和输出 指令 .\重定向学习.exe < 2.txt > 1.txt 效果 代码 #include<bits/stdc++.h> using namespace std; int n; int main(){cin>>n;for(int i=0;i<n;i…

C++ 类和对象 构造函数

一 类的6个默认成员函数&#xff1a; 如果一个类中什么成员都没有&#xff0c;简称为空类。 例&#xff1a; #include <iostream> class Empty {// 空类&#xff0c;什么成员都没有 }; 空类中真的什么都没有吗&#xff1f;并不是&#xff0c;任何类在什么都不写时&a…

如何使用 SwiftUI 构建 visionOS 应用

文章目录 前言WindowsVolumes沉浸式空间结论 前言 Apple Vision Pro 即将推出&#xff0c;现在是看看 SwiftUI API 的完美时机&#xff0c;这使我们能够将我们的应用程序适应 visionOS 提供的沉浸式世界。苹果表示&#xff0c;构建应用程序的最佳方式是使用 Swift 和 SwiftUI。…

鸿翼ECM统一AI检索应用全景,为企业打造全方位搜索服务

随着企业的发展和信息化进程的加快&#xff0c;海量数据已沉淀至企业各类系统&#xff0c;系统间信息孤立、信息利用率低、数据价值无法发挥成为制约企业发展的重要因素。如何对散落在企业各系统中的数据、内容进行统一管理和高效利用&#xff0c;实现高效精准的信息检索&#…