C# MongoDB澳门美高梅手机网站

鉴于网站选拔nfs共享格局保存用户上传的图片,附属类小部件等材料,然后经过apache下载的措施供用户访问,在网站架构初期,使用这种不难的艺术贯彻了静态能源的读写分离,但随着网站数据量的加码,图片服务器稳步成为全部网站的短板,缘次催生了选择fastfds的想法,故而先举行一
番简单的测试!在开端在此以前照旧先来看望fastfds的介绍音讯:

一、搭建Mongodb 副本集

副本集中有八个剧中人物:

主节点:全数副节点的数据均来自于主节点,并且不得不对主节点举行读写操作。
副节点:数据来源于于主节点,能够开始展览读取操作,不过无法展开写操作。
仲裁者:不含数据也不与客户端调换,只在公推主节点的时候实行投票。

Mongodb最多协理4陆个副本集成员以及最多捌个选举成员,运营副本集后将上马率先次大选,在推举进度中,全数副本集成员都只好读取,直到选出出主节点后主节点才能拓展读写,然则在那么些时期副本成员能够提供查询服务。

而主节点要维持主节点的岗位需求每两秒发送1个ping请求,若是10秒内尚未赢得响应则标记为不可访问,当八分之四上述的副本集成员不可访问,那么主节点将降级为副节点。

里面设置成员的priority值能够事先成员主节点,那些值介于0-1000之间,私下认可为1,假若这几个值为0,那么它的votes值也为0,只要votes为0的分子不能够投公投票,可是足以投否决票。但是大家也能够手动设置成员priority值为当先1的分子是不是有投票职责。

在展开选举的时候,别的成员会作以下几点判断来拓展投票参预公投的成员是还是不是能当做主节点,选举步骤:

自个儿是不是能与主节点通信。
涉足大选的成员是否比其余参加公投的分子数量最新。
一旦出席公投的分子数量相等则尝试利用具有最高priority的值的积极分子。

fastdfs是1个开源的,高品质的的分布式文件系统,他第②的效劳包含:文件存款和储蓄,同步和做客,设计基于高可用和负载均衡,fastfd卓殊适用于依照文件服务的站点,例如图片分享和摄像分享网站
fastfds有三个剧中人物:跟踪服务和仓库储存服务,跟踪服务控制,调度文件以载重均衡的点子访问;存款和储蓄服务包含:文件存款和储蓄,文件同步,提供文件访问接口,同时以key
value的法门管理文件的元数据
跟踪和仓库储存服务能够由1台或许多台服务器组成,同时能够动态的丰盛,删除跟踪和储存服务而不会对在线的劳动产生潜移默化,在集群中,tracker服务是对等的
仓库储存系统由叁个或七个卷组成,卷与卷里面包车型客车文件是互为独立的,全部卷的文书容积增进正是整套存款和储蓄系统中的文件体积。二个卷能够由一台或多台存款和储蓄服务
器组成,一个卷下的积存服务器中的文件都以一律的,卷中的多台存款和储蓄服务器起到了冗余备份和负载均衡的意义。在卷中增添服务器时,同步已部分文件由系统活动
实现,同步到位后,系统自动将新增服务器切换成线上提供劳务。当存款和储蓄空间欠缺或将要耗尽时,能够动态添加卷。只供给充实一台或多台服务器,并将它们配置为
二个新的卷,那样就扩充了储存系统的容积。
上边几张图能够领略的印证fastfds的架构和文书上传和下载流程等:

仲裁者

仲裁者的面世是为了防止唯有七个成员的副本集,五个成员的副本集投票恐怕不可能满意5/10之上的投票景况。

仲裁者不承担数据和客户端交流,只有参预公投的功力,需求专注的是仲裁者一旦设置过后就再也不能够成为非仲裁者了。

先是安插叁个副本集很简单,上面包车型大巴代码是布署了三个本地含有多个分子的副本集。

建立四个成员的副本集,首先你得建立八个数据库的存放目录:

mkdir -p ./replDb/s0 ./replDb/s1 ./replDb/s2
然后我们运维四个副本集成员,当中replSet参数前面跟的是副本集的称呼,将索要有涉及的积极分子的副本集名称要一如既往。

mongod –dbpath ./replDb/s0 –port 27017 –replSet s0

mongod –dbpath ./replDb/s0 –port 27018 –replSet s0

mongod –dbpath ./replDb/s0 –port 27019 –replSet s0
开创仲裁者也一样相当简单,建立3个空的数码目录,然后和别的副本集成员平等设置同一的副本集名称运转,最后通过rs.add方法的第①个参数设置为true:

mongod –dbpath ./replDb/s5 –port 27020 –replSet s0

mongod –port 27017 –host localhost

> rs.add(‘localhost:27020’, true);

下一场经过Mongo Shell进入到端口为27017的分子中,并铺排副本集。

mongod –port 27017 –host localhost
进去到Mongo Shell后经过rs.initiate方法来布局副本集。

> var conf = {
_id: ‘r0’,
version: 1,
members: [
{
_id: 0,
host: ‘localhost:27017’
},
{
_id: 1,
host: ‘localhost:27018’
},
{
_id: 2,
host: ‘localhost:27019’
},
{
_id: 3,
host: ‘localhost:27020’
}
]
};

> rs.initiate(conf);
initiate接受一个对象,对象_id为副本集名称,必须和开发银行副本集设置的一模一样才能添加进去(本例为rs0)。version为版本号,每当大家修改副本集配置的时候那个版本号都会递加1,而members则为副本集成员,我们可以在那边二回性添加完,也得以只添加三个背后再通过add方法添加,比如下边那样:

> rs.add(‘localhost:27018’);
> rs.add(‘localhost:27019’);

下边将介绍下fastdfs在rhel上的布署进度
192.168.0.205  storage tracker

除去副本集

剔除副本集通过rs.remove方法来删除,它接受三个<localhost>:<port>那样的字符串。下边是剔除二个副本集成员:

> rs.remove(‘localhost:27019’);

1, 安装正视包,添加fastDFS运营用户
yum install -y zlib zlib-devel pcre pcre-devel gcc gcc-c++ openssl
openssl-devel libevent libevent-devel perl unzip
useradd -s /sbin/nologin fastdfs

查询副本集配置

查阅副本集配置是通过rs.conf方法查询,再次来到包罗全部副本集的配置内容.

> rs.conf();

2,成立数量存款和储蓄目录
mkdir -p /data/fastdfs/{storage,tracker,client}
[root@localhost src]# ll /data/fastdfs
total 0
drwxr-xr-x 2 root root 6 Dec 10 15:18 storage   #Storage目录保存运转日志及其data数据 
drwxr-xr-x 2 root root 6 Dec 10 15:17 tracker   #tracker目录保存运营日志
drwxr-xr-x 2 root root 6 Dec 10 15:17 client

询问主节点

每当使用rs.add方法添加成员的时候大概会影响公投来挑选主节点是何人,查看主节点通过rs.isMaster()方法来查看。

> rs.isMaster();
归来的内容中有多少个可以掌握

{
“hosts” : [ //副本集成员
“localhost:27017”,
“localhost:27018”,
“localhost:27019”
],
“setName” : “rs0”, //副本集名称
“setVersion” : 3, //副本集配置版本
“ismaster” : true, //是还是不是是主节点
“primary” : “localhost:27017”, //主节点成员的主机地址
“me” : “localhost:27017”, //当前所在主机
}

3,安装libfastcommon
下载最新版本: libfastcommon
wget https://github.com/happyfish100/libfastcommon/archive/master.zip
unzip master.zip
cd libfastcommon-master/
./make.sh
./make.sh install

读取副节点

副节点暗许是无能为力读取的,我们可以透过rs.setSlaveOk()方法来安装Slave属性为true。下边是设置端口为27018的副节点能够进行读取

mongod –port 27018 –host localhost

> rs.setSlaveOk();

