RabbitMQ集群安装配置+HAproxy+Keepalived高可用

转自:https://www.linuxidc.com/Linux/2016-10/136492.htm

rabbitmq 集群 消息队列

RabbitMQ简介

  RabbitMQ是流行的开源消息队列系统,用erlang语言开发。RabbitMQ是AMQP(高级消息队列协议)的标准实现。

  AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。
  
  AMQP的原始用途只是为金融界提供一个可以彼此协作的消息协议,而现在的目标则是为通用消息队列架构提供通用构建工具。因此,面向消息的中间件

(MOM)系统,例如发布/订阅队列,没有作为基本元素实现。反而通过发送简化的AMQ实体,用户被赋予了构建例如这些实体的能力。这些实体也是规范的一

部分,形成了在线路层协议顶端的一个层级:AMQP模型。这个模型统一了消息模式,诸如之前提到的发布/订阅,队列,事务以及流数据,并且添加了额外的特
性,例如更易于扩展,基于内容的路由。

  RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。   
 

RabbitMQ安装

版本选择

1. 安装之前首先确认自己的系统版本和位数,然后选择适合的安装程序。

查看系统版本:cat /etc/issue
查看系统位数:cat /proc/cpuinfo |grep “clflush size”

2. 浏览博客,论坛,官网以及开源主页,尽量避免选择有重大缺陷版本

比如3.6.3版本rabbitmq的web端管理界面不能查看、管理queues
https://github.com/rabbitmq/rabbitmq-server/issues

3. 根据选择的版本,选择Erlang版本,http://www.erlang.org/

避免选择最高版本Erlang,3.6.4之前所有版本rabbitmq均不完全兼容当前最新的(2016.8)19.0 Erlang。同时选择高于等于R16B03的Erlag。
  
 

安装准备

1. 安装之前可以根据需要先修改好hostname,可以修改为有意义的名称,比如node1、node2等,安装之后再修改会出现一系列问题。
  方式1:hostname命令查看,修改

# hostname m1

  方式2:配置文件中修改

# vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=m1

2. 修改hosts文件,将集群所有机器 ip hostname 分别添加到每一台机器中 ,比如。

vi/etc/hosts

   127.0.0.1 localhost
127.0.0.1 m1
::1 localhost 192.168.12.190 m1
192.168.12.190 m2
192.168.12.192 n1
192.168.12.193 n2
192.168.12.194 n3

安装过程

(下载rpm安装包安装)

1. 下载软件源到/etc/yum.repos.d/ ,并生成缓存

wget –no-cache http://www.convirture.com/repos/definitions/rhel/6.x/convirt.repo -O /etc/yum.repos.d/convirt.repo

yum makecache

2. 安装Socat

yum install -y socat

3. 下载安装Erlang

选择版本号尽量高的推荐18
下载地址https://packages.erlang-solutions.com/erlang/

wget http://packages.erlang-solutions.com/site/esl/esl-erlang/FLAVOUR_1_general/esl-erlang_18.3.4-1~CentOS~6_amd64.rpm

yum localinstall -y esl-erlang_18.3.4-1~centos~6_amd64.rpm

4. 下载安装RabbitMq 3.6.2

wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.2/rabbitmq-server-3.6.2-1.noarch.rpm

yum localinstall -y rabbitmq-server-3.6.2-1.noarch.rpm

(如果提示依赖问题,先安装依赖,提示erlang版本直接跳过

yum localinstall --skip-broken rabbitmq-server-3.6.2-1.noarch.rpm
或rpm -ivh --nodeps rabbitmq-server-3.6.2-1.noarch.rpm

)

到此安装结束!


RabbitMQ配置

单机配置

启动服务

service rabbitmq-server start

查看运行状态

rabbitmqctl status

开启管理扩展(关闭为disable)

rabbitmq-plugins enable rabbitmq_management

开启之后可以用浏览器访问管理界面:http://ip:15672
默认用户名密码 guest:guest
如果提示不能登录就需要新建账户,见下文添加用户操作。

查看端口监听状态 5672为集群间通信端口,15672为web端管理端口

netstat -atn |grep 5672
[root@n3 ~]# netstat -atn |grep 5672
tcp 0 0 0.0.0.0:15672 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:25672 0.0.0.0:* LISTEN
tcp 0 0 :::5672 :::* LISTEN

