nginx和keeplive实现负载均衡高可用

article/2025/11/7 12:22:29

一、 Keeplive服务介绍

Keeplive期初是专门为LVS设计的,专门用来监控LVS集群系统中各个服务节点的状态,后来又加入VRRP的功能,因此除了配合LVS服务以外,也可以作为其他服务(nginx,haroxy)的高可用软件,VRRP是Virtual Router Redundancy Protocol(虚拟路由冗余协议)的缩写,VRRP出现的目的就是为了解决静态路由出现的单点故障问题,它能够保证网络的不间断,稳定的运行。所以keepalive一方面具有LVS cluster nodes healthchecks功能,另一方面也具有LVS directors failover

1.1 Keepalived的用途

Keepalive服务的两大用途:healthcheck和failover

ha failover功能:实现LB Master主机和Backup主机之间故障转移和自动切换

这是针对有两个负载均衡器Direator同时工作而采取的故障转移措施,当主负载均衡器失效或者出现故障时,备份的负载均衡器(BACKUP)将自动接管主负载均衡器的所有工作(vip资源以及相关服务):一旦主负载均衡器故障恢复,MASTER又会接管回它原来的工作,二备份复杂均衡器(BACKUP)会释放master是小事它接管的工作,此时两者将恢复到最初各自的角色

1.2 LVS cluster nodes healthchecks功能

在keeplive.conf配置记忆可以实现LVS的功能

keeplive可以对LVS下面的集群节点进行健康检查

rs healthcheck功能:负载均衡定期检查RS的可用性决定是否给其分发请求

当虚拟的服务器中的某一个甚至是几个真实的服务器同时出现故障无法提供服务时,负载均衡器会自动将失效的RS服务器从转发队列中清除出去,从而保证用户的访问不收影响;当故障的RS服务器被修复后,系统又自动的将他们加入转发队列,分发请求提供正常服务。

工作原理

 

1.3 keepalive故障切换转换原理

Keepalived高可用对之间是通过 VRRP进行通信的, VRRP是遑过竞选机制来确定主备的,主的优先级高于备,因此,工作时主会优先获得所有的资源,备节点处于等待状态,当主挂了的时候,备节点就会接管主节点的资源,然后顶替主节点对外提供服务。

在 Keepalived服务对之间,只有作为主的服务器会一直发送 VRRP广播包,告诉备它还活着,此时备不会枪占主,当主不可用时,即备监听不到主发送的广播包时,就会启动相关服务接管资源,保证业务的连续性.接管速度最快可以小于1秒。

1.4 VRRP协议的简单介绍

1) VRRP,全称 Virtual Router Redundancy Protocol,中文名为虚拟路由冗余协议,VRRP的出现是为了解决静态路由的单点故障。

2) VRRP是通过一种竟选协议机制来将路由任务交给某台 VRRP路由器的。

3) VRRP用 IP多播的方式(默认多播地址(224.0_0.18))实现高可用对之间通信。

4) 工作时主节点发包,备节点接包,当备节点接收不到主节点发的数据包的时候,就启动接管程序接管主节点的开源。备节点可以有多个,通过优先级竞选,但一般 Keepalived系统运维工作中都是一对。

5) VRRP使用了加密协议加密数据,但Keepalived官方目前还是推荐用明文的方式配置认证类型和密码

二、配置Keepalived实现高可用

2.1 安装keepalive

[root@lb01 ~]# cd /usr/local/src/

[root@lb01 src]# wget https://www.keepalived.org/software/keepalived-2.0.15.tar.gz

[root@lb01 src]# tar -xf keepalived-2.0.15.tar.gz

[root@lb01 src]# cd keepalived-2.0.15

[root@lb01 keepalived-2.0.15]# ./configure 

