手把手教你搭建一個Elasticsearch集群

原文出自:https://www.cnblogs.com/tianyiliang/p/10291305.html

一、為何要搭建 Elasticsearch 集群

凡事都要講究個為什么。在搭建集群之前,我們首先先問一句,為什么我們需要搭建集群?它有什么優(yōu)勢呢?

(1)高可用性

Elasticsearch 作為一個搜索引擎,我們對它的基本要求就是存儲海量數(shù)據(jù)并且可以在非常短的時間內(nèi)查詢到我們想要的信息。所以第一步我們需要保證的就是 Elasticsearch 的高可用性,什么是高可用性呢?它通常是指,通過設(shè)計減少系統(tǒng)不能提供服務(wù)的時間。假設(shè)系統(tǒng)一直能夠提供服務(wù),我們說系統(tǒng)的可用性是 100%。如果系統(tǒng)在某個時刻宕掉了,比如某個網(wǎng)站在某個時間掛掉了,那么就可以它臨時是不可用的。所以,為了保證 Elasticsearch 的高可用性,我們就應(yīng)該盡量減少 Elasticsearch 的不可用時間。

那么怎樣提高 Elasticsearch 的高可用性呢?這時集群的作用就體現(xiàn)出來了。假如 Elasticsearch 只放在一臺服務(wù)器上,即單機運行,假如這臺主機突然斷網(wǎng)了或者被攻擊了,那么整個 Elasticsearch 的服務(wù)就不可用了。但如果改成 Elasticsearch 集群的話,有一臺主機宕機了,還有其他的主機可以支撐,這樣就仍然可以保證服務(wù)是可用的。

那可能有的小伙伴就會說了,那假如一臺主機宕機了,那么不就無法訪問這臺主機的數(shù)據(jù)了嗎?那假如我要訪問的數(shù)據(jù)正好存在這臺主機上,那不就獲取不到了嗎?難道其他的主機里面也存了一份一模一樣的數(shù)據(jù)?那這豈不是很浪費嗎?

為了解答這個問題,這里就引出了 Elasticsearch 的信息存儲機制了。首先解答上面的問題,一臺主機宕機了,這臺主機里面存的數(shù)據(jù)依然是可以被訪問到的,因為在其他的主機上也有備份,但備份的時候也不是整臺主機備份,是分片備份的,那這里就又引出了一個概念——分片。

分片,英文叫做 Shard,顧名思義,分片就是對數(shù)據(jù)切分成了多個部分。我們知道 Elasticsearch 中一個索引(Index)相當于是一個數(shù)據(jù)庫,如存某網(wǎng)站的用戶信息,我們就建一個名為 user 的索引。但索引存儲的時候并不是整個存一起的,它是被分片存儲的,Elasticsearch 默認會把一個索引分成五個分片,當然這個數(shù)字是可以自定義的。分片是數(shù)據(jù)的容器,數(shù)據(jù)保存在分片內(nèi),分片又被分配到集群內(nèi)的各個節(jié)點里。當你的集群規(guī)模擴大或者縮小時, Elasticsearch 會自動的在各節(jié)點中遷移分片,使得數(shù)據(jù)仍然均勻分布在集群里,所以相當于一份數(shù)據(jù)被分成了多份并保存在不同的主機上。

那這還是沒解決問題啊,如果一臺主機掛掉了,那么這個分片里面的數(shù)據(jù)不就無法訪問了?別的主機都是存儲的其他的分片。其實是可以訪問的,因為其他主機存儲了這個分片的備份,叫做副本,這里就引出了另外一個概念——副本。

副本,英文叫做 Replica,同樣顧名思義,副本就是對原分片的復制,和原分片的內(nèi)容是一樣的,Elasticsearch 默認會生成一份副本,所以相當于是五個原分片和五個分片副本,相當于一份數(shù)據(jù)存了兩份,并分了十個分片,當然副本的數(shù)量也是可以自定義的。這時我們只需要將某個分片的副本存在另外一臺主機上,這樣當某臺主機宕機了,我們依然還可以從另外一臺主機的副本中找到對應(yīng)的數(shù)據(jù)。所以從外部來看,數(shù)據(jù)結(jié)果是沒有任何區(qū)別的。

一般來說,Elasticsearch 會盡量把一個索引的不同分片存儲在不同的主機上,分片的副本也盡可能存在不同的主機上,這樣可以提高容錯率,從而提高高可用性。

