redis之cluster集群部署

一、redis cluster簡(jiǎn)介

Redis在3.0版正式引入了集群這個(gè)特性姚建。

Redis集群是一個(gè)提供在多個(gè)Redis間節(jié)點(diǎn)間共享數(shù)據(jù)的程序集。

Redis集群是一個(gè)分布式(distributed)吱殉、容錯(cuò)(fault-tolerant)的Redis內(nèi)存K/V服務(wù)掸冤,集群可以使用的功能是普通單機(jī)Redis所能使用的功能的一個(gè)子集(subset),比如Redis集群并不支持處理多個(gè)keys的命令友雳,因?yàn)檫@需要在不同的節(jié)點(diǎn)間移動(dòng)數(shù)據(jù)稿湿,從而達(dá)不到像Redis那樣的性能,在高負(fù)載的情況下可能會(huì)導(dǎo)致不可預(yù)料的錯(cuò)誤沥阱。還有比如set里的并集(unions)和交集(intersections)操作缎罢,就沒有實(shí)現(xiàn)。通常來說考杉,那些處理命令的節(jié)點(diǎn)獲取不到鍵值的所有操作都不會(huì)被實(shí)現(xiàn)策精。在將來,用戶或許可以通過使用MIGRATE COPY命令崇棠,在集群上用計(jì)算節(jié)點(diǎn)(Computation Nodes) 來執(zhí)行多鍵值的只讀操作咽袜, 但Redis集群本身不會(huì)執(zhí)行復(fù)雜的多鍵值操作來把鍵值在節(jié)點(diǎn)間移來移去。

Redis集群不像單機(jī)版本的Redis那樣支持多個(gè)數(shù)據(jù)庫枕稀,集群只有數(shù)據(jù)庫0询刹,而且也不支持SELECT命令谜嫉。

Redis集群通過分區(qū)來提供一定程度的可用性,在實(shí)際環(huán)境中當(dāng)某個(gè)節(jié)點(diǎn)宕機(jī)或者不可達(dá)的情況下繼續(xù)處理命令凹联。

Redis集群的優(yōu)點(diǎn):

無中心架構(gòu)沐兰,分布式提供服務(wù)。

數(shù)據(jù)按照slot存儲(chǔ)分布在多個(gè)redis實(shí)例上蔽挠。

增加slave做standby數(shù)據(jù)副本住闯,用于failover,使集群快速恢復(fù)澳淑。

實(shí)現(xiàn)故障auto failover比原,節(jié)點(diǎn)之間通過gossip協(xié)議交換狀態(tài)信息;投票機(jī)制完成slave到master角色的提升杠巡。

支持在線增加或減少節(jié)點(diǎn)量窘。

降低硬件成本和運(yùn)維成本,提高系統(tǒng)的擴(kuò)展性和可用性氢拥。

Redis集群的缺點(diǎn):

client實(shí)現(xiàn)復(fù)雜蚌铜,驅(qū)動(dòng)要求實(shí)現(xiàn)smart client,緩存slots mapping信息并及時(shí)更新嫩海。

目前僅JedisCluster相對(duì)成熟厘线,異常處理部分還不完善,比如常見的“max redirect exception”出革。

客戶端的不成熟,影響應(yīng)用的穩(wěn)定性渡讼,提高開發(fā)難度骂束。

節(jié)點(diǎn)會(huì)因?yàn)槟承┰虬l(fā)生阻塞(阻塞時(shí)間大于clutser-node-timeout),被判斷下線成箫。這種failover是沒有必要展箱,sentinel也存在這種切換場(chǎng)景。


二蹬昌、環(huán)境說明:

1混驰、操作系統(tǒng):CentOS Linux release 7.3.1611

2、redis版本:redis-4.0.6

3皂贩、服務(wù)器共3臺(tái):

192.168.10.91

192.168.10.92

192.168.10.93


三栖榨、安裝redis(3臺(tái)服務(wù)器都需要安裝)

1、下載redis源碼包:

wget http://download.redis.io/releases/redis-4.0.6.tar.gz

2明刷、解壓源碼包:

tar zxvf redis-4.0.6.tar.gz

3婴栽、編譯安裝:

make

make PREFIX=/app/redis install


四、集群部署

1辈末、創(chuàng)建集群需要的目錄(三臺(tái)機(jī)器都要?jiǎng)?chuàng)建)

mkdir -p /data/redis/cluster-6379/{conf,data,log,pid}

mkdir -p /data/redis/cluster-6380/{conf,data,log,pid}

mkdir -p /data/redis/cluster-6381/{conf,data,log,pid}

2愚争、為每個(gè)實(shí)例創(chuàng)建配置文件(三臺(tái)機(jī)器都要配置)映皆,以端口6379為例,其他實(shí)例省略

cat?/data/redis/cluster-6379/conf/redis.conf

port 6379

bind 0.0.0.0

daemonize yes

protected-mode yes

cluster-enabled yes

cluster-config-file /data/redis/cluster-6379/nodes.conf

cluster-node-timeout 5000

appendonly yes

dir /data/redis/cluster-6379/data

3轰枝、啟動(dòng)各實(shí)例并查看

./redis-server /data/redis/cluster-6379/conf/redis.conf

./redis-server /data/redis/cluster-6380/conf/redis.conf

./redis-server /data/redis/cluster-6381/conf/redis.conf

現(xiàn)在我們已經(jīng)有了9個(gè)正在運(yùn)行中的Redis實(shí)例捅彻, 接下來我們需要使用這些實(shí)例來創(chuàng)建集群。通過使用Redis集群命令行工具redis-trib鞍陨,編寫節(jié)點(diǎn)配置文件的工作可以非常容易地完成:redis-trib位于Redis源碼的src文件夾中步淹,它是一個(gè)Ruby程序,這個(gè)程序通過向?qū)嵗l(fā)送特殊命令來完成創(chuàng)建新集群湾戳, 檢查集群贤旷, 或者對(duì)集群進(jìn)行重新分片(reshared)等工作。但是redis-trib是Ruby程序砾脑,所以需要解決Ruby依賴幼驶。

4、安裝集群依賴環(huán)境

4.1韧衣、安裝ruby2.4.1

curl -L get.rvm.io | bash -s stable

source /usr/local/rvm/scripts/rvm

rvm list known

rvm install 2.4.1

ruby --version

4.2盅藻、安裝gem redis

gem install redis

5、創(chuàng)建集群

./redis-trib.rb create --replicas 2 192.168.10.91:6379 192.168.10.91:6380 192.168.10.91:6381 192.168.10.92:6379 192.168.10.92:6380 192.168.10.92:6381 192.168.10.93:6379 192.168.10.93:6380 192.168.10.93:6381

>>> Creating cluster

>>> Performing hash slots allocation on 9 nodes...

Using 3 masters:

192.168.10.91:6379

192.168.10.92:6379

192.168.10.93:6379

Adding replica 192.168.10.92:6380 to 192.168.10.91:6379

Adding replica 192.168.10.93:6380 to 192.168.10.91:6379

Adding replica 192.168.10.91:6380 to 192.168.10.92:6379

Adding replica 192.168.10.91:6381 to 192.168.10.92:6379

Adding replica 192.168.10.92:6381 to 192.168.10.93:6379

Adding replica 192.168.10.93:6381 to 192.168.10.93:6379

M: f0ddd134da674ac6f7d2805c5b6a59c346df9c80 192.168.10.91:6379

? slots:0-5460 (5461 slots) master

S: cd1520b19c7374d82b9712c6f42b8ec3b599d04f 192.168.10.91:6380

? replicates fb843114f6e4d7988971422be3f370bfce2c1fb9

S: 8728bc5408f9b305fbd0354ba7eaf74e71f00128 192.168.10.91:6381

? replicates fb843114f6e4d7988971422be3f370bfce2c1fb9

M: fb843114f6e4d7988971422be3f370bfce2c1fb9 192.168.10.92:6379

? slots:5461-10922 (5462 slots) master

S: c899a39d04a287e0a65b649a88b1369eb1916b97 192.168.10.92:6380