添加账户(只需要在一台机器上设置,加入集群后会同步到所有机器)

rabbitmqctl  add_user username password

添加账户标签(administrator)

rabbitmqctl set_user_tags username administrator

标签:
management
用户可以访问管理插件。
policymaker
用户可以访问管理插件,可以管理可访问的vhost的策略和参数。
monitoring
用户可以访问管理插件,可以查看所有connections、channels、node-related信息。
administrator
用户拥有monitoring用户的所有权限,可以管理用户,vhost和权限,关闭他用户的连接,并管理所有vhost策略和参数。

(除此之外可以设置任何标签,以上几个只是特殊标签)

赋予权限 set_permissions [-p vhost] {user} {conf} {write} {read}

rabbitmqctl set_permissions -p / username ".*" ".*" ".*"

({conf} {write} {read}为正则表达式)

rabbitmqctl set_permissions -p /myvhost tonyg "^tonyg-.*" ".*" ".*"

这个命令指示RabbitMQ代理授予用户名为tonyg访问虚拟主机名为/myvhost,tonyg具有对“tonyg-”开头的资源的读写权限。


集群配置

RabbitMQ集群中所有节点都是平等的,没有绝对的主次之分,每一个节点的配置信息都会在集群中进行同步。只有节点类型区别,节点类型有disk型和RAM型。分别对应磁盘和内存,disk节点可以持久化消息安全性较高、RAM节点存取速度快,但是不能持久化。一个集群中至少要有一个disk类型的节点,以便在所有节点宕机重启时将持久化队列中的消息进行持久化。

同步 Erlang Cookie

Erlang Cookie 文件:/var/lib/rabbitmq/.erlang.cookie
将任意一台的cookie文件或者内容替换到集群其他机器。最后确保文件权限为400。
查看某台机器的cookie

[root@n1 ~]# cat /var/lib/rabbitmq/.erlang.cookie
YZCUPNLBNOMPTDCUALZC

关闭rabbitmq,将cookie复制到其他机器…

[root@n3~]# rabbitmqctl stop
[root@n3~]# echo YZCUPNLBNOMPTDCUALZC > /var/lib/rabbitmq/.erlang.cookie [root@n2~]# rabbitmqctl stop
[root@n2~]# echo YZCUPNLBNOMPTDCUALZC > /var/lib/rabbitmq/.erlang.cookie

或者使用scp命令

scp /var/lib/rabbitmq/.erlang.cookie root@n2:/var/lib/rabbitmq/.erlang.cookie

 scp /var/lib/rabbitmq/.erlang.cookie root@n3:/var/lib/rabbitmq/.erlang.cookie

cookie同步完成之后启动
以detached方式启动

rabbitmq-server -detached

如果提示PID FILE不能写入,可以关闭应用,直接以服务方式启动
关闭之后重启仍然提示有实例正在运行可以强制杀死线程

ps aux | grep rabbitmq
kill -9 xxxx

启动服务

service rabbitmq-server start
加入集群

将n2节点加入n1 作为RAM类型节点

[root@n2 ~]#rabbitmqctl stop_app
[root@n2 ~]#rabbitmqctl reset
[root@n2 ~]#rabbitmqctl join_cluster rabbit@n1 --ram
[root@n2 ~]#rabbitmqctl start_app

将n3节点加入n1 作为disc类型节点

[root@n3 ~]#rabbitmq stop_app
[root@n3 ~]#rabbitmqctl reset
[root@n3 ~]#rabbitmqctl join_cluster rabbit@n1
[root@n3 ~]#rabbitmqctl start_app
(rabbitmq集群节点有disc 和ram两种类型,一个集群中至少要有一个disc类型的节点,不指定默认加入为disc)

查看状态

完成之后可以用rabbitmqctl 命令查看相关信息
rabbitmqctl status //查看应用状态
rabbitmqctl cluster_status //查看集群信息

访问任意管理端界面查看http://ip:15672

到此简单集群部署完毕!
(如果某节点显示unavailable检查服务是否启动,管理扩展是否开启
rabbitmq-plugins enable rabbitmq_management)


HAproxy+Keepalived 高可用

