Centos7-Lvs+Keepalived架构实验详解

Centos7-Lvs+Keepalived架构

LVS+Keepalived

介绍

1 、   LVS

LVS 是一个开源的软件,可以实现 LINUX 平台下的简单负载均衡。 LVS 是 Linux Virtual Server 的缩写,意思是 Linux 虚拟服务器。目前有三种 IP 负载均衡技术( VS/NAT 、 VS/TUN 和 VS/DR );八种调度算法( rr,wrr,lc,wlc,lblc,lblcr,dh,sh )。

2 、   keepalived

Keepalived  是运行在 lvs  之上,是一个用于做双机热备( HA )的软件,它的主要功能是实现真实机的故障隔离及负载均衡器间的失败切换,提高系统的可用性。

运行原理

keepalived 通过选举(看服务器设置的权重)挑选出一台热备服务器做 MASTER 机器, MASTER 机器会被分配到一个指定的虚拟 ip ,外部程序可通过该ip 访问这台服务器,如果这台服务器出现故障(断网,重启,或者本机器上的 keepalived crash 等), keepalived 会从其他的备份机器上重选(还是看服务器设置的权重)一台机器做 MASTER 并分配同样的虚拟 IP ,充当前一台 MASTER 的角色。

选举策略

选举策略是根据 VRRP 协议 ,完全按照权重大小,权重最大( 0 ~ 255 )的是 MASTER 机器,下面几种情况会触发选举。

1. keepalived 启动的时候;

2. master 服务器出现故障(断网,重启,或者本机器上的 keepalived crash 等,而本机器上其他应用程序 crash 不算);

3. 有新的备份服务器加入且权重最大。

配置实例

lvs_vip : 172.16.10.188

lvs1+keepalived 主: 172.16.10.102

lvs2+keepalived 备: 172.16.10.142

nginx1 : 172.16.10.162

nginx2 : 172.16.10.167

安装 ipvsadm 和 keepalived

# yum -y install ipvsadm keepalived

修改 keepalived 主的配置

# vim/etc/keepalived/keepalived.conf
global_defs{
notification_email{******@163.com         #报警接收人,多个写多行}notification_email_from ******@163.com    #报警发件人smtp_server smtp.163.com   #发送email时使用的smtp服务器地址smtp_connect_timeout 30   #smtp超时时间router_id LVS1      #表示运行keepalived服务器的一个标识,发邮件时显示在邮件主题的信息
}
#不使用SYNCGroup的话,如果路由有2个网段,一个内网,一个外网,每个网段开启一个VRRP实例,假设VRRP配置为检查内网,那么当外网出现问题时,VRRP会认为自己是健康的,则不会发送Master和Backup的切换,从而导致问题,SyncGroup可以把两个实例都放入SyncGroup,这样的话,Group里任何一个实例出现问题都会发生切换
vrrp_sync_grouptest {     
group{loadbalance
}
}vrrp_instanceloadbalance {state MASTER          #指定keepalived的角色,MASTER表示此主机是主服务器,BACKUP表示此主机是备用服务器interface eno16777736   #指定HA监测网络的接口lvs_sync_daemon_inteface eno16777736    #负载均衡器之间的监控接口,类似于HA HeartBeat的心跳线virtual_router_id 38    #虚拟路由标识,这个标识是一个数字,同一个vrrp实例使用唯一的标识。即同一vrrp_instance下,MASTER和BACKUP必须是一致的priority 100    #定义优先级,数字越大,优先级越高,在同一个vrrp_instance下,MASTER的优先级必须大于BACKUP的优先级advert_int 5   #定MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
authentication{auth_type PASS   #设置验证类型,主要有PASS和AH两种auth_pass 1111   #设置验证密码,在同一个vrrp_instance下,MASTER与BACKUP必须使用相同的密码才能正常通信
}
virtual_ipaddress{172.16.10.188   #设置虚拟IP地址,可以设置多个虚拟IP地址,每行一个
}
}virtual_server172.16.10.188 80 {     #设置虚拟服务器,需要指定虚拟IP地址和服务端口,IP与端口之间用空格隔开delay_loop 6    #设置运行情况检查时间,单位是秒lb_algo rr    #设置负载调度算法,这里设置为rr,即轮询算法lb_kind DR   #设置LVS实现负载均衡的机制,有NAT、TUN、DR三个模式可选#persistence_timeout 20   #会话保持时间,单位是秒。这个选项对动态网页是非常有用的,为集群系统中的session共享提供了一个很好的解决方案。protocol TCP   #指定转发协议类型,有TCP和UDP两种real_server 172.16.10.162 80 {    #配置服务节点1,需要指定realserver的真实IP地址和端口,IP与端口之间用空格隔开weight1   #配置服务节点的权值,权值大小用数字表示,数字越大,权值越高TCP_CHECK {connect_timeout 3   #表示3秒无响应超时nb_get_retry 3   #表示重试次数delay_before_retry 3  #表示重试间隔
}
}real_server 172.16.10.167 80 {weight 1TCP_CHECK {connect_timeout 3nb_get_retry 3delay_before_retry 3
}
}
}virtual_server172.16.10.188 443 {delay_loop 6lb_algo rrlb_kind DR#persistence_timeout 20protocol TCPreal_server 172.16.10.162 443 {weight 1TCP_CHECK {connect_timeout 3nb_get_retry 3delay_before_retry 3
}
}real_server 172.16.10.167 443 {weight 1TCP_CHECK {connect_timeout 3nb_get_retry 3delay_before_retry 3
}
}
}

