ivaneeo's blog

自由的力量,自由的生活。

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  669 Posts :: 0 Stories :: 64 Comments :: 0 Trackbacks

#

Using HAProxy to make SSH and SSL available on the same port

Certain places firewall TCP ports other than the most common ports. There are many techniques for bypassing such restrictions. One simple approach is to run a SSH daemon on port 443, however a downside of this is you need to dedicate an IP address to this SSH service.

There is quite a neat technique for making SSH and SSL share a port; in the SSL protocol clients should write first, whereas in SSH the server should write first; therefore by waiting to see if the client writes data it is possible to make a guess as to if the client is an SSL client or a SSH client.

I'm not the first person to think this up, Net::Proxy has a script called sslh and confusingly there is also a C implementation also called sslh.

I recently switched my web server to use HAProxy to allow me some more flexiblity in how I configure things (especially now the development version has keepalive support). While reading the (incredibly detailed) documentation I noticed it should be able to do the sslh technique.

Doing this needs the (currently) in development HAProxy 1.4 (support was added for content switching TCP as well as HTTP in this commit -- thanks to Cyril Bonté on the mailing list for confirming that).

The configuration looks something like the following (global section omitted, you'll want to run it as a user other than root and chroot it if you actually use this).

defaults

  timeout connect 5s

  timeout client 50s

  timeout server 20s


listen ssl :443

  tcp-request inspect-delay 2s

  acl is_ssl req_ssl_ver 2:3.1

  tcp-request content accept if is_ssl

  use_backend ssh if !is_ssl

  server www-ssl :444

  timeout client 2h


backend ssh

  mode tcp

  server ssh :22

  timeout server 2h



This listens on port 443, forwards it to port 444 (where the actual SSL web server is listening) unless it is not SSLv2, SSLv3 or TLSv1 traffic, in which case it forwards it to the ssh backend listening on port 22.

Obviously as I said earlier this is only a guess that is subject to network conditions such as packet loss. I'm not recommending you use this technique on a production site, but for a low traffic machine where you want to run both protocols it is very useful. (By increasing the timeout for SSH you increase the chances of a correct result, but also add a potentially annoying delay).

Sometimes layer 7 filtering techniques are in use and just listening on port 443 is not enough. In this case you can use SSH inside SSL.

posted @ 2014-03-19 01:53 ivaneeo 阅读(1286) | 评论 (0)编辑 收藏

http://blog.sina.com.cn/s/blog_6b8fc5470101fi4b.html
posted @ 2014-03-14 00:31 ivaneeo 阅读(249) | 评论 (0)编辑 收藏

dpkg-deb: error: subprocess paste was killed by signal (Broken pipe)


已解决: cd/var/lib/dpkg
sudo mv info info.bak
sudo mkdir info
posted @ 2014-03-12 19:00 ivaneeo 阅读(1822) | 评论 (0)编辑 收藏

# this config needs haproxy-1.1.28 or haproxy-1.2.1
global
        log 127.0.0.1   local0
        log 127.0.0.1   local1 notice
        #log loghost    local0 info
        maxconn 4096
        tune.bufsize 20480
        tune.maxrewrite 2048
        #chroot /usr/share/haproxy
        user haproxy
        group haproxy
        daemon
        #debug
        #quiet
defaults
    log global
    mode tcp
    option tcplog
    option dontlognull
    option tcp-smart-accept
    option tcp-smart-connect
    #option dontlog-normal
    retries 3
    option redispatch
    timeout connect 1h
    timeout client  1h  
    timeout server  1h
    maxconn 40000
    option redispatch
listen rabbitmq_cluster 0.0.0.0:5672
       mode tcp
       maxconn 2000
       balance roundrobin
       server   rabbit1 172.20.21.1:5672 check inter 2000 rise 2 fall 3
       server   rabbit2 172.20.21.2:5672 check inter 2000 rise 2 fall 3
       server   rabbit3 172.20.21.3:5672 check inter 2000 rise 2 fall 3
listen  mariadb_cluster
        bind 0.0.0.0:3306
        mode tcp       
#option tcpka
        option mysql-check user haproxy #mysql....  root.mysql.....
        #balance leastconn           #....
        balance roundrobin
        server mysql1 172.20.21.1:3306 weight 1 check  inter 1s rise 2 fall 2
        server mysql2 172.20.21.2:3306 weight 1 check  inter 1s rise 2 fall 2
        server mysql3 172.20.21.3:3306 weight 1 check  inter 1s rise 2 fall 2
listen ssdb_cluster 0.0.0.0:8888
       mode tcp
       maxconn 2000
       balance roundrobin
       server   ssdb1 172.20.21.1:8888 check inter 2000 rise 2 fall 3
       server   ssdb2 172.20.21.2:8888 check inter 2000 rise 2 fall 3
listen 49 0.0.0.0:3389
       mode tcp
       maxconn 2000
       balance source
       option tcpka
       server   49 172.20.0.49:3389 check inter 2000 rise 2 fall 3
listen stats :1936
    mode http
    stats enable
    stats hide-version
    stats realm Haproxy\ Statistics
    stats uri /
    stats auth admin:admin
posted @ 2014-03-11 15:22 ivaneeo 阅读(296) | 评论 (0)编辑 收藏

https://github.com/foursquare/heapaudit
posted @ 2014-03-11 14:45 ivaneeo 阅读(345) | 评论 (0)编辑 收藏

     摘要: Install MariaDB Galera Cluster in Ubuntuby SECAGUY on 2 JULY 2013 · LEAVE A COMMENTI am going to show you on how to install MariaDB Cluster (with Galera) in Ubuntu Precis...  阅读全文
posted @ 2014-03-02 00:26 ivaneeo 阅读(519) | 评论 (0)编辑 收藏

http://www.wangzhongyuan.com/archives/351.html
posted @ 2014-02-20 23:02 ivaneeo 阅读(185) | 评论 (0)编辑 收藏

如何杀死僵尸进程呢?

一般僵尸进程很难直接kill掉,不过您可以kill僵尸爸爸。父进程死后,僵尸进程成为”孤儿进程”,过继给1号进程init,init始终会负责清理僵尸进程.它产生的所有僵尸进程也跟着消失。

ps -e -o ppid,stat | grep Z | cut -d” ” -f2 | xargs kill -9

kill -HUP `ps -A -ostat,ppid | grep -e ’^[Zz]‘ | awk ’{print $2}’`

当然您可以自己编写更好的shell脚本,欢迎与大家分享。

另外子进程死后,会发送SIGCHLD信号给父进程,父进程收到此信号后,执行waitpid()函数为子进程收尸。就是基于这样的原理:就算父进 程没有调用wait,内核也会向它发送SIGCHLD消息,而此时,尽管对它的默认处理是忽略,如果想响应这个消息,可以设置一个处理函数。

posted @ 2014-02-20 19:49 ivaneeo 阅读(577) | 评论 (0)编辑 收藏


  Druid DBCP C3P0 JBoss Weblogic BonCP
数据库用户名称 Username Username User user-name    
数据库密码 Password Password Password password    
驱动名称 DriverClassName DriverClassName DriverClass driver-class DriverName  
JDBC连接串 Url Url JdbcUrl connection-url Url  
JDBC连接属性 Properties Properties Properties connection-property Properties  
初始化大小 InitialSize InitialSize InitialPoolSize   Initial Capacity  
连接池最小空闲 MinIdle MinIdle MinPoolSize min-pool-size    
连接池最大空闲 MaxIdle MaxIdle MaxPoolSize max-pool-size    
连接池最大使用连接数量 MaxActive MaxActive     MaximumCapacity  
最小逐出时间 MinEvictableIdleTimeMillis MinEvictableIdleTimeMillis        
最多等待线程 MaxWaitThreadCount MaxWaitThreadCount     HighestNumWaiters  
连接池增长步长     AcquireIncrement   CapacityIncrement  
获取连接时测试是否有效 TestOnBorrow TestOnBorrow TestConnectionOnCheckout      
归还连接时是否测试有效 TestOnReturn TestOnReturn TestConnectionOnCheckin   TestConnectionsOnReserve  
测试有效用的SQL Query ValidationQuery ValidationQuery PreferredTestQuery      
测试有效的超时时间 ValidationQueryTimeout ValidationQueryTimeout        
连接初始化SQL ConnectionInitSqls ConnectionInitSqls     InitSQL  
连接最大存活实现     MaxConnectionAge      
连接泄漏的超时时间 RemoveAbandonedTimeout RemoveAbandonedTimeout UnreturnedConnectionTimeout      
关闭泄漏的连接时打印堆栈信息 LogAbandoned LogAbandoned DebugUnreturnedConnectionStackTraces      
逐出连接的检测时间间隔 TimeBetweenEvictionRunsMillis TimeBetweenEvictionRunsMillis     ShrinkFrequencySeconds  
Statement缓存算法         StatementCacheType  
Statement缓存大小         StatementCacheSize  
          TestTableName  
          SecondsToTrustAnIdlePoolConnection  
          ConnectionCreationRetryFrequencySeconds  
          LoginDelaySeconds  
          Profile Connection Usage  
          Profile Connection Reservation Wait  
          Profile Connection Leak  
          Profile Connection Reservation Failed  
          Profile Statement Cache Entry  
          Profile Statement Usage  
          Profile Connection Last Usage  
          Profile Connection Multithreaded Usage  
          Profile Harvest Frequency Seconds  
连接池扩展 Filters       DriverInterceptor  
          CredentialMappingEnabled  
          InactiveConnectionTimeoutSeconds  
          ConnectionReserveTimeoutSeconds  
  QueryTimeout       StatementTimeout  
连接池关闭时对正在使用连接的处理方式         IgnoreInUseConnectionsEnabled  
把连接放到ThreadLocal中         PinnedToThread  
关闭“赃”连接(调用过getVendorConnection方法)         RemoveInfectedConnections  
posted @ 2013-12-26 16:02 ivaneeo 阅读(1016) | 评论 (0)编辑 收藏

现在网站发展的趋势对网络负载均衡的使用是随着网站规模的提升根据不同的阶段来使用不同的技术:

一种是通过硬件来进行进行,常见的硬件有比较昂贵的NetScaler、F5、Radware和Array等商用的负载均衡器,它的优点就是有专业的维护团队来对这些服务进行维护、缺点就是花销太大,所以对于规模较小的网络服务来说暂时还没有需要使用;另外一种就是类似于LVS/HAProxy、Nginx的基于Linux的开源免费的负载均衡软件策略,这些都是通过软件级别来实现,所以费用非常低廉,所以我个也比较推荐大家采用第二种方案来实施自己网站的负载均衡需求。

近期朋友刘鑫(紫雨荷雪)的项目成功上线了,PV达到了亿级/日的访问量,最前端用的是HAProxy+Keepalived双机作的负载均衡器 /反向代理,整个网站非常稳定;这让我更坚定了以前跟老男孩前辈聊的关于网站架构比较合理设计的架构方案:即Nginx /HAProxy+Keepalived作Web最前端的负载均衡器,后端的MySQL数据库架构采用一主多从,读写分离的方式,采用LVS+Keepalived的方式。

在这里我也有一点要跟大家申明下:很多朋友担心软件级别的负载均衡在高并发流量冲击下的稳定情况,事实是我们通过成功上线的许多网站发现,它们的稳 定性也是非常好的,宕机的可能性微乎其微,所以我现在做的项目,基本上没考虑服务级别的高可用了。相信大家对这些软件级别的负载均衡软件都已经有了很深的 的认识,下面我就它们的特点和适用场合分别说明下。

LVS:使用集群技术和Linux操作系统实现一个高性能、高可用的服务器,它具有很好的可伸缩性(Scalability)、可靠性(Reliability)和可管理性(Manageability),感谢章文嵩博士为我们提供如此强大实用的开源软件。

LVS的特点是:

  1. 抗负载能力强、是工作在网络4层之上仅作分发之用,没有流量的产生,这个特点也决定了它在负载均衡软件里的性能最强的;
  2. 配置性比较低,这是一个缺点也是一个优点,因为没有可太多配置的东西,所以并不需要太多接触,大大减少了人为出错的几率;
  3. 工作稳定,自身有完整的双机热备方案,如LVS+Keepalived和LVS+Heartbeat,不过我们在项目实施中用得最多的还是LVS/DR+Keepalived;
  4. 无流量,保证了均衡器IO的性能不会收到大流量的影响;
  5. 应用范围比较广,可以对所有应用做负载均衡;
  6. 软件本身不支持正则处理,不能做动静分离,这个就比较遗憾了;其实现在许多网站在这方面都有较强的需求,这个是Nginx/HAProxy+Keepalived的优势所在。
  7. 如果是网站应用比较庞大的话,实施LVS/DR+Keepalived起来就比较复杂了,特别后面有Windows Server应用的机器的话,如果实施及配置还有维护过程就比较复杂了,相对而言,Nginx/HAProxy+Keepalived就简单多了。站长教学网 eduyo.com

Nginx的特点是:

  1. 工作在网络的7层之上,可以针对http应用做一些分流的策略,比如针对域名、目录结构,它的正则规则比HAProxy更为强大和灵活,这也是许多朋友喜欢它的原因之一;
  2. Nginx对网络的依赖非常小,理论上能ping通就就能进行负载功能,这个也是它的优势所在;
  3. Nginx安装和配置比较简单,测试起来比较方便;
  4. 也可以承担高的负载压力且稳定,一般能支撑超过几万次的并发量;
  5. Nginx可以通过端口检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等,并且会把返回错误的请求重新提交到另一个节点,不过其中缺点就是不支持url来检测;
  6. Nginx仅能支持http和Email,这样就在适用范围上面小很多,这个它的弱势;
  7. Nginx不仅仅是一款优秀的负载均衡器/反向代理软件,它同时也是功能强大的Web应用服务器。LNMP现在也是非常流行的web架构,大有和以前最流行的LAMP架构分庭抗争之势,在高流量的环境中也有很好的效果。
  8. Nginx现在作为Web反向加速缓存越来越成熟了,很多朋友都已在生产环境下投入生产了,而且反映效果不错,速度比传统的Squid服务器更快,有兴趣的朋友可以考虑用其作为反向代理加速器。

HAProxy的特点是:

  1. HAProxy是支持虚拟主机的,以前有朋友说这个不支持虚拟主机,我这里特此更正一下。
  2. 能够补充Nginx的一些缺点比如Session的保持,Cookie的引导等工作
  3. 支持url检测后端的服务器出问题的检测会有很好的帮助。
  4. 它跟LVS一样,本身仅仅就只是一款负载均衡软件;单纯从效率上来讲HAProxy更会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的。
  5. HAProxy可以对Mysql读进行负载均衡,对后端的MySQL节点进行检测和负载均衡,不过在后端的MySQL slaves数量超过10台时性能不如LVS,所以我向大家推荐LVS+Keepalived。
  6. HAProxy的算法现在也越来越多了,具体有如下8种:
    ① roundrobin,表示简单的轮询,这个不多说,这个是负载均衡基本都具备的;
    ② static-rr,表示根据权重,建议关注;
    ③ leastconn,表示最少连接者先处理,建议关注;
    ④ source,表示根据请求源IP,这个跟Nginx的IP_hash机制类似,我们用其作为解决session问题的一种方法,建议关注;
    ⑤ ri,表示根据请求的URI;
    ⑥ rl_param,表示根据请求的URl参数'balance url_param' requires an URL parameter name;
    ⑦ hdr(name),表示根据HTTP请求头来锁定每一次HTTP请求;
    ⑧ rdp-cookie(name),表示根据据cookie(name)来锁定并哈希每一次TCP请求。

 

 

Nginx和LVS作对比的结果

1、Nginx工作在网络的7层,所以它可以针对http应用本身来做分流策略,比如针对域名、目录结构等,相比之下LVS并不具备这样的功能,所 以 Nginx单凭这点可利用的场合就远多于LVS了;但Nginx有用的这些功能使其可调整度要高于LVS,所以经常要去触碰触碰,由LVS的第2条优点 看,触碰多了,人为出问题的几率也就会大。
2、Nginx对网络的依赖较小,理论上只要ping得通,网页访问正常,Nginx就能连得通,Nginx同时还能区分内外网,如果是同时拥有内外网的 节点,就相当于单机拥有了备份线路;LVS就比较依赖于网络环境,目前来看服务器在同一网段内并且LVS使用direct方式分流,效果较能得到保证。另 外注意,LVS需要向托管商至少申请多一个ip来做Visual IP,貌似是不能用本身的IP来做VIP的。要做好LVS管理员,确实得跟进学习很多有关网络通信方面的知识,就不再是一个HTTP那么简单了。站长教学网 eduyo.com
3、Nginx安装和配置比较简单,测试起来也很方便,因为它基本能把错误用日志打印出来。LVS的安装和配置、测试就要花比较长的时间了,因为同上所述,LVS对网络依赖比较大,很多时候不能配置成功都是因为网络问题而不是配置问题,出了问题要解决也相应的会麻烦得多。
4、Nginx也同样能承受很高负载且稳定,但负载度和稳定度差LVS还有几个等级:Nginx处理所有流量所以受限于机器IO和配置;本身的bug也还是难以避免的;Nginx没有现成的双机热备方案,所以跑在单机上还是风险较大,单机上的事情全都很难说。
5、Nginx可以检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等,并且会把返回错误的请求重新提交到另一个节点。目前LVS中 ldirectd也能支持针对服务器内部的情况来监控,但LVS的原理使其不能重发请求。重发请求这点,譬如用户正在上传一个文件,而处理该上传的节点刚 好在上传过程中出现故障,Nginx会把上传切到另一台服务器重新处理,而LVS就直接断掉了,如果是上传一个很大的文件或者很重要的文件的话,用户可能 会因此而恼火。
6、Nginx对请求的异步处理可以帮助节点服务器减轻负载,假如使用apache直接对外服务,那么出现很多的窄带链接时apache服务器将会占用大 量内存而不能释放,使用多一个Nginx做apache代理的话,这些窄带链接会被Nginx挡住,apache上就不会堆积过多的请求,这样就减少了相 当多的内存占用。这点使用squid也有相同的作用,即使squid本身配置为不缓存,对apache还是有很大帮助的。LVS没有这些功能,也就无法能 比较。
7、Nginx能支持http和email(email的功能估计比较少人用),LVS所支持的应用在这点上会比Nginx更多。在使用上,一般最前端所 采取的策略应是LVS,也就是DNS的指向应为LVS均衡器,LVS的优点令它非常适合做这个任务。重要的ip地址,最好交由LVS托管,比如数据库的 ip、webservice服务器的ip等等,这些ip地址随着时间推移,使用面会越来越大,如果更换ip则故障会接踵而至。所以将这些重要ip交给 LVS托管是最为稳妥的,这样做的唯一缺点是需要的VIP数量会比较多。Nginx可作为LVS节点机器使用,一是可以利用Nginx的功能,二是可以利 用Nginx的性能。当然这一层面也可以直接使用squid,squid的功能方面就比Nginx弱不少了,性能上也有所逊色于Nginx。Nginx也 可作为中层代理使用,这一层面Nginx基本上无对手,唯一可以撼动Nginx的就只有lighttpd了,不过lighttpd目前还没有能做到 Nginx完全的功能,配置也不那么清晰易读。另外,中层代理的IP也是重要的,所以中层代理也拥有一个VIP和LVS是最完美的方案了。具体的应用还得 具体分析,如果是比较小的网站(日PV<1000万),用Nginx就完全可以了,如果机器也不少,可以用DNS轮询,LVS所耗费的机器还是比较 多的;大型网站或者重要的服务,机器不发愁的时候,要多多考虑利用LVS

posted @ 2013-12-25 12:34 ivaneeo 阅读(6536) | 评论 (0)编辑 收藏

仅列出标题
共67页: First 上一页 5 6 7 8 9 10 11 12 13 下一页 Last