CentOS7---基于 CentOS 7 构建 LVS-DR 群集

news2024/12/23 8:51:51

一、对比 LVS 负载均衡群集的 NAT 模式和 DR 模式,比较其各自的优势

NAT模式(地址转换)
原理:就是把客户端发来的数据包的IP头的目的地址,在负载均衡器上换成其中一台RS的IP地址 并发至此RS来处理,RS处理完后把数据交给负载均衡器,负载均衡器再把数据包原IP地址改为自己的IP,将目的地址改为客户端IP地址即可期间,无论是进来的流量,还是出去的流量,都必须经过负载均衡器(原路返回,只改变了Mac地址)

优点:集群中的物理服务器可以使用任何支持TCP/IP操作系统,只有负载均衡器需要一个合法的IP地址;

缺点:扩展性有限。当服务器节点(普通PC服务器)增长过多时,负载均衡器将成为整个系统的瓶颈 因为所有的请求包和应答包的流向都经过负载均衡器。当服务器节点过多时,大量的数据包都交汇在负载均衡器,速度就会变慢!

2、 直接路由(DR模式)
原理:负载均衡器和RS都使用同一个IP对外服务,但只有DR对ARP请求进行响应。所有RS对本身这个IP的ARP请求保持静默也就是说,网关会把对这个服务IP的请求全部定向给DR,而DR收到数据包后根据调度算法,找出对应的RS,把目的MAC地址改为RS的MAC(因为IP一致),并将请求分发给这台RS这时RS收到这个数据包。处理完成之后,由于IP一致,可以直接将数据返给客户,则等于直接从客户端收到这个数据包无异,处理后直接返回给客户端,由于负载均衡器要对二层包头进行改换,所以负载均衡器和RS之间必须在一个广播域也可以简单的理解为在同一台交换机上

优点:和TUN(隧道模式)一样,负载均衡器也只是分发请求,应答包通过单独的路由方法返回给客户端与VS-TUN相比,VS-DR这种实现方式不需要隧道结构,因此可以使用大多数操作系统做为物理服务器。

缺点:(不能说缺点,只能说是不足)要求负载均衡器的网卡必须与物理网卡在一个物理段上。

二、 基于 CentOS 7 构建 LVS-DR 群集

1、环境准备

主机名    IP              作用
node01   192.168.11.21  client
node02   192.168.11.22    LVS
node03   192.168.11.23    LVS
node04   192.168.11.24  RS-web1
node05   192.168.11.25  RS-web2

2、关闭防火墙和selinux

[root@node01 ~]# systemctl stop firewalld.service
[root@node01 ~]# systemctl disable firewalld.service
[root@node01 ~]# sed -i '/^SELINUX=/ c SELINUX=disabled' /etc/selinux/config

3、修改主机名和设置为静态IP

4、先在节点node04 node05准备俩个web服务器访问页面---4和5一样的配置

# 安装Apache软件,做web服务器
[root@node04 ~]# yum install httpd -y

# 提供测试页,为了区分用IP标识
[root@node04 ~]# echo "web test page...host is `hostname -I`." > /var/www/html/index.html

# 重启服务
[root@node04 ~]# systemctl start httpd.service 

# 本地测试访问
[root@node04 ~]# curl 192.168.11.24
web test page...host is 192.168.11.24 .

[root@node04 ~]# curl 192.168.11.25
web test page...host is 192.168.11.25 .

5、配置LVS负载均衡服务

第一种LVS配置方式:node02上配置

# 下载负载均衡工具
[root@node02 ~]# yum install ipvsadm.x86_64 -y

6、添加VIP地址,注意掩码

