分布式文件系統 FastDFS 5.0.5 & Linux CentOS 6 安裝配置

前言

項目中用到文件服務器,有朋友推薦用fastdfs,所以就了解學習了一番,感覺確實頗為強大,在此再次感謝淘寶資深架構師余慶大神開源了如此優秀的輕量級分布式文件系統,本篇blog就記錄一下fastdfs的最新版本5.0.5在centos7中的安裝與配置。

簡介

首先簡單了解一下基礎概念,FastDFS是一個開源的輕量級分布式文件系統,由跟蹤服務器(tracker server)、存儲服務器(storage server)和客戶端(client)三個部分組成,主要解決了海量數據存儲問題,特別適合以中小文件(建議范圍:4KB < file_size <500MB)為載體的在線服務。FastDFS的系統結構圖如下:


image.png

如上圖,FastDFS的兩個核心概念分別是:

  1. Tracker(跟蹤器)
  2. Storage(存儲節點)

Tracker主要做調度工作,相當于mvc中的controller的角色,在訪問上起負載均衡的作用。跟蹤器和存儲節點都可以由一臺或多臺服務器構成,跟蹤器和存儲節點中的服務器均可以隨時增加或下線而不會影響線上服務,其中跟蹤器中的所有服務器都是對等的,可以根據服務器的壓力情況隨時增加或減少。Tracker負責管理所有的Storage和group,每個storage在啟動后會連接Tracker,告知自己所屬的group等信息,并保持周期性的心跳,tracker根據storage的心跳信息,建立group==>[storage server list]的映射表,Tracker需要管理的元信息很少,會全部存儲在內存中;另外tracker上的元信息都是由storage匯報的信息生成的,本身不需要持久化任何數據,這樣使得tracker非常容易擴展,直接增加tracker機器即可擴展為tracker cluster來服務,cluster里每個tracker之間是完全對等的,所有的tracker都接受stroage的心跳信息,生成元數據信息來提供讀寫服務。

Storage采用了分卷[Volume](或分組[group])的組織方式,存儲系統由一個或多個組組成,組與組之間的文件是相互獨立的,所有組的文件容量累加就是整個存儲系統中的文件容量。一個卷[Volume](組[group])可以由一臺或多臺存儲服務器組成,一個組中的存儲服務器中的文件都是相同的,組中的多臺存儲服務器起到了冗余備份和負載均衡的作用,數據互為備份,存儲空間以group內容量最小的storage為準,所以建議group內的多個storage盡量配置相同,以免造成存儲空間的浪費。更多原理性的內容可以參考這篇blog,介紹的很詳細:分布式文件系統FastDFS設計原理
接下來就具體看一下FastDFS的整個下載安裝過程~

一鍵安裝腳本

https://download.csdn.net/download/qiuxiao630320/10302878

安裝說明

獲取文件權限:
chmod 777 fastDFS.sh
執行腳本前執行:
yum install -y unzip zip

網站文章鏈接:
https://blog.csdn.net/qiuxiao630320/article/details/79657778

腳本使用說明:
將腳本放在CentOS任意目錄下,賦予腳本可執行權限,然后直接執行即可,一鍵傻瓜式安裝;
相關安裝目錄請參考上面的文章
注:腳本在CentOS6.9環境下測試可用,但要保證機器已聯網,并且yum命令正常可用(這里的可用包括支持yum安裝,并且不會存在yum源不穩定情況)

手動安裝步驟

下載

目前作者最后一次releases的時間的14年11月22號,對應的最新版本是5.0.5,直接在余大的GitHub上下載就可以了:
https://github.com/happyfish100/fastdfs/releases

image.png

如上圖,由于FastDFS是純C語言實現,只支持Linux、FreeBSD等UNIX系統,所以我們直接下載tar.gz的壓縮包,同時FastDFS 5.0.5同以前版本相比將公共的一些函數等單獨封裝成了libfastcommon包,所以在安裝FastDFS之前我們還必須安裝libfastcommon,在余大的GitHub首頁可以看到:

image.png

下載完成后將下面這兩個文件上傳至CentOS服務器,然后就可以開始解壓安裝了:


image.png

安裝

libfastcommon

首先第一步是安裝libfastcommon,我這里將libfastcommon上傳到的/usr/local目錄下,直接解壓:

unzip libfastcommon-master.zip

解壓成功后進入目錄看一下壓縮包的文件:


image.png

如果沒有裝解壓工具unzip可以通過以下yum命令進行安裝后再解壓:

yum -y install unzip zip

解壓完成后就可以進行編譯安裝了,分別執行./make.sh./make.sh install,由于是新安裝的系統有可能會提示找不到gcc命令:

image.png

如上圖,所以我們先要安裝gcc編譯器:

yum -y install gcc-c++

看到如下信息說明gcc已經安裝成功:


image.png

此時再次執行./make.sh命令進行編譯,沒有error信息的話就說明編譯成功了,最后再執行./make.sh install進行安裝,看到類似如下提示信息就說明libfastcommon已安裝成功(畫風突變,黑底白字看的眼睛累T_T,所以換成白底黑字了):

image.png

至此libfastcommon就已經安裝成功了,但注意一下上圖中紅色框標注的內容,libfastcommon.so 默認安裝到了/usr/lib64/libfastcommon.so,但是FastDFS主程序設置的lib目錄是/usr/local/lib,所以此處需要重新設置軟鏈接(類似于Windows的快捷方式):

ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so
ln -s /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so
ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so
ln -s /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so

設置完畢后就可以開始安裝fastdfs了。

FastDFS

第一步依然是解壓:

tar -zxvf fastdfs-5.05.tar.gz 

解壓完成后進入目錄fastdfs-5.05,依次執行./make.sh和./make.sh install:

./make.sh
./make.sh install

沒有報錯就說明安裝成功了,在log中我們可以發現安裝路徑:


image.png

沒錯,正是安裝到了/etc/fdfs中,我們看一下該目錄下的文件:

image.png

如上圖,安裝成功后就會生成如上的3個.sample文件(示例配置文件),我們再分別拷貝出3個后面用的正式的配置文件:

cp client.conf.sample client.conf
cp storage.conf.sample storage.conf
cp tracker.conf.sample tracker.conf

之后再查看一下/etc/fdfs的文件目錄:


image.png

至此FastDFS已經安裝完畢,接下來的工作就是依次配置Tracker和Storage了。

Tracker

在配置Tracker之前,首先需要創建Tracker服務器的文件路徑,即用于存儲Tracker的數據文件和日志文件等,我這里選擇在/opt目錄下創建一個fastdfs_tracker目錄用于存放Tracker服務器的相關文件:

mkdir /opt/fastdfs_tracker

接下來就要重新編輯上一步準備好的/etc/fdfs目錄下的tracker.conf配置文件,打開文件后依次做以下修改:

  1. disabled=false #啟用配置文件(默認啟用)
  2. port=22122 #設置tracker的端口號,通常采用22122這個默認端口
  3. base_path=/opt/fastdfs_tracker #設置tracker的數據文件和日志目錄
  4. http.server_port=6666 #設置http端口號,默認為8080

配置完成后就可以啟動Tracker服務器了,但首先依然要為啟動腳本創建軟引用,因為fdfs_trackerd等命令在/usr/local/bin中并沒有,而是在/usr/bin路徑下:

ln -s /usr/bin/fdfs_trackerd /usr/local/bin
ln -s /usr/bin/stop.sh /usr/local/bin
ln -s /usr/bin/restart.sh /usr/local/bin

最后通過命令啟動Tracker服務器:

service fdfs_trackerd start

命令執行后可以看到以下提示:


image.png

如果啟動命令執行成功,那么同時在剛才創建的tracker文件目錄/opt/fastdfs_tracker中就可以看到啟動后新生成的data和logs目錄,tracker服務的端口也應當被正常監聽,最后再通過netstat命令查看一下端口監聽情況:

netstat -unltp|grep fdfs

可以看到tracker服務運行的22122端口正常被監聽:


image.png

確認tracker正常啟動后可以將tracker設置為開機啟動,打開/etc/rc.d/rc.local并在其中加入以下配置:

service fdfs_trackerd start

如果重啟后發現未能自動啟動則通過命令ll /etc/rc.d/rc.local檢查一下rc.local是否具備可執行權限,若是無可執行權限則通過chmod +x /etc/rc.d/rc.local進行授權,如下圖:

image.png

Tracker至此就配置好了,接下來就可以配置FastDFS的另一核心——Storage。

Storage

同理,步驟基本與配置Tracker一致,首先是創建Storage服務器的文件目錄,需要注意的是同Tracker相比我多建了一個目錄,因為Storage還需要一個文件存儲路徑,用于存放接收的文件:

mkdir /opt/fastdfs_storage
mkdir /opt/fastdfs_storage_data

接下來修改/etc/fdfs目錄下的storage.conf配置文件,打開文件后依次做以下修改:

  1. disabled=false #啟用配置文件(默認啟用)
  2. group_name=group1 #組名,根據實際情況修改
  3. port=23000 #設置storage的端口號,默認是23000,同一個組的storage端口號必須一致
  4. base_path=/opt/fastdfs_storage #設置storage數據文件和日志目錄
  5. store_path_count=1 #存儲路徑個數,需要和store_path個數匹配
  6. store_path0=/opt/fastdfs_storage_data #實際文件存儲路徑
  7. tracker_server=192.168.111.11:22122 #tracker 服務器的 IP地址和端口號,如果是單機搭建,IP不要寫127.0.0.1,否則啟動不成功(此處的ip是我的CentOS虛擬機ip)
  8. http.server_port=8888 #設置 http 端口號

配置完成后同樣要為Storage服務器的啟動腳本設置軟引用:

ln -s /usr/bin/fdfs_storaged /usr/local/bin

接下來就可以啟動Storage服務了:

service fdfs_storaged start

命令執行后可以看到以下提示:


image.png

同理,如果啟動成功,/opt/fastdfs_storage中就可以看到啟動后新生成的data和logs目錄,端口23000也應被正常監聽,還有一點就是文件存儲路徑下會生成多級存儲目錄,那么接下來看看是否啟動成功了:


image.png

如上圖,貌似沒成功啊,因為啟動storage后文件都沒生成,為了確認我們看一下storage的端口情況:


image.png

果然是沒啟動成功!端口目前還是只監聽了一個,storage的23000端口并未被監聽,那么我們只能去日志文件中找原因了,進入/opt/fastdfs_storage/logs目錄下并打開storaged.log文件:

image.png

如上圖,可以看到確實有一個error,關鍵信息是:

ERROR - file: storage_func.c, line: 896, mkdir “/etc/fastdfs_storage_data/data” fail, errno: 2, error info: No such file or directory

沒有文件或目錄!再回頭看一下/etc/fdfs目錄下的storage.conf的配置:


image.png

果不其然配錯了,我們指定成了/etc/fastdfs_storage_data目錄,而實際上我們創建的位置是/opt/fastdfs_storage_data,粗心大意,老眼昏花!修改路徑后再次重啟storage服務,然后再看看data目錄和實際存儲文件的/opt/fastdfs_storage_data:

image.png

如上圖,可以看到/opt/fastdfs_storage/data目錄下生成好的pid文件和dat文件,那么再看一下實際文件存儲路徑下是否有創建好的多級目錄呢:


image.png

如上圖,沒有任何問題,data下有256個1級目錄,每級目錄下又有256個2級子目錄總共65536個文件,新寫的文件會以hash的方式被路由到其中某個子目錄下,然后將文件數據直接作為一個本地文件存儲到該目錄中。那么最后我們再看一下storage服務的端口監聽情況:

image.png

如上圖,可以看到此時已經正常監聽tracker的22122端口和storage的23000端口,至此storage服務器就已經配置完成,確定了storage服務器啟動成功后,還有一項工作就是看看storage服務器是否已經登記到 tracker服務器(也可以理解為tracker與storage是否整合成功),運行以下命令:

/usr/bin/fdfs_monitor /etc/fdfs/storage.conf

[root@localhost /]# /usr/bin/fdfs_monitor /etc/fdfs/storage.conf
[2016-09-23 12:59:26] DEBUG - base_path=/opt/fastdfs_storage, 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

server_count=1, server_index=0

tracker server is 192.168.111.11:22122

group count: 1

Group 1:
group name = group1
disk total space = 6818 MB
disk free space = 2169 MB
trunk free space = 0 MB
storage server count = 1
active server count = 1
storage server port = 23000
storage HTTP port = 8888
store path count = 1
subdir count per path = 256
current write server index = 0
current trunk file id = 0

Storage 1:
id = 192.168.111.11
ip_addr = 192.168.111.11 ACTIVE
http domain =
version = 5.05
join time = 2016-09-23 11:15:54
up time = 2016-09-23 12:33:26
total storage = 6818 MB
free storage = 2169 MB
upload priority = 10
store_path_count = 1
subdir_count_per_path = 256
storage_port = 23000
storage_http_port = 8888
current_write_path = 0
source storage id =
if_trunk_server = 0
connection.alloc_count = 256
connection.current_count = 0
connection.max_count = 0
total_upload_count = 0
success_upload_count = 0
total_append_count = 0
success_append_count = 0
total_modify_count = 0
success_modify_count = 0
total_truncate_count = 0
success_truncate_count = 0
total_set_meta_count = 0
success_set_meta_count = 0
total_delete_count = 0
success_delete_count = 0
total_download_count = 0
success_download_count = 0
total_get_meta_count = 0
success_get_meta_count = 0
total_create_link_count = 0
success_create_link_count = 0
total_delete_link_count = 0
success_delete_link_count = 0
total_upload_bytes = 0
success_upload_bytes = 0
total_append_bytes = 0
success_append_bytes = 0
total_modify_bytes = 0
success_modify_bytes = 0
stotal_download_bytes = 0
success_download_bytes = 0
total_sync_in_bytes = 0
success_sync_in_bytes = 0
total_sync_out_bytes = 0
success_sync_out_bytes = 0
total_file_open_count = 0
success_file_open_count = 0
total_file_read_count = 0
success_file_read_count = 0
total_file_write_count = 0
success_file_write_count = 0
last_heart_beat_time = 2016-09-23 12:58:59
last_source_update = 1970-01-01 08:00:00
last_sync_update = 1970-01-01 08:00:00
last_synced_timestamp = 1970-01-01 08:00:00

如上所示,看到192.168.111.11 ACTIVE 字樣即可說明storage服務器已經成功登記到了tracker服務器,同理別忘了添加開機啟動,打開/etc/rc.d/rc.local并將如下配置追加到文件中:

service fdfs_storaged start

至此我們就已經完成了fastdfs的全部配置,此時也就可以用客戶端工具進行文件上傳下載的測試了。

初步測試

測試時需要設置客戶端的配置文件,編輯/etc/fdfs目錄下的client.conf 文件,打開文件后依次做以下修改:

  1. base_path=/opt/fastdfs_tracker #tracker服務器文件路徑
  2. tracker_server=192.168.111.11:22122 #tracker服務器IP地址和端口號
  3. http.tracker_server_port=6666 # tracker 服務器的 http 端口號,必須和tracker的設置對應起來

配置完成后就可以模擬文件上傳了,先給/opt目錄下放一張圖片(暴雪爸爸的LOGO):


image.png

然后通過執行客戶端上傳命令嘗試上傳:

/usr/bin/fdfs_upload_file  /etc/fdfs/client.conf  /opt/BLIZZARD.jpg

