RocketMQ:搭建集群

在上一篇《RocketMQ:快速入門》之后集晚,今天說一說如何搭建RocketMQ集群排苍。首先看一下集群架構(gòu)圖:

1. 集群特點

  • NameServer是一個幾乎無狀態(tài)節(jié)點,可集群部署,節(jié)點之間無任何信息同步。
  • Broker部署相對復(fù)雜镊折,Broker分為Master與Slave,一個Master可以對應(yīng)多個Slave介衔,但是一個Slave只能對應(yīng)一個Master恨胚,Master與Slave的對應(yīng)關(guān)系通過指定相同的BrokerName。不同的BrokerId來定義炎咖,BrokerId為0表示Master赃泡,非0表示Slave。Master也可以部署多個塘装。每個Broker與NameServer集群中的所有節(jié)點建立長連接急迂,定時注冊Topic信息到所有NameServer。
  • Producer與NameServer集群中的其中一個節(jié)點(隨機選擇)建立長連接蹦肴,定期從NameServer取Topic路由信息,并向提供Topic服務(wù)的Master建立長連接猴娩,且定時向Master發(fā)送心跳阴幌。Producer完全無狀態(tài)勺阐,可集群部署。
  • Consumer與NameServer集群中的其中一個節(jié)點(隨機選擇)建立長連接矛双,定期從NameServer取Topic路由信息渊抽,并向提供Topic服務(wù)的Master、Slave建立長連接议忽,且定時向Master懒闷、Slave發(fā)送心跳。Consumer既可以從Master訂閱消息栈幸,也可以從Slave訂閱消息愤估,訂閱規(guī)則由Broker配置決定。

2. 集群模式

2.1 單Master模式

這種方式風險較大速址,一旦Broker重啟或者宕機時玩焰,會導(dǎo)致整個服務(wù)不可用。不建議線上環(huán)境使用芍锚,通澄粼埃可以用于本地測試。我們在《RocketMQ:快速入門》搭建的就是單Master模式并炮。

2.2 多Master模式

一個集群無Slave默刚,全是Master,例如2個Master或者3個Master逃魄,這種模式的優(yōu)缺點如下:

  • 優(yōu)點:配置簡單荤西,單個Master宕機或重啟維護對應(yīng)用無影響,在磁盤配置為RAID10時嗅钻,即使機器宕機不可恢復(fù)情況下皂冰,由于RAID10磁盤非常可靠养篓,消息也不會丟(異步刷盤丟失少量消息秃流,同步刷盤一條不丟),性能最高柳弄。
  • 缺點:單臺機器宕機期間舶胀,這臺機器上未被消費的消息在機器恢復(fù)之前不可訂閱,消息實時性會受到影響碧注。

2.3 多Master多Slave模式(異步)

每個Master配置一個Slave嚣伐,有多對Master-Slave,HA采用異步復(fù)制方式萍丐,主備有短暫消息延遲(毫秒級)轩端,這種模式的優(yōu)缺點如下:

  • 優(yōu)點:即使磁盤損壞,消息丟失的非常少逝变,且消息實時性不會受影響基茵,同時Master宕機后奋构,消費者仍然可以從Slave消費,而且此過程對應(yīng)用透明拱层,不需要人工干預(yù)弥臼,性能同多Master模式幾乎一樣。
  • 缺點:Master宕機根灯,磁盤損壞情況下會丟失少量消息径缅。

2.4 多Master多Slave模式(同步)

每個Master配置一個Slave,有多對Master-Slave烙肺,HA采用同步雙寫方式纳猪,即只有主備都寫成功,才向應(yīng)用返回成功茬高,這種模式的優(yōu)缺點如下:

  • 優(yōu)點:數(shù)據(jù)與服務(wù)都無單點故障兆旬,Master宕機情況下,消息無延遲怎栽,服務(wù)可用性與數(shù)據(jù)可用性都非常高丽猬。
  • 缺點:性能比異步復(fù)制模式略低(大約低10%左右),發(fā)送單個消息的RT會略高熏瞄,且目前版本在主節(jié)點宕機后脚祟,備機不能自動切換為主機。