修改 keepalived 备的配置

基本都和主一样,只需要修改几处

state  BACKUP
priority  99
router_id  LVS2

在两台 lvs 服务器上开启路由转发功能

# vim/etc/sysctl.conf
net.ipv4.ip_forward= 1
# sysctl-p

添加 realserver ip 地址

# ipvsadm-A -t 172.16.10.188:80 -s rr
# ipvsadm-a -t 172.16.10.188:80 -r 172.16.10.162:80 -w 1
# ipvsadm-a -t 172.16.10.188:80 -r 172.16.10.167:80 -w 1
# ipvsadm-A -t 172.16.10.188:443 -s rr
# ipvsadm-a -t 172.16.10.188:443 -r 172.16.10.162:443 -w 1
# ipvsadm-a -t 172.16.10.188:443 -r 172.16.10.167:443 -w 1

查看

# ipvsadm-l

启动服务

# systemctlstart keepalived
# systemctlenable keepalived

ipvsadm脚本

# vim /etc/init.d/ipvsadm
#!/bin/bash
#
#LVS script for VS/DR
#
#./etc/rc.d/init.d/functions
#
VIP=172.16.10.188
RIP1=172.16.10.162
RIP2=172.16.10.167
PORT1=80
PORT2=443
Algorithm=rr
Weight=1
#
case"$1" in
start)
#Since this is the Director we must be able to forward packets
#只是临时修改,重启机器或重启网卡失效echo 1 > /proc/sys/net/ipv4/ip_forward
#Clear all ipvsadm rules/services./usr/sbin/ipvsadm -C
#Add an IP virtual service for VIP /usr/sbin/ipvsadm -A -t $VIP:$PORT1 -s$Algorithm
#Now direct packets for this VIP to
#the real server IP (RIP) inside the cluster/usr/sbin/ipvsadm -a -t $VIP:$PORT1 -r $RIP1-g -w $Weight/usr/sbin/ipvsadm -a -t $VIP:$PORT1 -r $RIP2-g -w $Weight
#Add an IP virtual service for VIP /usr/sbin/ipvsadm -A -t $VIP:$PORT2 -s$Algorithm
#Now direct packets for this VIP to
#the real server IP (RIP) inside the cluster/usr/sbin/ipvsadm -a -t $VIP:$PORT2 -r $RIP1-g -w $Weight/usr/sbin/ipvsadm -a -t $VIP:$PORT2 -r $RIP2-g -w $Weight/bin/touch /var/lock/subsys/ipvsadm &>/dev/null
;;
stop)
#Stop forwarding packetsecho 0 > /proc/sys/net/ipv4/ip_forward
#Reset ipvsadm/usr/sbin/ipvsadm -C
# Bringdown the VIP interface/usr/sbin/route del $VIP/bin/rm -f /var/lock/subsys/ipvsadmecho "ipvs is stopped..."
;;
status)if [ ! -e /var/lock/subsys/ipvsadm ]; thenecho "ipvsadm is stopped ..."elseecho "ipvs is running ..."ipvsadm -L -nfi
;;
*)echo "Usage: $0{start|stop|status}"
;;
esac

