目的
线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务,多线程就是在一个进程中的多个线程,如果使用多线程默认开启一个主线程,按照程序需求自动开启多个线程(也可以自己定义线程数)。
Glusterfs(Gluster file system)是开源的,具有强大横向扩展能力的(scale-out),分布式的,可将来自多个服务器的存储资源通过tcp/ip或infiniBand RDMA 网络整合到一个统一的全局命名空间中的文件系统。
本文通过对比当前主流的几种分布式存储方案(Ceph,TFS,FastDFS,MogileFS,MooseFS,GlusterFS等),让你知道他们的优缺点,便于你根据使用场景选择合适的方案。
对比说明/文件系统 | TFS | FastDFS | MogileFS | MooseFS | GlusterFS | Ceph |
---|---|---|---|---|---|---|
开发语言 | C++ | C | Perl | C | C | C++ |
开源协议 | GPL V2 | GPL V3 | GPL | GPL V3 | GPL V3 | LGPL |
数据存储方式 | 块 | 文件/Trunk | 文件 | 块 | 文件/块 | 对象/文件/块 |
集群节点通信协议 | 私有协议(TCP) | 私有协议(TCP) | HTTP | 私有协议(TCP) | 私有协议(TCP)/ RDAM(远程直接访问内存) | 私有协议(TCP) |
专用元数据存储点 | 占用NS | 无 | 占用DB | 占用MFS | 无 | 占用MDS |
在线扩容 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 |
冗余备份 | 支持 | 支持 | - | 支持 | 支持 | 支持 |
单点故障 | 存在 | 不存在 | 存在 | 存在 | 不存在 | 存在 |
跨集群同步 | 支持 | 部分支持 | - | - | 支持 | 不适用 |
易用性 | 安装复杂,官方文档少 | 安装简单,社区相对活跃 | - | 安装简单,官方文档多 | 安装简单,官方文档专业化 | 安装简单,官方文档专业化 |
适用场景 | 跨集群的小文件 | 单集群的中小文件 | - | 单集群的大中文件 | 跨集群云存储 | 单集群的大中小文件 |
开源协议说明
操作系统: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的客户端与服务端通讯的安全性。