3. 雙主雙從同步雙寫集群搭建

3.1 總體架構(gòu)

3.2 集群工作流程

  1. 啟動NameServer强饮,NameServer起來后監(jiān)聽端口由桌,等待Broker、Producer邮丰、Consumer連上來行您,相當于一個路由控制中心。
  2. Broker啟動剪廉,跟所有的NameServer保持長連接娃循,定時發(fā)送心跳包。心跳包中包含當前Broker信息(IP+端口等)以及存儲所有Topic信息斗蒋。注冊成功后捌斧,NameServer集群中就有Topic跟Broker的映射關(guān)系。
  3. 收發(fā)消息前泉沾,先創(chuàng)建Topic捞蚂,創(chuàng)建Topic時需要指定該Topic要存儲在哪些Broker上,也可以在發(fā)送消息時自動創(chuàng)建Topic跷究。
  4. Producer發(fā)送消息姓迅,啟動時先跟NameServer集群中的其中一臺建立長連接,并從NameServer中獲取當前發(fā)送的Topic存在哪些Broker上,輪詢從隊列列表中選擇一個隊列队贱,然后與隊列所在的Broker建立長連接從而向Broker發(fā)消息色冀。
  5. Consumer跟Producer類似潭袱,跟其中一臺NameServer建立長連接柱嫌,獲取當前訂閱Topic存在哪些Broker上,然后直接跟Broker建立連接通道屯换,開始消費消息编丘。

3.3 服務(wù)器環(huán)境

主機名 主機ip 角色(端口)
node1 192.168.1.19 rocketmq-ns1(9876)
rocketmq-bs-m1(10911)
node2 192.168.1.20 rocketmq-ns2(9876)
rocketmq-bs-m2(10911)
rocketmq-bs-s1(11011)
node3 192.168.1.21 rocketmq-ns3(9876)
rocketmq-bs-s2(10911)
rockermq-console(8080)

3.4 修改host配置

使用vim命令編輯/etc/hosts文件,添加以下配置:

##################### begin rocketmq #####################
# nameserver
192.168.1.19 rocketmq-ns1
192.168.1.20 rocketmq-ns2
192.168.1.21 rocketmq-ns3
# broker
192.168.1.19 rocketmq-bs-m1
192.168.1.20 rocketmq-bs-m2 rocketmq-bs-s1
192.168.1.21 rocketmq-bs-s2
##################### end rocketmq #####################

配置完成后彤悔,重啟網(wǎng)卡:

systemctl restart network

3.5 防火墻配置

宿主機需要遠程訪問虛擬機的rocketmq服務(wù)和web服務(wù)嘉抓,需要開放相關(guān)的端口號,簡單粗暴的方式是直接關(guān)閉防火墻晕窑。

# 關(guān)閉防火墻
systemctl stop firewalld.service 
# 查看防火墻的狀態(tài)
firewall-cmd --state 
# 禁止firewall開機啟動
systemctl disable firewalld.service

或者為了安全抑片,只開放特定的端口號,RocketMQ默認使用3個端口:9876 杨赤、10911 敞斋、11011 。如果防火墻沒有關(guān)閉的話疾牲,那么防火墻就必須開放這些端口:

  • nameserver 默認使用 9876 端口
  • master 默認使用 10911 端口
  • slave 默認使用11011 端口

執(zhí)行以下命令:

# 開放name server默認端口
firewall-cmd --remove-port=9876/tcp --permanent
# 開放master默認端口
firewall-cmd --remove-port=10911/tcp --permanent
# 開放slave默認端口 (當前集群模式可不開啟)
firewall-cmd --remove-port=11011/tcp --permanent 
# 重啟防火墻
firewall-cmd --reload

3.6 配置環(huán)境變量

使用vim命令編輯/etc/profile文件植捎,添加以下配置:

# rocketmq env
export ROCKETMQ_HOME=/usr/local/rocketmq/rocketmq-all-4.4.0-bin-release
export PATH=$PATH:$ROCKETMQ_HOME/bin

