[转] VRRP协议介绍

2015-04-03 11:51:58 查看评论 735 人阅读    

1. 前言


VRRP(Virtual Router Redundancy Protocol)协议是用于实现路由器冗余的协议,最新协议在RFC3768中定义,原来的定义RFC2338被废除,新协议相对还简化了一些功能。


2. 协议说明

2.1 协议

VRRP协议是为消除在静态缺省路由环境下的缺省路由器单点故障引起的网络失效而设计的主备模式的协议,使得在发生故障而进行设备功能切换时可以不影响内外数据通信,不需要再修改内部网络的网络参数。VRRP协议需要具有IP地址备份,优先路由选择,减少不必要的路由器间通信等功能。

VRRP协议将两台或多台路由器设备虚拟成一个设备,对外提供虚拟路由器IP(一个或多个),而在路由器组内部,如果实际拥有这个对外IP的路由器如果工作正常的话就是MASTER,或者是通过算法选举产生,MASTER实现针对虚拟路由器IP的各种网络功能,如ARP请求,ICMP,以及数据的转发等;其他设备不拥有该IP,状态是BACKUP,除了接收MASTER的VRRP状态通告信息外,不执行对外的网络功能。当主机失效时,BACKUP将接管原先MASTER的网络功能。

配置VRRP协议时需要配置每个路由器的虚拟路由器ID(VRID)和优先权值,使用VRID将路由器进行分组,具有相同VRID值的路由器为同一个组,VRID是一个0~255的正整数;同一组中的路由器通过使用优先权值来选举MASTER,优先权大者为MASTER,优先权也是一个0~255的正整数。

VRRP协议使用多播数据来传输VRRP数据,VRRP数据使用特殊的虚拟源MAC地址发送数据而不是自身网卡的MAC地址,VRRP运行时只有MASTER路由器定时发送VRRP通告信息,表示MASTER工作正常以及虚拟路由器IP(组),BACKUP只接收VRRP数据,不发送数据,如果一定时间内没有接收到MASTER的通告信息,各BACKUP将宣告自己成为MASTER,发送通告信息,重新进行MASTER选举状态。

2.2 MASTER选举
如果对外的虚拟路由器IP就是路由器本身配置的IP地址的话,该路由器始终都是MASTER;
否则如果不具备虚拟IP的话,将进行MASTER选举,各路由器都宣告自己是MASTER,发送VRRP通告信息;
如果收到其他机器的发来的通告信息的优先级比自己高,将转回BACKUP状态;
如果优先级相等的话,将比较路由器的实际IP,IP值较大的优先权高;
不过如果对外的虚拟路由器IP就是路由器本身的IP的话,该路由器始终将是MASTER,这时的优先级值为255。

2.3 协议状态机
VRRP协议状态比较简单,就三种状态,初始化,主机,备份机。

blob.png

分类: Linux 标签: vrrp

[转]Go 程序的性能调试问题

2015-03-30 06:10:13 查看评论 1862 人阅读    

假设你手上有个Go语言编写的程序,你打算提升它的性能。目前有一些工具可以为此提供帮助。这些工具能帮你发现包括CPU、IO和内存在内多种类型的热点。所谓热点,是指那些为了能显著提升性能而值得你去关注的地方。有时候这些工具还能帮助你发现程序中主要的性能瑕疵。举个例子,你没必要每次执行SQL查询前都对SQL语句进行参数化解析,你可以将这个准备过程在程序启动时一次完成。再举个例子,当前某个算法的复杂度是O(N²),但其实存在一个复杂度是O(N)的解决方案。为了能发现这些问题,需要理智地检查你在优化分析器中获取到的信息。比如上面提到的第一个问题,你会注意到相当长的时间被花费在了对SQL语句的准备上。

了解针对性能的不同边界因素也是比较重要的。比方说,如果一个程序使用100 Mbps带宽的网络进行通信,而目前已经占用了超过90 Mbps的带宽,为了提升它的性能,你拿这样的程序也没啥办法了。在磁盘IO、内存消耗和计算密集型任务方面,也有类似的边界因素。

将这点牢记在心,让我们看看有哪些工具可以用。

注意:这些工具会彼此互相影响。例如,对内存使用优化分析器会导致针对CPU的优化分析器产生误差,对goroutine阻塞使用优化分析器会影响调度器跟踪等等。为了获得更加精确的信息,请在隔离的环境中使用这些工具。

注意:本文描述的用法基于Go语言发布的1.3版。


CPU 分析器

Go 运行时包含了内建的CPU分析器,它用来展示某个函数耗费了多少CPU百分时间。这里有三种方式来使用它:

1. 最简单的是用"go test"的-cpuprofile选项。例如下面的命令:

