使用docker快速部署Ceph集群 arm64 or x86

  • Ceph是一個開源的分布式文件系統。使用Ceph可以輕松地將存儲容量擴展到PB以上并擁有不錯的性能。Ceph提供對象存儲、塊存儲和文件系統三種存儲方式。如果要直接在物理機或者虛擬機上部署Ceph集群,可以使用ceph-deploy工具,也可以使用ceph-ansible。如果不想花時間安裝ceph,可以通過ceph-docker來部署Ceph集群。使用Docker部署Ceph集群的一大好處就是不用為升級而煩惱,但是,如果使用yum或者apt-get的方式來升級ceph就需要解決很多依賴包的問題。

  • 一個Ceph存儲集群至少需要一個Ceph Monitor和兩個OSD守護進程。但是,如果要運行Ceph文件系統客戶端,那就還需要部署一個元數據服務器Metadata Server.

  • Ceph OSDs 負責存儲數據,處理數據的的復制、恢復、回填、再均衡,并通過檢查其他OSD守護進程的心跳來向Ceph Monitors提供一些監控信息。

  • Ceph Monitors 維護者展示集群狀態的各種圖表

  • MDSs 元數據服務器,為Ceph文件系統存儲元數據。Ceph塊存儲和Ceph對象存儲不需要MDS。

Ceph把客戶端的數據保存為存儲池內的對象,通過CRUSH算法,Ceph可以計算出哪個PG應該持有的對象,然后進一步計算出哪個OSD守護進程持有該PG。CRUSH算法使得Ceph存儲集群可以動態地伸縮、再均衡和修復。

線上環境最好不要將多個OSD守護進程部署在同一臺服務器上的同一個磁盤上,也不要將Monitor或者MDS與OSD守護進程部署在同一臺服務器上的同一個磁盤上。最佳的辦法是將操作系統、OSD數據和OSD日志分別放在不同的磁盤上。例如,一臺服務器操作系統運行在/dev/sda,OSD數據運行在/dev/sdb, OSD日志運行在/dev/sdc。

二 操作步驟

本文測試環境:

Ubuntu 18.04.1 LTS

Docker version 18.06.1-ce

ceph version 14.2.9 (581f22da52345dba46ee232b73b990f06029a2a0) nautilus (stable)

測試使用三臺服務器:

172.30.30.215
172.30.30.217
172.30.30.219

操作系統使用磁盤/dev/sda, Ceph OSD使用磁盤/dev/sdb

在3臺服務器上執行:

apt install docker
apt install docker.io
systemctl start docker 
x86: docker pull ceph/daemon:master-22b99b7-nautilus-centos-7-x86_64
arm: docker pull ceph/daemon:master-59450b6-nautilus-centos-7-aarch64

mkdir -p  /etc/ceph/  /var/lib/ceph/

關掉selinux

vi /etc/selinux/config
SELINUX=disabled
重啟

部署mon

在215上部署Monitor:

sudo docker run -d --net=host  --name=mon \
-v /etc/ceph:/etc/ceph \
-v /var/lib/ceph/:/var/lib/ceph \
-e MON_IP=172.30.30.215 \
-e CEPH_PUBLIC_NETWORK=172.30.30.0/24 \
ceph/daemon mon

驗證