配置完成后,生效配置:

source /etc/profile

3.7 創(chuàng)建消息存儲路徑

# node1
mkdir /usr/local/rocketmq/store/master1
mkdir /usr/local/rocketmq/store/master1/commitlog
mkdir /usr/local/rocketmq/store/master1/consumequeue
mkdir /usr/local/rocketmq/store/master1/index
# node2
mkdir /usr/local/rocketmq/store/master2
mkdir /usr/local/rocketmq/store/master2/commitlog
mkdir /usr/local/rocketmq/store/master2/consumequeue
mkdir /usr/local/rocketmq/store/master2/index

mkdir /usr/local/rocketmq/store/master1-slave1
mkdir /usr/local/rocketmq/store/master1-slave1/commitlog
mkdir /usr/local/rocketmq/store/master1-slave1/consumequeue
mkdir /usr/local/rocketmq/store/master1-slave1/index
# node3
mkdir /usr/local/rocketmq/store/master2-slave1
mkdir /usr/local/rocketmq/store/master2-slave1/commitlog
mkdir /usr/local/rocketmq/store/master2-slave1/consumequeue
mkdir /usr/local/rocketmq/store/master2-slave1/index

3.8 Broker配置文件

3.8.1 master1的配置

服務(wù)器:node1(192.168.1.19)

vim /usr/local/rocketmq/conf/2m-2s-sync/master1.properties

配置如下:

#所屬集群名字
brokerClusterName=rocketmq-cluster
#broker名字阳柔,注意此處不同的配置文件填寫的不一樣
brokerName=broker-a
#0 表示 Master焰枢,>0 表示 Slave
brokerId=0
#nameServer地址,多個之間用分號分割
namesrvAddr=rocketmq-ns1:9876;rocketmq-ns2:9876;rocketmq-ns3:9876
#在發(fā)送消息時舌剂,自動創(chuàng)建服務(wù)器不存在的topic济锄,默認創(chuàng)建的隊列數(shù)
defaultTopicQueueNums=4
#是否允許 Broker 自動創(chuàng)建Topic,建議線下開啟霍转,線上關(guān)閉
autoCreateTopicEnable=true
#是否允許 Broker 自動創(chuàng)建訂閱組荐绝,建議線下開啟,線上關(guān)閉
autoCreateSubscriptionGroup=true
#Broker 對外服務(wù)的監(jiān)聽端口
listenPort=10911
#刪除文件時間點谴忧,默認凌晨 4點
deleteWhen=04
#文件保留時間很泊,默認 48 小時
fileReservedTime=120
#commitLog每個文件的大小默認1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每個文件默認存30W條,根據(jù)業(yè)務(wù)情況調(diào)整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#檢測物理文件磁盤空間
diskMaxUsedSpaceRatio=88
#存儲路徑
storePathRootDir=/usr/local/rocketmq/store/master1
#commitLog 存儲路徑
storePathCommitLog=/usr/local/rocketmq/store/master1/commitlog
#消費隊列存儲路徑存儲路徑
storePathConsumeQueue=/usr/local/rocketmq/store/master1/consumequeue
#消息索引存儲路徑
storePathIndex=/usr/local/rocketmq/store/master1/index
#checkpoint 文件存儲路徑
storeCheckpoint=/usr/local/rocketmq/store/master1/checkpoint
#abort 文件存儲路徑
abortFile=/usr/local/rocketmq/store/master1/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 異步復(fù)制Master
#- SYNC_MASTER 同步雙寫Master
#- SLAVE
brokerRole=SYNC_MASTER
#刷盤方式
#- ASYNC_FLUSH 異步刷盤
#- SYNC_FLUSH 同步刷盤
flushDiskType=SYNC_FLUSH
#checkTransactionMessageEnable=false
#發(fā)消息線程池數(shù)量
#sendMessageThreadPoolNums=128
#拉消息線程池數(shù)量
#pullMessageThreadPoolNums=128

3.8.2 master1-slave1的配置