$ go test -run=none -bench=ClientServerParallel4 -cpuprofile=cprof net/http

将会分析所给的基准并将结果写入"cprof"文件中。

然后:

$ go tool pprof --text http.test cprof

将会打印耗费最多CPU时间的函数列表。

这里有几种可用的输出形式,最实用的有 --text, --web 和 --list。运行 "go tool pprof" 来得到完整的列表。

这个选项最明显的缺点是它只能用来做测试。

2. net/http/pprof 包。这是网络服务器的理想解决方案。你可能仅仅需要导入net/http/pprof,然后使用下面的方法收集分析结果:

$ go tool pprof --text mybin http://myserver:6060:/debug/pprof/profile

3. 手动收集. 你需要导入 runtime/pprof 然后再main函数中添加下面的代码:

1   if *flagCpuprofile != "" {
2       f, err := os.Create(*flagCpuprofile)
3       if err != nil {
4           log.Fatal(err)
5       }
6       pprof.StartCPUProfile(f)
7       defer pprof.StopCPUProfile()
8   }

分析结果会被写入指定的文件中,像第一种方式一样使之可视化。

这里有一个使用 --web 选项来实现可视化的例子:

cpu profile


[转]DBA专家门诊一期:索引与sql优化问题汇总

2015-01-06 15:52:00 查看评论 1030 人阅读    

              这是从阿里云论坛上转载的一篇文章,是阿里大牛在论坛上解答问题的帖子汇总。


              非常感谢大家踊跃参加DBA专家门诊一期:索引与sql优化,很多云友都提出了己的问题,门诊主任医师玄惭对大家提的问题一一作了解答。现已整理好这些问题,分享在此,欢迎来拿,绝对干货! 篇幅较长,耐心细看! 
我们将赠送每位提问者每人一本凌云杂志第四期,请各位以论坛短消息形式将姓名、电话、地址发送给管理员xiaofanqie。
 
  
啊里新人(Q1):索引我一般都是只有主键,这玩意儿,是不是越少越好? 
玄惭(A1):在日常的业务开发中,常见使用到索引的地方大概有两类:  
第一类.做业务约束需求,比如需要保证表中每行的单个字段或者某几个组合字段是唯一的,则可以在表中创建唯一索引;  
比如:需要保证test表中插入user_id字段的值不能出现重复,则在设计表的时候,就可以在表中user_id字段上创建一个唯一索引:  
CREATE TABLE `test` (  
  `id` int(11) NOT NULL AUTO_INCREMENT,  
  `user_id` int(11) NOT NULL,  
  `gmt_create` datetime DEFAULT NULL,  
  PRIMARY KEY (`id`),  
  UNIQUE KEY `uk_userid` (`user_id`)  
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;  
 

分类: MySQL 标签: mysql 优化 索引

centos6 下安装nginx1.7.9+php5.6.4+mysql

2015-01-06 08:55:39 查看评论 3418 人阅读    

        该文章是由于我在docker安装LNMP环境时出现的,原型是张宴大哥这篇文章:http://zyan.cc/nginx_php_v7/,只是做了一些软件升级变更。


1. 安装关联库

# mkdir -p /data/tgz
# cd /data/tgz
# yum install wget
# yum install pcre
# yum install openssl*
# yum install tar
# yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers make gd gd2 gd-devel gd2-devel

# ulimit -SHn 65535
# wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.36.tar.gz
# tar zxvf pcre-8.36.tar.gz
# cd pcre-8.36
# ./configure --prefix=/data/apps/pcre
# make && make install
# cd ../


分类: Linux 标签: lnmp

[转]通过telnet连接查看memcache服务器

2015-01-06 05:50:16 查看评论 613 人阅读    

memcache作为一款优秀的进程外缓存,常常被运用于高并发系统架构中。这里主要谈谈怎么通过telnet工具,查看memcache运行状况并对其key进行管理维护。假设memcache安装目录:/usr/local/memcached

          
1、启动memcache

# /usr/local/memcached/bin/memcached -d -m 512  -u root -l 192.168.119.70 -p 12000 -c 512 -P /usr/local/memcached/memcached.pid

启动参数详解
 -d:以守护进程方式启动。如果该参数没有指定,当按ctrl+c命令结束,memcache自动关闭
 -m:分配给memcache使用的最大内存数 单位是m,默认是64m
 -u: 指定运行memcache的用户
 -l: 指定监听的ip地址
 -p: 指定监听的tcp端口号,可以通过-u指定udp端口.默认是11211
 -c: 最大并发连接数
 -P: 报错进程id的文件
 memcache 启动之后,我们就可以通过telnet连接memcache,对其进行简单操作管理。


2、telnet连接memcache

# telnet 192.168.119.70 12000

blob.png


分类: Nosql 标签: memcache telnet

Docker创建centos的LNMP镜像

2014-12-28 17:54:23 查看评论 10103 人阅读    

        前段时间重装了系统,今天刚好有时间,就用docker安装一个lnmp开发环境,下面是我的安装笔记。


 1. 安装docker

        这个就不说了,不会的可以看下我之前的文章《Docker介绍及安装》。


    1)启动docker

