RocketMQ集群搭建

3. RocketMQ集群搭建

3.1 各角色介紹

  • Producer:消息的發(fā)送者囚似;舉例:發(fā)信者
  • Consumer:消息接收者拜鹤;舉例:收信者
  • Broker:暫存和傳輸消息灾测;舉例:郵局
  • NameServer:管理Broker;舉例:各個郵局的管理機(jī)構(gòu)
  • Topic:區(qū)分消息的種類禁熏;一個發(fā)送者可以發(fā)送消息給一個或者多個Topic壤巷;一個消息的接收者可以訂閱一個或者多個Topic消息
  • Message Queue:相當(dāng)于是Topic的分區(qū);用于并行發(fā)送和接收消息


    image.png

3.2 集群搭建方式

3.2.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é)點(隨機(jī)選擇)建立長連接渗鬼,定期從NameServer取Topic路由信息,并向提供Topic服務(wù)的Master建立長連接荧琼,且定時向Master發(fā)送心跳譬胎。Producer完全無狀態(tài),可集群部署命锄。

  • Consumer與NameServer集群中的其中一個節(jié)點(隨機(jī)選擇)建立長連接堰乔,定期從NameServer取Topic路由信息,并向提供Topic服務(wù)的Master脐恩、Slave建立長連接镐侯,且定時向Master、Slave發(fā)送心跳驶冒。Consumer既可以從Master訂閱消息苟翻,也可以從Slave訂閱消息,訂閱規(guī)則由Broker配置決定骗污。

3.2.3 集群模式

1)單Master模式

這種方式風(fēng)險較大崇猫,一旦Broker重啟或者宕機(jī)時,會導(dǎo)致整個服務(wù)不可用需忿。不建議線上環(huán)境使用,可以用于本地測試诅炉。

2)多Master模式

一個集群無Slave,全是Master贴谎,例如2個Master或者3個Master汞扎,這種模式的優(yōu)缺點如下:

  • 優(yōu)點:配置簡單季稳,單個Master宕機(jī)或重啟維護(hù)對應(yīng)用無影響擅这,在磁盤配置為RAID10時,即使機(jī)器宕機(jī)不可恢復(fù)情況下景鼠,由于RAID10磁盤非持亵幔可靠,消息也不會丟(異步刷盤丟失少量消息铛漓,同步刷盤一條不丟)溯香,性能最高;
  • 缺點:單臺機(jī)器宕機(jī)期間浓恶,這臺機(jī)器上未被消費的消息在機(jī)器恢復(fù)之前不可訂閱玫坛,消息實時性會受到影響。

3)多Master多Slave模式(異步)

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

  • 優(yōu)點:即使磁盤損壞勉痴,消息丟失的非常少赫模,且消息實時性不會受影響,同時Master宕機(jī)后蒸矛,消費者仍然可以從Slave消費瀑罗,而且此過程對應(yīng)用透明,不需要人工干預(yù)雏掠,性能同多Master模式幾乎一樣斩祭;
  • 缺點:Master宕機(jī),磁盤損壞情況下會丟失少量消息磁玉。

4)多Master多Slave模式(同步)

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

  • 優(yōu)點:數(shù)據(jù)與服務(wù)都無單點故障时迫,Master宕機(jī)情況下颅停,消息無延遲,服務(wù)可用性與數(shù)據(jù)可用性都非常高掠拳;
  • 缺點:性能比異步復(fù)制模式略低(大約低10%左右)癞揉,發(fā)送單個消息的RT會略高,且目前版本在主節(jié)點宕機(jī)后溺欧,備機(jī)不能自動切換為主機(jī)喊熟。

3.3 雙主雙從集群搭建

3.3.1 總體架構(gòu)

消息高可用采用2m-2s(同步雙寫)方式

image.png

3.3.2 集群工作流程

  1. 啟動NameServer,NameServer起來后監(jiān)聽端口姐刁,等待Broker芥牌、Producer、Consumer連上來聂使,相當(dāng)于一個路由控制中心壁拉。
  2. Broker啟動,跟所有的NameServer保持長連接柏靶,定時發(fā)送心跳包弃理。心跳包中包含當(dāng)前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中獲取當(dāng)前發(fā)送的Topic存在哪些Broker上乎婿,輪詢從隊列列表中選擇一個隊列,然后與隊列所在的Broker建立長連接從而向Broker發(fā)消息街佑。
  5. Consumer跟Producer類似谢翎,跟其中一臺NameServer建立長連接,獲取當(dāng)前訂閱Topic存在哪些Broker上沐旨,然后直接跟Broker建立連接通道森逮,開始消費消息。

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