随着网站业务量的增长你网站的服务器压力越来越大?需要负载均衡方案!商业的硬件如F5又太贵,如何有效节约成本?同时实现商业硬件一样的高性能高可用的功能?有什么好的负载均衡可伸张可扩展的方案吗?答案是利用HAproxy+Keepalived基于完整开源软件的架构可以提供一个负载均衡及高可用的服务器。

  HAProxy是一款提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,HAProxy是完全免费的、借助HAProxy可以快速并且可靠的提供基于TCP和HTTP应用的代理解决方案。Keepalived在这里主要用作RealServer的健康状态检查以及LoadBalance主机和BackUP主机之间failover的实现。
  
  

HAproxy简介

  HAProxy是一款提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,HAProxy是完全免费的、借助HAProxy可以快速并且可��的提供基于TCP和HTTP应用的代理解决方案。

(1)免费开源,稳定性也是非常好,可以与硬件级的F5相媲美;

(2)根据官方文档,HAProxy可以跑满10Gbps-New benchmark of HAProxy at 10 Gbps using Myricom’s 10GbE NICs (Myri-10G PCI-Express)。

(3)HAProxy 支持连接拒绝 : 因为维护一个连接的打开的开销是很低的,有时我们很需要限制攻击蠕虫(attack
bots),也就是说限制它们的连接打开从而限制它们的危害。
这个已经为一个陷于小型DDoS攻击的网站开发了而且已经拯救了很多站点,这个优点也是其它负载均衡器没有的。

(4)HAProxy 支持全透明代理(已具备硬件防火墙的典型特点): 可以用客户端IP地址或者任何其他地址来连接后端服务器.
这个特性仅在Linux 2.4/2.6内核打了cttproxy补丁后才可以使用.
这个特性也使得为某特殊服务器处理部分流量同时又不修改服务器的地址成为可能。

(5)HAProxy现多于线上的Mysql集群环境,我们常用于它作为MySQL(读)负载均衡;

(6)自带强大的监控服务器状态的页面,实际环境中我们结合Nagios进行邮件或短信报警,这个也是我非常喜欢它的原因之一;

(7)HAProxy支持虚拟主机,许多朋友说它不支持虚拟主机是错误的,通过测试我们知道,HAProxy是支持虚拟主机的。

总结:
  HAProxy特别适用于那些负载特大的web站点,
这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中,
同时可以保护你的web服务器不被暴露到网络上。
  在功能上,能以proxy反向代理方式实现WEB均衡负载,这样的产品有很多。包括lvs,Nginx,ApacheProxy,lighttpd等。
  国内生产环境上使用Haproxy的公司很多,例如淘宝的CDN系统
  

keepalived简介  

  keepalived是一个类似于layer3, 4 &
5交换机制的软件,也就是我们平时说的第3层、第4层和第5层交换。Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器。

  Keepalived是一个基于VRRP协议来实现的WEB
服务高可用方案,可以利用其来避免单点故障。一个WEB服务至少会有2台服务器运行Keepalived,一台为主服务器(MASTER),一台为备份服务器(BACKUP),但是对外表现为一个虚拟IP,主服务器会发送特定的消息给备份服务器,当备份服务器收不到这个消息的时候,即主服务器宕机的时候,备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。

        +------------------VIP(192.168.12.111)-------------+
| | |
| | |
server(MASTER) <------------keepalived--------> server(BACKUP)
(192.168.12.192) (192.168.12.194)

HAproxy安装配置

在进行安装配置HAproxy之前首先确定集群的基本架构,需要在节点n1和n2上做热备,所以需要同时安装上haproxy。基本结构如下:

ip hostname 节点类型 主/备
192.168.12.190 m1 Disk  
192.168.12.192 n1 RAM master
192.168.12.194 n3 RAM backup


在master和backup主机上安装(n1,n3)haproxy

yum install haproxy

修改配置文件

vi /etc/haproxy/haproxy.cfg

#配置rabbitmq集群节点信息,n1、n3相同配置

#配置一个监听实例rabbitmq_cluster
listen rabbitmq_cluster #监控端口
bind 0.0.0.0:5670 #配置TCP模式
mode tcp #简单的轮询
balance roundrobin #rabbitmq集群节点配置
server m1 192.168.12.190:5672 check inter 5000 rise 2 fall 2 server n1 192.168.12.192:5672 check inter 5000 rise 2 fall 2 server n3 192.168.12.194:5672 check inter 5000 rise 2 fall 2 #配置web端监控,查看统计信息
###haproxy statistics monitor listen statics 0.0.0.0:8888 mode http log 127.0.0.1 local0 debug transparent #数据刷新频率
stats refresh 60s #后台地址http://ip:8888/haproxy-stats
stats uri / haproxy-stats stats realm Haproxy \ statistic #账号密码
stats auth admin:admin