服務(wù)器:node2(192.168.1.20)

vim /usr/local/rocketmq/conf/2m-2s-sync/master1-slave1.properties

配置如下:

#所屬集群名字
brokerClusterName=rocketmq-cluster
#broker名字沾谓,注意此處不同的配置文件填寫的不一樣
brokerName=broker-a
#0 表示 Master委造,>0 表示 Slave
brokerId=1
#nameServer地址,分號分割
namesrvAddr=rocketmq-ns1:9876;rocketmq-ns2:9876;rocketmq-ns3:9876
#在發(fā)送消息時均驶,自動創(chuàng)建服務(wù)器不存在的topic昏兆,默認創(chuàng)建的隊列數(shù)
defaultTopicQueueNums=4
#是否允許 Broker 自動創(chuàng)建Topic,建議線下開啟妇穴,線上關(guān)閉
autoCreateTopicEnable=true
#是否允許 Broker 自動創(chuàng)建訂閱組爬虱,建議線下開啟隶债,線上關(guān)閉
autoCreateSubscriptionGroup=true
#Broker 對外服務(wù)的監(jiān)聽端口
listenPort=11011
#刪除文件時間點,默認凌晨 4點
deleteWhen=04
#文件保留時間跑筝,默認 48 小時
fileReservedTime=120
#commitLog每個文件的大小默認1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每個文件默認存30W條死讹,根據(jù)業(yè)務(wù)情況調(diào)整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#檢測物理文件磁盤空間
diskMaxUsedSpaceRatio=88
#存儲路徑
storePathRootDir=/usr/local/rocketmq/store/master1-slave1
#commitLog 存儲路徑
storePathCommitLog=/usr/local/rocketmq/store/master1-slave1/commitlog
#消費隊列存儲路徑存儲路徑
storePathConsumeQueue=/usr/local/rocketmq/store/master1-slave1/consumequeue
#消息索引存儲路徑
storePathIndex=/usr/local/rocketmq/store/master1-slave1/index
#checkpoint 文件存儲路徑
storeCheckpoint=/usr/local/rocketmq/store/master1-slave1/checkpoint
#abort 文件存儲路徑
abortFile=/usr/local/rocketmq/store/master1-slave1/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 異步復(fù)制Master
#- SYNC_MASTER 同步雙寫Master
#- SLAVE
brokerRole=SLAVE
#刷盤方式
#- ASYNC_FLUSH 異步刷盤
#- SYNC_FLUSH 同步刷盤
flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#發(fā)消息線程池數(shù)量
#sendMessageThreadPoolNums=128
#拉消息線程池數(shù)量
#pullMessageThreadPoolNums=128

3.8.3 master2的配置

服務(wù)器:node2(192.168.1.20)

vim /usr/local/rocketmq/conf/2m-2s-sync/master2.properties

配置如下:

#所屬集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此處不同的配置文件填寫的不一樣
brokerName=broker-b
#0 表示 Master曲梗,>0 表示 Slave
brokerId=0
#nameServer地址赞警,分號分割
namesrvAddr=rocketmq-ns1:9876;rocketmq-ns2:9876;rocketmq-ns3:9876
#在發(fā)送消息時,自動創(chuàng)建服務(wù)器不存在的topic虏两,默認創(chuàng)建的隊列數(shù)
defaultTopicQueueNums=4
#是否允許 Broker 自動創(chuàng)建Topic愧旦,建議線下開啟,線上關(guān)閉
autoCreateTopicEnable=true
#是否允許 Broker 自動創(chuàng)建訂閱組定罢,建議線下開啟笤虫,線上關(guān)閉
autoCreateSubscriptionGroup=true
#Broker 對外服務(wù)的監(jiān)聽端口
listenPort=10911
#刪除文件時間點,默認凌晨 4點
deleteWhen=04
#文件保留時間祖凫,默認 48 小時
fileReservedTime=120
#commitLog每個文件的大小默認1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每個文件默認存30W條琼蚯,根據(jù)業(yè)務(wù)情況調(diào)整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#檢測物理文件磁盤空間
diskMaxUsedSpaceRatio=88
#存儲路徑(注意,如果在一臺機器上啟動多個broker蝙场,這個路徑要區(qū)分開)
storePathRootDir=/usr/local/rocketmq/store/master2
#commitLog 存儲路徑
storePathCommitLog=/usr/local/rocketmq/store/master2/commitlog
#消費隊列存儲路徑存儲路徑
storePathConsumeQueue=/usr/local/rocketmq/store/master2/consumequeue
#消息索引存儲路徑
storePathIndex=/usr/local/rocketmq/store/master2/index
#checkpoint 文件存儲路徑
storeCheckpoint=/usr/local/rocketmq/store/master2/checkpoint
#abort 文件存儲路徑
abortFile=/usr/local/rocketmq/store/master2/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 異步復(fù)制Master
#- SYNC_MASTER 同步雙寫Master
#- SLAVE
brokerRole=SYNC_MASTER
#刷盤方式
#- ASYNC_FLUSH 異步刷盤
#- SYNC_FLUSH 同步刷盤
flushDiskType=SYNC_FLUSH
#checkTransactionMessageEnable=false
#發(fā)消息線程池數(shù)量
#sendMessageThreadPoolNums=128
#拉消息線程池數(shù)量
#pullMessageThreadPoolNums=128

3.8.4 master2-slave1的配置

服務(wù)器:node3(192.168.1.21)

vim /usr/local/rocketmq/conf/2m-2s-sync/master2-slave1.properties

配置如下:

#所屬集群名字
brokerClusterName=rocketmq-cluster
#broker名字凌停,注意此處不同的配置文件填寫的不一樣
brokerName=broker-b
#0 表示 Master,>0 表示 Slave
brokerId=1
#nameServer地址售滤,分號分割
namesrvAddr=rocketmq-ns1:9876;rocketmq-ns2:9876;rocketmq-ns3:9876
#在發(fā)送消息時罚拟,自動創(chuàng)建服務(wù)器不存在的topic,默認創(chuàng)建的隊列數(shù)
defaultTopicQueueNums=4
#是否允許 Broker 自動創(chuàng)建Topic完箩,建議線下開啟赐俗,線上關(guān)閉
autoCreateTopicEnable=true
#是否允許 Broker 自動創(chuàng)建訂閱組,建議線下開啟弊知,線上關(guān)閉
autoCreateSubscriptionGroup=true
#Broker 對外服務(wù)的監(jiān)聽端口
listenPort=10911
#刪除文件時間點阻逮,默認凌晨 4點
deleteWhen=04
#文件保留時間,默認 48 小時
fileReservedTime=120
#commitLog每個文件的大小默認1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每個文件默認存30W條秩彤,根據(jù)業(yè)務(wù)情況調(diào)整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#檢測物理文件磁盤空間
diskMaxUsedSpaceRatio=88
#存儲路徑
storePathRootDir=/usr/local/rocketmq/store/master2-slave1
#commitLog 存儲路徑
storePathCommitLog=/usr/local/rocketmq/store/master2-slave1/commitlog
#消費隊列存儲路徑存儲路徑
storePathConsumeQueue=/usr/local/rocketmq/store/master2-slave1/consumequeue
#消息索引存儲路徑
storePathIndex=/usr/local/rocketmq/store/master2-slave1/index
#checkpoint 文件存儲路徑
storeCheckpoint=/usr/local/rocketmq/store/master2-slave1/checkpoint
#abort 文件存儲路徑
abortFile=/usr/local/rocketmq/store/master2-slave1/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 異步復(fù)制Master
#- SYNC_MASTER 同步雙寫Master
#- SLAVE
brokerRole=SLAVE
#刷盤方式
#- ASYNC_FLUSH 異步刷盤
#- SYNC_FLUSH 同步刷盤
flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#發(fā)消息線程池數(shù)量
#sendMessageThreadPoolNums=128
#拉消息線程池數(shù)量
#pullMessageThreadPoolNums=128