但這時假如你只有一臺主機,那不就沒辦法了嗎?分片和副本其實是沒意義的,一臺主機掛掉了,就全掛掉了。

(2)健康狀態(tài)

針對一個索引,Elasticsearch 中其實有專門的衡量索引健康狀況的標志,分為三個等級:

green,綠色。這代表所有的主分片和副本分片都已分配。你的集群是 100% 可用的。

yellow,黃色。所有的主分片已經(jīng)分片了,但至少還有一個副本是缺失的。不會有數(shù)據(jù)丟失,所以搜索結(jié)果依然是完整的。不過,你的高可用性在某種程度上被弱化。如果更多的分片消失,你就會丟數(shù)據(jù)了。所以可把 yellow 想象成一個需要及時調(diào)查的警告。

red,紅色。至少一個主分片以及它的全部副本都在缺失中。這意味著你在缺少數(shù)據(jù):搜索只能返回部分數(shù)據(jù),而分配到這個分片上的寫入請求會返回一個異常。

如果你只有一臺主機的話,其實索引的健康狀況也是 yellow,因為一臺主機,集群沒有其他的主機可以防止副本,所以說,這就是一個不健康的狀態(tài),因此集群也是十分有必要的。

(3)存儲空間

另外,既然是群集,那么存儲空間肯定也是聯(lián)合起來的,假如一臺主機的存儲空間是固定的,那么集群它相對于單個主機也有更多的存儲空間,可存儲的數(shù)據(jù)量也更大。

所以綜上所述,我們需要一個集群!

二、詳細了解 Elasticsearch 集群

接下來我們再來了解下集群的結(jié)構(gòu)是怎樣的。

首先我們應(yīng)該清楚多臺主機構(gòu)成了一個集群,每臺主機稱作一個節(jié)點(Node)。

如圖就是一個三節(jié)點的集群:

在圖中,每個 Node 都有三個分片,其中 P 開頭的代表 Primary 分片,即主分片,R 開頭的代表 Replica 分片,即副本分片。所以圖中主分片 1、2,副本分片 0 儲存在 1 號節(jié)點,副本分片 0、1、2 儲存在 2 號節(jié)點,主分片 0 和副本分片 1、2 儲存在 3 號節(jié)點,一共是 3 個主分片和 6 個副本分片。同時我們還注意到 1 號節(jié)點還有個 MASTER 的標識,這代表它是一個主節(jié)點,它相比其他的節(jié)點更加特殊,它有權(quán)限控制整個集群,比如資源的分配、節(jié)點的修改等等。

這里就引出了一個概念就是節(jié)點的類型,我們可以將節(jié)點分為這么四個類型:

主節(jié)點:即 Master 節(jié)點。主節(jié)點的主要職責是和集群操作相關(guān)的內(nèi)容,如創(chuàng)建或刪除索引,跟蹤哪些節(jié)點是群集的一部分,并決定哪些分片分配給相關(guān)的節(jié)點。穩(wěn)定的主節(jié)點對集群的健康是非常重要的。默認情況下任何一個集群中的節(jié)點都有可能被選為主節(jié)點。索引數(shù)據(jù)和搜索查詢等操作會占用大量的cpu,內(nèi)存,io資源,為了確保一個集群的穩(wěn)定,分離主節(jié)點和數(shù)據(jù)節(jié)點是一個比較好的選擇。雖然主節(jié)點也可以協(xié)調(diào)節(jié)點,路由搜索和從客戶端新增數(shù)據(jù)到數(shù)據(jù)節(jié)點,但最好不要使用這些專用的主節(jié)點。一個重要的原則是,盡可能做盡量少的工作。

數(shù)據(jù)節(jié)點:即 Data 節(jié)點。數(shù)據(jù)節(jié)點主要是存儲索引數(shù)據(jù)的節(jié)點,主要對文檔進行增刪改查操作,聚合操作等。數(shù)據(jù)節(jié)點對 CPU、內(nèi)存、IO 要求較高,在優(yōu)化的時候需要監(jiān)控數(shù)據(jù)節(jié)點的狀態(tài),當資源不夠的時候,需要在集群中添加新的節(jié)點。