Linker flags             :  -pie
Extra Lib                :  -lm -lcrypto  -lssl 
Use IPVS Framework       : Yes
IPVS use libnl           : No
IPVS syncd attributes    : No
IPVS 64 bit stats        : No
HTTP_GET regex support   : No
fwmark socket support    : Yes
Use VRRP Framework       : Yes
Use VRRP VMAC            : Yes
Use VRRP authentication  : Yes
With ip rules/routes     : Yes
With track_process       : Yes
With linkbeat            : Yes
Use BFD Framework        : No
SNMP vrrp support        : No
SNMP checker support     : No
SNMP RFCv2 support       : No
SNMP RFCv3 support       : No
DBUS support             : No
SHA1 support             : No
Use JSON output          : No
libnl version            : None
Use IPv4 devconf         : No
Use iptables             : Yes
Use libiptc              : No
Use libipset             : No
Use nftables             : No
init type                : systemd
Strict config checks     : No
Build genhash            : Yes
Build documentation      : No

[root@lb01 keepalived-2.0.15]# make

[root@lb01 keepalived-2.0.15]# make install

lb02相同操作

[root@lb02 ~]# cd /usr/local/src/
[root@lb02 src]# wget https://www.keepalived.org/software/keepalived-2.0.15.tar.gz
[root@lb02 src]# tar -xf keepalived-2.0.15.tar.gz
[root@lb02 src]# cd keepalived-2.0.15
[root@lb02 keepalived-2.0.15]# ./configure 
[root@lb02 keepalived-2.0.15]# make
[root@lb02 keepalived-2.0.15]# make install

[root@lb01 keepalived-2.0.15]# vim /usr/lib/systemd/system/keepalived.service 

[Unit]
Description=LVS and VRRP High Availability Monitor
After=syslog.target network-online.target

[Service]
Type=forking
PIDFile=/var/run/keepalived.pid
KillMode=process
EnvironmentFile=-/etc/sysconfig/keepalived
ExecStart=/usr/sbin/keepalived $KEEPALIVED_OPTIONS
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target

2.2 配置文件

[root@lb01 keepalived-2.0.15]# vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived      #!注释global_defs {                            #全局变量notification_email {283365585@qq.com                    #收件人}                                     #邮件发件人notification_email_from Alexandre.Cassen@firewall.loc   smtp_server 192.168.200.1             #邮件服务器地址smtp_connect_timeout 30               #超时时间router_id LVS_01vrrp_skip_check_adv_addrvrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0
}vrrp_instance VI_1 {               #keepalive或者vrrp的一个实例state MASTER                   #状态interface ens33                #通信端口virtual_router_id 51           #实例IDpriority 150                   #优先级advert_int 1                   #心跳的间隔authentication {               #服务器之间通过密码验证auth_type PASSauth_pass 1111}   virtual_ipaddress {10.0.0.131                 #VIP}   
}

2.3 启动看效果

[root@lb01 keepalived]# systemctl start keepalived

[root@lb01 keepalived]# ps -ef|grep keep

[root@lb01 keepalived]# ip addr

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000link/ether 00:0c:29:12:2e:59 brd ff:ff:ff:ff:ff:ffinet 172.25.254.131/24 brd 172.25.254.255 scope global dynamic ens33valid_lft 1085sec preferred_lft 1085sec  inet 10.0.0.131/24 scope global ens33valid_lft forever preferred_lft foreverinet6 fe80::8068:96e2:b57b:be1d/64 scope link valid_lft forever preferred_lft forever
3: ens34: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000link/ether 00:0c:29:12:2e:63 brd ff:ff:ff:ff:ff:ff

2.4 keepalive的VIP实现形式

[root@lb01 keepalived]# ifconfig ens33:0 10.0.0.18 up

[root@lb01 keepalived]# ip addr add 10.0.0.19 dev ens33     

[root@lb01 keepalived]# ip addr

inet 172.25.254.131/24 brd 172.25.254.255 scope global dynamic ens33valid_lft 1583sec preferred_lft 1583secinet 10.0.0.131/24 scope global ens33valid_lft forever preferred_lft foreverinet 10.0.0.18/8 brd 10.255.255.255 scope global ens33:0valid_lft forever preferred_lft foreverinet 10.0.0.19/32 scope global ens33valid_lft forever preferred_lft foreverinet6 fe80::8068:96e2:b57b:be1d/64 scope link valid_lft forever preferred_lft forever

