LVS+Keepalived使用总结_this is the redundant configuration for lvs + keep-程序员宅基地

技术标签: 数据库  

目录

一、LVS简介和推荐阅读的资料

二、lvs和keepalived的安装

三、LVS VS/DR模式搭建

四、LVS VS/TUN模式搭建

五、LVS VS/NAT模式搭建

六、keepalived多种real server健康检测实例

七、lvs持久性工作原理和配置

八、lvs数据监控


一、LVS简介和推荐阅读的资料

      学习LVS+Keepalived必须阅读的三个文档。

1、  《Keepalived权威指南》下载见 http://www.linuxidc.com/Linux/2012-05/60951.htm

2、  《LVS手册》http://www.linuxidc.com/Linux/2016-03/129233.htm

3、  《Red_Hat_Enterprise_Linux-5-Virtual_Server_Administration-zh-CN》 http://www.linuxidc.com/Linux/2016-03/129234.htm

这三个文档是官方文档,介绍了大部分原理和基础知识。下面我主要记录一些使用的案例,方便查阅。

LVS/DR + Keepalived搭建负载均衡集群 http://www.linuxidc.com/Linux/2015-06/118647.htm

LVS+Keepalived实现四层负载及高可用  http://www.linuxidc.com/Linux/2015-02/112695.htm

LVS+Keepalived高可用负载均衡集群架构实验  http://www.linuxidc.com/Linux/2015-01/112560.htm

Heartbeat+LVS构建高可用负载均衡集群  http://www.linuxidc.com/Linux/2014-09/106964.htm

搭建LVS负载均衡测试环境  http://www.linuxidc.com/Linux/2014-09/106636.htm

一个针对LVS的压力测试报告 http://www.linuxidc.com/Linux/2015-03/114422.htm

      他们负责什么工作?

在LVS+Keepalived环境里面,lvs主要的工作是提供调度算法,把客户端请求按照需求调度在real服务器,keepalived主要的工作是提供lvs控制器的一个冗余,并且对real服务器做健康检查,发现不健康的real服务器,就把它从lvs集群中剔除,real服务器只负责提供服务。

二、lvs和keepalived的安装

      环境规划

      2*(lvs+keepalived服务器)+n*real-server,一般lvs+keepalived是这样的架构。

      开始安装

1、  下载软件包

http://www.linuxvirtualserver.org/ 下载lvs的软件包

http://www.keepalived.org/ 下载keepalived软件包

2、先编译安装lvs,再安装keepalived,安装lvs需要内核源码

下载lvs源码的时候,一定要选择你内核版本对应的源码包。

# uname  -r
2.6.18-164.el5PAE
#yum install kernel-devel -y  //安装内核源码包
#ln -s /usr/src/kernels/2.6.18-164.el5PAE-i686/ /usr/src/linux
#wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz  //ipvsadm包就是lvs软件包,别觉得名字不一样
# tar -zxvf ipvsadm-1.24.tar.gz
# cd ipvsadm-1.24
#make && make install

检查lvs是否安装成功:

#ipvsadm //查看是否有输出

#lsmod | grep ip_vs  //如果ipvsadm有输出,那么使用这个命令查看是否加载ip_vs模块,如果加载,那么lvs算安装成功。

2、  编译安装keepalived,一定在安装完lvs以后在安装keepalive

#wget http://www.keepalived.org/software/keepalived-1.1.15.tar.gz //不建议选择最新的版本
#tar -zxvf keepalived-1.1.15.tar.gz
#cd keepalived-1.1.15
#./configure --prefix=/  --mandir=/usr/local/share/man/ --with-kernel-dir=/usr/src/linux/
Keepalived version       : 1.1.15
Compiler                 : gcc
Compiler flags           : -g -O2
Extra Lib                : -lpopt -lssl -lcrypto
Use IPVS Framework       : Yes
IPVS sync daemon support : Yes
Use VRRP Framework       : Yes
Use LinkWatch            : No
Use Debug flags          : Nod

 