? replicates f0ddd134da674ac6f7d2805c5b6a59c346df9c80

S: f7c4e797a02f75d9e4e0f26dae448cde3be864d7 192.168.10.92:6381

? replicates 724c6c355513dabd8f017817443a4631fbcf72fe

M: 724c6c355513dabd8f017817443a4631fbcf72fe 192.168.10.93:6379

? slots:10923-16383 (5461 slots) master

S: 8096d93d8b2b00810cf528554d6a17981547183a 192.168.10.93:6380

? replicates f0ddd134da674ac6f7d2805c5b6a59c346df9c80

S: 4236e756d7df651956895c608153233230e8bb9e 192.168.10.93:6381

? replicates 724c6c355513dabd8f017817443a4631fbcf72fe

Can I set the above configuration? (type 'yes' to accept): yes

>>> Nodes configuration updated

>>> Assign a different config epoch to each node

>>> Sending CLUSTER MEET messages to join the cluster

Waiting for the cluster to join.....

>>> Performing Cluster Check (using node 192.168.10.91:6379)

M: f0ddd134da674ac6f7d2805c5b6a59c346df9c80 192.168.10.91:6379

? slots:0-5460 (5461 slots) master

? 2 additional replica(s)

S: 8728bc5408f9b305fbd0354ba7eaf74e71f00128 192.168.10.91:6381

? slots: (0 slots) slave

? replicates fb843114f6e4d7988971422be3f370bfce2c1fb9

M: 724c6c355513dabd8f017817443a4631fbcf72fe 192.168.10.93:6379

? slots:10923-16383 (5461 slots) master

? 2 additional replica(s)

M: fb843114f6e4d7988971422be3f370bfce2c1fb9 192.168.10.92:6379

? slots:5461-10922 (5462 slots) master

? 2 additional replica(s)

S: c899a39d04a287e0a65b649a88b1369eb1916b97 192.168.10.92:6380

? slots: (0 slots) slave

? replicates f0ddd134da674ac6f7d2805c5b6a59c346df9c80

S: 4236e756d7df651956895c608153233230e8bb9e 192.168.10.93:6381

? slots: (0 slots) slave

? replicates 724c6c355513dabd8f017817443a4631fbcf72fe

S: 8096d93d8b2b00810cf528554d6a17981547183a 192.168.10.93:6380

? slots: (0 slots) slave

? replicates f0ddd134da674ac6f7d2805c5b6a59c346df9c80

S: cd1520b19c7374d82b9712c6f42b8ec3b599d04f 192.168.10.91:6380

? slots: (0 slots) slave

? replicates fb843114f6e4d7988971422be3f370bfce2c1fb9

S: f7c4e797a02f75d9e4e0f26dae448cde3be864d7 192.168.10.92:6381

? slots: (0 slots) slave

? replicates 724c6c355513dabd8f017817443a4631fbcf72fe

[OK] All nodes agree about slots configuration.

>>> Check for open slots...

>>> Check slots coverage...

[OK] All 16384 slots covered.

這個(gè)命令在這里用于創(chuàng)建一個(gè)新的集群(create)畅铭,選項(xiàng)–replicas 2表示我們希望為集群中的每個(gè)主節(jié)點(diǎn)創(chuàng)建2個(gè)從節(jié)點(diǎn)氏淑。之后跟著的其他參數(shù)則是這個(gè)集群實(shí)例的地址列表,3個(gè)master6個(gè)slave硕噩。redis-trib會(huì)打印出一份預(yù)想中的配置給你看假残,如果你覺得沒問題的話,就可以輸入yes 炉擅,redis-trib就會(huì)將這份配置應(yīng)用到集群當(dāng)中辉懒,讓各個(gè)節(jié)點(diǎn)開始互相通訊,最后可以得到如下信息:

6、集群狀態(tài)查看

/app/redis/bin/redis-cli -c -p 6379

6.1谍失、集群節(jié)點(diǎn)信息查看命令“cluster nodes”

127.0.0.1:6379> CLUSTER nodes

8728bc5408f9b305fbd0354ba7eaf74e71f00128 192.168.10.91:6381@16381 slave fb843114f6e4d7988971422be3f370bfce2c1fb9 0 1515492930073 4 connected