[root@lb01 keepalived]# ip addr del 10.0.0.19 dev ens33

[root@lb01 keepalived]# ifconfig ens33:0 10.0.0.18 down

[root@lb01 keepalived]# scp /etc/keepalived/keepalived.conf  172.25.254.133:/etc/keepalived/

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

! Configuration File for keepalivedglobal_defs {notification_email {283365585@qq.com}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 192.168.200.1smtp_connect_timeout 30router_id LVS_02vrrp_skip_check_adv_addrvrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0
}vrrp_instance VI_1 {state BACKUPinterface ens33virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {10.0.0.131/24}
} 

[root@lb02 ~]# systemctl start keepalived

[root@lb02 ~]# ps -ef |grep keep

配置成功

2.5 检测keepalibve效果

关闭MASTER的keepalive服务

[root@lb01 keepalived]# systemctl stop keepalived

[root@lb01 keepalived]# ip addr|grep 10.0.0.131

查看BACKUP端,是否有10.0.0.131

[root@lb02 ~]# ip addr|grep 10.0.0.131

[root@lb01 keepalived]# systemctl start keepalived

成功

三、 结合nginx实现高可用

3.1 配置

[root@lb01 keepalived]# cd /usr/local/nginx/conf/

[root@lb01 conf]# vim nginx.conf

worker_processes  1;
events {worker_connections  1024;
}
http {include       mime.types;default_type  application/octet-stream;sendfile        on;keepalive_timeout  65;
upstream  web_pools {server 172.25.254.134:80 weight=5;server 172.25.254.135:80 weight=5;
#       server 172.25.254.158:80 weight=5  backup;}server {listen       80;server_name  www.lbtest.com;location / {# root   html;# index  index.html index.htm;proxy_set_header Host $host;proxy_pass http://web_pools;
        }}
}

[root@lb01 conf]# scp nginx.conf  172.25.254.133:/usr/local/nginx/conf/

[root@lb01 conf]# nginx  -s reload
[root@lb01 conf]# curl 172.25.254.134
172.25.254.134
[root@lb01 conf]# curl 172.25.254.135
172.25.254.135
[root@lb01 conf]# nginx  -s reload
[root@lb02 ~]# curl 172.25.254.134
172.25.254.134
[root@lb02 ~]# curl 172.25.254.135
172.25.254.135

在获取到VIP后,不在同一网段,为了方便测试,把VIP设置为172.25.254.254

[root@lb01 ~]# ip addr|grep 172.25.254.254

3.2 发现不能访问的问题

访问测试,发现不能访问,也不能ping通

[root@lb01 conf]# curl 172.25.254.254

curl: (7) Failed connect to 172.25.254.254:80; Connection timed out

[root@lb01 conf]# ping 172.25.254.254

2 packets transmitted, 0 received, 100% packet loss, time 999ms

解决

[root@lb01 conf]# vim /etc/keepalived/keepalived.conf

# vrrp_strict   # 注释掉vrrp_strict

[root@lb01 conf]# systemctl restart keepalived

3.3 测试

[root@lb01 conf]# curl 172.25.254.254
172.25.254.135
[root@lb01 conf]# curl 172.25.254.254
172.25.254.134
[root@lb01 conf]# curl 172.25.254.254
172.25.254.135
[root@lb01 conf]# curl 172.25.254.254
172.25.254.134

关闭MASTER测试

[root@lb01 conf]# systemctl stop keepalived   #这时VIP已经在BACKUP上,但是可以正常访问
[root@lb01 conf]# curl 172.25.254.254
172.25.254.135
[root@lb01 conf]# curl 172.25.254.254
172.25.254.134
[root@lb01 conf]# curl 172.25.254.254
172.25.254.135
[root@lb01 conf]# curl 172.25.254.254
172.25.254.134
[root@lb01 conf]# curl 172.25.254.254
172.25.254.135

使用主机,域名访问

172.25.254.254  www.lbtest.com  #写hosts

 

正常访问

四、keepalived的其他特性