# service docker start


分类: Linux 标签: docker 镜像 lnmp

pptpd密码中带有#无法识别

2014-12-22 15:10:24 查看评论 635 人阅读    

有同事离职了,所以将VPN的密码更新了下,改为:test#eas!z.,重启下pptpd,但是居然vpn连接不上了。

想到是不是不支持特殊字符,在google搜索到下面的说明,密码中带有#是不支持的!密码去掉#,重连,OK了。


blob.png


参考文档:http://www.dd-wrt.com/wiki/index.php/PPTP_Server_Configuration

分类: Linux 标签: pptpd vpn

[转]在Ubuntu 14.04中使SublimeText 3支持中文输

2014-12-07 06:14:57 查看评论 854 人阅读    

在Ubuntu 14.04中安装了SublimeText 3之后发现既然不支持输入中文,于是在网上搜罗一下,发现很多人遇到了同样的问题,但是解决办法大该就只有一个。下面根据自身的安装及解决办法总结如下:


1. SublimeText 3的安装

    安装方式有多种,本文所描述的是从官方网站上下载64位的.deb文件 ,具体为http://c758482.r82.cf2.rackcdn.com/sublime-text_build-3059_amd64.deb文件,下载后双击即会自动使用默认的安装软件安装。


2. 相关依赖软件的安装

# sudo apt-get install build-essential libgtk2.0-dev


分类: Linux 标签: sublime ubuntu

Docker介绍及安装

2014-10-27 15:31:38 查看评论 1661 人阅读    

blob.png

Docker介绍

      Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app)。几乎没有性能开销,可以很容易地在机器和数据中心中运行。最重要的是,他们不依赖于任何语言、框架或包括系统。更详细的介绍可以看下《5分钟弄懂Docker》。


Docker安装

   这里的安装环境为Centos6.4,其他系统的安装请参考这里

      首先,你需要安装EPEL仓库,请看这里EPEL installation instructions. 也可以看我另外一篇文章《CentOS 5/6上安装EPEL源

      docker的包是由EPEL提供的

      如果你已经安装了(不相关)的docker包,它会跟docker-io有冲突,有一个错误报告,如果想继续安装docker-io,请先删除docker.

      下一步,来让我们安装docker-io在我们的主机上

# sudo yum -y install docker-io

      升级docker-io包

#sudo yum -y update docker-io

      现在我们就安装好了,让我们开始docker进程

# sudo service docker start

      如果你想让他开机启动,我们需要这样做

# sudo chkconfig docker on

      现在让我们确认一下docker是否工作了

# sudo docker run -i -t fedora /bin/bash

      运行了,OK你现在去运行hello word的实例吧。

参考资料:

Docker新手指南

分类: Linux 标签: docker

[转]CentOS 5/6上安装EPEL源

2014-10-27 14:42:46 查看评论 852 人阅读    

EPEL 是什么?

EPEL (Extra Packages for Enterprise Linux,企业版Linux的额外软件包) 是Fedora小组维护的一个软件仓库项目,为RHEL/CentOS提供他们默认不提供的软件包。这个源兼容RHEL及像CentOS和Scientific Linux这样的衍生版本。

我们可以很容易地通过yum命令从EPEL源上获取上万个在CentOS自带源上没有的软件。EPEL提供的软件包大多基于其对应的Fedora软件包,不会与企业版Linux发行版本的软件发生冲突或替换其文件。

更多关于EPEL 项目的细节可以到以下网站获取:https://fedoraproject.org/wiki/EPEL

在文本中,我将展示在CentOS下如何安装EPEL源。

提示 - RHEL/CentOS系统有许多第三方源,比较流行的比如RpmForge,RpmFusion,EPEL,Remi等等。

然而需要引起注意的是,如果系统添加了多个第三方源,可能会因此产生冲突——一个软件包可以从多个源获取,一些源会替换系统的基础软件包,从而可能会产生意想不到的错误。已知的就有Rpmforge与EPEL会产生冲突。

对于这些问题我们建议,调整源的优先权或者有选择性的安装源,但是这需要复杂的操作,如果你不确定如何操作,我们推荐你只安装一个第三方源。


分类: Linux 标签: centos epel