添加开机启动

# vim/etc/rc.d/rc.local
/etc/init.d/ipvsadmstart
# chmod+x /etc/rc.d/rc.loca

relearserver端配置(nginx)

修改内核参数

# vim/etc/sysctl.conf
net.ipv4.conf.lo.arp_ignore=1
net.ipv4.conf.lo.arp_announce=2
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2
net.ipv4.ip_forward=0
# sysctl -p

配置虚拟IP地址

临时添加

# ifconfiglo:0 172.16.10.188 netmask 255.255.255.255 broadcast 172.16.10.188

永久添加

# vim /etc/sysconfig/network-scripts/ifcfg-lo:0
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
NAME=lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=172.16.10.188
NETMASK=255.255.255.255

配置路由

临时添加

# routeadd -host 172.16.10.188 dev lo:0

永久添加

# vim /etc/sysconfig/network-scripts/route-lo:0
172.16.10.188dev lo:0

到此配置完成

测试

停止 keepalived 主,查看 vip 是否漂移到备,并测试是否可以正常访问

查看日志信息

# tail-f /var/log/messages

查看 LVS 当前设置

# watch ipvsadm -Ln

查看转发情况

# watch ipvsadm -Lnc

在测试中我发现,使用 rr 算法,一个用户的请求会被分发到两台 nginx 上,这并不是我想要的结果,大概看了一下 lvs 的八种算法,最后将 rr 替换为了 sh(源地址散列),具体介绍自行百度,之后,同一个用户的请求可以被分发在同一台 nginx 上面了。

但是我又发现 keepalived 配置中有调度算法和权重, ipvsadm 中也有调度算法和权重,这是不是会有冲突呢,会使用谁的算法。

经过测试,手动配置完 keepalived 和 ipvsadm 之后,例如: keepalived 算法为 sh ,权重为 3 。 ipvsadm 算法为 rr ,权重为 1 。启动 keepalived ,ipvsadm-l 查看,发现算法替换为 sh ,权重为 3 。

手动将 ipvsadm 的配置修改,算法为 rr ,权重为 1 , keepalived 不重启, ipvsadm-l 查看,配置生效,经测试,使用的是手动改动过后的配置。

所以这两个的配置要一样。

LVS 负载均衡中 arp_ignore 和 arp_annonuce 参数配置的含义

arp_ignore:定义对目标地址为本地IP的ARP询问不同的应答模式0 
0 - (默认值): 回应任何网络接口上对任何本地IP地址的arp查询请求 
1 - 只回答目标IP地址是来访网络接口本地地址的ARP查询请求 
2 -只回答目标IP地址是来访网络接口本地地址的ARP查询请求,且来访IP必须在该网络接口的子网段内 
3 - 不回应该网络界面的arp请求,而只对设置的唯一和连接地址做出回应 
4-7 - 保留未使用 
8 -不回应所有(本地地址)的arp查询
arp_announce:对网络接口上,本地IP地址的发出的,ARP回应,作出相应级别的限制: 确定不同程度的限制,宣布对来自本地源IP地址发出Arp请求的接口 
0 - (默认) 在任意网络接口(eth0,eth1,lo)上的任何本地地址 
1 -尽量避免不在该网络接口子网段的本地地址做出arp回应. 当发起ARP请求的源IP地址是被设置应该经由路由达到此网络接口的时候很有用.此时会检查来访IP是否为所有接口上的子网段内ip之一.如果改来访IP不属于各个网络接口上的子网段内,那么将采用级别2的方式来进行处理. 
2 - 对查询目标使用最适当的本地地址.在此模式下将忽略这个IP数据包的源地址并尝试选择与能与该地址通信的本地地址.首要是选择所有的网络接口的子网中外出访问子网中包含该目标IP地址的本地地址. 如果没有合适的地址被发现,将选择当前的发送网络接口或其他的有可能接受到该ARP回应的网络接口来进行发送.

ipvsadm 参数详解