看见如上输入,注意yes和no的值,如果一样,证明配置成功,如果lvs为no,那么证明你的lvs没有安装成功,需要从新安装lvs再安装keepalived。

#make && make install

如果没有报错,那么就安装成功了,检查一下是否生成了keepalived命令。

三、LVS VS/DR模式搭建

环境介绍

主机IP

角色

安装软件

122.225.32.134

Lvs+keepalived MASTER

Ipvsadm keepalived

122.225.32.135

Lvs+keepalived BACKUP

Ipvsadm keepalived

122.225.32.136

Real server

Lvs_real脚本

122.225.32.137

Real server

Lvs_real脚本

122.225.32.142

VIP

 

注意:所有机器都在一个交换机,并且在一个网段。

1、在134和135上安装ipvsadm和keepalived软件。

2、修改keepalived的配置文件

122.225.32.134

# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
   notification_email {
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 150
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        122.225.32.142
    }
}
virtual_server 122.225.32.142 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    nat_mask 255.255.255.0
    persistence_timeout 0             //此值为0,主要是为了方便测试,每次刷新页面结果会不一样
    protocol TCP
    real_server 122.225.32.136 80{
        weight 1
        TCP_CHECK {
            connect_port    80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 122.225.32.137 80{
        weight 1
        TCP_CHECK {
            connect_port    80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

 

122.225.32.135

和122.225.32.134相比,值需要删除state MASTER 和 修改priority的值小于master的。

real server

在所有real server上添加下面脚本,名执行# cat  /sbin/lvs_real

#!/bin/bash
#description:start realserver
vip=122.225.32.157
source /etc/rc.d/init.d/functions
case $1 in
start)
        echo "Start Realserver"
        /sbin/ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
        echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
        echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
        echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
        echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
;;
stop)
        echo "Stop Realserver"
        /sbin/ifconfig lo:0 down
        echo "0" > /proc/sys/net/ipv4/conf/lo/arp_ignore
        echo "0" > /proc/sys/net/ipv4/conf/lo/arp_announce
        echo "0" > /proc/sys/net/ipv4/conf/all/arp_ignore
        echo "0" > /proc/sys/net/ipv4/conf/all/arp_announce
;;
*)
        echo "Usage: $0 (start | stop)"
exit 1
esac

执行脚本以后,使用ip add命令查看lo接口是否添加了虚拟ip地址。

当然,real server上面需要安装http服务,并启动,在index.html里面添加自己的IP地址,方便客户端访问时候辨别访问的是哪个主机。

3、配置完成以后,开始测试:

在122.225.32.134和122.225.32.135上使用ip add检查,虚拟IP应该配置在134上面。

测试1{主要测试lvs}:访问虚拟IP是否可以访问真实服务器,是否轮询real server

在master上使用 ipvsadm命令查看lvs状态。

# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  122.225.32.142:http rr
  -> 122.225.32.137:http          Route   1      0          0        
  -> 122.225.32.136:http          Route   1      0          0

在客户端访问虚拟IP 122.225.32.142,看是否可以访问。每次刷新,应该会换一个real server。访问数次后,通过ipvsadm观察lvs状态。

# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  122.225.32.142:http rr
  -> 122.225.32.137:http          Route   1      0          6        
  -> 122.225.32.136:http          Route   1      0          6

测试2{主要测试keepalived}:lvs服务器的HA,当keepalived master挂掉后,keepalived backup会不会接管虚拟IP。

关闭master主机上的keepalived进程。

在backup上ip add查看是否添加虚拟IP,通过/var/log/message查看相关转换日志。

 

测试3{测试backup的lvs}:使用客户端访问现在虚拟ip,查看是否一切正常

      测试完成后,开启master的keepalived进程,等虚拟ip转移到master以后,在从客户端访问,查看是否存在问题。

更多详情见请继续阅读下一页的精彩内容: http://www.linuxidc.com/Linux/2016-03/129232p2.htm

 

四、LVS VS/TUN模式搭建

环境介绍

主机IP

角色

安装软件

122.225.32.134

Lvs+keepalived MASTER

Ipvsadm keepalived

122.225.32.135

Lvs+keepalived BACKUP

Ipvsadm keepalived

122.225.32.155

Real server

 

122.225.32.156

Real server

 

122.225.32.142

VIP

 

注意:虚拟ip,master和backup在同意网段和交换机,realserver在不同网段,但是同属于外网IP

1、在134和135上安装ipvsadm和keepalived软件。

2、修改keepalived的配置文件

122.225.32.134

 # cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
   notification_email {
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 150
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        122.225.32.142
    }
}
virtual_server 122.225.32.142 80 {
    delay_loop 6
    lb_algo rr
    lb_kind TUN
    nat_mask 255.255.255.0
    persistence_timeout 0
    protocol TCP
    real_server 122.225.32.155 80{
        weight 1
        TCP_CHECK {
            connect_port    80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 122.225.32.156 80{
        weight 1
        TCP_CHECK {
            connect_port    80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

 

122.225.32.135

和122.225.32.134相比,值需要删除state MASTER 和 修改priority的值小于master的。

 

real server

在所有real server上添加下面脚本,名执行。

# cat /sbin/lvs_real_tun
#!/bin/sh
# description: Config realserver tunl port and apply arp patch
VIP=122.225.32.142
. /etc/rc.d/init.d/functions
case $1 in
start)
echo "Tunl port starting"
ifconfig tunl0 $VIP netmask 255.255.255.255 broadcast $VIP up
/sbin/route add -host $VIP dev tunl0
echo "1" > /proc/sys/net/ipv4/conf/tunl0/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/tunl0/arp_announce
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p
;;
stop)
echo "Tunl port closing"
ifconfig tunl0 down
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "0" > /proc/sys/net/ipv4/conf/all/arp_announce
;;
*)
echo "Usage: $0" {start|stop}
exit 1
esac

3、配置完成以后,开始测试:

测试方法和DR方法一样。

 

五、LVS VS/NAT模式搭建

环境介绍

主机IP

角色

安装软件

122.225.32.134

Lvs+keepalived MASTER

Ipvsadm keepalived

122.225.32.135

Lvs+keepalived BACKUP

Ipvsadm keepalived

10.1.1.9

Real server

Lvs_real脚本

10.1.1.10

Real server

Lvs_real脚本

122.225.32.142

VIP eth0

外网虚拟IP

10.1.1.118

VIP eth1

内网虚拟IP

注意:所有机器都在一个交换机,并且在一个网段,LVS服务器端最好开启数据包转发net.ipv4.ip_forward。

1、在134和135上安装ipvsadm和keepalived软件。

2、修改keepalived的配置文件

注意:这里由于需要内外网IP的同时漂移,所以需要用到vrrp同步组,并且需要同时开启两个vrrp实例。

122.225.32.134

经过上面的配置,大家应该比较熟悉了,相对于TUN和DR模式,NAT的配置文件主需要做一下修改。

! Configuration File for keepalived
global_defs {
   notification_email {
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
vrrp_sync_group G1 {
  group {
    VI_1
    VI_2
  }
}
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 150
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        122.225.32.142
    }
}
vrrp_instance VI_2 {
    state MASTER
    interface eth1
    virtual_router_id 51
    priority 150
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.1.1.118
    }
}
virtual_server 122.225.32.142 80 {
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    nat_mask 255.255.255.0
    persistence_timeout 0
    protocol TCP
    real_server 10.1.1.251 80{
        weight 1
        TCP_CHECK {
            connect_port    80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 10.1.1.8 80{
        weight 1
        TCP_CHECK {
            connect_port    80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

122.225.32.135

和122.225.32.134相比,值需要删除state MASTER 和 修改priority的值小于master的。

real server

10.1.1.9和10.1.1.10的网关需要指定的lvs的内网虚拟IP也就是10.1.1.118,不需要其他设置。

 

六、keepalived多种real server健康检测实例

keepalived对lvs的real server检测方式主要有以下几种,HTTP_GET,SSL_GET,TCP_CHECK,SMTP_CHECK,MISC_CHECK.

其中TCP_CHECK是最常用的方式,一般内容在keepalived手册中都可以查到,值得提一下的就是关于digest和genhash的用法。

HTTP_GET | SSL_GET {
url {
path /
digest <string> ##genssh工具算出的。
status_code 200
}
connect_port 80
bindto <IPADD>
connect_timeout 10
nb_get_retry 3
delay_before_retry 2
}

 

这里需要注意的就是digest的值如何算,一般在安装keepalived后,会生成一个genhash的工具。

可以使用

#genhash -h 查看帮助

常见的使用方法如下

# genhash  -s 10.1.1.8 -p 80 -u index.html 如果你是ssl连接,需要加 -S 参数,算出的值贴到配置文件中就可以了。

 

七、lvs持久性工作原理和配置

一、LVS持久连接技术

lvs的持久性连接有两方面。

1、把同一个client的请求信息记录到lvs的hash表里,保存时间使用persistence_timeout控制,单位为秒。persistence_granularity 参数是配合persistence_timeout的,在某些情况特别有用,他的值是子网掩码,表示持久连接的粒度,默认是255.255.255.255,也就是单独的client ip,如果改成,255.255.255.0就是client ip一个网段的都会被分配到同一个real server。

2、一个��接创建后空闲时的超时时间,这个时间为3种

a、tcp的空闲超时时间

b、lvs收到客户端tcp fin的超时时间

c、udp的超时时间

如何查看这些值?

# ipvsadm  //可以查看连接空闲的超时时间,红色标记。

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port          Forward Weight ActiveConn InActConn

TCP  122.225.32.142:http rr persistent 10

-> 122.225.32.137:http          Route  1      0          1

-> 122.225.32.136:http          Route  1      0          0

# ipvsadm -l –timeout  //查看tcp tcpfin udp的超时时间

Timeout (tcp tcpfin udp): 900 120 300

他们是如何工作的?

我们通过

# ipvsadm -Lcn

IPVS connection entries

pro expire state      source            virtual            destination

TCP 00:57  NONE        110.184.96.173:0  122.225.32.142:80  122.225.32.136:80

TCP 01:57  FIN_WAIT    110.184.96.173:54568 122.225.32.142:80  122.225.32.136:80

当一个client访问vip的时候,ipvs或记录一条状态为NONE的信息,红色的值的初始值是persistence_timeout的值,然后根据时钟主键变小,在以下记录存在期间,同一client ip连接上来,都会被分配到同一个后端。

FIN_WAIT的值就是tcp tcpfin udp的超时时间,当NONE的值为0时,如果FIN_WAIT还存在,那么NONE的值会从新变成60秒,再减少,直到FIN_WAIT消失以后,NONE才会消失,只要NONE存在,同一client的访问,都会分配到统一real server。

 

如何设置这些值?

persistence_timeout可以通过以下两种方法设置

1、  ipvsadm -A -t 192.168.20.154:80 -s rr -p 60

注意:上面命令中红色标记的80端口,表示同一客户端访问服务器的80端口,会被定义到同一个real server,如果把80端口改为0,那么同一客户端访问服务器的任何服务都会被转发到同一real server。

2、修改keepalived配置文件在虚拟服务器配置下面加入 persistence_timeout 60

 

tcp tcpfin udp的配置

#ipvsadm –set tcp tcpfin udp

# ipvsadm –set 120 50 50 //实例

建议:tcpfin的值最好小于persistence_timeout的值,这样比较方便计算。

lvs持久性参考资料:

http://www.linuxvirtualserver.org/docs/persistence.html

二、防火墙标记

http://www.linuxidc.com/Linux/2016-03/129235.htm

三、conn_syncd

lvs负载调度器在进行切换的时候,还是会影响服务的,因为备用的调度器上没有已经建立的连接信息,当这些已经建立的连接通过备用的调度器的时候,连接会被reset掉,从而导致连接中断,这个时候就该conn_syncd上场了。详细信息请参见(http://www.linuxvirtualserver.org/docs/sync.html),lvs中文手册也提到过这个问题。

解决方案:

Here is simple intructions to use IPVS connection synchronization. On the primary load balancer, run
#ipvsadm --start-daemon=master --mcast-interface=eth0
On the backup load balancers, run
#ipvsadm --start-daemon=backup --mcast-interface=eth0
To stop the daemon, run
#ipvsadm --stop-daemon

注意:这个命令需要手工启用,并且如果主lvs挂掉,切换到备用的时候,连接信息是同步的,但是主恢复,抢占vip后,连接信息是不会被反同步回去的。配置不抢占是使用nopreempt,只能配置在backup状态的主机,并且优先级必须比另外一台高,也就是配置在主lvs上,但是主lvs不能配置state master值。

八、lvs数据监控

可以使用lvs-rrd工具和cacti来监控,具体请google。

本文永久更新链接地址http://www.linuxidc.com/Linux/2016-03/129232.htm

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_39399966/article/details/106108948

智能推荐

机器学习模型评分总结(sklearn)_model.score-程序员宅基地

文章浏览阅读1.5w次,点赞10次,收藏129次。文章目录目录模型评估评价指标1.分类评价指标acc、recall、F1、混淆矩阵、分类综合报告1.准确率方式一:accuracy_score方式二:metrics2.召回率3.F1分数4.混淆矩阵5.分类报告6.kappa scoreROC1.ROC计算2.ROC曲线3.具体实例2.回归评价指标3.聚类评价指标1.Adjusted Rand index 调整兰德系数2.Mutual Informa..._model.score

Apache虚拟主机配置mod_jk_apache mod_jk 虚拟-程序员宅基地

文章浏览阅读344次。因工作需要,在Apache上使用,重新学习配置mod_jk1. 分别安装Apache和Tomcat:2. 编辑httpd-vhosts.conf: LoadModule jk_module modules/mod_jk.so #加载mod_jk模块 JkWorkersFile conf/workers.properties #添加worker信息 JkLogFil_apache mod_jk 虚拟

Android ConstraintLayout2.0 过度动画MotionLayout MotionScene3_android onoffsetchanged-程序员宅基地

文章浏览阅读335次。待老夫kotlin大成,扩展:MotionLayout 与 CoordinatorLayout,DrawerLayout,ViewPager 的 交互众所周知,MotionLayout 的 动画是有完成度的 即Progress ,他在0-1之间变化,一.CoordinatorLayout 与AppBarLayout 交互时,其实就是监听 offsetliner 这个 偏移量的变化 同样..._android onoffsetchanged

【转】多核处理器的工作原理及优缺点_多核处理器怎么工作-程序员宅基地

文章浏览阅读8.3k次,点赞3次,收藏19次。【转】多核处理器的工作原理及优缺点《处理器关于多核概念与区别 多核处理器工作原理及优缺点》原文传送门  摘要:目前关于处理器的单核、双核和多核已经得到了普遍的运用,今天我们主要说说关于多核处理器的一些相关概念,它的工作与那里以及优缺点而展开的分析。1、多核处理器  多核处理器是指在一枚处理器中集成两个或多个完整的计算引擎(内核),此时处理器能支持系统总线上的多个处理器,由总..._多核处理器怎么工作

个人小结---eclipse/myeclipse配置lombok_eclispe每次运行个新项目都需要重新配置lombok吗-程序员宅基地

文章浏览阅读306次。1. eclipse配置lombok 拷贝lombok.jar到eclipse.ini同级文件夹下,编辑eclipse.ini文件,添加: -javaagent:lombok.jar2. myeclipse配置lombok myeclipse像eclipse配置后,定义对象后,直接访问方法,可能会出现飘红的报错。 如果出现报错,可按照以下方式解决。 ..._eclispe每次运行个新项目都需要重新配置lombok吗

【最新实用版】Python批量将pdf文本提取并存储到txt文件中_python批量读取文字并批量保存-程序员宅基地

文章浏览阅读1.2w次,点赞31次,收藏126次。#注意:笔者在2021/11/11当天调试过这个代码是可用的,由于pdfminer版本的更新,网络上大多数的语法没有更新,我也是找了好久的文章才修正了我的代码,仅供学习参考。1、把pdf文件移动到本代码文件的同一个目录下,笔者是在pycharm里面运行的项目,下图中的x1文件夹存储了我需要转换成文本文件的所有pdf文件。然后要在此目录下创建一个存放转换后的txt文件的文件夹,如图中的txt文件夹。2、编写代码 (1)导入所需库# coding:utf-8import ..._python批量读取文字并批量保存

随便推点

oracle触发器修改同一张表,oracle触发器中对同一张表进行更新再查询时,需加自制事务...-程序员宅基地

文章浏览阅读655次。CREATE OR REPLACE TRIGGER Trg_ReimFactBEFORE UPDATEON BP_OrderFOR EACH ROWDECLAREPRAGMA AUTONOMOUS_TRANSACTION;--自制事务fc varchar2(255);BEGINIF ( :NEW.orderstate = 2AND :NEW.TransState = 1 ) THENBEG..._oracle触发器更新同一张表

debounce与throttle区别及其应用场景_throttle和debounce应用在哪些场景-程序员宅基地

文章浏览阅读513次。目录概念debouncethrottle实现debouncethrottle应用场景debouncethrottle场景举例debouncethrottle概念debounce字面理解是“防抖”,何谓“防抖”,就是连续操作结束后再执行,以网页滚动为例,debounce要等到用户停止滚动后才执行,将连续多次执行合并为一次执行。throttle字面理解是“节流”,何谓“节流”,就是确保一段时..._throttle和debounce应用在哪些场景

java操作mongdb【超详细】_java 操作mongodb-程序员宅基地

文章浏览阅读526次。regex() $regex 正则表达式用于模式匹配,基本上是用于文档中的发现字符串 (下面有例子)注意:若未加 @Field("名称") ,则识别mongdb集合中的key名为实体类属性名。也可以对数组进行索引,如果被索引的列是数组时,MongoDB会索引这个数组中的每一个元素。也可以对整个Document进行索引,排序是预定义的按插入BSON数据的先后升序排列。save: 若新增数据的主键已经存在,则会对当前已经存在的数据进行修改操作。_java 操作mongodb

github push 推送代码失败. 使用ssh rsa key. remote: Support for password authentication was removed._git push remote: support for password authenticati-程序员宅基地

文章浏览阅读1k次。今天push代码到github仓库时出现这个报错TACKCHEN-MB0:tc-image tackchen$ git pushremote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.remote: Please see https://github.blog/2020-12-15-token-authentication_git push remote: support for password authentication was removed on august 1

#程序员因薪资不满拒绝offer,HR:你只能是个程序员了_因薪资问题拒绝offer-程序员宅基地

文章浏览阅读1w次,点赞21次,收藏8次。职场上,公司与求职者是处于一种平等关系,你看重我能力,而我看重的是薪资和发展平台。对于双方来说,接受与拒绝都很正常,被拒绝也应该理性看待。但是就有一名程序员在求职过程中,公司看重他的技能,让HR和他谈薪资,而该程序员对于该公司给出的薪资并不满意,从而礼貌拒绝了。可是没想到该HR却生气称:估计你一辈子就是个程序员。从网友曝光的聊天记录来看,HR刚开始给程序员开出15K的薪资,而程序员则表示太..._因薪资问题拒绝offer

NPOI 在 System.IO.FileNotFoundException 中第一次偶然出现的“mscorlib.dll”类型的异常_在system.io.filenotfund 第一次偶现的 mscorlib-程序员宅基地

文章浏览阅读6.1k次。 本人环境是:VS2008 64位系统 。报错的版本是NPOI 2.1.3 binary(2.1.3之前都不可以) 。之后换上NPOI binary 2.1.3.1版本 错误消失,正常启动!NPOI官网: https://npoi.codeplex.com/..._在system.io.filenotfund 第一次偶现的 mscorlib