[root@node02 ~]# nmcli connection modify ens32 +ipv4.addresses 192.168.11.100/24
[root@node02 ~]# nmcli connection up ens32 
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)
[root@node02 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:3c:41:bb brd ff:ff:ff:ff:ff:ff
    inet 192.168.11.22/24 brd 192.168.11.255 scope global noprefixroute ens32
       valid_lft forever preferred_lft forever
    inet 192.168.11.100/24 brd 192.168.11.255 scope global secondary noprefixroute ens32
       valid_lft forever preferred_lft forever
    inet6 fe80::9543:bb74:6781:68d6/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

7、配置LVS策略

# 清除策略
[root@node02 ~]# ipvsadm -C

# 对TCP80端口提供负载分流服务,使用的调度为轮询
[root@node02 ~]# ipvsadm -A -t 192.168.11.100:80 -s rr 

# 查看本地规则
[root@node02 ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.11.100:80 rr

# 添加节点服务器RS
[root@node02 ~]# ipvsadm -a -t 192.168.11.100:80 -r 192.168.11.24:80 -g
[root@node02 ~]# ipvsadm -a -t 192.168.11.100:80 -r 192.168.11.25:80 -g
[root@node02 ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.11.100:80 rr
  -> 192.168.11.24:80             Route   1      0          0         
  -> 192.168.11.25:80             Route   1      0          0

8、保存配置,重启服务即失效

[root@node02 ~]# ipvsadm-save 
-A -t node02:http -s rr
-a -t node02:http -r 192.168.11.24:http -g -w 1
-a -t node02:http -r 192.168.11.25:http -g -w 1

9、配置说明

[删除方法]
# ipvsadm -D -t 192.168.11.100:80-s wrr
# ipvsadm -d -t 192.168.11.100:80 -r 192.168.11.24:80
[相关参数说明]
[root@node02 ~]# ipvsadm –help
-A 添加虚拟服务器
-t 设置群集地址(VIP,Virtual IP)
-s 指定负载调度算法
-a 添加真实服务器
-d 删除真实服务器
-r 指定真实服务器(Real Server)的地址
-m 使用NAT模式;-g、-i分别对应DR、TUN模式
-w 为节点服务器设置权重,默认为1

10、手工在RS端绑定VIP,添加本机访问VIP的路由信息

[root@node04 ~]# ifconfig lo:110 192.168.11.100 netmask 255.255.255.255 up
[root@node04 ~]# route add -host 192.168.11.100 dev lo

11、手工在RS端抑制ARP响应

[root@node05 ~]# echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@node05 ~]# echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@node05 ~]# echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@node05 ~]# echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce

PS:也可以使用arptables实现抑制arp

arptables -A INPUT -d $VIP -j DROP
arptables -A OUTPUT -s $VIP -j mangle --mangle-ip-s $RIP
# arptables-save > /etc/sysconfig/arptables
# systemctl enable --now arptables

12、测试

# 在LVS上监控 
[root@node02 ~]# watch  ipvsadm -Ln

# 在客户端上测试
[root@node01 ~]# for ((i=1;i<=10;i++)); do curl 192.168.11.100; done
web test page host is 192.168.11.25 
web test page host is 192.168.11.24 
web test page host is 192.168.11.25 
web test page host is 192.168.11.24 
web test page host is 192.168.11.25 
web test page host is 192.168.11.24 
web test page host is 192.168.11.25 
web test page host is 192.168.11.24 
web test page host is 192.168.11.25 
web test page host is 192.168.11.24

LVS调度器上动态监控

通过脚本实现

13、删除VIP

[root@node02 ~]# nmcli connection modify ens32 -ipv4.addresses 192.168.11.100/24
[root@node02 ~]# nmcli connection up ens32

14、开发脚本实现LVS-DR模式配置

LVS_director

[root@node02 ~]# cat /etc/init.d/lvs_dr
# 小样,自己写吧

15、添加执行权限

[root@node02 ~]# chmod +x lvs_dr.sh 
[root@node02 ~]# ll
total 8
-rw-------. 1 root root 1425 Apr 22 23:13 anaconda-ks.cfg
-rwxr-xr-x  1 root root 1748 Apr 23 05:00 lvs_dr.sh

16、添加到系统服务

[root@node02 ~]# cd /etc/init.d/
[root@node02 init.d]# chkconfig --add lvs_dr 
[root@node02 init.d]# chkconfig lvs_dr on

17、默认的启动级别

18、指定级别

19、测试脚本是否运行成功

[root@node02 ~]# systemctl start lvs_dr
[root@node02 ~]# systemctl status lvs_dr
[root@node02 ~]# ip a

20、三种显示主机路由方式

[root@node02 ~]# ip route 
[root@node02 ~]# route -n
[root@node02 ~]# netstat -rn

21、RS主机脚本

[root@node04 ~]# vim /etc/init.d/lvs_rs
# 哈哈哈哈

22、添加权限测试脚本

[root@node04 ~]# chmod +x /etc/init.d/lvs_rs 
[root@node04 ~]# chkconfig --add lvs_rs
[root@node04 ~]# chkconfig --level 35 lvs_rs on
[root@node04 ~]# systemctl restart lvs_rs
[root@node04 ~]# systemctl status  lvs_rs

23、随机抽查

[root@node04 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.11.2    0.0.0.0         UG    100    0        0 ens32
192.168.11.0    0.0.0.0         255.255.255.0   U     100    0        0 ens32
192.168.11.100  0.0.0.0         255.255.255.255 UH    0      0        0 lo
[root@node04 ~]# cat /proc/sys/net/ipv4/conf/all/arp_ignore
1

24、将脚本拷到node05web节点上

[root@node04 ~]# scp /etc/init.d/lvs_rs 192.168.11.25:/etc/init.d/
[root@node05 ~]# ll /etc/init.d/lvs_rs 
-rwxr-xr-x 1 root root 2058 Apr 22 21:45 /etc/init.d/lvs_rs

25、添加成系统服务脚本

[root@node05 ~]# chkconfig --add lvs_rs
[root@node05 ~]# chkconfig --level 35 lvs_rs on
[root@node05 ~]# 
[root@node05 ~]# 
[root@node05 ~]# systemctl restart lvs_rs

26、检查绑定情况

27、最后测试

[root@node01 ~]# for ((i=1;i<=10;i++)); do curl 192.168.11.100; done
web test page host is 192.168.11.25 
web test page host is 192.168.11.24 
web test page host is 192.168.11.25 
web test page host is 192.168.11.24 
web test page host is 192.168.11.25 
web test page host is 192.168.11.24 
web test page host is 192.168.11.25 
web test page host is 192.168.11.24 
web test page host is 192.168.11.25 
web test page host is 192.168.11.24

[root@node02 ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.11.100:80 rr
  -> 192.168.11.24:80             Route   1      0          5         
  -> 192.168.11.25:80             Route   1      0          5

三、高可用实现

1、安装软件

[root@node01 ~]# yum localinstall ldirectord-4.1.1-3.40.el7.noarch.rpm

2、配置文件

[root@node01 ~]# rpm -qc ldirectord
/etc/logrotate.d/ldirectord
[root@node01 ~]# rpm -ql  ldirectord
/etc/ha.d
/etc/ha.d/conf
/etc/ha.d/resource.d
/etc/ha.d/resource.d/ldirectord
/etc/logrotate.d/ldirectord
/etc/rc.d/init.d/ldirectord
/run/ldirectord
/usr/lib/systemd/system/ldirectord.service
/usr/lib/tmpfiles.d/ldirectord.conf
/usr/sbin/ldirectord
/usr/share/doc/ldirectord-4.1.1
/usr/share/doc/ldirectord-4.1.1/ldirectord.cf
/usr/share/man/man8/ldirectord.8.gz

3、修改模板文件/usr/share/doc/ldirectord-4.1.1/ldirectord.cf

[root@node01 ~]# vim /etc/ha.d/ldirectord.cf
[root@node01 ~]# cat /etc/ha.d/ldirectord.cf 

#
# Sample ldirectord configuration file to configure various virtual services.
#
# Ldirectord will connect to each real server once per second and request
# /index.html. If the data returned by the server does not contain the
# string "Test Message" then the test fails and the real server will be
# taken out of the available pool. The real server will be added back into
# the pool once the test succeeds. If all real servers are removed from the
# pool then localhost:80 is added to the pool as a fallback measure.

# Global Directives
checktimeout=3
checkinterval=1
#fallback=127.0.0.1:80
#fallback6=[::1]:80
autoreload=yes
#logfile="/var/log/ldirectord.log"
#logfile="local0"
#emailalert="admin@x.y.z"
#emailalertfreq=3600
#emailalertstatus=all
quiescent=no

# Sample for an http virtual service
virtual=192.168.11.100:80
	servicename=Web Site
	comment=Test load balanced web site
	real=192.168.11.24:80 gate
	real=192.168.11.25:80 gate
	fallback=127.0.0.1:80 gate
	service=http
	scheduler=rr
	#persistent=600
	#netmask=255.255.255.255
	protocol=tcp
	checktype=negotiate
	checkport=80

4、启动服务

[root@node01 ~]# systemctl start ldirectord.service

5、LVS调度器上也安装该软件,并把客户端配好的配置文件传给LVS调度器

[root@node01 ~]# scp /etc/ha.d/ldirectord.cf 192.168.11.22:/etc/ha.d/
The authenticity of host '192.168.11.22 (192.168.11.22)' can't be established.
ECDSA key fingerprint is SHA256:TN/N+pOd66YniDRIloElVvjmj2etQ5JgxhJ3wqe1yoo.
ECDSA key fingerprint is MD5:08:68:0f:e2:5b:85:81:02:b3:4c:dc:89:56:db:fa:c5.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.11.22' (ECDSA) to the list of known hosts.
root@192.168.11.22's password: 
ldirectord.cf                                                                                           100% 1093     1.4MB/s   00:00    
[root@node01 ~]# ls /etc/ha.d/ldirectord.cf 
/etc/ha.d/ldirectord.cf

[root@node02 ~]# yum localinstall ldirectord-4.1.1-3.40.el7.noarch.rpm

6、启动服务并测试

[root@node01 ~]# systemctl restart ldirectord.service
[root@node02 ~]# systemctl restart ldirectord.service

7、关闭web1模拟宕机

[root@node01 ~]# for ((i=1;i<=10;i++)); do curl 192.168.11.100; done

[root@node04 ~]# systemctl stop httpd.service 

[root@node04 ~]# systemctl restart httpd.service

web自动踢出

web宕机之后的访问量

看右上角的时间,修复后自动加入路由

修复后的访问页面

8、如果所有的web服务器全部宕机,这时候需要在本地安装Apache

[root@node01 ~]# yum install httpd -y
[root@node01 ~]# echo "服务器维护中..." > /var/www/html/index.html
[root@node01 ~]# systemctl restart httpd.service

9、停止所有的web服务器

[root@node04 ~]# systemctl stop httpd.service 
[root@node05 ~]# systemctl stop httpd.service

这时候的路由表

10、访问测试

[root@node01 ~]# systemctl restart ldirectord.service 
[root@node01 ~]# systemctl restart httpd.service 
[root@node01 ~]# for ((i=1;i<=10;i++)); do curl 192.168.11.100; done

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

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

相关文章

LeetCode热题HOT100:单词拆分、环形链表 II、LRU 缓存

LeetCode热题HOT100 139. 单词拆分 题目&#xff1a;给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。 注意&#xff1a;不要求字典中出现的单词全部都使用&#xff0c;并且字典中的单词可以重复使用。 示例 1&#xf…

[前端基础]Node.js简单操作,手把手教你搭建一个轻量级应答服务器(会继续补充操作细节,欢迎讨论)

注意:前置知识:回调函数,异步,ajax技术,端口 目录 1.什么是node.js 2.模块的概念 3. 回调函数 4.关于文件的管理 5.关于流的操作 6.关于构建服务器:前端部分,如何向后端发送请求 7.后端创建简单的服务器对象 8.后端如何处理请求 9.前端如何处理返回的数据 10.简易应答…

STL标准模板库 vector容器与迭代器入门

STL五大件 标准模板库vector容器&#xff1a;vector 声明初始化vector 容器 &#xff1a;push_backvector 容器 &#xff1a;push_back的问题vector容器&#xff1a;push_back的问题&#xff0c;reserve解决 vector容器&#xff1a;insert函数vector容器&#xff1a;insert函数…

【从零开始玩量化17】如何python+QMT完成自动化交易?(全网最详细入门教程)

一、什么是QMT 此部分为扫盲内容&#xff0c;有一定了解者可以跳过。 概念 它是一款量化交易客户端软件&#xff0c;由一家叫做迅投公司出品&#xff0c;可以直接登录你的券商账号进行股票交易&#xff0c;但与同花顺/通信达不同的是&#xff0c;它暴露了基于python的交易API&…

【人生苦短,我学 Python】进阶篇——异常处理(Day16)

写在前面&#xff1a;大家好&#xff01;我是【AI 菌】。我热爱AI、热爱分享、热爱开源&#xff01; 这博客是我对学习的一点总结与记录。如果您也对 深度学习、机器视觉、算法、Python、C 感兴趣&#xff0c;可以关注我的动态&#xff0c;我们一起学习&#xff0c;一起进步~ 我…

Python小姿势 - 可选知识点:

可选知识点&#xff1a; 列表推导式 列表和字典推导式 字典推导式 生成器表达式 带条件的生成器表达式 解析XML 解析JSON 使用Requests和BeautifulSoup爬虫 Python并发编程 Python多线程编程 Python多进程编程 Python异步编程 Python装饰器 Python闭包 Python模块化 Python类和…

PM510V16 3BSE008358R1嵌入式卡件用于励磁系统多用于工业发电

​ PM510V16 3BSE008358R1嵌入式卡件用于励磁系统多用于工业发电 物联网与工业自动化控制系统的联系 当今&#xff0c;物联网可谓是在各大媒体出镜率最高、而且与“智能”联系密切的名词之一。从“管理、控制、智能”的角度来看&#xff0c;其实物联网与工业自动化是一脉相承的…

Kafka技术基础

Apache Kafka发源于LinkedIn&#xff0c;于2011年成为Apache的孵化项目&#xff0c;随后于2012年成为Apache的主要项目之一&#xff0c;是消息队列的一种实现方式&#xff0c;提供消息的持久化。Kafka使用Scala和Java进行编写。Apache Kafka是一个快速、可扩展的、高吞吐、可容…

IEEE-TMI:张孝勇团队开发小鼠精细脑结构自动分割的深度学习算法

近日&#xff0c;复旦大学类脑智能科学与技术研究院青年研究员张孝勇课题组联合德国亥姆霍兹慕尼黑研究中心&#xff0c;在医学图像处理领域顶尖期刊《IEEE医学影像汇刊》(IEEE Transactions on Medical Imaging&#xff0c;TMI) 发表了题为《MouseGAN&#xff1a;用于小鼠大脑…

OpenCV 模板匹配 matchTemplate

一、模板匹配概念 模板匹配是一项在一副图像中寻找与另一幅模板图像最匹配&#xff08;相似&#xff09;部分的技术。模板匹配不是基于直方图的&#xff0c;而是通过在输入图像上滑动图像块&#xff08;模板&#xff09;同时对比相似度&#xff0c;来对模板和输入图像进行匹配的…

【IoT】如何使用软件加密(文件夹加密工具.exe),并破解工具

目录 第一步&#xff1a;显示隐藏的文件。 第二步&#xff1a;将隐藏文件变成文件夹。 第三步&#xff1a;解密文件。 有时候出差或者有些商务场合&#xff0c;需要对一些敏感文件做一下简单的加密&#xff0c;这样在分享内容的时候&#xff0c;可以起到初步的保护作用。 当…

Windows利用easyBCD装Ubuntu双系统

一、准备材料&#xff1a; 1、easyBCD软件&#xff08;我用V2.3版本&#xff09; 2、Ubuntu系统&#xff08;我用的12.04版本ubuntu-12.04-desktop-i386.iso&#xff09; 二、配置空闲分区 1、右击“计算机”--->管理--->右击某个自己分配的分区--->选择“压缩卷”…

Deep Bidirectional Language-Knowledge Graph Pretraining论文阅读

Deep Bidirectional Language-Knowledge Graph Pretraining github代码 摘要 最近的工作表明&#xff0c;知识图(KG)可以补充文本数据&#xff0c;提供结构化的背景知识&#xff0c; 为推理提供有用的支架。然而&#xff0c;这些作品并没有经过预先的训练来学习大规模的两种…

央视推荐的护眼灯是哪款?盘点央视推荐的护眼灯排名

护眼灯是生活中最常见的照明工具&#xff0c;许多人担心品质不过关 不合格的护眼灯会造成视损害 建议在选购护眼灯时&#xff1a; 首先看清楚产品的具体标识&#xff0c;其中就包括有产品的生产厂家&#xff0c;生产地址以及他们的产品型号 看产品规格和是否获得了国家的相关…

博睿数据蝉联中国APM市场份额第一,Bonree ONE春季正式版重磅发布

日前&#xff0c;IDC发布《中国IT统一运维软件产品市场跟踪报告&#xff0c;2022H2》,2022下半年中国APM市场环比增长近10%。博睿数据以市场份额达18.28%蝉联APM应用性能监控市场份额第一。 追求卓越&#xff0c;顺势而为 博睿数据作为中国领先的一体化智能可观测平台&#xf…

今天主要谈谈关于申请美国专利的一些问题

进入2021年&#xff0c;国家更多的开始鼓励在国外开展业务的企业去布局国外专利&#xff0c;提升企业海外竞争力。无他&#xff0c;着实是我们在知识产权保护方面起步太晚&#xff0c;已经吃亏了太久&#xff0c;专利掣肘&#xff0c;技术卡脖子&#xff0c;勤勉的为别人打工。…

Domino自带的JSON校验工具

大家好&#xff0c;才是真的好。 JSON数据在Notes/Domino已经变得非常重要。从Domino 10开始&#xff0c;在LotusScript语言中就加入了对JSON数据处理功能。在管理中&#xff0c;我们知道&#xff0c;从Domino 12版本开始就支持Domino自动化配置&#xff0c;也是使用JSON数据作…

利用ESP32-C3实现一个风扇PWM控制器,可网页操作

1简介 这段代码是一个基于ESP32开发板的PWM控制器&#xff0c;可以通过网页输入控制参数并显示在屏幕上&#xff0c;通过PWM输出引脚控制风扇的转速&#xff0c;还可以测量风扇的转速并在屏幕上显示。此外&#xff0c;代码还具备显示当前时间、显示Wi-Fi连接信息等功能。 2函数…

【Git基础】常用git命令(三)

文章目录 1.版本回退1.1 没有commit的情况1.2 已经commit但没有push的情况1.3 已经push到远端仓库的情况 2. 删除文件2.1 从工作区删除文件2.2 使用git rm命令删除文件2.3 永久删除文件2.4 永久删除文件的步骤拆解 3. 查看指定文件的修改3.1 查看文件的所有commit3.2 查看所有c…

亚控组态王与EXCEL通信

先创建一个IO设备&#xff1a;DDE类型 创建一个变量&#xff1a; 创建一个窗口&#xff0c;建立一个文本显示并关联前面建立的变量 先打开一个EXCEL文件&#xff08;注意&#xff1a;WPS是不兼容的&#xff0c;必须先打开EXCEL文件&#xff0c;否则会报错&#xff09; …