序號 IP 角色 架構(gòu)模式
1 192.168.1.114 nameserver磁携、brokerserver Master1褒侧、Slave2
2 192.168.1.111 nameserver、brokerserver Master2谊迄、Slave1

3.3.4 Host添加信息

vim /etc/hosts

配置如下:

# nameserver
192.168.1.114 rocketmq-nameserver1
192.168.1.111 rocketmq-nameserver2
# broker
192.168.1.114 rocketmq-master1
192.168.1.114 rocketmq-slave2
192.168.1.111 rocketmq-master2
192.168.1.111 rocketmq-slave1

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

systemctl restart network

3.3.5 防火墻配置

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

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

或者為了安全统诺,只開放特定的端口號歪脏,RocketMQ默認(rèn)使用3個端口:9876 、10911 粮呢、11011 婿失。如果防火墻沒有關(guān)閉的話,那么防火墻就必須開放這些端口:

  • nameserver 默認(rèn)使用 9876 端口
  • master 默認(rèn)使用 10911 端口
  • slave 默認(rèn)使用11011 端口

執(zhí)行以下命令:

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

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

vim /etc/profile

在profile文件的末尾加入如下命令

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

輸入:wq! 保存并退出啄寡, 并使得配置立刻生效:

source /etc/profile

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

mkdir /usr/local/rocketmq/store
mkdir /usr/local/rocketmq/store/commitlog
mkdir /usr/local/rocketmq/store/consumequeue
mkdir /usr/local/rocketmq/store/index

3.3.8 broker配置文件

1)master1

服務(wù)器:192.168.1.114

vi /usr/local/rocketmq/conf/2m-2s-sync/broker-a.properties

修改配置如下:

#所屬集群名字
brokerClusterName=rocketmq-cluster
#broker名字豪硅,注意此處不同的配置文件填寫的不一樣
brokerName=broker-a
#0 表示 Master,>0 表示 Slave
brokerId=0
#nameServer地址挺物,分號分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876
#在發(fā)送消息時懒浮,自動創(chuàng)建服務(wù)器不存在的topic,默認(rèn)創(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
#刪除文件時間點,默認(rèn)凌晨 4點
deleteWhen=04
#文件保留時間学少,默認(rèn) 48 小時
fileReservedTime=120
#commitLog每個文件的大小默認(rèn)1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每個文件默認(rèn)存30W條剪个,根據(jù)業(yè)務(wù)情況調(diào)整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#檢測物理文件磁盤空間
diskMaxUsedSpaceRatio=88
#存儲路徑
storePathRootDir=/usr/local/rocketmq/store
#commitLog 存儲路徑
storePathCommitLog=/usr/local/rocketmq/store/commitlog
#消費隊列存儲路徑存儲路徑
storePathConsumeQueue=/usr/local/rocketmq/store/consumequeue
#消息索引存儲路徑
storePathIndex=/usr/local/rocketmq/store/index
#checkpoint 文件存儲路徑
storeCheckpoint=/usr/local/rocketmq/store/checkpoint
#abort 文件存儲路徑
abortFile=/usr/local/rocketmq/store/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

2)slave2

服務(wù)器:192.168.1.114

vi /usr/local/rocketmq/conf/2m-2s-sync/broker-b-s.properties

修改配置如下:

#所屬集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此處不同的配置文件填寫的不一樣
brokerName=broker-b
#0 表示 Master版确,>0 表示 Slave
brokerId=1
#nameServer地址扣囊,分號分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876
#在發(fā)送消息時乎折,自動創(chuàng)建服務(wù)器不存在的topic,默認(rèn)創(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
#刪除文件時間點坟冲,默認(rèn)凌晨 4點
deleteWhen=04
#文件保留時間,默認(rèn) 48 小時
fileReservedTime=120
#commitLog每個文件的大小默認(rèn)1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每個文件默認(rèn)存30W條溃蔫,根據(jù)業(yè)務(wù)情況調(diào)整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#檢測物理文件磁盤空間
diskMaxUsedSpaceRatio=88
#存儲路徑
storePathRootDir=/usr/local/rocketmq/stores2
#commitLog 存儲路徑
storePathCommitLog=/usr/local/rocketmq/stores2/commitlog
#消費隊列存儲路徑存儲路徑
storePathConsumeQueue=/usr/local/rocketmq/stores2/consumequeue
#消息索引存儲路徑
storePathIndex=/usr/local/rocketmq/stores2/index
#checkpoint 文件存儲路徑
storeCheckpoint=/usr/local/rocketmq/stores2/checkpoint
#abort 文件存儲路徑
abortFile=/usr/local/rocketmq/stores2/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)master2