724c6c355513dabd8f017817443a4631fbcf72fe 192.168.10.93:6379@16379 master - 0 1515492930000 7 connected 10923-16383

fb843114f6e4d7988971422be3f370bfce2c1fb9 192.168.10.92:6379@16379 master - 0 1515492931075 4 connected 5461-10922

f0ddd134da674ac6f7d2805c5b6a59c346df9c80 192.168.10.91:6379@16379 myself,master - 0 1515492931000 1 connected 0-5460

c899a39d04a287e0a65b649a88b1369eb1916b97 192.168.10.92:6380@16380 slave f0ddd134da674ac6f7d2805c5b6a59c346df9c80 0 1515492932080 5 connected

4236e756d7df651956895c608153233230e8bb9e 192.168.10.93:6381@16381 slave 724c6c355513dabd8f017817443a4631fbcf72fe 0 1515492930074 9 connected

8096d93d8b2b00810cf528554d6a17981547183a 192.168.10.93:6380@16380 slave f0ddd134da674ac6f7d2805c5b6a59c346df9c80 0 1515492930074 8 connected

cd1520b19c7374d82b9712c6f42b8ec3b599d04f 192.168.10.91:6380@16380 slave fb843114f6e4d7988971422be3f370bfce2c1fb9 0 1515492931000 4 connected

f7c4e797a02f75d9e4e0f26dae448cde3be864d7 192.168.10.92:6381@16381 slave 724c6c355513dabd8f017817443a4631fbcf72fe 0 1515492931578 7 connected

第一個(gè)參數(shù):節(jié)點(diǎn)ID眶俩;

第二個(gè)參數(shù):IP和端口;

第三快鱼、四個(gè)參數(shù):節(jié)點(diǎn)狀態(tài)颠印,會(huì)有master, slave, myself, fail, …這幾種;如果是個(gè)從節(jié)點(diǎn), 這里是它的主節(jié)點(diǎn)的NODE ID抹竹;

第五线罕、六個(gè)參數(shù):集群最近一次向節(jié)點(diǎn)發(fā)送PING命令之后,過去了多長(zhǎng)時(shí)間還沒接到回復(fù)窃判;

第七闻坚、八個(gè)參數(shù):節(jié)點(diǎn)最近一次返回PONG回復(fù)的時(shí)間節(jié)點(diǎn)的配置紀(jì)元(configuration epoch),詳細(xì)信息請(qǐng)參考Redis集群規(guī)范兢孝;

第九窿凤、十個(gè)參數(shù):本節(jié)點(diǎn)的網(wǎng)絡(luò)連接情況仅偎,例如connected。

第十一個(gè)參數(shù):節(jié)點(diǎn)目前包含的槽雳殊,例如10.99.73.11:6551目前包含號(hào)碼為0至5460的哈希槽橘沥。

6.2、集群狀態(tài)信息查看命令“cluster info”

127.0.0.1:6379> CLUSTER info

cluster_state:ok

cluster_slots_assigned:16384

cluster_slots_ok:16384

cluster_slots_pfail:0

cluster_slots_fail:0

cluster_known_nodes:9

cluster_size:3

cluster_current_epoch:9

cluster_my_epoch:1

cluster_stats_messages_ping_sent:622

cluster_stats_messages_pong_sent:614

cluster_stats_messages_sent:1236

cluster_stats_messages_ping_received:606

cluster_stats_messages_pong_received:622

cluster_stats_messages_meet_received:8

cluster_stats_messages_received:1236


五夯秃、集群測(cè)試

Redis集群現(xiàn)階段的一個(gè)問題是客戶端實(shí)現(xiàn)很少座咆,以下是官網(wǎng)給出的目前Redis集群僅有的客戶端的實(shí)現(xiàn):

redis-rb-cluster,是作者編寫的Ruby實(shí)現(xiàn)仓洼,用于作為其他實(shí)現(xiàn)的參考介陶。該實(shí)現(xiàn)是對(duì)redis-rb的一個(gè)簡(jiǎn)單包裝,高效地實(shí)現(xiàn)了與集群進(jìn)行通訊所需的最少語義(semantic)色建。