4.1 监控自动迁移脚本 

keepalived解决的是主机级别的冗余,当nginx宕掉的时候,keepalive并不会迁移,这时VIP依然在该主机上,客户就不能访问到网站

使用脚本监控,当nginx挂掉,自动停掉keepalive,是VIP漂移,是业务不受影响

[root@lb01 conf]# mkdir /script

[root@lb01 conf]# vim /script/monitor.sh

#!/bin/bash
while true
do
if [ `ps -ef |grep nginx|grep -v grep |wc -l` -lt 2 ]thensystemctl stop keepalived
fi
sleep 5
done

[root@lb01 conf]# cd /script/

[root@lb01 script]# chmod +x monitor.sh 

[root@lb01 script]# /script/monitor.sh &

关掉nginx

[root@lb01 script]# nginx -s stop

VIP漂移到BACKUP上

[root@lb02 ~]# ip addr|grep 254.254

inet 172.25.254.254/24 scope global secondary ens33

 访问:

[root@lb01 script]# curl 172.25.254.254
172.25.254.134
[root@lb01 script]# curl 172.25.254.254
172.25.254.135
[root@lb01 script]# curl 172.25.254.254
172.25.254.134
[root@lb01 script]# curl 172.25.254.254
172.25.254.135

4.2  keepalive高可用脑裂脚本

[root@lb01 script]# ps -ef |grep monitor
root 80993 68563 0 07:04 pts/0 00:00:00 /bin/bash /script/monitor.sh
[root@lb01 script]# kill -9 80993
[1]+  Killed                  /script/monitor.sh
[root@lb01 script]# ps -ef |grep monitor
root      82773  68563  0 07:13 pts/0    00:00:00 grep --color=auto monitor
[root@lb01 script]# systemctl restart keepalived

[root@lb02 ~]# mkdir /script

检测脑裂脚本,实现形式,当BACKUP可以ping通主,但是VIP依然在BACKUP,则认定为脑裂

[root@lb02 script]# vim check_split_brain.sh

#!/bin/bash
while true
do
ping -c 2 -W 3 172.25.254.131 &>/dev/nullif [ $? -eq 0 -a `ip addr|grep 172.25.254.254|wc -l` -eq 1 ]thenecho "ha is split brain warning"
elseecho "ha is OK"
fi
sleep 3
done

[root@lb02 ~]# sh /script/check_split_brain.sh 

ha is OK
ha is OK
[root@lb02 ~]# systemctl start firewalld
ha is split brain warning     
ha is split brain warning
[root@lb02 ~]# ip addr |grep 172.25.254.254
inet 172.25.254.254/24 scope global secondary ens33
[root@lb01 ~]# ip addr |grep 172.25.254.254
inet 172.25.254.254/24 scope global secondary ens33
[root@node4 ~]# systemctl stop firewalld
ha is OK
ha is OK

4.3 修改日志文件路径

配置文件默认在/var/log/messages

[root@lb01 ~]# tail -f /var/log/messages
Apr 13 07:41:26 node2 Keepalived_vrrp[82796]: Sending gratuitous ARP on ens33 for 172.25.254.254
Apr 13 07:41:26 node2 Keepalived_vrrp[82796]: Sending gratuitous ARP on ens33 for 172.25.254.254
Apr 13 07:41:26 node2 Keepalived_vrrp[82796]: Sending gratuitous ARP on ens33 for 172.25.254.254
Apr 13 07:41:26 node2 Keepalived_vrrp[82796]: VRRP_Instance(VI_1) Received advert with lower priority 100, ours 150, forcing new election
Apr 13 07:41:26 node2 Keepalived_vrrp[82796]: Sending gratuitous ARP on ens33 for 172.25.254.254
Apr 13 07:41:26 node2 Keepalived_vrrp[82796]: VRRP_Instance(VI_1) Sending/queueing gratuitous ARPs on ens33 for 172.25.254.254

修改日志文件位置

[root@lb01 ~]# vi /etc/sysconfig/keepalived 