服務(wù)器:192.168.1.111

vi /usr/local/rocketmq/conf/2m-2s-sync/broker-b.properties

修改配置如下:

#所屬集群名字
brokerClusterName=rocketmq-cluster
#broker名字健提,注意此處不同的配置文件填寫的不一樣
brokerName=broker-b
#0 表示 Master,>0 表示 Slave
brokerId=0
#nameServer地址伟叛,分號分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876
#在發(fā)送消息時私痹,自動創(chuàng)建服務(wù)器不存在的topic,默認(rèn)創(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
#刪除文件時間點癞蚕,默認(rèn)凌晨 4點
deleteWhen=04
#文件保留時間,默認(rèn) 48 小時
fileReservedTime=120
#commitLog每個文件的大小默認(rèn)1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每個文件默認(rèn)存30W條辉哥,根據(jù)業(yè)務(wù)情況調(diào)整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#檢測物理文件磁盤空間
diskMaxUsedSpaceRatio=88
#存儲路徑
storePathRootDir=/usr/local/rocketmq/store
#commitLog 存儲路徑
storePathCommitLog=/usr/local/rocketmq/store/commitlog
#消費隊列存儲路徑存儲路徑
storePathConsumeQueue=/usr/local/rocketmq/store/consumequeue
#消息索引存儲路徑
storePathIndex=/usr/local/rocketmq/store/index
#checkpoint 文件存儲路徑
storeCheckpoint=/usr/local/rocketmq/store/checkpoint
#abort 文件存儲路徑
abortFile=/usr/local/rocketmq/store/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

4)slave1

服務(wù)器:192.168.1.111

vi /usr/local/rocketmq/conf/2m-2s-sync/broker-a-s.properties

修改配置如下:

#所屬集群名字
brokerClusterName=rocketmq-cluster
#broker名字桦山,注意此處不同的配置文件填寫的不一樣
brokerName=broker-a
#0 表示 Master,>0 表示 Slave
brokerId=1
#nameServer地址醋旦,分號分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876
#在發(fā)送消息時恒水,自動創(chuàng)建服務(wù)器不存在的topic,默認(rèn)創(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
#刪除文件時間點御雕,默認(rèn)凌晨 4點
deleteWhen=04
#文件保留時間,默認(rèn) 48 小時
fileReservedTime=120
#commitLog每個文件的大小默認(rèn)1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每個文件默認(rèn)存30W條滥搭,根據(jù)業(yè)務(wù)情況調(diào)整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#檢測物理文件磁盤空間
diskMaxUsedSpaceRatio=88
#存儲路徑
storePathRootDir=/usr/local/rocketmq/stores1
#commitLog 存儲路徑
storePathCommitLog=/usr/local/rocketmq/stores1/commitlog
#消費隊列存儲路徑存儲路徑
storePathConsumeQueue=/usr/local/rocketmq/stores1/consumequeue
#消息索引存儲路徑
storePathIndex=/usr/local/rocketmq/stores1/index
#checkpoint 文件存儲路徑
storeCheckpoint=/usr/local/rocketmq/stores1/checkpoint
#abort 文件存儲路徑
abortFile=/usr/local/rocketmq/stores1/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.3.9 修改啟動腳本文件

1)runbroker.sh

vi /usr/local/rocketmq/bin/runbroker.sh

需要根據(jù)內(nèi)存大小進(jìn)行適當(dāng)?shù)膶VM參數(shù)進(jìn)行調(diào)整:

#===================================================
# 開發(fā)環(huán)境配置 JVM Configuration
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m"

2)runserver.sh

vim /usr/local/rocketmq/bin/runserver.sh
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