redis-py-cluster哺呜,看上去是redis-rb-cluster的一個(gè)Python版本, 這個(gè)項(xiàng)目有一段時(shí)間沒有更新了(最后一次提交是在好幾個(gè)月之前)箕戳, 不過可以將這個(gè)項(xiàng)目用作學(xué)習(xí)集群的起點(diǎn)某残。

Jedis,Jedis最近添加了對(duì)集群的支持陵吸,使用最多的是java客戶端玻墅,詳細(xì)請(qǐng)查看項(xiàng)目README中Jedis Cluster部分。

StackExchange.Redis壮虫,提供對(duì)C#的支持(并且包括大部分 .NET 下面的語言澳厢,比如: VB, F#等等)。

thunk-redis囚似,提供對(duì)Node.js和io.js的支持赏酥。

測(cè)試Redis集群比較簡(jiǎn)單的辦法就是使用redis-rb-cluster或者redis-cli ,接下來我們將使用redis-cli為例來進(jìn)行演示:

我們輸入redis-cli -h 127.0.0.1 -p 6551 -c命令谆构,切忌要加入-c,否則我們進(jìn)入的不是集群環(huán)境框都。進(jìn)入客戶端以后搬素,我們輸入set a 100發(fā)現(xiàn)他會(huì)進(jìn)行跳轉(zhuǎn),這就是因?yàn)樗?jīng)過計(jì)算以后魏保,要存儲(chǔ)100的hash槽在7003實(shí)例上熬尺。這樣就表示我們的集群成功了!

#/app/redis/bin/redis-cli -c -p 6379

127.0.0.1:6379> set name WADE

OK

127.0.0.1:6379> set address shenzhen

-> Redirected to slot [3680] located at 192.168.10.91:6379

OK

192.168.10.91:6379> get name

-> Redirected to slot [5798] located at 192.168.10.92:6379

"WADE"

192.168.10.92:6379> get address

-> Redirected to slot [3680] located at 192.168.10.91:6379

"shenzhen"

redis-cli對(duì)集群的支持是非澄铰蓿基本的粱哼,所以它總是依靠 Redis 集群節(jié)點(diǎn)來將它轉(zhuǎn)向(redirect)至正確的節(jié)點(diǎn)。一個(gè)真正的(serious)集群客戶端應(yīng)該做得比這更好: 它應(yīng)該用緩存記錄起哈希槽與節(jié)點(diǎn)地址之間的映射(map)檩咱, 從而直接將命令發(fā)送到正確的節(jié)點(diǎn)上面揭措。這種映射只會(huì)在集群的配置出現(xiàn)某些修改時(shí)變化胯舷, 比如說, 在一次故障轉(zhuǎn)移(failover)之后绊含, 或者系統(tǒng)管理員通過添加節(jié)點(diǎn)或移除節(jié)點(diǎn)來修改了集群的布局(layout)之后桑嘶, 諸如此類。

另外關(guān)閉redis集群不能直接kill掉進(jìn)程躬充,或者關(guān)機(jī)逃顶,我們要通過命令:

# redis-cli -p -c 6379 shutdown

進(jìn)行關(guān)閉,這樣在關(guān)閉之前充甚,數(shù)據(jù)才能夠進(jìn)行保存以政。

一般應(yīng)用程序端在操作redis cluster的時(shí)候只需要把集群節(jié)點(diǎn)都添加進(jìn)配置文件即可,但是一般填寫5-6個(gè)節(jié)點(diǎn)即可伴找。在操作上盈蛮,不管是主節(jié)點(diǎn)操作還是從節(jié)點(diǎn)操作都是可以進(jìn)行一次操作的成功,因?yàn)榫退阍趶墓?jié)點(diǎn)進(jìn)行寫入疆瑰,他也會(huì)重定向到主節(jié)點(diǎn)上進(jìn)行操作的眉反。


六、集群常見操作命令

1穆役、集群狀態(tài)

CLUSTER INFO????#打印集群的信息寸五;

