前言
Haproxy是稳定、高性能、高可用性的负载均衡解决方案,支持HTTP及TCP代理后端服务器池,因支持强大灵活的7层acl规则,广泛作为HTTP反向代理。本文则详细介绍如何利用它的四层交换与Keepalived实现一个负载均衡器,适用于Socket、ICE、Mail、Mysql、私有通讯等任意TCP服务。系统架构图如下:
操作系统:CentOS 6.X 64位
Web服务器:192.168.21.127、192.168.21.128
站点:bbs.osyunwei.com和sns.osyunwei.com部署在两台Web服务器上
增加两台服务器(主主模式),通过HAProxy+Keepalived实现Web服务器负载均衡
HAProxy服务器:192.168.21.129、192.168.21.130
虚拟服务器(VIP):192.168.21.253、192.168.21.254
这样的主主模式好处是,两台服务器在提供服务的同时,又互为对方的备份服务器。
“ssh端口转发”还有一个更加形象的名字,叫做”ssh隧道”,当然,只是纯粹的通过”ssh隧道”这几个字去理解它可能不太容易,我们来描述一些实际的场景,在这些场景中我们可能会遇到一些问题,而这些问题可以通过”ssh隧道”解决,通过这样的方式,我们反而更加容易理解”ssh隧道”是什么以及它的作用。
假如我们现在有两个台主机,主机A与主机B,主机A上安装有mysql客户端,主机B上安装有mysql服务端,现在,主机A中的mysql客户端需要与主机B中的mysql服务端进行通讯,则需要从mysql的客户端连接到mysql服务端。如下图所示
然而我们知道,mysql在传输数据时是进行明文传输的,如果主机A与主机B只能通过公网进行通讯,那么暴露在公网的mysql通讯是非常不安全的,所以,我们需要借助一些手段,提高访问mysql服务时的安全性,比如,我们可以使用SSL证书为数据加密,或者使用stunnel加密隧道,我们还可以使用VPN,当然,这些方法都不是这篇文章所要描述的重点,我们此处要总结的是”ssh隧道”这种方法,我们可以利用ssh,搭建出一条”通道”,然后将mysq的客户端与服务端通过这条”ssh通道”连接起来,如下图所示
mysql的客户端与服务端的连接方式从原来直连的方式变成了如上图所示的连接方式,它们之间并不直接进行通讯,而是借助ssh隧道将通讯数据转发,虽然仍然跨越了公网,但是由于ssh本身的安全特性,所以别人无法看到明文传输的数据,数据依靠ssh隧道实现了加密的效果,达到了保护数据安全的作用,提升了mysql的客户端与服务端通讯的安全性。
大家都知道SSH是一种安全的传输协议,用在连接服务器上比较多。不过其实除了这个功能,它的隧道转发功能更是吸引人。下面是个人根据自己的需求以及在网上查找的资料配合自己的实际操作所得到的一些心得。
SSH/plink命令的基本资料:
首先,认识下这三个非常强大的命令:
相关参数的解释:
-f Fork into background after authentication.
后台认证用户/密码,通常和-N连用,不用登录到远程主机。
-L port:host:hostport
将本地机(客户机)的某个端口转发到远端指定机器的指定端口. 工作原理是这样的, 本地机器上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转发出去, 同时远程主机和 host 的 hostport 端口建立连接. 可以在配置文件中指定端口的转发. 只有 root 才能转发特权端口. IPv6 地址用另一种格式说明: port/host/hostport
-R port:host:hostport
将远程主机(服务器)的某个端口转发到本地端指定机器的指定端口. 工作原理是这样的, 远程主机上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转向出去, 同时本地主机和 host 的 hostport 端口建立连接. 可以在配置文件中指定端口的转发. 只有用 root 登录远程主机才能转发特权端口. IPv6 地址用另一种格式说明: port/host/hostport
-D port
指定一个本地机器 “动态的’’ 应用程序端口转发. 工作原理是这样的, 本地机器上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转发出去, 根据应用程序的协议可以判断出远程主机将和哪里连接. 目前支持 SOCKS4 协议, 将充当 SOCKS4 服务器. 只有 root 才能转发特权端口. 可以在配置文件中指定动态端口的转发.
-C Enable compression.
压缩数据传输。
-N Do not execute a shell or command.
不执行脚本或命令,通常与-f连用。
-g Allow remote hosts to connect to forwarded ports.
在-L/-R/-D参数中,允许远程主机连接到建立的转发的端口,如果不加这个参数,只允许本地主机建立连接。注:这个参数我在实践中似乎始终不起作用。