[root@node70~]# docker exec mon ceph -s
  cluster:
    id:     f1182348-e4c8-411e-ab4d-96b3e3769c70
    health: HEALTH_OK

  services:
    mon: 1 daemons, quorum node70 (age 4m)
    mgr: no daemons active
    osd: 0 osds: 0 up, 0 in

  data:
    pools:   0 pools, 0 pgs
    objects: 0 objects, 0 B
    usage:   0 B used, 0 B / 0 B avail
    pgs:
  • Monitor不能通過NAT網絡通信,使用--net=host 暴露Docker主機網絡;
  • MON_IP 是Monitor的IP地址, 寫宿主機的ip;
  • MON_NAME 是Monitor的名稱,默認是主機名;
  • CEPH_PUBLIC_NETWORK 這個是Monitor所在網絡的CIDR ,這里也寫宿主機的;
  • CEPH_CLUSTER_NETWORK 這個OSD之間復制數據用到的網絡,默認和CEPH_PUBLIC_NETWORK相同;
  • ceph/daemon mon 這個ceph/daemon是images;
  • 這些參數都是在鏡像內部的variables_entrypoint.sh中定義的
  • 如果要增加同一個集群的Monitor的數量,需要將/etc/ceph/和/var/lib/ceph/bootstrap-* 這些目錄下的文件復制到其他主機上,記得不要保留文件的屬主權限。使用rsync -r 或者scp -r遠程復制就行
rsync -avz /etc/ceph/   root@172.30.30.217:/etc/ceph/
rsync -avz /etc/ceph/   root@172.30.30.219:/etc/ceph/


rsync -r /var/lib/ceph/bootstrap-*  root@172.30.30.217:/var/lib/ceph/
rsync -r /var/lib/ceph/bootstrap-*  root@172.30.30.219:/var/lib/ceph/

在217上部署Monitor:

sudo docker run -d --net=host  --name=mon \
-v /etc/ceph:/etc/ceph \
-v /var/lib/ceph/:/var/lib/ceph \
-e MON_IP=172.30.30.217 \
-e CEPH_PUBLIC_NETWORK=172.30.30.0/24 \
ceph/daemon mon

在219上部署Monitor:

sudo docker run -d --net=host  --name=mon \
-v /etc/ceph:/etc/ceph \
-v /var/lib/ceph/:/var/lib/ceph \
-e MON_IP=172.30.30.219 \
-e CEPH_PUBLIC_NETWORK=172.30.30.0/24 \
ceph/daemon mon

部署OSD

ceph 10.2 之前版本

按照ceph-docker git 視頻中的方法使用osd_ceph_disk作為ceph/daemon參數啟動OSD會失敗
所以為了解決這個問題,可以先手動磁盤進行格式化并掛載后,使用osd_directory作為ceph/daemon的參數來啟動OSD

mkdir -p /ceph-osd/
mkfs.xfs /dev/sdb -f
mount /dev/sdb /ceph-osd/

創建osd

sudo docker run -d --net=host --name=osd \
--privileged=true \
-v /etc/ceph:/etc/ceph \
-v /var/lib/ceph/:/var/lib/ceph \
-v /dev/:/dev/ \
-v /ceph-osd:/var/lib/ceph/osd \
ceph/daemon osd_directory

ceph12.2.x之后版本,這里用的是 ceph 13.2

sudo docker run -d --net=host --name=myosd1 \
--privileged=true \
-v /etc/ceph:/etc/ceph \
-v /var/lib/ceph/:/var/lib/ceph \
-v /dev/:/dev/ \
-e OSD_DEVICE=/dev/sdb \
ceph/daemon osd_ceph_disk
  • OSD_DEVICE=/dev/sdb 根據實際情況寫空磁盤的位置.
    都執行這些操作過后查看Docker進程

Ceph RGW節點安裝

說明
RGW為Rados Gateway的縮寫,ceph通過RGW為互聯網云服務提供商提供對象存儲服務。RGW在librados之上向應用提供訪問ceph集群的RestAPI, 支持Amazon S3和openstack swift兩種接口。對RGW最直接的理解就是一個協議轉換層,把從上層應用符合S3或Swift協議的請求轉換成rados的請求, 將數據保存在rados集群中。
命令

 docker run \
-d --net=host \
--name=rgw \
-v /etc/ceph:/etc/ceph \
-v /var/lib/ceph/:/var/lib/ceph  \
ceph/daemon rgw  
docker exec rgw ss -ntul