3.9 修改啟動腳本

根據(jù)實際情況叔扼,修改/bin/runbroker.sh/bin/runserver.sh腳本的JVM參數(shù),參考配置如下:

JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

3.10 啟動服務(wù)

3.10.1 啟動NameServer集群

分別在三臺機器上啟動NameServer服務(wù):

nohup sh bin/mqnamesrv &

3.10.2 啟動Broker集群

  • node1上啟動master1:
nohup sh bin/mqbroker -c /usr/local/rocketmq/conf/2m-2s-sync/master1.properties &
  • node2上啟動master1-slave1和master2
nohup sh mqbroker -c /usr/local/rocketmq/conf/2m-2s-sync/master1-slave1.properties &

nohup sh mqbroker -c /usr/local/rocketmq/conf/2m-2s-sync/master2.properties &
  • node3上啟動master2-slave1
nohup sh mqbroker -c /usr/local/rocketmq/conf/2m-2s-sync/master2-slave1.properties &

3.11 查看進程狀態(tài)

啟動后通過jps命令查看進程狀態(tài)漫雷,至此一個雙主雙從瓜富,同步雙寫的集群搭建完成。

4. 集群監(jiān)控平臺搭建

4.1 概述

RocketMQ有一個對其擴展的開源項目rocketmq-externals降盹,這個項目中有一個子模塊叫rocketmq-console与柑,這個便是管理控制臺項目了,先將rocketmq-externals拉到本地,因為我們需要自己對rocketmq-console進行編譯打包運行价捧。

4.2 下載并編譯打包

下載地址:https://github.com/apache/rocketmq-externals

注意:打包前在rocketmq-console中配置namesrv集群地址:

rocketmq.config.namesrvAddr=rocketmq-ns1:9876;rocketmq-ns2:9876;rocketmq-ns3:9876

編譯打包:

git clone https://github.com/apache/rocketmq-externals
cd rocketmq-console
mvn clean package -Dmaven.test.skip=true

node3這臺服務(wù)器上啟動rocketmq-console

java -jar rocketmq-console-ng-1.0.1.jar

啟動成功后丑念,我們就可以通過瀏覽器訪問http://192.168.1.21:8080進入控制臺界面了,如下圖:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末结蟋,一起剝皮案震驚了整個濱河市脯倚,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌椎眯,老刑警劉巖挠将,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異编整,居然都是意外死亡,警方通過查閱死者的電腦和手機乳丰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門掌测,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人产园,你說我怎么就攤上這事汞斧。” “怎么了什燕?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵粘勒,是天一觀的道長。 經(jīng)常有香客問我屎即,道長庙睡,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任技俐,我火速辦了婚禮乘陪,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘雕擂。我一直安慰自己啡邑,他們只是感情好胖翰,可當我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布盔腔。 她就那樣靜靜地躺著,像睡著了一般戈盈。 火紅的嫁衣襯著肌膚如雪仇穗。 梳的紋絲不亂的頭發(fā)上流部,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天,我揣著相機與錄音仪缸,去河邊找鬼贵涵。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的宾茂。 我是一名探鬼主播瓷马,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼跨晴!你這毒婦竟也來了欧聘?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤端盆,失蹤者是張志新(化名)和其女友劉穎怀骤,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體焕妙,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡蒋伦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了焚鹊。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片痕届。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖末患,靈堂內(nèi)的尸體忽然破棺而出研叫,到底是詐尸還是另有隱情,我是刑警寧澤璧针,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布嚷炉,位于F島的核電站,受9級特大地震影響探橱,放射性物質(zhì)發(fā)生泄漏申屹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一走搁、第九天 我趴在偏房一處隱蔽的房頂上張望独柑。 院中可真熱鬧,春花似錦私植、人聲如沸忌栅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽索绪。三九已至,卻和暖如春贫悄,著一層夾襖步出監(jiān)牢的瞬間瑞驱,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工窄坦, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留唤反,地道東北人凳寺。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像彤侍,于是被迫代替她去往敵國和親肠缨。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,927評論 2 355