3.3.10 服務(wù)啟動

1)啟動NameServe集群

分別在192.168.1.114和192.168.1.111啟動NameServer

cd /usr/local/rocketmq/bin
nohup sh mqnamesrv &

2)啟動Broker集群

  • 在192.168.25.114上啟動master1和slave2

master1:

cd /usr/local/rocketmq/bin
nohup sh mqbroker -c /usr/local/rocketmq/conf/2m-2s-sync/broker-a.properties &

slave2:

cd /usr/local/rocketmq/bin
nohup sh mqbroker -c /usr/local/rocketmq/conf/2m-2s-sync/broker-b-s.properties &
  • 在192.168.25.111上啟動master2和slave2

master2

cd /usr/local/rocketmq/bin
nohup sh mqbroker -c /usr/local/rocketmq/conf/2m-2s-sync/broker-b.properties &

slave1

cd /usr/local/rocketmq/bin
nohup sh mqbroker -c /usr/local/rocketmq/conf/2m-2s-sync/broker-a-s.properties &

3.3.11 查看進(jìn)程狀態(tài)

啟動后通過JPS查看啟動進(jìn)程

image.png

3.3.12 查看日志

# 查看nameServer日志
tail -500f ~/logs/rocketmqlogs/namesrv.log
# 查看broker日志
tail -500f ~/logs/rocketmqlogs/broker.log

3.4 mqadmin管理工具

3.4.1 使用方式

進(jìn)入RocketMQ安裝位置酸纲,在bin目錄下執(zhí)行./mqadmin {command} {args}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市瑟匆,隨后出現(xiàn)的幾起案子闽坡,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 223,002評論 6 519
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件疾嗅,死亡現(xiàn)場離奇詭異外厂,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)代承,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,357評論 3 400
  • 文/潘曉璐 我一進(jìn)店門汁蝶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人论悴,你說我怎么就攤上這事穿仪。” “怎么了意荤?”我有些...
    開封第一講書人閱讀 169,787評論 0 365
  • 文/不壞的土叔 我叫張陵啊片,是天一觀的道長。 經(jīng)常有香客問我玖像,道長紫谷,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,237評論 1 300
  • 正文 為了忘掉前任捐寥,我火速辦了婚禮笤昨,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘握恳。我一直安慰自己瞒窒,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 69,237評論 6 398
  • 文/花漫 我一把揭開白布乡洼。 她就那樣靜靜地躺著崇裁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪束昵。 梳的紋絲不亂的頭發(fā)上拔稳,一...
    開封第一講書人閱讀 52,821評論 1 314
  • 那天,我揣著相機(jī)與錄音锹雏,去河邊找鬼巴比。 笑死,一個胖子當(dāng)著我的面吹牛礁遵,可吹牛的內(nèi)容都是我干的轻绞。 我是一名探鬼主播,決...
    沈念sama閱讀 41,236評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼佣耐,長吁一口氣:“原來是場噩夢啊……” “哼政勃!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起晰赞,我...
    開封第一講書人閱讀 40,196評論 0 277
  • 序言:老撾萬榮一對情侶失蹤稼病,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后掖鱼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體然走,經(jīng)...
    沈念sama閱讀 46,716評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,794評論 3 343
  • 正文 我和宋清朗相戀三年戏挡,在試婚紗的時候發(fā)現(xiàn)自己被綠了芍瑞。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,928評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡褐墅,死狀恐怖拆檬,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情妥凳,我是刑警寧澤竟贯,帶...
    沈念sama閱讀 36,583評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站逝钥,受9級特大地震影響屑那,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜艘款,卻給世界環(huán)境...
    茶點故事閱讀 42,264評論 3 336
  • 文/蒙蒙 一持际、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧哗咆,春花似錦蜘欲、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,755評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至年碘,卻和暖如春殿衰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背盛泡。 一陣腳步聲響...
    開封第一講書人閱讀 33,869評論 1 274
  • 我被黑心中介騙來泰國打工闷祥, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人傲诵。 一個月前我還...
    沈念sama閱讀 49,378評論 3 379
  • 正文 我出身青樓凯砍,卻偏偏與公主長得像,于是被迫代替她去往敵國和親拴竹。 傳聞我的和親對象是個殘疾皇子悟衩,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,937評論 2 361

推薦閱讀更多精彩內(nèi)容