# Options for keepalived. See `keepalived --help' output and keepalived(8) and
# keepalived.conf(5) man pages for a list of all options. Here are the most
# common ones :
#
# --vrrp               -P    Only run with VRRP subsystem.
# --check              -C    Only run with Health-checker subsystem.
# --dont-release-vrrp  -V    Dont remove VRRP VIPs & VROUTEs on daemon stop.
# --dont-release-ipvs  -I    Dont remove IPVS topology on daemon stop.
# --dump-conf          -d    Dump the configuration data.
# --log-detail         -D    Detailed log messages.
# --log-facility       -S    0-7 Set local syslog facility (default=LOG_DAEMON)
#KEEPALIVED_OPTIONS="-D -S 0 -d"

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

local0.*                                                /var/log/keepalived.log

[root@lb01 ~]# systemctl restart rsyslog

[root@lb01 ~]# systemctl restart keepalived

[root@lb01 ~]# tail -f /var/log/keepalived.log

Apr 13 07:46:23 node2 Keepalived_vrrp[84692]: Sending gratuitous ARP on ens33 for 172.25.254.254
Apr 13 07:46:23 node2 Keepalived_vrrp[84692]: Sending gratuitous ARP on ens33 for 172.25.254.254
Apr 13 07:46:23 node2 Keepalived_vrrp[84692]: Sending gratuitous ARP on ens33 for 172.25.254.254
Apr 13 07:46:23 node2 Keepalived_vrrp[84692]: VRRP_Instance(VI_1) Received advert with lower priority 100, ours 150, forcing new election
Apr 13 07:46:23 node2 Keepalived_vrrp[84692]: Sending gratuitous ARP on ens33 for 172.25.254.254
Apr 13 07:46:23 node2 Keepalived_vrrp[84692]: VRRP_Instance(VI_1) Sending/queueing gratuitous ARPs on ens33 for 172.25.254.254