負載均衡節(jié)點:也稱作 Client 節(jié)點,也稱作客戶端節(jié)點。當一個節(jié)點既不配置為主節(jié)點,也不配置為數(shù)據(jù)節(jié)點時,該節(jié)點只能處理路由請求,處理搜索,分發(fā)索引操作等,從本質(zhì)上來說該客戶節(jié)點表現(xiàn)為智能負載平衡器。獨立的客戶端節(jié)點在一個比較大的集群中是非常有用的,他協(xié)調(diào)主節(jié)點和數(shù)據(jù)節(jié)點,客戶端節(jié)點加入集群可以得到集群的狀態(tài),根據(jù)集群的狀態(tài)可以直接路由請求。

預處理節(jié)點:也稱作 Ingest 節(jié)點,在索引數(shù)據(jù)之前可以先對數(shù)據(jù)做預處理操作,所有節(jié)點其實默認都是支持 Ingest 操作的,也可以專門將某個節(jié)點配置為 Ingest 節(jié)點。

以上就是節(jié)點幾種類型,一個節(jié)點其實可以對應(yīng)不同的類型,如一個節(jié)點可以同時成為主節(jié)點和數(shù)據(jù)節(jié)點和預處理節(jié)點,但如果一個節(jié)點既不是主節(jié)點也不是數(shù)據(jù)節(jié)點,那么它就是負載均衡節(jié)點。具體的類型可以通過具體的配置文件來設(shè)置。


三、怎樣搭建 Elasticsearch 6.5.4集群

1-1、準備環(huán)境

采用三臺CentOS6.5部署Elasticsearch集群,部署Elasticsearch集群就不得不提索引分片,以下是索引分片的簡單介紹。

系統(tǒng)?節(jié)點名稱IP地址

?     centos 6.5 ???   els-node1?? ?  192.168.60.201? ? ?

?     centos 6.5?   els-node2?   ?192.168.60.202

    ? centos 6.5?   els-node3? ?  192.168.60.203





ES集群中索引可能由多個分片構(gòu)成,并且每個分片可以擁有多個副本。通過將一個單獨的索引分為多個分片,我們可以處理不能在一個單一的服務(wù)器上面運行的大型索引,簡單的說就是索引的大小過大,導致效率問題。不能運行的原因可能是內(nèi)存也可能是存儲。由于每個分片可以有多個副本,通過將副本分配到多個服務(wù)器,可以提高查詢的負載能力。

由于 Elasticsearch 6.5.4要求linux 內(nèi)核版本要高于3.5+,所以我們先要將系統(tǒng)內(nèi)核升級至3.5+,詳細請移步

CentOS6.5升級內(nèi)核至4.4

1-2、Elasticsearch集群搭建

1.安裝JDK

Elasticsearch是基于Java開發(fā)是一個Java程序,運行在Jvm中,所以第一步要安裝JDK

yum install -y java-1.8.0-openjdk-devel? # 安裝1.8或1.8以上版本

2.下載elasticsearch

https://www.elastic.co/cn/downloads/elasticsearch,是ELasticsearch的官方站點,如果需要下載最新的版本,進入官網(wǎng)下載即可。可以下載到本地電腦然后再導入CentOS中,也可以直接在CentOS中下載。

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.5.4.rpm

3.安裝elasticsearch

rpm -ivh elasticsearch-6.5.4.rpm

4.配置目錄

安裝完畢后會生成很多文件,包括配置文件日志文件等等,下面幾個是最主要的配置文件路徑

/etc/elasticsearch/elasticsearch.yml? ? ? ? ? ? ? ? ? ? ? ? ? ? # els的配置文件/etc/elasticsearch/jvm.options? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? # JVM相關(guān)的配置,內(nèi)存大小等等/etc/elasticsearch/log4j2.properties? ? ? ? ? ? ? ? ? ? ? ? ? ? # 日志系統(tǒng)定義/usr/share/elasticsearch? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? # elasticsearch 默認安裝目錄/var/lib/elasticsearch? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? # 數(shù)據(jù)的默認存放位置

5.創(chuàng)建用于存放數(shù)據(jù)與日志的目錄

數(shù)據(jù)文件會隨著系統(tǒng)的運行飛速增長,所以默認的日志文件與數(shù)據(jù)文件的路徑不能滿足我們的需求,那么手動創(chuàng)建日志與數(shù)據(jù)文件路徑,可以使用NFS、可以使用Raid等等方便以后的管理與擴展