CLUSTER NODES????#列出集群當(dāng)前已知的所有節(jié)點(diǎn)(node),以及這些節(jié)點(diǎn)的相關(guān)信息耿币;

2梳杏、節(jié)點(diǎn)(nodes)

CLUSTER MEET? ? #將ip和port所指定的節(jié)點(diǎn)添加到集群當(dāng)中,讓它成為集群的一份子淹接;

CLUSTER FORGET? ? #從集群中移除指定的節(jié)點(diǎn)十性;

CLUSTER REPLICATE? ? #將當(dāng)前節(jié)點(diǎn)設(shè)置為指定的節(jié)點(diǎn)的從節(jié)點(diǎn);

CLUSTER SAVECONFIG????#將節(jié)點(diǎn)的配置文件保存到硬盤里面塑悼;

3劲适、槽(slot)

CLUSTER ADDSLOTS [slot ...]????#將一個(gè)或多個(gè)槽(slot)指派(assign)給當(dāng)前節(jié)點(diǎn);

CLUSTER DELSLOTS [slot ...]????#移除一個(gè)或多個(gè)槽對(duì)當(dāng)前節(jié)點(diǎn)的指派厢蒜;

CLUSTER FLUSHSLOTS????#移除指派給當(dāng)前節(jié)點(diǎn)的所有槽霞势,讓當(dāng)前節(jié)點(diǎn)變成一個(gè)沒有指派任何槽的節(jié)點(diǎn);

CLUSTER SETSLOT NODE? ? #將槽指派給指定的節(jié)點(diǎn)斑鸦,如果槽已經(jīng)指派給另一個(gè)節(jié)點(diǎn)愕贡,那么先讓另一個(gè)節(jié)點(diǎn)刪除該槽>,然后再進(jìn)行指派巷屿;

CLUSTER SETSLOT MIGRATING???? #將本節(jié)點(diǎn)的槽遷移到指定的節(jié)點(diǎn)中固以;

CLUSTER SETSLOT IMPORTING???? #從指定的節(jié)點(diǎn)中導(dǎo)入槽到本節(jié)點(diǎn)中;??

CLUSTER SETSLOT STABLE????#取消對(duì)槽的導(dǎo)入(import)或者遷移(migrate)嘱巾;

4憨琳、鍵(key)

CLUSTER KEYSLOT? ? #計(jì)算鍵key應(yīng)該被放置在哪個(gè)槽上诫钓; ?

CLUSTER COUNTKEYSINSLOT? ? #返回槽slot目前包含的鍵值對(duì)數(shù)量;??

CLUSTER GETKEYSINSLOT? ? #返回count個(gè)slot槽中的鍵栽渴;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末尖坤,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子闲擦,更是在濱河造成了極大的恐慌慢味,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件墅冷,死亡現(xiàn)場(chǎng)離奇詭異纯路,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)寞忿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門驰唬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人腔彰,你說我怎么就攤上這事叫编。” “怎么了霹抛?”我有些...
    開封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵搓逾,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我杯拐,道長(zhǎng)霞篡,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任端逼,我火速辦了婚禮朗兵,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘顶滩。我一直安慰自己余掖,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開白布礁鲁。 她就那樣靜靜地躺著盐欺,像睡著了一般。 火紅的嫁衣襯著肌膚如雪救氯。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天歌憨,我揣著相機(jī)與錄音着憨,去河邊找鬼。 笑死务嫡,一個(gè)胖子當(dāng)著我的面吹牛甲抖,可吹牛的內(nèi)容都是我干的漆改。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼准谚,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼挫剑!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起柱衔,我...
    開封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤樊破,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后唆铐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體哲戚,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年艾岂,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了顺少。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡王浴,死狀恐怖脆炎,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情氓辣,我是刑警寧澤秒裕,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站筛婉,受9級(jí)特大地震影響簇爆,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜爽撒,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一入蛆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧硕勿,春花似錦哨毁、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至粱栖,卻和暖如春话浇,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背闹究。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工幔崖, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓赏寇,卻偏偏與公主長(zhǎng)得像吉嫩,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子嗅定,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

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