4.4 keepalived多实例

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

  1 ! Configuration File for keepalived2 3 global_defs {4    notification_email {5         283365585@qq.com6    }7    notification_email_from Alexandre.Cassen@firewall.loc8    smtp_server 192.168.200.19    smtp_connect_timeout 3010    router_id LVS_0111    vrrp_skip_check_adv_addr12   # vrrp_strict13    vrrp_garp_interval 014    vrrp_gna_interval 015 }16 17 vrrp_instance VI_1 {18     state MASTER19     interface ens3320     virtual_router_id 5121     priority 15022     advert_int 123     authentication {24         auth_type PASS25         auth_pass 111126     }27     virtual_ipaddress {28     172.25.254.254/2429     }30 }31 vrrp_instance VI_2 {32     state BACKUP33     interface ens3334     virtual_router_id 5235     priority 10036     advert_int 137     authentication {38         auth_type PASS39         auth_pass 111140     }41     virtual_ipaddress {42     172.25.254.253/2443     }44 }

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

! Configuration File for keepalivedglobal_defs {notification_email {283365585@qq.com}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 192.168.200.1smtp_connect_timeout 30router_id LVS_02vrrp_skip_check_adv_addr# vrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0
}vrrp_instance VI_1 {state BACKUPinterface ens33virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {172.25.254.254/24}
}
vrrp_instance VI_2 {state MASTERinterface ens33virtual_router_id 52priority 150advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {172.25.254.253/24}
}

检测

[root@lb01 ~]# systemctl restart keepalived
[root@lb02 ~]# systemctl restart keepalived
[root@lb01 ~]# ip addrinet 172.25.254.131/24 brd 172.25.254.255 scope global dynamic ens33valid_lft 499sec preferred_lft 499secinet 172.25.254.254/24 scope global secondary ens33valid_lft forever preferred_lft forever
[root@lb02 ~]# ip addr
inet 172.25.254.133/24 brd 172.25.254.255 scope global dynamic ens33valid_lft 422sec preferred_lft 422secinet 172.25.254.253/24 scope global secondary ens33valid_lft forever preferred_lft forever
[root@lb02 ~]# systemctl stop keepalived
[root@lb02 ~]# ip addr|grep 172.25.254inet 172.25.254.133/24 brd 172.25.254.255 scope global dynamic ens33
[root@lb01 ~]# ip addr |grep 172.25.254inet 172.25.254.131/24 brd 172.25.254.255 scope global dynamic ens33inet 172.25.254.254/24 scope global secondary ens33inet 172.25.254.253/24 scope global secondary ens33
[root@lb02 ~]# systemctl start keepalived
[root@lb02 ~]# ip addr|grep 172.25.254inet 172.25.254.133/24 brd 172.25.254.255 scope global dynamic ens33inet 172.25.254.253/24 scope global secondary ens33
[root@lb01 ~]# ip addr |grep 172.25.254inet 172.25.254.131/24 brd 172.25.254.255 scope global dynamic ens33inet 172.25.254.254/24 scope global secondary ens33

参考:老男孩教育视频公开课https://www.bilibili.com/video/av25869969/?p=25


 

转载于:https://www.cnblogs.com/zyxnhr/p/10727035.html


http://chatgpt.dhexx.cn/article/hhs8fhIJ.shtml

相关文章

php用Ajax传递数组

代码如下: 定义array数组 var array [1,2,3];$.ajax({url:"cart.php?actdelcart",async:false,type:POST,data:{array:array},dataType:json,traditional: true,success:function(data){alert(data)},error:function(){alert("#");}}); 当我们用ajax传递…

【JQuery】Ajax 参数为数组 的方法

背景介绍 前端页面为HTML&#xff0c; 后端为Spring html中根据多选框的值&#xff0c;使用ajax请求接口动态加载其他元素的选项值。 代码 // select 下拉多选框的值var idCardType $("#idCardType").val();// [2075, 2077, 2078]$.ajax({url : url,type : "…

使用ajax传递数组和后台接收

使用ajax异步的提交多选框得到需要操作的对象的id&#xff0c;这时我们可以把每一个id做出一个对象&#xff0c;之后放到一个数组中&#xff0c;再使用JSON.stringify()对这个数组进行json的格式化&#xff1b;在后台中再inputStream中解析出我们的json字符串&#xff0c;之后只…

ajax传数组,后端接收数组

ajax内容 使用JSON.stringify(&#xff09;将数组转换为JSON字符串 //发送ajax将数组发送给handler$.ajax({url:"admin/batch/remove.json", //服务器接收请求的URL地址type:"post", //设置请求方式postcontentType:"application/json;charsetUTF-8&…

教你怎么用ajax传数组(也可以是转为json)

我之前写过一个关于ajax的详解&#xff0c;那个是标准的ajax&#xff0c;今天介绍的是怎么用ajax传递数组这样的数据类型呢&#xff1f;很多的时候我们需要给后端的数据不是几个单独的数据&#xff0c;一般见到的代码的是这样的&#xff1a; data: { id : id, name : name, se…

Ajax传递数组到后台的两种方式

直接传输不可行 第一种 将ajax参数传递修改为tradition: traditional: true $.ajax({xhrFields: {withCredentials: true},async: true,url: basePath "/consumer/work",type: "post",dataType: "json",traditional: true,data : {sql :text,/…

前端ajax发送数组请求的两种方式

今天踩了一个大坑 就是使用ajax将数组发送到后台 后台的controller接收不到 好的 废话不多说 直接上干货 第一种方式&#xff1a; 直接传送数组 后台接收的话需要使用 RequestParam(value "userIds") Long[ ] 来接收 第二种方式&#xff1a; 将数组转换为List …

jquery ajax 向后台传递数组参数

Ajax 传递数组到后台 博客分类&#xff1a; JavaScript jquery ajax 向后台传递数组参数示例 Js代码 function login123(){ var nameArr new Array(); nameArr.push("adm,in"); nameArr.push("jo,in"); nameArr.p…

JFINAL+Ajax传参 array 数组方法 获取request中数组

前台代码js var _list [];for (var i 0; i < array.length; i) { _list[i] array[i]; } $.ajax({ type: "post",url: "",data: {"ids": _list },dataType: "json",success: function(data){alert("添加成功"); …

ajax向后端传递数组

https://blog.csdn.net/feinifi/article/details/81180673 https://blog.csdn.net/weixin_44150474/article/details/103526735 https://www.cnblogs.com/lijianda/p/9936775.html https://blog.csdn.net/weixin_44150474/article/details/103526735 ajax在web项目开发中经常…

ajax通过post方法传数组

ajax在web项目开发中经常会用到&#xff0c;平时我们传递数据&#xff0c;基本都是一个参数名对应一个参数值&#xff0c;后端通过参数名就可以得到参数&#xff0c;从而进行相关逻辑处理&#xff0c;但是有时候我们会遇到批量操作&#xff0c;比如批量删除一个列表&#xff0c…

ajax 传数组

使用 ajax 传数组&#xff0c;可以有很多种方式实现&#xff0c;如将数组序列化成 json字符串&#xff0c;或者将数组转换成字符串&#xff0c;都能实现。这里介绍一种方式&#xff0c;添加属性 traditional: true&#xff0c;直接传 代码如下 controller package com.approv…

Ajax传递数组

Ajax传递数组与后端接收 在此记录刚开始做开发的时候&#xff0c;Ajax都不怎么会用&#xff0c;都只是传一些简单的字符串&#xff0c;那Ajax怎么将数组传到服务器&#xff0c;先看一下Ajax的结构 //建立两种类型的数组,这两种类型的数组都是经常用到的var arryA new Array(…

ajax传递数组怎么传?ajax数组传递

在我们平时的开发中&#xff0c;经常会需要用到ajax&#xff0c;关于ajax是什么&#xff0c;又该如何传递参数&#xff0c;相信通过上几篇文章你们已经有所了解。但是&#xff0c;ajax中要如何传递数组你们又知道吗&#xff1f;今天我们就来聊一聊ajax中该如何传递数组。 ajax…

java10 var关键字浅析

2018年3月20日&#xff0c;Oracle发布java10。java10为java带来了很多新特性&#xff0c;其中让人眼前一亮的便是var关键字的引入。 从今以后我们可以这样写java代码了。 public class Example {public static void main(String[] args) {var eg new Example;eg.emptyFunc()…

VAR模型Stata实例操作

一.步骤 1.序列平稳性检验 2.确定滞后阶数 3.模型平稳性检验 4.格兰杰因果关系检验 上述检验都通过后再进行以下步骤 5.脉冲响应分析 6.方差分解 二.各步骤的具体解释 1.序列平稳性检验 主要两种方法&#xff1a;单位根检验&#xff0c;看ACF、PACF图的截尾拖尾情况 …

jquery变量var的使用

变量var的使用 js的变量没有类型 var $li $(# file.id),$percent $li.find(.progress span);//console.log("percentage:", percentage);// 避免重复创建if (!$percent.length) {$percent $(<p class"progress"><span></span></…

简单了解var

下面我会使用几个小例子简单说明var的使用方法和含义。 Var变量&#xff0c;要定义变量&#xff0c;可以使用 var 操作符&#xff08;注意 var 是一个关键字&#xff09;&#xff0c;后跟变量名&#xff08;即标识符&#xff09;也叫创建JavaScript变量是我们在前端里比较常用…

【FinE】在险价值(VaR)计算

导航 VaR模型案例&#xff1a;AAPL历史模拟法参数模型分析法非参数bootstrapMonte-Carlo模拟计算 参考资料 VaR模型 在险价值Value-at-risk的定义为&#xff0c;在一定时期 Δ t \Delta t Δt内&#xff0c;一定的置信水平 1 − α 1-\alpha 1−α下某种资产组合面临的最大损失…

VAR模型

文章目录 一、VAR是什么&#xff1f;1.引入库2.读入数据3.执行程序 总结 一、VAR是什么&#xff1f; 以金融价格为例&#xff0c;传统的时间序列模型比如ARIMA,ARIMA-GARCH等&#xff0c;只分析价格自身的变化&#xff0c;模型的形式为&#xff1a; 其中称为自身的滞后项。 但…