mkdir -p /opt/elasticsearch/data

mkdir -p /opt/elasticsearch/log

chown -R elasticsearch.elasticsearch /opt/elasticsearch/*

6.集群配置

集群配置中最重要的兩項是node.name與network.host,每個節(jié)點都必須不同。其中node.name是節(jié)點名稱主要是在Elasticsearch自己的日志加以區(qū)分每一個節(jié)點信息。

discovery.zen.ping.unicast.hosts是集群中的節(jié)點信息,可以使用IP地址、可以使用主機名(必須可以解析)。


vim /etc/elasticsearch/elasticsearch.yml

cluster.name: my-els? ? ? ? ? ? ? ? ? ? ? ? ? ? ? # 集群名稱

node.name: els-node1? ? ? ? ? ? ? ? ? ? ? ? ? ? ? # 節(jié)點名稱,僅僅是描述名稱,用于在日志中區(qū)分

path.data: /opt/elasticsearch/data? ? ? ? ? ? ? ? # 數(shù)據(jù)的默認存放路徑

path.logs: /opt/elasticsearch/log? ? ? ? ? ? ? ? ? # 日志的默認存放路徑

network.host: 192.168.60.201? ? ? ? ? ? ? ? ? ? ? ? # 當前節(jié)點的IP地址

http.port: 9200? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? # 對外提供服務(wù)的端口,9300為集群服務(wù)的端口

#添加如下內(nèi)容

#culster transport port

transport.tcp.port: 9300transport.tcp.compress: truediscovery.zen.ping.unicast.hosts: ["192.168.60.201","192.168.60.202","192.168.60.203"]? ? ?

# 集群個節(jié)點IP地址,也可以使用els、els.shuaiguoxia.com等名稱,需要各節(jié)點能夠解析

discovery.zen.minimum_master_nodes: 2# 為了避免腦裂,集群節(jié)點數(shù)最少為 半數(shù)+1

注意:不要在elasticsearch.yml中添加index開頭的配置項。如

#index.number_of_shards:5

#index.number_of_replicas: 1

7.JVM配置?

由于Elasticsearch是Java開發(fā)的,所以可以通過/etc/elasticsearch/jvm.options配置文件來設(shè)定JVM的相關(guān)設(shè)定。如果沒有特殊需求按默認即可。

不過其中還是有兩項最重要的-Xmx1g與-Xms1gJVM的最大最小內(nèi)存。如果太小會導致Elasticsearch剛剛啟動就立刻停止。太大會拖慢系統(tǒng)本身。

vim /etc/elasticsearch/jvm.options-Xms1g? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? # JVM最大、最小使用內(nèi)存-Xmx1g

8.使用ROOT賬戶執(zhí)行以下命令

elasticsearch的相關(guān)配置已經(jīng)完成,下面需要啟動elasticsearch集群。但是由于安全的考慮,elasticsearch不允許使用root用戶來啟動,所以需要創(chuàng)建一個新的用戶,并為這個賬戶賦予相應(yīng)的權(quán)限來啟動elasticsearch集群。

創(chuàng)建ES運行用戶

# 創(chuàng)建用戶組

groupadd es

# 創(chuàng)建用戶并添加至用戶組

useradd es -g es

# 更改用戶密碼(輸入 123123)

passwd es

修改ES目錄權(quán)限

chown -R es:es? /etc/share/elasticsearch/chown -R es:es? /usr/share/elasticsearch/chown -R es:es? /var/log/elasticsearch/? ? ? # 以上操作都是為了賦予es用戶操作權(quán)限

啟動服務(wù)

# 需切換為es用戶

su es

# 啟動服務(wù)(當前的路徑為:/usr/share/elasticsearch/)

./bin/elasticsearch

后臺運行ES

可以加入-p 命令 讓es在后臺運行, -p 參數(shù) 記錄進程ID為一個文件

# 設(shè)置后臺啟動

./bin/elasticsearch -p /tmp/elasticsearch-pid -d

結(jié)束進程

# 查看運行的pid

cat /tmp/elasticsearch-pid && echo

# 結(jié)束進程

kill -SIGTERM {pid}

驗證一下服務(wù)是否正常

curl -i"http://192.168.60.200:9200"


二、安裝head插件

Elasticsearch Head Plugin:head插件是一個ES集群的web前端工具,它提供可視化的頁面方便用戶查看節(jié)點信息,對ES進行各種操作,如查詢、刪除、瀏覽索引等。

1、安裝相關(guān)依賴包

(1)安裝head

由于head插件本質(zhì)上還是一個nodejs的工程,因此需要安裝node,使用npm來安裝依賴的包。(npm可以理解為maven)

wget https://nodejs.org/dist/v9.3.0/node-v9.3.0-linux-x64.tar.xz  # 下載nodejs最新的bin包xz-d node-v9.3.0-linux-x64.tar.xz  # 解壓包

tar-xf node-v9.3.0-linux-x64.tar  # 解壓包ln-s ~/node-v9.3.0-linux-x64/bin/node /usr/bin/node? # 部署bin文件,先確定nodejs的bin路徑

ln-s ~/node-v9.3.0-linux-x64/bin/npm /usr/bin/npm

測試:

node -v

npm

npm加速 全局安裝cnpm 指定來源淘寶鏡像

npm install -g cnpm --registry=https://registry.npm.taobao.org

(2)安裝grunt(安裝完elasticsearch-head后安裝)

grunt是一個很方便的構(gòu)建工具,可以進行打包壓縮、測試、執(zhí)行等等的工作,5.0里的head插件就是通過grunt啟動的。因此需要安裝一下grunt:

cd? /usr/local/elasticsearch-head

npm install -g grunt-cli? //執(zhí)行后會生成node_modules文件夾

npm install

注:

(1)5.0以上,elasticsearch-head 不能放在elasticsearch的plugins、modules目錄下,否則elasticsearch啟動會報錯。

(2)這里如果grunt沒有安裝成功也無所謂,可以通過其他方式啟動elasticsearch-head插件(npm run start)。


2、安裝elasticsearch-head

另外:5.0以前的版本可以通過elasticseach自帶的plugin命令 安裝elasticsearch-head,5.0以后不支持了。只可以去下載elasticsearch-head對應(yīng)的源碼包去安裝。

cd /usr/local/

git?clone git://github.com/mobz/elasticsearch-head.git

cd elasticsearch-head

npm install

配置:

vi _site/app.js# 修改 this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://localhost:9200";? # 在文件的4354行附近# 這里的 localhost 是指進入elasticsearch-head頁面時默認訪問的ES集群地址,把她修改為其中一臺ES節(jié)點的地址即可this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") ||"http://192.168.60.200:9200";

還要修改Head主目錄下的Gruntfile.js,由于默認文件中是沒有hostname屬性的,我們需要手動添加:


為什么需要修改配置文件:

head插件連接elasticsearch需要注意的點:

因為head插件是一個獨立進程,啟動后是一個獨立的服務(wù)器外加端口,比如我的虛擬機ip地址:http://192.168.0.111:9100/而elasticsearch啟動后也是一個獨立的進程,ip地址:http://192.168.0.111:9200/這樣兩個獨立進程,雖然服務(wù)器ip地址相同,但是端口不同,此時會發(fā)生跨域的情況。。

于是官方給出這樣一段話,我們在對elasticsearch啟動的時候追加兩個配置文件屬性即可防止跨域。

即:在elasticsearch.yml文件的最后,添加如下內(nèi)容:

http.cors.enabled: true

http.cors.allow-origin:"*"

配置完畢。

3、啟動elasticsearch集群

在三臺機器上,分別啟動elasticsearch即可。

./bin/elasticsearch

4、啟動elasticsearch-head

cd /usr/local/elasticsearch-head //先跳轉(zhuǎn)到head目錄下

grunt server //若想在后臺運行,結(jié)尾追加“&”,也可以使用 npm run start啟動

5、訪問elasticsearch-head界面

http://192.168.60.200:9100

可以看到,三臺機器組成了es集群。集群的狀態(tài)為綠色,健康狀態(tài)。帶星標的節(jié)點els-node1為主節(jié)點(選舉)。還可以做一些增加/刪除索引,查詢等操作。

下面還有ik分詞器的安裝,未完待續(xù)。。。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,362評論 6 544
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,577評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,486評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,852評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,600評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,944評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,944評論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 43,108評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,652評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 41,385評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,616評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,111評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,798評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,205評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,537評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,334評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,570評論 2 379