運行后可以發現給我們返回了一個路徑:


image.png

這就表示我們的文件已經上傳成功了,當文件存儲到某個子目錄后,即認為該文件存儲成功,接下來會為該文件生成一個文件名,文件名由group、存儲目錄、兩級子目錄、fileid、文件后綴名(由客戶端指定,主要用于區分文件類型)拼接而成,如下圖:


image.png

同時在之前配置的storage服務器的實際文件存儲路徑中也可以根據返回的路徑找到實際文件:


image.png

接下來嘗試用瀏覽器發送HTTP請求訪問一下文件:


image.png

此時發現并不能訪問,因為FastDFS目前已不支持http協議,我們在FastDFS 4.0.5的版本更新日志中可以看到這樣一條信息:


image.png

如上圖,4.0.5版本開始移除了自帶的HTTP支持(因為之前自帶的HTTP服務較為簡單,無法提供負載均衡等高性能服務),所以余大提供了nginx上使用FastDFS的模塊fastdfs-nginx-module,下載地址如下:https://github.com/happyfish100/fastdfs-nginx-module,這樣做最大的好處就是提供了HTTP服務并且解決了group中storage服務器的同步延遲問題,接下來就具體記錄一下fastdfs-nginx-module的安裝配置過程。

fastdfs-nginx-module

在余大的GitHub上下載好fastdfs-nginx-module上傳到我們的CentOS中就可以開始安裝了,在安裝nginx之前需要先安裝一些模塊依賴的lib庫,我在以前寫的blog有做詳細介紹(Linux CentOS 7 & Tengine(Nginx)安裝與配置),直接貼出安裝代碼:

yum -y install pcre pcre-devel  
yum -y install zlib zlib-devel  
yum -y install openssl openssl-devel

依次裝好這些依賴之后就可以開始安裝nginx了。

storage nginx

首先是為storage服務器安裝nginx,首先將nginx和fastdfs-nginx-module的安裝包上傳至CentOS:


image.png

首先分別進行解壓:

tar -zxvf nginx-1.8.1.tar.gz
unzip fastdfs-nginx-module-master.zip

解壓成功后就可以編譯安裝nginx了,進入nginx目錄并輸入以下命令進行配置:

./configure --prefix=/usr/local/nginx --add-module=/usr/local/fastdfs-nginx-module-master/src

配置成功后會看到如下信息:


image.png

緊接著就可以進行編譯安裝了,依次執行以下命令:

make
make install

解決報錯

make的時候會報以下錯誤,

        root/fastdfs-nginx-module/src//common.c:21:25: fatal error: fdfs_define.h: No such file or directory

include "fdfs_define.h"

                        ^

compilation terminated.

make[1]: *** [objs/addon/src/ngx_http_fastdfs_module.o] Error 1

解決辦法:

vim /root/fastdfs-nginx-module/src/config

 CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"

 CORE_LIBS="$CORE_LIBS -L/usr/lib -lfastcommon -lfdfsclient"

因為我們的頭文件都安裝在了 /usr/include/下而不是 /usr/local/include/,lib文件也是路徑要搞對。

重新編譯,安裝即可

安裝完成后,我們在我們指定的目錄/usr/local/nginx中就可以看到nginx的安裝目錄了:

image.png

接下來要修改一下nginx的配置文件,進入conf目錄并打開nginx.conf文件加入以下配置:

listen       9999;

location ~/group1/M00 {
      root /opt/fastdfs_storage_data/data;
      ngx_fastdfs_module;
}

然后進入FastDFS的安裝目錄/usr/local/fastdfs-5.05目錄下的conf目錄,將http.confmime.types拷貝到/etc/fdfs目錄下:

cp -r /usr/local/fastdfs-5.05/conf/http.conf /etc/fdfs/
cp -r /usr/local/fastdfs-5.05/conf/mime.types /etc/fdfs/