[root@node /data]# curl http://127.0.0.1:7480
<?xml version="1.0" encoding="UTF-8"?><ListAllMyBucketsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><Owner><ID>anonymous</ID><DisplayName></DisplayName></Owner><Buckets></Buckets></ListAllMyBucketsResult>

Ceph Mgr節點安裝

說明
ceph-mgr 作為 Ceph 集群的管理進程,未來會負責整個集群的管理操作和監控。現在的部分 Monitor 功能會遷移到 ceph-mgr 中,使得 Monitor 更專注于集群的數據面控制,降低集群對于 Monitor 的要求。
在12.2版本以后的版本,mgr已成為標配,不安裝成功的話,集群狀態會WARN。

命令
在所有mon安裝過的節點上運行以下命令:

docker run \
-d --net=host  \
--name=mgr \
-v /etc/ceph:/etc/ceph \
-v /var/lib/ceph/:/var/lib/ceph \
ceph/daemon mgr

檢查Mgr是否成功啟動

 docker ps -a|grep mgr

docker exec -it mon ceph -s
  cluster:
    id:     67dac7c2-a620-4e9a-bf06-d0b13a1f2b55
    health: HEALTH_OK

  services:
    mon: 1 daemons, quorum node
    mgr: node(active)
    osd: 1 osds: 1 up, 1 in

  data:
    pools:   0 pools, 0 pgs
    objects: 0  objects, 0 B
    usage:   2.0 GiB used, 17 GiB / 19 GiB avail
    pgs:

注意細節
一,如果這里安裝異常,或是7000端口未啟用,要啟用dashboard組件功能。

docker exec mon ceph mgr dump
 

docker exec mgr ceph mgr module enable dashboard
docker ps |grep ceph
e76f92c38da8        ceph/daemon         "/entrypoint.sh osd_…"   4 minutes ago       Up 4 minutes                            myosd1
77396ce279f3        ceph/daemon         "/entrypoint.sh mon"     About an hour ago   Up 15 minutes

mimic版 (nautilus版) dashboard 安裝




1、開啟dashboard 功能

docker exec mgr ceph mgr module enable dashboard

2、創建證書

docker exec mgr ceph dashboard create-self-signed-cert

3、創建 web 登錄用戶密碼

docker exec mgr ceph dashboard set-login-credentials {user-name} {password}

4 配置端口:mgr dashboard
ceph config set mgr mgr/dashboard/server_addr $IP
ceph config set mgr mgr/dashboard/server_port $PORT

5 關閉https
docker exec mgr ceph config set mgr mgr/dashboard/ssl false

6 重啟
docker restart mgr

7、查看服務訪問方式

docker exec mgr ceph mgr services

訪問:
curl  http://$ip:$prot

查看日志

docker logs -f mon

docker logs -f osd

檢查Ceph集群監控狀況

在3臺服務器上都查看下

 docker exec mon ceph -s
    cluster 96f3568a-4e57-4b5e-bf47-bea1b930dfe3
     health HEALTH_OK
     monmap e4: 3 mons at {ceph-mon215=172.30.30.215:6789/0,ceph-osd217=172.30.30.217:6789/0,ceph-osd219=172.30.30.219:6789/0}
            election epoch 12, quorum 0,1,2 ceph-mon215,ceph-osd217,ceph-osd219
        mgr no daemons active 
     osdmap e18: 3 osds: 3 up, 3 in
            flags sortbitwise,require_jewel_osds,require_kraken_osds
      pgmap v36: 64 pgs, 1 pools, 0 bytes data, 0 objects
            399 MB used, 61010 MB / 61410 MB avail
                  64 active+clean

可以看到整個Ceph集群為HEALTH_OK

部署完成

碰上問題想修改image
我們看下我們運行的docker

[root@lab8106 ceph]# docker ps 
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
874d78ccae55        ceph/daemon         "/entrypoint.sh osd_c"   14 hours ago        Up 14 hours                             myosd1
86ed05173432        ceph/daemon         "/entrypoint.sh mon"     15 hours ago        Up 15 hours                             mon