# ipvsadm-h
ipvsadmv1.27 2008/5/15 (compiled with popt and IPVS v1.2.1)
Usage:ipvsadm -A|E -t|u|f service-address [-sscheduler] [-p [timeout]] [-M netmask] [--pe persistence_engine] [-bsched-flags]ipvsadm -D -t|u|f service-addressipvsadm -Cipvsadm -Ripvsadm -S [-n]ipvsadm -a|e -t|u|f service-address -rserver-address [options]ipvsadm -d -t|u|f service-address -rserver-addressipvsadm -L|l [options]ipvsadm -Z [-t|u|f service-address]ipvsadm --set tcp tcpfin udpipvsadm --start-daemon state[--mcast-interface interface] [--syncid sid]ipvsadm --stop-daemon stateipvsadm -hOptions:--tcp-service -t service-address  service-address is host[:port]--udp-service -u service-address  service-address is host[:port]--fwmark-service  -f fwmark         fwmark is an integer greater than zero--ipv6        -6                   fwmark entryuses IPv6--scheduler   -s scheduler         one ofrr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,thedefault scheduler is wlc.--pe            engine              alternate persistence engine maybe sip,not setby default.--persistent  -p [timeout]         persistentservice--netmask     -M netmask           persistentgranularity mask--real-server -r server-address   server-address is host (and port)--gatewaying  -g                   gatewaying(direct routing) (default)--ipip        -i                   ipip encapsulation (tunneling)--masquerading -m                   masquerading (NAT)--weight      -w weight            capacity ofreal server--u-threshold -x uthreshold        upperthreshold of connections--l-threshold -y lthreshold        lowerthreshold of connections--mcast-interface interface         multicast interface for connectionsync--syncid sid                        syncid for connectionsync (default=255)--connection  -c                   output ofcurrent IPVS connections--timeout                           output of timeout(tcp tcpfin udp)--daemon                            output of daemoninformation--stats                             output ofstatistics information--rate                              output of rateinformation--exact                             expand numbers(display exact values)--thresholds                        output of thresholdsinformation--persistent-conn                   output of persistentconnection info--nosort                            disable sortingoutput of service/server entries--sort                              does nothing, forbackwards compatibility--ops         -o                   one-packet scheduling--numeric     -n                   numericoutput of addresses and ports--sched-flags -b flags             schedulerflags (comma-separated)--add-service     -A        add virtual service with option  在内核的虚拟服务器表中添加一条新的虚拟服务器记录。也就是增加一台新的虚拟服务器  --edit-service    -E        edit virtual service with options  编辑内核虚拟服务器表中的一条虚拟服务器记录  --delete-service  -D        delete virtual service  删除内核虚拟服务器表中的一条虚拟服务器记录  --clear           -C        clear the whole table  清除内核虚拟服务器表中的所有记录  --restore         -R        restore rules from stdin  恢复虚拟服务器规则  --save            -S        save rules to stdout  保存虚拟服务器规则,输出为-R 选项可读的格式  --add-server      -a        add real server with options  在内核虚拟服务器表的一条记录里添加一条新的真实服务器  --edit-server     -e        edit real server with options  编辑一条虚拟服务器记录中的某条真实服务器记录  --delete-server   -d        delete real server  删除一条虚拟服务器记录中的某条真实服务器记录  --list            -L|-l     list the table  显示内核虚拟服务器表  --zero            -Z        zero counters in a service or all services  虚拟服务表计数器清零  --set tcp tcpfin udp        set connection timeout values  设置连接超时值  --start-daemon              start connection sync daemon  启动同步守护进程。他后面可以是master 或backup,用来说明LVS Router 是master 或是backup。在这个功能上也可以采keepalived 的VRRP 功能。  --stop-daemon               stop connection sync daemon  停止同步守护进程  --help            -h        display this help message  显示帮助信息Options:  --tcp-service  -t service-address   service-address is host[:port]  说明虚拟服务器提供的是tcp 的服务[vip:port] or [real-server-ip:port]  --udp-service  -u service-address   service-address is host[:port]  说明虚拟服务器提供的是udp 的服务[vip:port] or [real-server-ip:port]  --fwmark-service  -f fwmark         fwmark is an integer greater than zero  说明是经过iptables 标记过的服务类型。  --scheduler    -s scheduler         one of rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,the default scheduler is wlc.  使用的调度算法,有这样几个选项,默认的调度算法是: wlc.  --persistent   -p [timeout]         persistent service  持久稳固的服务。这个选项的意思是来自同一个客户的多次请求,将被同一台真实的服务器处理。timeout 的默认值为300 秒  --netmask      -M netmask           persistent granularity mask  --real-server  -r server-address    server-address is host (and port)  真实的服务器[Real-Server:port]  --gatewaying   -g                   gatewaying (direct routing) (default)  指定LVS 的工作模式为直接路由模式(也是LVS 默认的模式  --ipip         -i                   ipip encapsulation (tunneling)  指定LVS 的工作模式为隧道模式  --masquerading -m                   masquerading (NAT)  指定LVS 的工作模式为NAT 模式  --weight       -w weight            capacity of real server  真实服务器的权值  --u-threshold  -x uthreshold        upper threshold of connections  --l-threshold  -y lthreshold        lower threshold of connections  --mcast-interface interface         multicast interface for connection sync  指定组播的同步接口  --syncid sid                        syncid for connection sync (default=255)  --connection   -c                   output of current IPVS connections  显示LVS 目前的连接 如:ipvsadm -L -c  --timeout                           output of timeout (tcp tcpfin udp)  显示tcp tcpfin udp 的timeout 值 如:ipvsadm -L --timeout  --daemon                            output of daemon information  显示同步守护进程状态  --stats                             output of statistics information  显示统计信息  --rate                              output of rate information  显示速率信息  --thresholds                        output of thresholds information  --persistent-conn                   output of persistent connection info  --sort                              sorting output of service/server entries  对虚拟服务器和真实服务器排序输出  --ops          -O                   one-packet scheduling  --numeric      -n                   numeric output of addresses and ports  输出IP 地址和端口的数字形式


 


      本文转自rshare 51CTO博客,原文链接:http://blog.51cto.com/1364952/1978602,如需转载请自行联系原作者


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

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

相关文章

python调用matlab环境配置、非常详细!!!_[python][matlab]使用python调用matlab程序

问题引入 在做实验的时候,需要用到python和matlab工具来进行不同的处理,比如在run神经网络的时候,需要使用pytorch框架得到网络的各个参数,在得到参数后需要使用matlab进行聚类规划。之前的做法是用python脚本耦合其联系&#xff…

html里写js ajax吗,js、ajax、jquery的区别是什么?

js、ajax、jquery的区别1、JS是一门前端语言。2、Ajax是一门技术,它提供了异步更新的机制,使用客户端与服务器间交换数据而非整个页面文档,实现页面的局部更新。3、jQuery是一个框架,它对JS进行了封装,使其更方便使用。…

Flask 基础

Flask是一个基于Python开发并且依赖 jinja2 模板和 Werkzeug WSGI 服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后触发Flask框架,开发人员基于Flask框架提供的功能对请求进行相应…

IIS 部署asp.net Core程序注意事项

Install the .NET Core Windows Server Hosting bundleInstall the.NET Core Runtime修改应用程序池的.net framework版本为无托管代码转载于:https://www.cnblogs.com/Qos8/p/7616036.html

泰安第一中学2021年高考成绩查询,等级考第一天结束 泰安部分考生已完成2021年高考...

6 月 9 日,山东新高考进入第三天,也是学业水平等级考试的第一天,物理、思想政治、化学三门选考科目的考试已全部完成。由于选考科目不同,考生结束高考的进程也不同,9 日下午,选考物理、思想政治、化学的考生…

基于FFMPEG 的跨平台视频编解码研究

第33卷 第11期2011年11月武 汉 理 工 大 学 学 报JOURNALOF WUHANUNIVERSITYOFTECHNOLOGY Vol.33 No.11췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍Nov.2011DOI:10.3963/j.issn.1671-4431.2011.11.029基于FFMPEG 的…

python逻辑型数据也叫什么_Python入门 | 运算符和数据类型

自用总结。 零散知识 1.Python的计算方法:运算符、函数、方法 1) 方法与函数的区别: 方法与特定类型的对象有关,是属于某个对象的函数,对象始终是该方法的第一个参数。e.g. islower()方法是检查字符串中字符是否为小写形式的方法&…