Keepalived安装配置

在master和backup主机上安装(n1,n3)

# yum install keepalived

修改配置文件

vi /etc/keepalived.conf

备用节点:

#定义一个脚本chk_haproxy
vrrp_script chk_haproxy {
script "/etc/keepalived/scripts/haproxy_check.sh"
interval 2
} #定义一个VRRP实例
vrrp_instance VI_1 {
#备用节点(主节点为MASTER)
state BACKUP
#添加虚拟地址的网卡 ,选择稳定的网卡
interface eth0
#虚拟路由标识,同一个VRRP实例要使用同一个标识
virtual_router_id 51
#主、备节点是由优先级控制的state参数会失效
priority 100
# 用于设定主备节点间同步检查时间间隔
#advert_int 2
#
unicast_src_ip 192.168.12.194
unicast_peer {
192.168.12.192
} #授权方式
authentication {
auth_type PASS
auth_pass rabbitmq
} #设置虚拟地址
virtual_ipaddress {
192.168.12.111
} #尽量将track_script放到virtual_ipaddress后面
track_script {
chk_haproxy
} #设置高可用集群中不抢占功能,在主机down后,从机接管,当主机重新恢复后,设置此功能,备机将继续提供服务,从而避免因切换导致的隐患
nopreempt # 当keepalived切换状态到MASTER时,执行脚本
notify_master "/etc/keepalived/scripts/haproxy_master.sh" # 当keepalived切换状态到BACKUP时,执行脚本 #notify_backup "/etc/keepalived/backup.sh" # 当keepalived切换状态到FAULT时,执行脚本 #notify_fault "/etc/keepalived/fault.sh" #当keepalived切换状态到STOP时,执行脚本 #notify_fault "/etc/keepalived/stop.sh" }

主节点:

vrrp_script chk_haproxy {
script "/etc/keepalived/scripts/haproxy_check.sh"
interval 2
} vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 101
unicast_src_ip 192.168.12.192
unicast_peer {
192.168.12.194
} authentication {
auth_type PASS
auth_pass rabbitmq
} virtual_ipaddress {
192.168.12.111
} track_script {
chk_haproxy
}
notify_master "/etc/keepalived/scripts/haproxy_master.sh" }

chk_haproxy.sh

 #!/bin/bash