COMMAND這里有個/entrypoint.sh

如果存在ENTRYPOINT和CMD,那么CMD就是ENTRYPOINT的參數,如果沒有ENTRYPOINT,則CMD就是默認執行指令
也就是容器啟動的時候默認是會去執行/entrypoint.sh 這個了

我們不需要他執行這個,就需要加參數了

[root@lab8106 ceph]# docker run -i -t --entrypoint /bin/bash ceph/daemon

比如我上次做的一個操作,把ceph用戶綁定到root的id

root@9b269bf751f9:/# cat /etc/passwd|grep ceph
ceph:x:64045:64045:Ceph storage service:/var/lib/ceph:/bin/false
root@9b269bf751f9:/# sed -i 's/64045/0/g' /etc/passwd
root@9b269bf751f9:/# cat /etc/passwd|grep ceph
ceph:x:0:0:Ceph storage service:/var/lib/ceph:/bin/false

退出容器

root@9b269bf751f9:/# exit

查詢我們最后運行的容器,修改回entrypoint我們再把容器修改提交到基礎image

[root@lab8106 ceph]# docker ps -l
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
9b269bf751f9        ceph/daemon         "/bin/bash"         2 minutes ago       Exited (0) 15 seconds ago                       angry_hawking

[root@lab8106 ~]# docker run -i -t --entrypoint /entrypoint.sh ceph/daemon
[root@lab8106 ~]# docker ps -l
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
c2ea602c18ac        ceph/daemon         "/entrypoint.sh"    10 seconds ago      Exited (1) 7 seconds ago                       ecstatic_bartik

[root@lab8106 ceph]# docker commit c2ea602c18ac ceph/daemon

再次啟動容器,并且檢查內容,可以看到已經修改好了

[root@lab8106 ceph]# docker run -i -t --entrypoint /bin/bash ceph/daemon
root@65b538fdc61e:/# cat /etc/passwd|grep ceph
ceph:x:0:0:Ceph storage service:/var/lib/ceph:/bin/false

如果需要做其他的改動,這樣改下就行

三 Ceph常用操作

檢查集群監控狀況

 docker exec mon ceph health
HEALTH_OK

觀察集群內正發生的事件

 docker exec mon  ceph -w

檢查集群的使用情況

 docker exec mon  ceph df 
GLOBAL:
    SIZE       AVAIL      RAW USED     %RAW USED 
    61410M     61010M         399M          0.65 
POOLS:
    NAME     ID     USED     %USED     MAX AVAIL     OBJECTS 
    rbd      0         0         0        20336M           0

檢查OSD狀態

 docker exec mon  ceph  osd stat
     osdmap e18: 3 osds: 3 up, 3 in
            flags sortbitwise,require_jewel_osds,require_kraken_osds

或者

 docker exec mon  ceph  osd dump


  

 docker exec mon  ceph  osd tree
ID WEIGHT  TYPE NAME            UP/DOWN REWEIGHT PRIMARY-AFFINITY 
-1 0.05997 root default                                           
-2 0.01999     host ceph-mon215                                   
 0 0.01999         osd.0             up  1.00000          1.00000 
-3 0.01999     host ceph-osd217                                   
 1 0.01999         osd.1             up  1.00000          1.00000 
-4 0.01999     host ceph-osd219                                   
 2 0.01999         osd.2             up  1.00000          1.00000
 

查看PG

 docker exec mon  ceph  pg dump
docker exec mon  ceph  pg stat
v190: 64 pgs: 64 active+clean; 0 bytes data, 399 MB used, 61010 MB / 61410 MB avail

列出存儲池

 docker exec mon  ceph osd lspools
0 rbd,

創建存儲池

 docker exec mon  ceph osd pool create data 200
pool 'data' created
   data 是存儲池的名稱

   200 是設置的PG數量

設置PG值:

少于5個OSD可把pg_num設置為128

OSD數量在5到10,可以設置pg_num為512

