创建本文的目的
笔者最近在详细研究keepalived软件,发现网上关于这方面的详细描述较少,需要案例配置参数在新版本中已经失效。keepalived官方网站提供的文档资料,虽然以案例为基础,提供了较为常用的参数配置,但是笔者发现许多参数并未提及。作为IT行业的人,似懂非懂只能做一个三流的技术人员,本着刨根问题的精神,创建了该篇文章。
本文以keepalived manual pages英文版为基础而创建的,你可以将该文件理解为manual pages中文。但笔者并不是单纯的文字翻译,对于文中的功能描述,笔者为验证其正确性,进行了大量实验,已确认其描述的正确性。笔者才疏学浅,难免有错误的地方,请广大网友给予批评指正,以便不断的完善。
注意:文中红色条目为笔者暂时不能确认其功能的部分
版本:keepalived 1.2.24
考拉先生
GLOBAL CONFIGURATION
Global definitions
global_defs
{
notification_email
{
}
stmp_server 112.3.3.3. 25
stmp_hole_name #用于指定发送hole消息的主机,一般是mx记录的主机
stmp_connect_timeout 30
router_id my_hostname #指定一个字符串给keepalived,不一定是主机名,默认为本地主机名
vrrp_mcast_group4 224.0.0.18 #指定vrrp的多播ipv4地址,默认是224.0.0.18
vrrp_mcast_group6 ff02::12 #指定vrrp的多播ipv6地址,默认是ff02::12
default_interface p33p1.3 # 设置用户static ipaddress的默认网络接口,如果系统没有eth0接口或者想为多个static ipaddress配置不同的接口时,使用该配置将会简化配置。
lvs_sync_daemon [id ] [MAXLEN ] [port ] [ttl ] [group ]
#该选项没有详细的官方文档说明,根据测试发现,该参数作用于ipvsad的sync daemon选项,lvs_sync的状态根据keepalived的状态一致,当kill掉master keepalived时,backup keepalive的state转变为master状态
lvs_flush #该功能新增于1.2.23版本。启动keepalived时刷新lvs配置,如果lvs没有配置,这不会刷新
vrrp_garp_master_delay 10 #设置当keepalived转变为master后,延迟多少秒发送第二组gratuitous arp。时间单位为秒,默认5秒,0表示不发送第二组gratuitous arp发送。
#注意第二组发送和第二次发送的区别
vrrp_garp_master_repeat 1 #keepalived状态转变为master后,每次发送多少组grntuitous APR 信息的数量,默认为5个
vrrp_garp_lower_prio_repeat 1 #当master keepalived接收到一个较低优先级的广播后,一次发送gratuitous apr的数量组
vrrp_garp_master_refresh 60 #master keepalived 每次发送gratuitous arp的最小时间间隔。默认是0,没有
vrrp_garp_master_refresh_repeat 2 #master keepalived 每次发送gratuitous arp消息的组数量。
vrrp_garp_interval 0.001 #小数类型,单位秒,在一个网卡上每组gratuitous arp消息之间的延迟时间,默认为0,一个发送的消息=n组 arp报文
vrrp_gna_interval 0.000001 #小数类型,单位秒, 在一个网卡上每组na消息之间的延迟时间,默认为0
vrrp_lower_prio_no_advert #如果接收到一个低优先级的通告,只需要丢弃它,不用发送其他通告,字符类型:布尔值,false/true
vrrp_version <2 or 3> #设置vrrp协议版本,默认是版本2
vrrp_iptables #该配置添加于1.2.21版本,添加vrrp_iptables全局配置选项。 iptables / ip6tables条目始终添加在INPUT链的末尾,但对于许多配置,这在处理中太晚了。 此修补程序允许指定要添加规则的链名称,
#并且还允许添加指定无规则的选项。 如果指定了链名称,则该链必须已经存在于iptables和/或ip6tables配置中,并且该链将从ip(6)表配置中的适当点调用。
#默认是入站过滤
vrrp_iptables keepalived_in keepalived_out #或用于出站过滤。注意,出站过滤将不适用于IPv4,因为可以选择VIP作为出站连接的源地址。 对于IPv6,由于地址已过时,因此不太可能
vrrp_iptables #不添加任何iptables规则
vrrp_ipset [keepalived [keepalived_if [keepalived6 [keepalived_if6]]]] #Keepalived可以选择将ipset与iptables结合使用。 如果是这样,则可以指定ipset名称,默认如下。如果没有指定名称,则不使用ipsets,否则将通过向先前指定的名称添加“_if”和/
#或“6”来构造任何省略的名称。ipset是iptables的扩展,它允许你创建匹配整个地址sets(地址集合)的规则。
vrrp_check_unicast_src #该选项允许在unicast模式中,检查vrrp包的源ip地址是否是unicast peers中的一个
vrrp_skip_check_adv_addr #检查vrrp报文中的所有地址比较耗时,设置此标志的意思是如果接收的到报文和上一个报文来至同一个路由器,则不执行检查。默认是跳过检查
vrrp_strict #严格遵守vrrp协议,下面这些功能将会禁止:1. 0 VIP 2. unicast(单播) peers 3. vrrp 版本2的ipv6功能
#当vrrp或checker进程超时时,可以使用下面4个选项。这可以是备vrrp实例变为主vrrp状态。有时由于主或备系统太过繁忙,导致无法处理vrrp数据包,但这个时候主系统依然还在运行。 这时就需要使用下列四个选项来处理该问题。
vrrp_priority <-20 to 19> #设置vrrp子进程优先级
checker_priority <-20 to 19 > #设置checker子进程优先级
vrrp_no_swap #设置vrrp子进程不可交换
checker_no_swap #设置checker子进程不可交换
#keepalived已经构建了对SNMP的支持,keepalived,checker和RFC支持可以单独启用/禁用
snmp_sockert udp:1.2.3.4:705 #用户指定连接到SNMP主代理的套接字(默认 unix:/var/agentx/master),除非使用的是网络空间名称,默认为udp:localhost:705
enable_snmp_keepalived #enable keepalived MIB的vrrp元素的SNMP处理功能
enable_snmp_checker #enable keepalived MIB的checker元素的SNMP处理功能
enable_snmp_rfc #enable RFC2787和RFC6527处理功能
enable_snmp_rfcv2 #enable RFC2787 vrrp MIB的处理功能
enable_snmp_rfcv3 #enable RFC6527 vrrp MIB的处理功能
enable_traps #enable SNMP traps功能
}
net_namespace NAME #设置要运行的网络命名空间,/var/run/keepalived目录将被创建为非共享挂载点,例如pid文件.syslog条目将_NAME附加到ident。注意,不能在重新加载配置是更改命名空间
# 在Linux协议栈中引入网络命名空间,是为了支持网络协议栈的多个实例,而这些协议栈的隔离就是由命名空间来实现的(有点像进程的线性地址空间,协议栈不能访问其他协议栈的私有数据)。
#需要纳入命名空间的元素包括进程,套接字,网络设备。进程创建的套接字必须属于某个命名空间,套接字的操作也必须在命名空间内进行,网络设备也必须属于某个命名空间,但可能会改变,因为网络设备属于公共资源
instance NAME #如果有多个keepalived实例运作在同一个命名空间,将会创建一个pid文件,将NAME作为文件名的一部分,在/var/run/keepalived。 注意:配置重启时无法更改实例名称
use_pid_dir #在/var/run/keepalived中创建pid文件
linkbeat_user_poling #轮询以件车媒体链路故障,否则尝试使用ETHTOOL或MII接口
##Static routes/address/rules
#keepalived可以配置静态地址,路由和跪着,这些地址不会被vrrpd移除,他们留在服务器上。如果你的机器上已经有ip和路由,并且你的计算机可以相互ping通对方,则可以不需要这个部分。路由和规则的语法和 ip rule add /ip route add 相同。
#虚拟地址和虚拟路由的语法相同,如果没有指定dev元素,默认的接口为eth0
static_ipaddress
{
192.168.1.1/24 dev eth0 scope global ##指定192.168.1.1/24在eth0,范围为全局地址
......
}
static_routes
{
192.168.2.0/24 via 192.168.1.100 dev eth0
192.168.100.0/24 table 6909 nexthop via 192.168.101.1 dev wlan0 onlink weight 1 nexthop via 192.168.101.2 dev wlan0 onlink weight 2
192.168.200.0/24 dev p33p1.2 table 6909 tos 0x04 protocol bird scope link priority 12 mtu 1000 hoplimit 100 advmss 101 rtt 102 rttvar 103 reordering 104 window 105 cwnd
106 ssthresh lock 107 realms PQA/0x14 rto_min 108 initcwnd 109 initrwnd 110 features ecn
2001:470:69e9:1:2::4 dev p33p1.2 table 6909 tos 0x04 protocol bird scope link priority 12 mtu 100 hoplimit 100advmss 101 rtt 102 rttvar 103 reordering 104 window 105 cwnd 106 ssthresh
lock 107 rto_min 108 initcwnd 109 initrwnd 110 features ecn
...
}
static_rules
{
from 192.168.2.0/24 table 1
to 192.168.2.0/24 table 1
from 192.168.28.0/24 to 192.168.29.0/26 table small iff p33p1 oif wlan0 tos 22 fwmark 24/12 preference 39 realms 30/20 goto 40
to 1:2:3:4:5:6:7:0/112 from 7:6:5:4:3:2::/96 table 6908
...
}
##VRRPD CONFIGURATION
该选项包含4个子块: subblocks of VRRP script(s), VRRP synchronization group(s), VRRP gratuitous ARP and unsolicited neighbour advert delay group(s) and VRRP instance(s)
##VRRP script(s)
#添加一个用于定期指定的脚本,它的退出码将被所有的VRRP instance记录,它以非0的权重监视
vrrp_script {
script | #执行脚本的路径
interval #调用脚本两次之间的间隔,默认为1秒
timeout #第二次调用脚本后多长时间没有回应的超时时间
weight #根据该权重,动态调整调用该脚本选项的vrrp实例优先级,默认是2. 当脚本执行码为0,权重大于0时,vrrp实例优先级增加;当脚本执行码为非0,权重小于0时,vrrp实例优先级减小,其他情况优先级不变。
#当该值为0时,不改变实例的优先级
rise ##设置脚本返回值连续为0的次数。加入该参数后,当脚本执行码连续为0的次数为rise次,且权重大于0时,vrrp实例优先级增加
fall ##设置脚本返回值连续为0的次数。加入该参数后,当脚本执行码连续为非0的次数为rfall次,且权重小于0时,vrrp实例优先级增加
}
##VRRP synchronization group(s)
#字符串类型,共同故障转移的ip群组的名称
vrrp_sync_group VG_1 {
group {
inside_network #每个vrrp_instance 的名称
ouside_network #每个vrrp_instance 的名称 暂没有查询到相关的详细文档,关于这两个选项的用户,网上的解释各有差异,在lvs的DR和NAT模式中,可能用法各不相同,后期验证
}
##指定选项中带有参数是,需用引号,如“ notify_master /path/to_master.sh master”
notify_master /path/to_master.sh #转换成master时,执行的脚本,网上的一种用法是,执行一个邮件发送脚本
notify_backup /path/to_backup.sh ##转换成backup时,执行的脚本,网上的一种用法是,执行一个邮件发送脚本
notify_fault /path/to_fault.sh ##转换成fault状态是,执行的脚本,网上的一种用法是,执行一个邮件发送脚本
#该一下几个选项,用户任何状态的转换。"notify“脚本在notify_* 之后调用,并使用keepalived提供的3个参数执行(所有notify中没有指定参数),如果使用下面选项,建议停用上面选项
#$1 #"GROUP|INSTANCE",参数为GROUP或INSTANCE
#$2 #指定GROUP或INSTANCE的名称
#$3 #“MASTER"|"BACKUP"|"FAULT",指定转换的状态
notify /path/notify.sh
smtp_alter #当状态发生变化后,发送通知邮件,使用配置文件上面”global_defs“定义的邮件地址
global_tracking #所有的VRRP共享相同的跟踪配置
} #end of vrrp_sync_group VG_1
VRRP grantuitous ARP and unsolicited neighbour advert delay group(s)
#指定VRRP grantuitous ARP 和 unsolicited neighbour advert设置,这是用于当上游的角环境无法处理大量的ARPS/NAS流。
#当限制适用的接口为物理接口时,使用“interface”;当限制适用的接口为一组接口时,使用“interfaces”。
#如果已经设置了vrrp_grap_interval/vrrp_gna_interval,且在garp_group中没有指定的接口,将使用全局配置参数
garp_group {
garp_interval #设置发送gratuitous ARPs时,两次之间的延时时间。单位秒,分辨率微秒
gna_interval #设置两次unsolicited neighbour advers时间的延时时间。单位秒,分辨率微秒
interface #用于以上两个选项的物理接口
interfaces { #用于以上两个选项的接口列表
...
}
} end of garp_group
VRRP instance(s)
#描述vrrp_sync_group中每个实例组的可移动ip。这里描述了两个ip(inside_network outsid和outside_network),在机器“my_host_name”,它们属于同一个组VG_1,并且在任何情况下都会一起转换状态。
#你将需要为“outside_network”写入另一个块中
vrrp_instance inside_network {
state MASTER #初始状态,MASTER|BACKUP ,一旦有其他机器加入,将会举行选举,具有最高优先级的机器将会成为MASTER,所以这个条目的并不重要
interface eth0 #指定该实例用户vrrp的网卡,用于发送vrrp
user_vmac [] #指定VRRP虚拟mac地址
vmac_xmit_base #从基本接口发送和接受vrrp消息,而不是VMAC接口
native_ipv6 #强制instance使用ipv6(当混合ipv4和ipv6的配置)
dont_track_primary #忽略VRRP接口错误
track_interface { #可选项,以下网卡中如果任意个网卡不通,所有的网卡都会进入FAULT状态
eth0
eth1
eth2 weight <-254..254>
...
}
track_script {
#增加一个跟踪脚本到网口上(是vrrp_script条目的名称)
weight <-254..254>
}
#在网卡上,用于绑定vrrpd的默认ip是主ip,如果你想隐藏本地vrrpd,可以使用这个ip作为多播和单播vrrp报文的源地址(如果是多么,vrrpd将会接收到数据包,无论使用什么样的源IP地址)
mcast_src_ip #指定多播源ip地址
unicast_src_ip #指定单播源ip地址
version <2 or 3> #指定运行在这个网卡上的vrrp版本,默认使用的是全局配置的参数“vrrp_version”
unicast_peer { #不通过vrrp组播群组发送vrrp广播报文。相反,通过单播的方式将广告发送到一下ip列表中。在某些不支持多播的网络环境中
#使用VRRP FSM(Finite State Machine有限状态机)和功能也是不错的。
... #指定的ip可以是IPV4 和IPV6
}
#指定网卡口设置,和全局参数一样,默认使用的是全局参数
garp_master_delay 10
garp_master_repeat 1
garp_lower_prio_delay 10
garp_lower_prio_repeat 1
garp_master_refresh 10
garp_master_refresh_repeat 2
garp_interval 100
gna_interval 100
lower_prio_no_advert []
#任意一个0-255之间的数字
#用户区分运行在相同NIC(和相同套接字)上的vrrpd的多个实例
virtual_router_id 51
advert_int 1 #VRRP广告的时间间隔(e.g. 0.92)(使用默认值)
#注意:2004年,RFC3768C从VRRPv2规范中删除了认证。使用此选项是不合规的,可能会导致一些问题。如果可能,尽量避免使用,除非使用单播是,他可能会有帮助。
authentication { #认证块
#PASS|AH
#PASS-Simple password(建议)
#AH-IPSEC(不推荐)
auth_type PASS
auth_pass 12345668 #用户访问vrrpd的密码,在所有的机器上应该是相同的。只会使用前8个字符。
}
#指定状态在MASTER与BACKUP之间切换时,添加或删除的ip地址。其他与之有相同条目配置的机器,将会发送想法的状态转换。
virtual_ipaddress {
/ brd dev scope label
192.168.200.17/24 dev eth1
192.168.200.18/24 dev eth2 label eth2:1
}
#重VRRP中排出一部分VRRP ip地址
#
#对于在同一个网口上具有大量ip(例如有200个)的情况。为了减少广告发送的数据包的数量,你可以重广告中排除一部分ip。
#ip的添加或删除均为vritual_ipaddress中的。如果你希望能够添加ipv4和ipv6地址的混合,你也可以使用,因为virtual_ipaddress中所有的地址必须是同一系列。
virtual_ipaddress_excluded {
/ brd dev scope
/ brd dev scope
...
}
#当状态改变时,增加或删除route
virtual_routes {
#src
[to] / via|gw [ or<IPADDR>] dev scope table
src 192.168.100.1 to 192.168.109.0/24 via 192.168.200.254 dev eth1
192.168.100.0/24 via 192.168.200.254 dev eth1
192.168.111.0/24 dev eth2
192.168.112.0/24 via 192.168.100.254
192.168.113.0/24 via 192.168.200.254 or 192.168.100.254 dev eth1
blackole 192.168.114.0/24
0.0.0./0 gw 192.168.0.1 table 100 #设置默认网关为表100
}
virtual_rules { #vrrpd状态发生变化是,添加或删除rules
from 192.168.2.0/24 table 1
to 192.168.2.0/24 table 1
}
accept #允许非master所有者处理发送给VIP的数据包
nopreempt #当一台高优先级的机器出现后,vrrp通常会抢占低优先级的机器。“nopreempt”允许较低优先级的机器继续维持“master”角色,甚至当一台
#高优先级的机器恢复在线状态。注意:为了这个工作,这个初始化的条目必须为backup。
preempt #向后兼容
skip_check_adv_addr [no|off|true|false|yes|no] #当该选项中没有指定任何参数是,默认为on。没有指定该条目是,默认使用全局条目vrrp_skep_check_adv_addr.
#详情查看 vrrp_skep_check_adv_addr
strict_mode [on|off|true|false|yes|no] #如果该条目没有指定参数,默认为on
#启动keepalive后或者发现了一个低优先级的master后,多少秒开始抢占
#这里需禁用”nopreempt“功能,该选项才能生效
#范围为:0-3000秒,默认0
#注意:为使该选项工作,初始状态必须是BACKUP
preempt_delay 300 #单位秒
#调式等级,还没有实现,建议不使用该选项
debug #范围为:0-4
#通知脚本
notify_master |
notify_backup |
notify_fault |
notify_stop |
notify |
smtp_alert
} # end of instance
#用于SSL_GET check的参数
SSL {
password #密码
ca #ca文件
certificate #certificate文件
key #key文件
}
######### end of instance ##########
LVS CONFIGURATION
包含子块:Virtual server group(s)和Virtual server(s)
子块包含ipvsadm(8)的参数
Virtual server group(s)
#可选
#这个群组运行一个真实服务器的服务属于多个虚拟服务,并且只进行一次健康检查,仅用于大型lvs
virtual_server_group {
#VIP 端口
...
#ip地址范围
#e.g. 192.168.200.1-10
...
fwmark #fwmark
fwmark
... } #end of virtual_server_group
######## end of virtual_server_group #########
Virtual server(s)
# 一个virtual_server可以申明一个vip和port(ip和port是成对的)
fwmark
(virtual server ) group
virtual_server IP port | virtual_server fwmark int | virtual_server group string
{
delay_loop #延迟轮询时间
#LVS调度算法
lb_algo rr|wrr|lc|wlc|lblc|sh|dh
ops #暂未详细说明
lb_kind NAT|DR|TUN #LVS转发方法
persistence_engine #LVS persistence engine name
persistence_timeout [] #LVS持续会话超时时间,默认6分钟,单位秒
persistence_granularity #LVS颗粒度掩码
protocol TCP|UDP|SCTP #第四层网络协议
ha_suspend #加入虚拟服务的ip没有设置,则暂停healthchecker
lvs_sched #lb_alog的同义词
lvs_methlod #lb_kind的同义词
virtualhost #用户HTTP_GET或SSL_GET的虚拟主机字符串,eg virtualhost www.firewall.loc
alpha #在启动daemon时,默认所有的RS是down状态,healthcheck健康检查failed。这有助于其启动时误报错误,默认情况下禁用alpha模式
omega #开启omega模式,清除rs时会执行相应的脚本(rs的notify_up,quorum_up),默认为禁用模式
quorum 设置 #指定池中正常提供虚拟服务(VS)所需要的所有活动服务器的总weight的最小权重值。默认是1
hysteresis #延迟系数,与quorum配置使用
quorum_up | #当quorum增长时,设置执行该脚本。eg quorum_up " ip addr add 114.11x.9x.185/32 dev lo
quorum_down | #quorum减小时,设置执行的脚本
ip_family inet|inet6 #用于fwmark服务的ip系列,可选
sorry_server
#当时所有的真实服务器down后,增加一个sorry服务器
sorry_server_inhibit #将inhibit_on_faulure做用户指令sorry_server
#为每个正式服务器配置说明
{
weihht #权重,默认:1
inhibit_on_failure #当时weight为0时,健康检查侦测失效
notify_up | #指定服务器up时,执行的脚本
notify_down | #指定服务器down时,执行的脚本
uthreshold #设置连接到这台RS的最大连接数
lthreshlod #设置这台RS的最小连接数
#设置健康检查
#HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHECK
#HTTP SSL healthchecker
HTTP_GET|SSL_GET
{
#一个url用于测试,你可以配置多个条目测试
url {
path #eg path /,or path /mrtg2/
digest #健康检查需要状态码或需要状态码和摘要,摘要是通过genhash计算出来的,eg digest 9b3a0c85a887a256d6939da88aabd8cd
status_code #HTTP标头中返回的状态码,eg status_code 200,默认是任何2xx值
}
nb_get_retry #最大重试次数
delay_befor_retry #每次重试间隔时间
connect_ip #可选,用于连接的ip,默认是realserver的ip
connect_port
#可选,用于连接的端口,默认是realserver的端口
bindto #可选,指定用于发起连接的网口
connect_timeout #可选,指定连接超时时间
fwmark #可选,用于fwmark所有外出的检查包
warmup #可选,用于指定随机延迟开始的初始检查时间,最大N秒。用于分散到同一个时刻多个到同一台RS的检查。
#最大时间为delay_loop的值,指定为0时,禁用该功能。
#如果后端有众的realserver时,如果按精确时间发送检测报文,可能会造成本机的网络堵塞,因此使用该参数,指定一个时间,将发送检测的报文时间时间差
#错开一点,以免造成本机的堵塞。
}
TCP_CHECK
{
connect_ip #可选,用于连接的ip,默认是realserver的ip
connect_port
#可选,用于连接的端口,默认是realserver的端口
bindto #可选,指定用于发起连接的网口
connect_timeout #可选,指定连接超时时间
fwmark #可选,用于fwmark所有外出的检查包
warmup #可选,用于指定随机延迟开始的初始检查时间,最大N秒。用于分散到同一个时刻多个到同一台RS的检查。
#最大时间为delay_loop的值,指定为0时,禁用该功能。
#如果后端有众的realserver时,如果按精确时间发送检测报文,可能会造成本机的网络堵塞,因此使用该参数,指定一个时间,将发送检测的报文时间时间差
#错开一点,以免造成本机的堵塞。
retry #检测到一台活动服务器失败,重新检查的次数。默认:1
delay_before_retry #重新检查前的延迟时间,默认:1
}
SMTP_CHECK
{
connect_ip #可选,用于连接的ip,默认是realserver的ip
connect_port
#可选,用于连接的端口,默认是25
bindto #可选,指定用于发起连接的网口
connect_timeout #可选,指定连接超时时间
fwmark #可选,用于fwmark所有外出的检查包
#一个可选的主机接口检查。如果没有该指令,这只检查realserver的ip地址
host {
connect_ip #可选,用于连接的ip,默认是realserver的ip
connect_port
#可选,用于连接的端口,默认是25
bindto #可选,指定用于发起连接的网口
connect_timeout #可选,每个主机的连接超时时间。默认是outer-scope(外部范围)的超时连接
fwmark #可选,用于fwmark所有外出的检查包
}
retry #检测到一台活动服务器失败,重新检查的次数。
delay_before_retry #重新检查前的延迟时间
helo_name | #可选,用户SMTP HELO请求的字符
warmup #可选,用于指定随机延迟开始的初始检查时间,最大N秒。用于分散到同一个时刻多个到同一台RS的检查。
#最大时间为delay_loop的值,指定为0时,禁用该功能。
#如果后端有众的realserver时,如果按精确时间发送检测报文,可能会造成本机的网络堵塞.
#因此使用该参数,指定一个时间,将发送检测的报文时间时间差错开一点,以免造成本机的堵塞。
} #end of SMTP_CHECK
#混合检查
MISC_CHECK
{
misc_path | #外部脚本或程序
misc_timeout #脚本执行超时时间
warmup #可选,用于指定随机延迟开始的初始检查时间,最大N秒。用于分散到同一个时刻多个到同一台RS的检查。
#最大时间为delay_loop的值,指定为0时,禁用该功能。
#如果后端有众的realserver时,如果按精确时间发送检测报文,可能会造成本机的网络堵塞,因此使用该参数,指定一个时间,将发送检测的报文时间时间差
#错开一点,以免造成本机的堵塞。
misc_dynamic #如果设置,使用来是healthchecker的推出发动态调整权重如下:
#exit status 0:svc检查成功,权重不变
#exit status 1:svc检查失败
#exit status 2-255:svc检查成功,权重更改为退出状态码减去2.(eg:退出状态码为255,权重为255-2=253)
}
} # end of realserver
} #end of virtual
你可能感兴趣的:(linux)
android系统selinux中添加新属性property
辉色投像
1.定位/android/system/sepolicy/private/property_contexts声明属性开头:persist.charge声明属性类型:u:object_r:system_prop:s0图12.定位到android/system/sepolicy/public/domain.te删除neverallow{domain-init}default_prop:property
Linux下QT开发的动态库界面弹出操作(SDL2)
13jjyao
QT类 qt 开发语言 sdl2 linux
需求:操作系统为linux,开发框架为qt,做成需带界面的qt动态库,调用方为java等非qt程序难点:调用方为java等非qt程序,也就是说调用方肯定不带QApplication::exec(),缺少了这个,QTimer等事件和QT创建的窗口将不能弹出(包括opencv也是不能弹出);这与qt调用本身qt库是有本质的区别的思路:1.调用方缺QApplication::exec(),那么我们在接口
linux sdl windows.h,Windows下的SDL安装
奔跑吧linux内核
linux sdl windows.h
首先你要下载并安装SDL开发包。如果装在C盘下,路径为C:\SDL1.2.5如果在WINDOWS下。你可以按以下步骤:1.打开VC++,点击"Tools",Options2,点击directories选项3.选择"Includefiles"增加一个新的路径。"C:\SDL1.2.5\include"4,现在选择"Libaryfiles“增加"C:\SDL1.2.5\lib"现在你可以开始编写你的第
linux中sdl的使用教程,sdl使用入门
Melissa Corvinus
linux中sdl的使用教程
本文通过一个简单示例讲解SDL的基本使用流程。示例中展示一个窗口,窗口里面有个随机颜色快随机移动。当我们鼠标点击关闭按钮时间窗口关闭。基本步骤如下:1.初始化SDL并创建一个窗口。SDL_Init()初始化SDL_CreateWindow()创建窗口2.纹理渲染存储RGB和存储纹理的区别:比如一个从左到右由红色渐变到蓝色的矩形,用存储RGB的话就需要把矩形中每个点的具体颜色值存储下来;而纹理只是一
PHP环境搭建详细教程
好看资源平台
前端 php
PHP是一个流行的服务器端脚本语言,广泛用于Web开发。为了使PHP能够在本地或服务器上运行,我们需要搭建一个合适的PHP环境。本教程将结合最新资料,介绍在不同操作系统上搭建PHP开发环境的多种方法,包括Windows、macOS和Linux系统的安装步骤,以及本地和Docker环境的配置。1.PHP环境搭建概述PHP环境的搭建主要分为以下几类:集成开发环境:例如XAMPP、WAMP、MAMP,这
使用 FinalShell 进行远程连接(ssh 远程连接 Linux 服务器)
编程经验分享
开发工具 服务器 ssh linux
目录前言基本使用教程新建远程连接连接主机自定义命令路由追踪前言后端开发,必然需要和服务器打交道,部署应用,排查问题,查看运行日志等等。一般服务器都是集中部署在机房中,也有一些直接是云服务器,总而言之,程序员不可能直接和服务器直接操作,一般都是通过ssh连接来登录服务器。刚接触远程连接时,使用的是XSHELL来远程连接服务器,连接上就能够操作远程服务器了,但是仅用XSHELL并没有上传下载文件的功能
libyuv之linux编译
jaronho
Linux linux 运维 服务器
文章目录一、下载源码二、编译源码三、注意事项1、银河麒麟系统(aarch64)(1)解决armv8-a+dotprod+i8mm指令集支持问题(2)解决armv9-a+sve2指令集支持问题一、下载源码到GitHub网站下载https://github.com/lemenkov/libyuv源码,或者用直接用git克隆到本地,如:gitclonehttps://github.com/lemenko
ARM驱动学习之5 LEDS驱动
JT灬新一
嵌入式 C 底层 arm开发 学习 单片机
ARM驱动学习之5LEDS驱动知识点:•linuxGPIO申请函数和赋值函数–gpio_request–gpio_set_value•三星平台配置GPIO函数–s3c_gpio_cfgpin•GPIO配置输出模式的宏变量–S3C_GPIO_OUTPUT注意点:DRIVER_NAME和DEVICE_NAME匹配。实现步骤:1.加入需要的头文件://Linux平台的gpio头文件#include//三
【华为OD技术面试真题精选 - 非技术题】 -HR面,综合面_华为od hr面
一个射手座的程序媛
程序员 华为od 面试 职场和发展
最后的话最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!资料预览给大家整理的视频资料:给大家整理的电子书资料:如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。需要这份系统化的资料的朋友,可以点击这里获
简介Shell、zsh、bash
zhaosuningsn
Shell zsh bash shell linux bash
Shell是Linux和Unix的外壳,类似衣服,负责外界与Linux和Unix内核的交互联系。例如接收终端用户及各种应用程序的命令,把接收的命令翻译成内核能理解的语言,传递给内核,并把内核处理接收的命令的结果返回给外界,即Shell是外界和内核沟通的桥梁或大门。Linux和Unix提供了多种Shell,其中有种bash,当然还有其他好多种。Mac电脑中不但有bash,还有一个zsh,预装的,据说
Linux MariaDB使用OpenSSL安装SSL证书
Meta39
MySQL Oracle MariaDB Linux Windows ssl linux mariadb
进入到证书存放目录,批量删除.pem证书警告:确保已经进入到证书存放目录find.-typef-iname\*.pem-delete查看是否安装OpenSSLopensslversion没有则安装yuminstallopensslopenssl-devel开启SSL编辑/etc/my.cnf文件(没有的话就创建,但是要注意,在/etc/my.cnf.d/server.cnf配置了datadir的,
【从浅识到熟知Linux】Linux发展史
Jammingpro
从浅学到熟知Linux linux 运维 服务器
归属专栏:从浅学到熟知Linux个人主页:Jammingpro每日努力一点点,技术变化看得见文章前言:本篇文章记录Linux发展的历史,因在介绍Linux过程中涉及的其他操作系统及人物,本文对相关内容也有所介绍。文章目录Unix发展史Linux发展史开源Linux官网企业应用情况发行版本在学习Linux前,我们可能都会问Linux从哪里来?它是如何发展的。但在介绍Linux之前,需要先介绍一下Un
linux 发展史
种树的猴子
内核 java 操作系统 linux 大数据
linux发展史说明此前对linux认识模糊一知半解,近期通过学习将自己对于linux的发展总结一下方便大家日后的学习。那Linux是目前一款非常火热的开源操作系统,可是linux是什么时候出现的,又是因为什么样的原因被开发出来的呢。以下将对linux的发展历程进行详细的讲解。目录一、Linux发展背景二、UINIX的诞生三、UNIX的重要分支-BSD的诞生四、Minix的诞生五、GNU与Free
Linux sh命令
fengyehongWorld
Linux linux
目录一.基本语法二.选项2.1-c字符串中读取内容,并执行2.1.1基本用法2.1.2获取当前目录下失效的超链接2.2-x每个命令执行之前,将其打印出来2.3结合Here文档使用一.基本语法⏹Linux和Unix系统中用于执行shell脚本或运行命令的命令。sh[选项][脚本文件][参数...]⏹选项-c:从字符串中读取内容,并执行。-x:在每个命令执行之前,将其打印出来。-s:从标准流中读取内容
Linux vi常用命令
fengyehongWorld
Linux linux
参考资料viコマンド(vimコマンド)リファレンス目录一.保存系命令二.删除系命令三.移动系命令四.复制粘贴系命令一.保存系命令⏹保存并退出:wq⏹强制保存并退出:wq!⏹退出(文件未编辑):q⏹强制退出(忽略已编辑内容):q!⏹另存为:w新文件名二.删除系命令⏹删除当前行dd⏹清空整个文档gg:移动到文档顶部dG:删除到最后一行ggdG三.移动系命令⏹移动到文档顶部gg⏹移动到文档底部#方式1G
Linux查看服务器日志
TPBoreas
运维 linux 运维
一、tail这个是我最常用的一种查看方式用法如下:tail-n10test.log查询日志尾部最后10行的日志;tail-n+10test.log查询10行之后的所有日志;tail-fn10test.log循环实时查看最后1000行记录(最常用的)一般还会配合着grep用,(实时抓包)例如:tail-fn1000test.log|grep'关键字'(动态抓包)tail-fn1000test.log
笋丁网页自动回复机器人V3.0.0免授权版源码
希希分享
软希网58soho_cn 源码资源 笋丁网页自动回复机器人
笋丁网页机器人一款可设置自动回复,默认消息,调用自定义api接口的网页机器人。此程序后端语言使用Golang,内存占用最高不超过30MB,1H1G服务器流畅运行。仅支持Linux服务器部署,不支持虚拟主机,请悉知!使用自定义api功能需要有一定的建站基础。源码下载:https://download.csdn.net/download/m0_66047725/89754250更多资源下载:关注我。安
Linux CTF逆向入门
蚁景网络安全
linux 运维 CTF
1.ELF格式我们先来看看ELF文件头,如果想详细了解,可以查看ELF的manpage文档。关于ELF更详细的说明:e_shoff:节头表的文件偏移量(字节)。如果文件没有节头表,则此成员值为零。sh_offset:表示了该section(节)离开文件头部位置的距离+-------------------+|ELFheader|---++--------->+-------------------
NPM私库搭建-verdaccio(Linux)
Beam007
npm linux 前端
1、安装nodelinux服务器安装nodea)、官网下载所需的node版本https://nodejs.org/dist/v14.21.0/b)、解压安装包若下载的是xxx.tar.xz文件,解压命令为tar-xvfxxx.tar.xzc)、修改环境变量修改:/etc/profile文件#SETPATHFORNODEJSexportNODE_HOME=NODEJS解压安装的路径exportPAT
C++常见知识掌握
nfgo
c++ 开发语言
1.Linux软件开发、调试与维护内核与系统结构Linux内核是操作系统的核心,负责管理硬件资源,提供系统服务,它是系统软件与硬件之间的桥梁。主要组成部分包括:进程管理:内核通过调度器分配CPU时间给各个进程,实现进程的创建、调度、终止等操作。使用进程描述符(task_struct)来存储进程信息,包括状态(就绪、运行、阻塞等)、优先级、内存映射等。内存管理:包括物理内存和虚拟内存管理。通过页表映
linux脚本sed替换变量,sed 命令中替换值为shell变量
诺坎普之约
linux脚本sed替换变量
文章目录sed命令中替换值为shell变量替换基本语法sed中替换使用shell变量总结参考文档sed命令中替换值为shell变量替换基本语法大家都是sed有很多用法,最多就应该是替换一些值了。让我们先回忆sed的替换语法。在sed进行替换的时候sed-i's/old/new/g'1.txtecho"hellooldfrank"|sed's/old/new/g'结果如下:hellonewfrank
RK3229_Android9.0_Box 4G模块EC200A调试
suifen_
网络
0、kernel修改这部分完全可以参考Linux的移植:RK3588EC200A-CN【4G模块】调试_rkec200a-cn-CSDN博客1、修改device/rockchip/rk322xdiff--gita/device.mkb/device.mkindexec6bfaa..e7c32d1100755---a/device.mk+++b/device.mk@@-105,6+105,8@@en
linux 安装Sublime Text 3
hhyiyuanyu
Python学习 linux sublime text
方法/步骤打开官网http://www.sublimetext.com/3,选择64位进行下载执行命令wgethttps://download.sublimetext.com/sublime_text_3_build_3126_x64.tar.bz2进行下载3、下载完成进行解压,执行tar-xvvfsublime_text_3_build_3126_x64.tar.bz解压4、解压完成以后,移动到
KVM虚拟机源代码分析【转】
xidianjiapei001
# 虚拟化技术
1.KVM结构及工作原理1.1KVM结构KVM基本结构有两部分组成。一个是KVMDriver,已经成为Linux内核的一个模块。负责虚拟机的创建,虚拟内存的分配,虚拟CPU寄存器的读写以及虚拟CPU的运行等。另外一个是稍微修改过的Qemu,用于模拟PC硬件的用户空间组件,提供I/O设备模型以及访问外设的途径。KVM基本结构如图1所示。其中KVM加入到标准的Linux内核中,被组织成Linux中标准
史上最全git命令,git回滚,git命令大全
騒周
其他 git
git命令大全一、Git整体理解二、由暂存区本地仓库三、由本地仓->远程仓库四、冲突处理五、Git分支操作六、bug的分支七、feature分支八、暂存的使用九、远程仓的操作十、标签的使用十一、Git配置全局信息十二、Linux的一些简单操作和一些符号的解释十三、符号解释十四、显示安装详细信息十五、gitconfig十六、Gitclone十七、Gitinit十八、gitstatus十九、gitre
【显示 后台运行 & 的命令】
晨春计
debug linux 服务器 运维
目录背景步骤详解示例背景当你在Linuxshell中使用&符号将一个命令放到后台运行时,你可以使用jobs命令来查看这些后台进程的状态。但是,jobs命令并不会直接显示进程的PID(进程ID)。它会显示一个作业列表,其中包括每个作业的状态和一个作业标识符(通常是百分号%后面跟着一个数字),但不会直接显示PID。获取后台进程的PID步骤:1、使用jobs命令查看后台作业。2、使用ps命令配合grep
Android shell 常用 debug 命令
晨春计
Audio debug android linux
目录1、查看版本2、am命令3、pm命令4、dumpsys命令5、sed命令6、log定位查看APK进程号7、log定位使用场景1、查看版本1.1、Android串口终端执行getpropro.build.version.release#获取Android版本uname-a#查看linux内核版本信息uname-r#单独查看内核版本1.2、linux服务器执行lsb_release-a#查看Lin
【nginx】ngx_http_proxy_connect_module 正向代理
等风来不如迎风去
网络服务入门与实战 nginx http 运维
50.65无法访问服务器,(403错误)50.196可以访问服务器。那么,配置65通过196访问。需要一个nginx作为代理【nginx】搭配okhttp配置反向代理发送原生的nginx是不支持okhttp的CONNECT请求的。大神竟然给出了一个java工程GINX编译ngx_http_proxy_connect_module及做正向代理是linux构建的。是windows构建的:编译Windo
linux下好用的任务管理器htop
WittXie
Linux linux 服务器 运维
给大家推荐个好用的任务管理器htop,简直好用的不得了。完虐top。不解释了,看文章!!!在Linux系统中,top命令用来显示系统中正在运行的进程的实时状态,它显示了一些非常有用的信息,比如CPU利用情况、内存消耗情况,以及每个进程情况等。但是,你知道吗?还有另外一个命令行工具'htop',它与传统的top命令功能一样,但它有更加强大的功能及能显示更多的信息。这篇文章,我们会用实例来讨论这个'h
Linux下使用U盘
WittXie
Linux linux 运维 服务器
第一步:插入U盘,如果能够识别出U盘,则会打印出一些信息;第二步:查看U盘系统分配给U盘的设备名;输入如下命令进行查看:fdisk-l/dev/sda如果打印出如下信息:Disk/dev/sda:4233MB,4233101312bytes165heads,34sectors/track,1473cylindersUnits=cylindersof5610*512=2872320bytesDevi
解线性方程组
qiuwanchi
package gaodai.matrix;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner scanner = new Sc
在mysql内部存储代码
annan211
性能 mysql 存储过程 触发器
在mysql内部存储代码
在mysql内部存储代码,既有优点也有缺点,而且有人倡导有人反对。
先看优点:
1 她在服务器内部执行,离数据最近,另外在服务器上执行还可以节省带宽和网络延迟。
2 这是一种代码重用。可以方便的统一业务规则,保证某些行为的一致性,所以也可以提供一定的安全性。
3 可以简化代码的维护和版本更新。
4 可以帮助提升安全,比如提供更细
Android使用Asynchronous Http Client完成登录保存cookie的问题
hotsunshine
android
Asynchronous Http Client是android中非常好的异步请求工具
除了异步之外还有很多封装比如json的处理,cookie的处理
引用
Persistent Cookie Storage with PersistentCookieStore
This library also includes a PersistentCookieStore whi
java面试题
Array_06
java 面试
java面试题
第一,谈谈final, finally, finalize的区别。
final-修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能
网站加速
oloz
网站加速
前序:本人菜鸟,此文研究总结来源于互联网上的资料,大牛请勿喷!本人虚心学习,多指教.
1、减小网页体积的大小,尽量采用div+css模式,尽量避免复杂的页面结构,能简约就简约。
2、采用Gzip对网页进行压缩;
GZIP最早由Jean-loup Gailly和Mark Adler创建,用于UNⅨ系统的文件压缩。我们在Linux中经常会用到后缀为.gz
正确书写单例模式
随意而生
java 设计模式 单例
单例模式算是设计模式中最容易理解,也是最容易手写代码的模式了吧。但是其中的坑却不少,所以也常作为面试题来考。本文主要对几种单例写法的整理,并分析其优缺点。很多都是一些老生常谈的问题,但如果你不知道如何创建一个线程安全的单例,不知道什么是双检锁,那这篇文章可能会帮助到你。
懒汉式,线程不安全
当被问到要实现一个单例模式时,很多人的第一反应是写出如下的代码,包括教科书上也是这样
单例模式
香水浓
java
懒汉 调用getInstance方法时实例化
public class Singleton {
private static Singleton instance;
private Singleton() {}
public static synchronized Singleton getInstance() {
if(null == ins
安装Apache问题:系统找不到指定的文件 No installed service named "Apache2"
AdyZhang
apache http server
安装Apache问题:系统找不到指定的文件 No installed service named "Apache2"
每次到这一步都很小心防它的端口冲突问题,结果,特意留出来的80端口就是不能用,烦。
解决方法确保几处:
1、停止IIS启动
2、把端口80改成其它 (譬如90,800,,,什么数字都好)
3、防火墙(关掉试试)
在运行处输入 cmd 回车,转到apa
如何在android 文件选择器中选择多个图片或者视频?
aijuans
android
我的android app有这样的需求,在进行照片和视频上传的时候,需要一次性的从照片/视频库选择多条进行上传
但是android原生态的sdk中,只能一个一个的进行选择和上传。
我想知道是否有其他的android上传库可以解决这个问题,提供一个多选的功能,可以使checkbox之类的,一次选择多个 处理方法
官方的图片选择器(但是不支持所有版本的androi,只支持API Level
mysql中查询生日提醒的日期相关的sql
baalwolf
mysql
SELECT sysid,user_name,birthday,listid,userhead_50,CONCAT(YEAR(CURDATE()),DATE_FORMAT(birthday,'-%m-%d')),CURDATE(), dayofyear( CONCAT(YEAR(CURDATE()),DATE_FORMAT(birthday,'-%m-%d')))-dayofyear(
MongoDB索引文件破坏后导致查询错误的问题
BigBird2012
mongodb
问题描述:
MongoDB在非正常情况下关闭时,可能会导致索引文件破坏,造成数据在更新时没有反映到索引上。
解决方案:
使用脚本,重建MongoDB所有表的索引。
var names = db.getCollectionNames();
for( var i in names ){
var name = names[i];
print(name);
Javascript Promise
bijian1013
JavaScript Promise
Parse JavaScript SDK现在提供了支持大多数异步方法的兼容jquery的Promises模式,那么这意味着什么呢,读完下文你就了解了。
一.认识Promises
“Promises”代表着在javascript程序里下一个伟大的范式,但是理解他们为什么如此伟大不是件简
[Zookeeper学习笔记九]Zookeeper源代码分析之Zookeeper构造过程
bit1129
zookeeper
Zookeeper重载了几个构造函数,其中构造者可以提供参数最多,可定制性最多的构造函数是
public ZooKeeper(String connectString, int sessionTimeout, Watcher watcher, long sessionId, byte[] sessionPasswd, boolea
【Java命令三】jstack
bit1129
jstack
jstack是用于获得当前运行的Java程序所有的线程的运行情况(thread dump),不同于jmap用于获得memory dump
[hadoop@hadoop sbin]$ jstack
Usage:
jstack [-l] <pid>
(to connect to running process)
jstack -F
jboss 5.1启停脚本 动静分离部署
ronin47
以前启动jboss,往各种xml配置文件,现只要运行一句脚本即可。start nohup sh /**/run.sh -c servicename -b ip -g clustername -u broatcast jboss.messaging.ServerPeerID=int -Djboss.service.binding.set=p
UI之如何打磨设计能力?
brotherlamp
UI ui教程 ui自学 ui资料 ui视频
在越来越拥挤的初创企业世界里,视觉设计的重要性往往可以与杀手级用户体验比肩。在许多情况下,尤其对于 Web 初创企业而言,这两者都是不可或缺的。前不久我们在《右脑革命:别学编程了,学艺术吧》中也曾发出过重视设计的呼吁。如何才能提高初创企业的设计能力呢?以下是 9 位创始人的体会。
1.找到自己的方式
如果你是设计师,要想提高技能可以去设计博客和展示好设计的网站如D-lists或
三色旗算法
bylijinnan
java 算法
import java.util.Arrays;
/**
问题:
假设有一条绳子,上面有红、白、蓝三种颜色的旗子,起初绳子上的旗子颜色并没有顺序,
您希望将之分类,并排列为蓝、白、红的顺序,要如何移动次数才会最少,注意您只能在绳
子上进行这个动作,而且一次只能调换两个旗子。
网上的解法大多类似:
在一条绳子上移动,在程式中也就意味只能使用一个阵列,而不使用其它的阵列来
警告:No configuration found for the specified action: \'s
chiangfai
configuration
1.index.jsp页面form标签未指定namespace属性。
<!--index.jsp代码-->
<%@taglib prefix="s" uri="/struts-tags"%>
...
<s:form action="submit" method="post"&g
redis -- hash_max_zipmap_entries设置过大有问题
chenchao051
redis hash
使用redis时为了使用hash追求更高的内存使用率,我们一般都用hash结构,并且有时候会把hash_max_zipmap_entries这个值设置的很大,很多资料也推荐设置到1000,默认设置为了512,但是这里有个坑
#define ZIPMAP_BIGLEN 254
#define ZIPMAP_END 255
/* Return th
select into outfile access deny问题
daizj
mysql txt 导出数据到文件
本文转自:http://hatemysql.com/2010/06/29/select-into-outfile-access-deny%E9%97%AE%E9%A2%98/
为应用建立了rnd的帐号,专门为他们查询线上数据库用的,当然,只有他们上了生产网络以后才能连上数据库,安全方面我们还是很注意的,呵呵。
授权的语句如下:
grant select on armory.* to rn
phpexcel导出excel表简单入门示例
dcj3sjt126com
PHP Excel phpexcel
<?php
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
if (PHP_SAPI == 'cli')
die('This example should only be run from a Web Brows
美国电影超短200句
dcj3sjt126com
电影
1. I see. 我明白了。2. I quit! 我不干了!3. Let go! 放手!4. Me too. 我也是。5. My god! 天哪!6. No way! 不行!7. Come on. 来吧(赶快)8. Hold on. 等一等。9. I agree。 我同意。10. Not bad. 还不错。11. Not yet. 还没。12. See you. 再见。13. Shut up!
Java访问远程服务
dyy_gusi
httpclient webservice get post
随着webService的崛起,我们开始中会越来越多的使用到访问远程webService服务。当然对于不同的webService框架一般都有自己的client包供使用,但是如果使用webService框架自己的client包,那么必然需要在自己的代码中引入它的包,如果同时调运了多个不同框架的webService,那么就需要同时引入多个不同的clien
Maven的settings.xml配置
geeksun
settings.xml
settings.xml是Maven的配置文件,下面解释一下其中的配置含义:
settings.xml存在于两个地方:
1.安装的地方:$M2_HOME/conf/settings.xml
2.用户的目录:${user.home}/.m2/settings.xml
前者又被叫做全局配置,后者被称为用户配置。如果两者都存在,它们的内容将被合并,并且用户范围的settings.xml优先。
ubuntu的init与系统服务设置
hongtoushizi
ubuntu
转载自:
http://iysm.net/?p=178 init
Init是位于/sbin/init的一个程序,它是在linux下,在系统启动过程中,初始化所有的设备驱动程序和数据结构等之后,由内核启动的一个用户级程序,并由此init程序进而完成系统的启动过程。
ubuntu与传统的linux略有不同,使用upstart完成系统的启动,但表面上仍维持init程序的形式。
运行
跟我学Nginx+Lua开发目录贴
jinnianshilongnian
nginx lua
使用Nginx+Lua开发近一年的时间,学习和实践了一些Nginx+Lua开发的架构,为了让更多人使用Nginx+Lua架构开发,利用春节期间总结了一份基本的学习教程,希望对大家有用。也欢迎谈探讨学习一些经验。
目录
第一章 安装Nginx+Lua开发环境
第二章 Nginx+Lua开发入门
第三章 Redis/SSDB+Twemproxy安装与使用
第四章 L
php位运算符注意事项
home198979
位运算 PHP &
$a = $b = $c = 0;
$a & $b = 1;
$b | $c = 1
问a,b,c最终为多少?
当看到这题时,我犯了一个低级错误,误 以为位运算符会改变变量的值。所以得出结果是1 1 0
但是位运算符是不会改变变量的值的,例如:
$a=1;$b=2;
$a&$b;
这样a,b的值不会有任何改变
Linux shell数组建立和使用技巧
pda158
linux
1.数组定义 [chengmo@centos5 ~]$ a=(1 2 3 4 5) [chengmo@centos5 ~]$ echo $a 1 一对括号表示是数组,数组元素用“空格”符号分割开。
2.数组读取与赋值 得到长度: [chengmo@centos5 ~]$ echo ${#a[@]} 5 用${#数组名[@或
hotspot源码(JDK7)
ol_beta
java HotSpot jvm
源码结构图,方便理解:
├─agent Serviceab
Oracle基本事务和ForAll执行批量DML练习
vipbooks
oracle sql
基本事务的使用:
从账户一的余额中转100到账户二的余额中去,如果账户二不存在或账户一中的余额不足100则整笔交易回滚
select * from account;
-- 创建一张账户表
create table account(
-- 账户ID
id number(3) not null,
-- 账户名称
nam