接下來還需要把fastdfs-nginx-module安裝目錄中src目錄下的mod_fastdfs.conf也拷貝到/etc/fdfs目錄下:

cp -r /usr/local/fastdfs-nginx-module-master/src/mod_fastdfs.conf /etc/fdfs/

看一下/etc/fdfs目錄下當前所有的配置文件:


image.png

沒什么問題,接下來就需要編輯剛拷貝的這個mod_fastdfs.conf文件了,打開mod_fastdfs.conf并按順序依次編譯以下內容:

  1. base_path=/opt/fastdfs_storage #保存日志目錄
  2. tracker_server=192.168.111.11:22122 #tracker服務器的IP地址以及端口號
  3. storage_server_port=23000 #storage服務器的端口號
  4. url_have_group_name = true #文件 url 中是否有 group 名
  5. store_path0=/opt/fastdfs_storage_data # 存儲路徑
  6. group_count = 3 #設置組的個數,事實上這次只使用了group1

設置了group_count = 3,接下來就需要在文件尾部追加這3個group setting:

[group1]
group_name=group1
storage_server_port=23000
store_path_count=1
store_path0=/opt/fastdfs_storage_data

[group2]
group_name=group2
storage_server_port=23000
store_path_count=1
store_path0=/opt/fastdfs_storage_data

[group3]
group_name=group3
storage_server_port=23000
store_path_count=1
store_path0=/opt/fastdfs_storage_data

接下來還需要建立 M00 至存儲目錄的符號連接:

ln  -s  /opt/fastdfs_storage_data/data  /opt/fastdfs_storage_data/data/M00

最后啟動nginx:

/usr/local/nginx/sbin/nginx

顯示如下信息說明nginx已啟動成功:


image.png

通過瀏覽器也可以看到nginx的主頁:


image.png

storage服務器的nginx就已經安裝完畢,接下來看一下tracker服務器的nginx安裝。

tracker nginx

同理,再裝一個nginx,目錄命名為nginx2,安裝路徑依舊放在/usr/local下,由于和之前一樣,此處就不再做詳細解釋:

mkdir nginx2
cd nginx-1.8.1/
./configure --prefix=/usr/local/nginx2 --add-module=/usr/local/fastdfs-nginx-module-master/src
make
make install

接下來依然是修改nginx2的配置文件,進入conf目錄并打開nginx.conf文件加入以下配置,storage的nginx無需修改listen端口,即默認的80端口,并將upstream指向tracker的nginx地址:

upstream fdfs_group1 {
     server 127.0.0.1:9999;
}

location /group1/M00 {
     proxy_pass http://fdfs_group1;
}

接下來啟動nginx2:

/usr/local/nginx2/sbin/nginx

此時訪問nginx2的主頁,由于沒有修改端口,直接訪問ip地址即可:


image.png

最后一步就是需要修改/etc/fdfs目錄下的client.conf文件,打開該文件并加入以下配置:

base_path=/data/fastdfs_storage  #日志存放路徑
tracker_server=192.168.116.145:22122  #tracker 服務器 IP 地址和端口號
http.tracker_server_port=6666  # tracker 服務器的 http 端口號,必須和tracker的設置對應起來

至此關于fastdfs就已經全部配置完畢了,再一次進行測試看看是否能正常上傳文件并通過http訪問文件。

HTTP測試

再給/opt目錄下上傳一張暴雪爸爸的LOGO圖:


image.png

通過客戶端命令測試上傳:

image.png

如上圖,依舊上傳成功,接下來的關鍵就是通過HTTP測試文件訪問,打開瀏覽器輸入ip地址+文件名看看是否能正常訪問該圖片:
image.png

一切正常~ 至此關于FastDFS在CentOS 7下的部署測試就已經全部完成了。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,572評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,071評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,409評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,569評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,360評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,895評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,979評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,123評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,643評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,559評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,742評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,250評論 5 356
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,981評論 3 346
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,363評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,622評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,354評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,707評論 2 370

推薦閱讀更多精彩內容