OSD數量在10到50,可以設置pg_num為4096

OSD數量大于50,需要計算pg_num的值

設置存儲池最大對象數

 docker exec mon  ceph osd pool set-quota data max_objects 10000
set-quota max_objects = 10000 for pool data

刪除存儲池

 docker exec mon  ceph osd pool delete data data  --yes-i-really-really-mean-it
Error EPERM: pool deletion is disabled; you must first set the mon_allow_pool_delete config option to true before you can destroy a pool

如果確定要刪除存儲,需要將pg_name 輸入兩次,然后寫上--yes-i-really-really-mean-it

這里有個提示,修改當前的Monitor配置文件/etc/ceph/ceph.conf

添加參數: mon_allow_pool_delete = true

然后執行 docker restart mon

 docker exec mon  ceph osd pool delete data data  --yes-i-really-really-mean-it
pool 'data' removed

重命名存儲池

 docker exec mon  ceph osd pool rename data datanew
pool 'data' renamed to 'datanew'

查看存儲池統計信息

 docker exec mon  rados df 
POOL_NAME USED OBJECTS CLONES COPIES MISSING_ON_PRIMARY UNFOUND DEGRAED RD_OPS RD WR_OPS WR 
datanew      0       0      0      0                  0       0       0      0  0      0  0 
rbd          0       0      0      0                  0       0       0      0  0      0  0 

total_objects    0
total_used       420M
total_avail      60989M
total_space      61410M

拍下存儲池快照

 docker exec mon  ceph osd pool mksnap datanew data_snap2017
created pool datanew snap data_snap2017

刪除存儲池快照

 docker exec mon  ceph osd pool rmsnap datanew data_snap2017
removed pool datanew snap data_snap2017

設置對象副本數

 docker exec mon  ceph osd pool set datanew size  5

需要注意一下,一個處于降級模式的對象其副本數小于規定值的pool_size, 仍然可以接收I/O請求。為了保證I/O正常,可以設置min_size, 確保數據存儲池里任何對象的副本數小于min_size都不接收I/O

 docker exec mon  ceph osd pool set datanew min_size 2

獲取對象副本數

 docker exec mon  ceph osd dump|grep 'replicated size'
pool 0 'rbd' replicated size 3 min_size 2 crush_ruleset 0 object_hash rjenkins pg_num 64 pgp_num 64 last_change 1 flags hashpspool stripe_width 0
pool 4 'datanew' replicated size 5 min_size 2 crush_ruleset 0 object_hash rjenkins pg_num 200 pgp_num 200 last_change 36 flags hashpspool stripe_width 0

四 Ceph塊設備

ditaa-dc9f80d771b55f2daa5cbbfdb2dd0d3e6d

塊設備命令

創建塊設備映像

rbd create --size {megabytes} {pool-name}/{image-name}
    ```

  創建塊設備映射之前需要創建對應的存儲池

docker exec mon ceph osd pool create swimmingpool 128
pool 'swimmingpool' created


  在swimmingpool這個存儲池中創建一個名為bar,大小為1G的映像

  docker exec mon  rbd create --size 1024 swimmingpool/bar
  如果創建映像時不指定存儲池,它將使用默認的rbd存儲池

  

docker exec mon rbd create --size 1024 foo


 使用rbd ls列出塊設備映像

 

docker exec mon rbd ls swimmingpool
bar

docker exec mon rbd ls
foo


  使用rbd info檢索映像信息

docker exec mon rbd info foo

docker exec mon rbd info swimmingpool/bar




調整塊設備映像大小


rbd resize --size 2048 foo (to increase)
rbd resize --size 2048 foo --allow-shrink (to decrease)
```

刪除塊設備映像
 docker exec mon  rbd rm foo
 docker exec mon  rbd rm swimmingpool/bar

映射塊設備

sudo rbd map {pool-name}/{image-name} --id {user-name}
   

 rbd map foo --id admin