LOGFILE="/var/log/keepalived-ha-state.log"
echo "===========================================" >> \$LOGFILE
date +%Y%m%d-%H:%M:%S >> \$LOGFILE
pid1=\`ps aux|grep /etc/haproxy/haproxy.cfg | grep -v grep | grep -v bash | wc –l\`
if [ "\$pid1" = "0" ]; then echo "Ready to start haproxy....." >> \$LOGFILE
haproxy -f /etc/haproxy/haproxy.cfg –D

启动Haproxy

    pid2=\`ps aux|grep /etc/haproxy/haproxy.cfg | grep -v grep | grep -v bash |wc –l\`
if [ "\$pid2" = "0" ]; then
echo "Haproxy failed to start !!! So,stop keepalived!!!" >> \$LOGFILE
/etc/init.d/keepalived stop
else
echo "Haproxy start success........." >> \$LOGFILE
fi
fi

haproxy_master.sh

#!/bin/bash
LOGFILE="/var/log/keepalived-ha-state.log"
echo "===========================================" >> $LOGFILE
date +%Y%m%d-%H:%M:%S >> $LOGFILE
echo "Switch to here....." >> $LOGFILE

集群搭建完毕!

常用命令

rabbitmqctl命令

http://www.rabbitmq.com/man/rabbitmqctl.1.man.html#

1). 服务器启动与关闭
启动: rabbitmq-server –detached
关闭:rabbitmqctl stop
若单机有多个实例,则在rabbitmqctlh后加–n 指定名称

2). 插件管理
开启某个插件:rabbitmq-pluginsenable xxx
关闭某个插件:rabbitmq-pluginsdisablexxx
注意:重启服务器后生效。

3).virtual_host管理
新建virtual_host: rabbitmqctladd_vhost xxx
撤销virtual_host:rabbitmqctl delete_vhost xxx

4). 用户管理
新建用户:rabbitmqctl add_user xxxpwd
删除用户: rabbitmqctl delete_user xxx
改密码: rabbimqctlchange_password {username} {newpassword}
设置用户角色:rabbitmqctlset_user_tags {username} {tag …}
Tag可以为 administrator,monitoring, management

5). 权限管理
权限设置:set_permissions [-pvhostpath] {user} {conf} {write} {read}
Vhostpath
Vhost路径
user
用户名
Conf
一个正则表达式match哪些配置资源能够被该用户访问。
Write
一个正则表达式match哪些配置资源能够被该用户读。
Read
一个正则表达式match哪些配置资源能够被该用户访问。

6). 获取服务器状态信息
服务器状态:rabbitmqctl status
队列信息:rabbitmqctl list_queues[-p vhostpath] [queueinfoitem …]
Queueinfoitem可以为:name,durable,auto_delete,arguments,messages_ready,messages_unacknowledged,messages,consumers,memory
Exchange信息:rabbitmqctllist_exchanges[-p vhostpath] [exchangeinfoitem …]
Exchangeinfoitem有:name,type,durable,auto_delete,internal,arguments.
Binding信息:rabbitmqctllist_bindings[-p vhostpath] [bindinginfoitem …]
Bindinginfoitem有:source_name,source_kind,destination_name,destination_kind,routing_key,arguments
Connection信息:rabbitmqctllist_connections [connectioninfoitem …]
Connectioninfoitem有:recv_oct,recv_cnt,send_oct,send_cnt,send_pend等。
Channel信息:rabbitmqctl list_channels[channelinfoitem …]
Channelinfoitem有consumer_count,messages_unacknowledged,messages_uncommitted,acks_uncommitted,messages_unconfirmed,prefetch_count,client_flow_blocked

rabbimq-plugins

http://www.rabbitmq.com/man/rabbitmq-plugins.1.man.html

系统命令

卸载
#rpm -qa|grep rabbitmq
rabbitmq-server-3.6.1-1.noarch
#rpm -e --nodeps rabbitmq-server-3.6.1-1.noarch
#rpm -qa|grep erlang
esl-erlang-18.3-1.x86_64
#rpm -e --nodeps esl-erlang-18.3-1.x86_64 服务
#service rabbitmq-server start --后台方式运行
#service rabbitmq-server stop --停止运行
#service rabbitmq-server status --查看状态

CentOS 5.6 安装RabbitMQ http://www.linuxidc.com/Linux/2013-02/79508.htm

RabbitMQ客户端C++安装详细记录 http://www.linuxidc.com/Linux/2012-02/53521.htm

用Python尝试RabbitMQ http://www.linuxidc.com/Linux/2011-12/50653.htm

RabbitMQ集群环境生产实例部署 http://www.linuxidc.com/Linux/2012-10/72720.htm

Ubuntu下PHP + RabbitMQ使用 http://www.linuxidc.com/Linux/2010-07/27309.htm

在CentOS上安装RabbitMQ流程 http://www.linuxidc.com/Linux/2011-12/49610.htm

RabbitMQ概念及环境搭建 http://www.linuxidc.com/Linux/2014-12/110449.htm

RabbitMQ入门教程  http://www.linuxidc.com/Linux/2015-02/113983.htm

RabbitMQ 的详细介绍请点这里
RabbitMQ 的下载地址请点这里

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

RabbitMQ集群安装配置+HAproxy+Keepalived高可用的更多相关文章

  1. 18-基于CentOS7搭建RabbitMQ3.10.7集群镜像队列+HaProxy+Keepalived高可用架构

    集群架构 虚拟机规划 IP hostname 节点说明 端口 控制台地址 192.168.247.150 rabbitmq.master rabbitmq master 5672 http://192 ...

  2. Rabbitmq集群安装配置

    Rabbitmq集群安装与配置 一.rabbitmq安装环境准备 1.安装环境准备 这里,我们以两个节点为例进行安装,一个节点为内存节点,另一个节点为硬盘节点,具体可根据自己需要分配节点. 安装系统 ...

  3. centos7安装配置LVS+keepalived高可用

    Centos7-Lvs+Keepalived架构 LVS+Keepalived 介绍 1 .   LVS LVS 是一个开源的软件,可以实现 LINUX 平台下的简单负载均衡. LVS 是 Linux ...

  4. kubernetes rabbitmq 集群安装配置

    生成secret来保存relang-cookie: secret.yml文件: apiVersion: v1kind: Secretmetadata: name: rabbit-cookietype: ...

  5. Haproxy+keepalived高可用集群实战

    1.1  Haproxy+keepalived高可用集群实战 随着互联网火热的发展,开源负载均衡器的大量的应用,企业主流软件负载均衡如LVS.Haproxy.Nginx等,各方面性能不亚于硬件负载均衡 ...

  6. hbase单机环境的搭建和完全分布式Hbase集群安装配置

    HBase 是一个开源的非关系(NoSQL)的可伸缩性分布式数据库.它是面向列的,并适合于存储超大型松散数据.HBase适合于实时,随机对Big数据进行读写操作的业务环境. @hbase单机环境的搭建 ...

  7. 集群 安装 配置FastDFS

    FastDFS 集群 安装 配置 这篇文章介绍如何搭建FastDFS 集群 FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储.文件同步.文件访问(文件上传.文件下载 ...

  8. 1.rabbitmq 集群安装及负载均衡设置

    标题 : 1.rabbitmq 集群安装及负载均衡设置 目录 : RabbitMQ 序号 : 1 vim /etc/pam.d/login #对于64位系统,在文件中添加如下行 session req ...

  9. CentOS下Hadoop-2.2.0集群安装配置

    对于一个刚开始学习Spark的人来说,当然首先需要把环境搭建好,再跑几个例子,目前比较流行的部署是Spark On Yarn,作为新手,我觉得有必要走一遍Hadoop的集群安装配置,而不仅仅停留在本地 ...

随机推荐

  1. VisualStudio Shell简介

    VisualStudio Shell是微软效仿Eclipse推出的一个免费的VisualStudio内核,开发者可以通过在其上挂载插件(和传统的VS插件一样),从而快速开发自己的程序.它是Visual ...

  2. [置顶] docker1.12--docker命令行帮助文档

    镜像操作 build 使用dockerfile方式创建镜像 使用dockerfile文件docker build dockerflle/,dockerfile文件默认位于dockerflle/Dock ...

  3. 设计模式之空对象模式(php实现)

    github地址:https://github.com/ZQCard/design_pattern /** * 在空对象模式(Null Object Pattern)中,一个空对象取代 NULL 对象 ...

  4. Vue自定义指令和路由

    一.自定义指令 除了默认设置的核心指令( v-model 和 v-show ), Vue 也允许注册自定义指令. 下面我们注册一个全局指令 v-focus,该指令的功能是在页面加载时,元素获得焦点: ...

  5. python 常用系统参数

    获取当前路径: os.path.abspath('.') 或os.getcwd() 获取上一级路径: print os.path.abspath('..') 获取上上一级路径:  os.path.ab ...

  6. autocomplete属性在谷歌浏览器不起作用

    大家都知道autocomplete属性是表单字段中的HTML5新属性,该属性有两种状态值,分别为"on" 和 "off",该属性可省略:省略属性值后默认值为&q ...

  7. 【LeetCode-面试算法经典-Java实现】【109-Convert Sorted List to Binary Search Tree(排序链表转换成二叉排序树)】

    [109-Convert Sorted List to Binary Search Tree(排序链表转换成二叉排序树)] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 ...

  8. InternalNative.cpp

    1 /* * Copyright (C) 2008 The Android Open Source Project * * Licensed under the Apache License, Ver ...

  9. webstrom 很卡 底下一直走进度条 scanning files to index

    最近工作总会遇到一些问题 先说说webstrom 其中有一次仅仅开了两个项目 电脑风扇就各种轰鸣 各种重启 安装卸载webstrom 都没有作用 好吧 其实解决很简单 选择一个文件夹,右键, Mark ...

  10. Android之短信验证码

    我们今天所使用的方案仅仅是android手机设备集成短信验证码功能的方案之中的一个. 我们所採用的方案是使用聚合数据的短信验证sdk. 程序的界面例如以下所看到的: 实现步骤: 1.到聚合数据官网上申 ...