4, 安装Fastdfs
wget http://sourceforge.net/projects/fastdfs/files/FastDFS%20Server%20Source%20Code/FastDFS%20Server%20with%20PHP%20Extension%20Source%20Code%20V5.05/FastDFS\_v5.05.tar.gz/download
tar zxf FastDFS_v5.05.tar.gz && cd FastDFS
./make.sh
./make.sh install
\cp conf/*.conf /etc/fdfs/

隐身成员

躲藏成员通过设置成员的hidden属性为true并且优先值priority为0则能够隐藏此成员,隐藏成员不可能当主节点也无法当别的成员的复制源

> rs.add({
> _id: 1,
> _host: ‘localhost:27017’,
> hidden: true,
> priority: 0
> })

tar zxf fastdfs-nginx-module_v1.16.tar.gz
cp fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/

推迟复制

由此设置成员的slaveDelay的值并且优先值priority为0,来让方今成员滞后多少秒后才起来复制数据。

> rs.add({
> _id: 1,
> _host: ‘localhost:27017’,
> slaveDelay: 120,
> priority: 0
> })

cd /etc/fdfs/
rm -rf *.sample
chown -奥迪Q7 fastdfs: /data/fastdfs (不用改权限貌似也得以)

目录管理

通过成员的buildIndexes的值并且优先值priority为0,来设置是还是不是在备份机器上树立平等的目录,一般那些选项只用于纯粹备份的服务器。

上面包车型客车代码设置添加的副本集成员不创设索引。

> rs.add({
> _id: 1,
> _host: ‘localhost:27017’,
> buildIndexes: false
> priority: 0
> })

5, 配置tracker 和 storage 配置文件, 对应修改
vi storage.conf
group_name=group1
base_path=/data/fastdfs/storage
store_path0=/data/fastdfs/storage
tracker_server=192.168.0.205:22122
http.server_port=80

贰 、搭建配置服务器

率先搭建配置服务器,配置服务器就好像分片的大脑,保存着集群和数量的描述新闻。

因为Mongodb3.4版本后须要安排服务器必须陈设为副本集,所以必要给配置服务器配置副本集

先是创设四个空的数据库目录,用于搭建配置服务器的副本集,并分别运行它们,在开发银行的时候需求丰盛大家副本集的称呼和--configsvr来表示那是一个布局服务器,并各自钦点不相同的端口。

$ mkdir config0 config1 config2

$ mongod --dbpath config0 --replSet conServer --configsvr --port 27020

$ mongod --dbpath config1 --replSet conServer --configsvr --port 27021

$ mongod --dbpath config2 --replSet conServer --configsvr --port 27020

接下来通过mongo随意进入三个副本集成员,并为配置服务器的副本集举行安顿:

$ mongo --port 27020 --host localhost

> var conf = {
    _id: 'conServer',
    version: 1,
    members: [
        {
            _id: 0,
            host: 'localhost:27020'
        },
        {
            _id: 1,
            host: 'localhost:27021'
        },
        {
            _id: 2,
            host: 'localhost:27022'
        }
    ]
};

> rs.initiate(conf);

时至前日配置服务器配置完结。

vi tracker.conf
base_path=/data/fastdfs/tracker

三 、搭建分片服务器

合法建议我们的分片服务区至少在一个或上述才能公布出更好的本性,大家那里也开创八个分片服务器。

因为分片服务器并未强制供给必须是副本集,所以上面就创办了七个单机分片服务器,可是Mongodb接受分片服务器为副本集。

上面制造七个空数据库目录,然后运维它们,在起步的时候需求添加--shardsvr以象征那是1个分片服务器:

$ mkdir sh0 sh1 sh2

$ mongod --dbpath sh0 --shardsvr --port 27030

$ mongod --dbpath sh1 --shardsvr --port 27031

$ mongod --dbpath sh2 --shardsvr --port 27032

从那之后分片服务器也搭建落成。

vi mod_fastdfs.conf
group_name=group1
base_path=/data/fastdfs/storage
store_path0=/data/fastdfs/storage
tracker_server=192.168.0.205:22122
url_have_group_name = true   #是true 不是ture

肆 、搭建路由服务器

mongodb提供了一个路由工具,它会随着大家下载包一起下载,名字为mongosmongos.exe,通过它配备路由成效。

运营路由大家须要添加参数--configdb,它的语法为:

--configdb 配置服务器副本集名称/配置服务器1地址端口,配置服务器1地址端口...

初始路由,并为路由钦定二个端口,用于开放给客户端链接:

$ mongos --configdb conServer/localhost:27020,localhost:27021,localhost:27022 --port 27040

至此路由已经搭建达成。

vi client.conf
tracker_server=192.168.0.205:22122
base_path=/data/fastdfs/client

⑤ 、配置分片

6,安装nginx和fastdfs-nginx-module模块
wget http://nginx.org/download/nginx-1.8.0.tar.gz
http://sourceforge.net/projects/fastdfs/files/FastDFS%20Nginx%20Module%20Source%20Code/fastdfs-nginx-module\_v1.16.tar.gz/download

配置分片服务器

经过mongodb提供的mongo进入到路由服务器中实行安插,把大家起始创建的三个分片服务器通过sh.addShard()措施添加进行,这些艺术接受二个字符串里面包车型大巴格式为host:port

$ mongo --port 27040 --host localhost

> sh.addShard('localhost:27030');
> sh.addShard('localhost:27031');
> sh.addShard('localhost:27032');

能够通过rs.status()主意中回到的shards字段看是或不是丰盛成功。

tar zxf nginx-1.8.0.tar.gz 

布置片键

到最近甘休,分片服务器已经搭建完结,不过最近分片服务器不能够符合规律办事,大家有着的操作都将在随机的三个主分片上操作,那是因为分片服务器不知道怎么开始展览分片,所以咱们还索要安插片键来告诉分片服务器根据什么来分片。

分片是依据数据库集合中的文书档案的一个键开始展览分片的,比如选取username键,那么会基于这几个键的逐一就行分片,而mongodb会自动平衡分片的数目。

Mongodb供给作为片键的键必须是索引过的,所以大家在确立片键从前必要对键进行索引,建立后片键正是相会中的最重大的目录。

在生育条件中国建工业总会集团议先想好数据建创设立目录和片键后初阶操作数据,那样会减轻分片服务器的负载。

先是大家在须求举办分片的数据库上打开分片功效,通过sh.enableSharding主意开启。

$ mongo --port 27040 --host localhost

> sh.enableSharding('test');

然后在开启分片的数据库中的test集合插入测试数据,注意此时我们还从未展开布局片键,所以具有的数额操作都在分片服务器随机分配的二个主分片下面实行的。

> for(var i = 0; i < 100; i++){
    db.test.insert({
        username: 'user' + i,
        idNum: i
    })
}

那会儿以username为片键,通过sh.shardCollection办法开始展览确立,它的语法为:

sh.shardCollection(namespace, key, unique, options)

先是给大家要建立的片键建立目录:

> db.test.ensureIndex({'username': 1});

下一场建立片键:

> sh.shardCollection('test.test', {username:1});

等待几分钟后,能够通过sh.status艺术查看数据分片的气象了,可以从中很明亮的看见什么数据在哪个分片服务器下边,并且经过explain措施来查看大家查询的经过中什么分片服务器参预了询问。

ulimit -SHn 102400
useradd -s /sbin/nologin nginx

六使用MongoDB

#修改模块中对应的门路,要不然模块不可能正确安装加载
cd fastdfs-nginx-module/src
vi config   #转移如下, 去掉local,并钦命lib64(64体系)
CORE_INCS=”$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/”
CORE_LIBS=”$CORE_LIBS -L/usr/lib64 -lfastcommon -lfdfsclient”
cd /tools/nginx-1.8.0
./configure
–prefix=/usr/local/nginx \
–sbin-path=/usr/sbin/nginx \
–conf-path=/etc/nginx/nginx.conf \
–error-log-path=/var/log/nginx/error.log \
http-log-path=/var/log/nginx/access.log
\
–pid-path=/var/run/nginx/nginx.pid \
–lock-path=/var/lock/nginx.lock \
–user=nginx \
–group=nginx \
–with-http_ssl_module
\
–with-http_flv_module
\
–with-http_stub_status_module
\
–with-http_gzip_static_module
\
–with-pcre \
–with-http_realip_module \
http-client-body-temp-path=/var/tmp/nginx/client/
\
http-proxy-temp-path=/var/tmp/nginx/proxy/
\
http-fastcgi-temp-path=/var/tmp/nginx/fcgi/
\
http-uwsgi-temp-path=/var/tmp/nginx/uwsgi
\
http-scgi-temp-path=/var/tmp/nginx/scgi
\
–add-module=/tools/fastdfs-nginx-module/src/ \

下载驱动

打开vs,使用nuget下载驱动

澳门美高梅手机网站 1

 

make
make install

下载驱动封装库

打开https://github.com/yswenli/MongoDBOperator/releases下载壹遍驱动封装库

澳门美高梅手机网站 2

 

7, 配置nginx
server {
       listen 80;
       server_name 192.168.0.205;

总是配置

 打开app.config或web.config填写mongo连接配置

1 <?xml version="1.0" encoding="utf-8" ?>
2 <configuration>
3   <connectionStrings>
4     <add name="MongoServerSettings" connectionString="mongodb://admin:admin@localhost:27017/MongoTests?authSource=admin" />
5   </connectionStrings>
6 </configuration>

   location /group1/M00 {
            root /data/fastdfs/storage/data/;
            ngx_fastdfs_module;
          }
       }

测试CS代码

 以下是测试代码: 

 1 /*****************************************************************************************************
 2 * 本代码版权归@wenli所有,All Rights Reserved (C) 2015-2017
 3 *****************************************************************************************************
 4 * CLR版本:4.0.30319.42000
 5 * 唯一标识:63fcdf18-8930-4a86-93ca-f99f5a020844
 6 * 机器名称:WENLI-PC
 7 * 联系人邮箱:wenguoli_520@qq.com
 8 *****************************************************************************************************
 9 * 项目名称:$projectname$
10 * 命名空间:MongoDBOperator.Test
11 * 类名称:Program
12 * 创建时间:2017/7/13 16:00:44
13 * 创建人:wenli
14 * 创建说明:
15 *****************************************************************************************************/
16 
17 using System;
18 using System.Linq;
19 using System.Threading.Tasks;
20 using MongoDBOperator.Interface;
21 using MongoDBOperator.Test.Model;
22 
23 namespace MongoDBOperator.Test
24 {
25     class Program
26     {
27         static void Main(string[] args)
28         {
29             Console.Title = "MongoDBOperator.Test";
30 
31             IOperator<Account> customerOperator = new MongoOperator<Account>();
32 
33 
34             var account = new Account();
35             account.FirstName = "li";
36             account.LastName = "wen";
37             account.Phone = "13800138000";
38             account.Email = "wenguoli_520@qq.com";
39             account.HomeAddress = new Address
40             {
41                 Address1 = "上海",
42                 Address2 = "徐汇",
43                 PostCode = "210001",
44                 City = "上海",
45                 Country = "中国"
46             };
47 
48             Console.WriteLine("Create");
49 
50             customerOperator.Add(account);            
53 
54             Console.WriteLine("Read");
55 
56             var c = customerOperator.Where(b => b.FirstName == "li").FirstOrDefault();
57 
58             Console.WriteLine("Update");
59 
60             c.FirstName = "guo li";
61 
62             customerOperator.Update(c);
63 
64             Console.WriteLine("Delete");
65 
66             customerOperator.Delete(c);
67 
68             customerOperator.DeleteAll();
69 
70             Console.ReadLine();
71 
72         }
73     }
74 }

 