rbd: sysfs write failed
RBD image feature set mismatch. You can disable features unsupported by the kernel with "rbd feature disable".
In some cases useful info is found in syslog - try "dmesg | tail" or so.
rbd: map failed: (6) No such device or address
    ```

  在215上映射foo出現報錯,查看日志

  

[8961646.895022] rbd: image foo: image uses unsupported features: 0x3c
[8961670.609930] libceph: mon0 172.30.30.215:6789 session established
[8961670.610894] libceph: client34098 fsid 96f3568a-4e57-4b5e-bf47-bea1b930dfe3
[8961670.633265] rbd: image foo: image uses unsupported features: 0x3c


   出現這個報錯的原因是和Linux內核版本和rbd映像格式有關

   rbd支持兩種鏡像格式 --image-format

   format 1      已經棄用, 為一個新的鏡像使用原始的格式。這個格式可以被所有的librbd版本和內核rbd模塊所理解,但是不支持最新的特性

   format 2       rbd格式第二版,被librbd和3.1內核版本以上支持。這個格式支持克隆,在將來更容易擴展支持更多的特性



   --image-feature   可以指定rbd format2特性啟用或者禁用

   

     rbd  format2 支持的屬性有

     layering           BIT碼為1

     striping            BIT碼為2

     exclusive-lock   BIT碼為4

     object-map      BIT碼為8

      fast-diff           BIT碼為16

      deep-flatten    BIT碼為32



   查看當前ceph集群版本支持的rbd 的屬性

ceph --show-config|grep rbd|grep features
rbd_default_features = 61

   61=32+16+8+4+1 即默認支持layering,exclusive-lock,object-map,fast-diff,deep-flatten



   前面的報錯中顯示不支持的代號是0x3c, 這是十六進制,換算成10進制就是60。也就是不支持后面4種特性

   查看當前使用的鏡像屬性

   

rbd info foo
rbd image 'foo':
size 1024 MB in 256 objects
order 22 (4096 kB objects)
block_name_prefix: rbd_data.855f2ae8944a
format: 2
features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
flags:


    可以關閉后面4個特性

    

rbd feature disable rbd/foo exclusive-lock, object-map, fast-diff, deep-flatten
```
再掛載試試

 rbd map rbd/foo 
/dev/rbd0

掛載成功

再查看foo的特性


 rbd info foo
rbd image 'foo':
    size 1024 MB in 256 objects
    order 22 (4096 kB objects)
    block_name_prefix: rbd_data.855f2ae8944a
    format: 2
    features: layering
    flags:

發現只有一個laytering特性了。

這樣每次創建一個鏡像都這樣啟動和關閉特性比較麻煩,可以修改ceph.conf文件

  rbd_default_features = 3

不用重啟Monitor或者OSD

參考文檔:

http://blog.51cto.com/john88wang/1947672

https://github.com/ceph/ceph-docker

https://github.com/ceph/ceph-ansible

https://github.com/ceph/ceph-deploy

http://www.sebastien-han.fr/blog/2013/09/19/how-I-barely-got-my-first-ceph-mon-running-in-docker/

http://ceph.org.cn/2016/05/02/%E5%9C%A8docker%E9%87%8C%E8%BF%90%E8%A1%8Cceph%E9%9B%86%E7%BE%A4/

http://docs.ceph.org.cn/rados/operations/crush-map/?highlight=crush

http://www.dockerinfo.net/445.html

http://www.dockerinfo.net/4440.html

https://www.youtube.com/embed/FUSTjTBA8f8

http://docs.ceph.org.cn/rados/operations/placement-groups/

http://www.zphj1987.com/2016/06/07/rbd%E6%97%A0%E6%B3%95map-rbd-feature-disable/

https://www.ibm.com/support/knowledgecenter/en/SSNW54_1.1.2/com.ibm.kvm.v112.admin/cephbasictasks.htm:x

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

推薦閱讀更多精彩內容