Flask 第三方组件之 WTForms

简介 WTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进行验证。 安装: pip3 install wtforms 用户登录注册示例 1. 用户登录 当用户登录时候,需要对用户提交的用户名和密码进行多种格式校验。如: 用户不能为…

机器学习原理与算法(六) 支持向量机

版权声明:本系列文章为博主原创文章,转载请注明出处!谢谢! 本章索引: 从第3章的Logistic回归算法开始,我们一直在讨论分类问题。在各种不同的分类算法中,...,我们一直在讨论如何分类…

读《程序员的SQL金典》[2]--函数

一、数学函数 1.RAND SELECT RAND () ---0.302870228294199取0-1之间的随机小数。 2.小数取整 CEILINT(data)舍掉小数部分并向上取整。FLOOR(data)舍掉小数部分并向下取整。SELECT TOP 3 FWeight, CEILING(FWeight ),FLOOR( FWeight) FROM T_PersonRound(m,d):四舍…

html div模块前留空白,html – 3个DIV彼此相邻,中间填充空白

您好我想问你如何将3 DIV放在一起,而中间一个填补第一和第三DIV之间的空白.我想在第一个NAD第三个DIV中有动态按钮,我需要中间DIV来填充第一和第三个DIV之间的空间.我会破坏纯CSS / HTML(没有JavaScript)这是我的尝试:http://jsfiddle.net/4smx3627/#wrapper{height…