vs调试效果如下:

澳门美高梅手机网站 3

 

 

 

转发请标明本文来源:http://www.cnblogs.com/yswenli/p/7421909.html 
越来越多内容欢迎star我的github:https://github.com/yswenli/MongoDBOperator
假定发现本文有哪些难题和任何建议,也随时欢迎交换~

 

8,启动nginx和fastdfs
[root@test-1 vhost]# /etc/init.d/fdfs_storaged start
Starting FastDFS storage server: 
[root@test-1 vhost]# /etc/init.d/fdfs_trackerd start
Starting FastDFS tracker server: 
[root@test-1 vhost]# 
[root@test-1 vhost]# /etc/init.d/nginx -t
ngx_http_fastdfs_set pid=8985
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@test-1 vhost]# /etc/init.d/nginx -s reload
ngx_http_fastdfs_set pid=8986

root@test-1 vhost]# netstat -npl |grep -E “nginx|fdfs”
tcp        0      0 0.0.0.0:22122               0.0.0.0:*                   LISTEN      8972/fdfs_trackerd  
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      7561/nginx          
tcp        0      0 0.0.0.0:23000               0.0.0.0:*                   LISTEN      8679/fdfs_storaged

也能够以下命令来监督服务器的事态

[root@tracker ~]# fdfs_monitor /etc/fdfs/client.conf