mplayer安装记录 源码分析

mplayer源码下载地址: http://www.mplayerhq.hu/MPlayer/releases/ 下载最新的MPlayer-1.0rc4 #mkdir /usr/local/mplayer #mkdir /usr/local/codecs #cd MPlayer-1.0rc4 #./configure --prefix/usr/local/mplayer --codecsdir/usr/local/ codecs --langua…

python人脸识别代码百度ai_python百度AI人脸识别API测试

1、注册账号 2、创建应用 3、得到AK和SK 4、用AK SK获取access_token 可用下面的代码: #!/usr/bin/python3.5 # encoding:utf-8 import requests # client_id 你的AK client_secret 你的SK host https://aip.baidubce.com/oauth/2.0/token?grant_typeclient_crede…

Flask 第三方组件之 SQLAlchemy

一、介绍 SQLAlchemy是一个基于Python实现的ORM框架。该框架建立在 DB API之上,使用关系对象映射进行数据库操作,简言之便是:将类和对象转换成SQL,然后使用数据API执行SQL并获取执行结果。 安装:pip3 install sqlalc…

httpservlet获取请求端IP地址

request.getRemoteAddr(); 转载于:https://www.cnblogs.com/panxuejun/p/7623850.html

html 中怎样显示enum,JavaScript如何枚举?

JavaScript中对象的属性分为两种:数据属性和访问器属性。然后根据具体的上下文环境的不同,又可以将属性分为:原型属性和实例属性。原型属性是定义在对象的原型(prototype)中的属性,而实例属性一方面来自构造的函数中,然…

iperf测试网卡性能

Iperf是一个网络性能测试工具。可以测试TCP和UDP带宽质量,可以测量最大TCP带宽,具有多种参数和UDP特性,可以报告带宽,延迟抖动和数据包丢失 因为产品上确定要要用的PHY是千M的&a…

acrobat 控件可以发布吗_短视频可以同时在多个平台发布吗?

我们在做自媒体内容创业中,很多人都在做视频版块,那么一个短视频到底能不能多平台同时发布呢?那么今天,我来分享给大家,希望能够帮到你解决困惑。1.作品可以多平台分发:大家不确定是否能多平台分发&#xf…

红河学院计算机科学与技术,2016年红河学院计算机科学与技术专业最低分是多少?...

类似问题答案2016年厦门理工学院计算机类(含计算机科学与技术、网络工程、空间信息与专业最低分...学校 地 区 专业 年份 批次 类型 分数 厦门理工学院 福建 计算机类(含计算机科学与技术、网络工程、空间信息与 2016 一批 理科 491 学校 地 区 专业 年份 批次 类型 分数 厦门理…

Flask 第三方组件之 script

Flask Script扩展提供向Flask插入外部脚本的功能,包括运行一个开发用的服务器,一个定制的Python shell,设置数据库的脚本,cronjobs,及其他运行在web应用之外的命令行任务;使得脚本和系统分开; …