9,测试
[root@test-1 ~]# fdfs_test /etc/fdfs/client.conf upload test.html
This is FastDFS client test program v5.05

Copyright (C) 2008, Happy Fish / YuQing

FastDFS may be copied only under the terms of the GNU General
Public License V3, which may be found in the FastDFS source kit.
Please visit the FastDFS Home Page http://www.csource.org/ 
for more detail.

[2015-06-14 02:46:06] DEBUG – base_path=/tmp, connect_timeout=30, network_timeout=60, tracker_server_count=1, anti_steal_token=0, 
anti_steal_secret_key length=0, use_connection_pool=0, g_connection_pool_max_idle_time=3600s, 
use_storage_id=0, storage server id count: 0

tracker_query_storage_store_list_without_group: 
        server 1. group_name=, ip_addr=192.168.0.205, port=23000
        server 2. group_name=, ip_addr=192.168.0.206, port=23000

group_name=group1, ip_addr=192.168.0.206, port=23000
storage_upload_by_filename
group_name=group1, remote_filename=M00/00/00/wKgAzlV8em6Af8qBAAAADxtaRO466.html
source ip address: 192.168.0.206
file timestamp=2015-06-14 02:46:06
file size=15
file crc32=458900718
example file url: http://192.168.0.206/group1/M00/00/00/wKgAzlV8em6Af8qBAAAADxtaRO466.html
storage_upload_slave_by_filename
group_name=group1, remote_filename=M00/00/00/wKgAzlV8em6Af8qBAAAADxtaRO466_big.html
source ip address: 192.168.0.206
file timestamp=2015-06-14 02:46:06
file size=15
file crc32=458900718
example file url: http://192.168.0.206/group1/M00/00/00/wKgAzlV8em6Af8qBAAAADxtaRO466\_big.html

Nginx配置缩略图与法斯特dfs模块组合
nginx扩展图片裁剪模块
–with-http_image_filter_module

vim /etc/nginx/conf.d/fastdfd.conf
location ~ group1/M00/(.+)_([0-9]+)x([0-9]+)\.(jpg|gif|png) {
root /home/fastdata/data;
ngx_fastdfs_module;
set $w $2;
set $h $3;

if ($w != “0”) {
rewrite group1/M00(.+)_(\d+)x(\d+)\.(jpg|gif|png)$ group1/M00$1.$4
break;
}
image_filter resize $w $h;
image_filter_buffer 2M;
}

location ~ group1/M00/(.+)\.?(.+){
root /home/fastdata/data;
ngx_fastdfs_module;
}

原图访问
http://img3.jiupaicn.com/group1/M00/00/00/rBASWFeEibOAGRHwAADl6SrNlvQ206.jpg
 缩略图访问
http://img3.jiupaicn.com/group1/M00/00/00/rBASWFeEibOAGRHwAADl6SrNlvQ206_500x150.jpg

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注