Docker Swarm集群搭建

Swarm是Docker公司自研發(fā)的容器集群管理系統(tǒng)湾笛,Swarm在早期是作為一個獨立服務(wù)存在蝶俱,在Docker Engine v1.12中集成了Swarm的集群管理
和編排功能÷肱ⅲ可以通過初始化Swarm或加入現(xiàn)有Swarm來啟用Docker引擎的Swarm模式逛薇。
Docker Engine CLI和API包括了管理Swarm節(jié)點命令,比如添加外里、刪除節(jié)點邑飒,以及在Swarm中部署和編排服務(wù)。
也增加了服務(wù)棧(Stack)级乐、服務(wù)(Service)疙咸、任務(wù)(Task)概念

20180816211329808.png

功能特點:

a.與Docker Engine集成的集群管理:

使用Docker Engine CLI創(chuàng)建一組Docker引擎,您可以在其中部署應(yīng)用程序服務(wù)风科。您不需要其他編排軟件來創(chuàng)建或管理群集撒轮。

b.節(jié)點分散式設(shè)計:

Docker Engine不是在部署時處理節(jié)點角色之間的差異,而是在運行時處理角色變化贼穆。您可以使用Docker Engine部署兩種類型的節(jié)點题山,管理節(jié)點和工作節(jié)點。這意味著您可以從單個服務(wù)器構(gòu)建整個群集故痊。

c.聲明性服務(wù)模型:

Docker Engine使用聲明性方法來定義應(yīng)用程序堆棧中各種服務(wù)的所需狀態(tài)顶瞳。例如,您可以描述由具有消息隊列服務(wù)和數(shù)據(jù)庫后端的Web前端服務(wù)組成的應(yīng)用程序愕秫。

d.可擴容與縮放容器:

對于每個服務(wù)慨菱,您可以聲明要運行的任務(wù)數(shù)。當您向上或向下縮放時戴甩,swarm管理器通過添加或刪除任務(wù)來自動適應(yīng)符喝,以保持所需的任務(wù)數(shù)量來保證集群的可靠狀態(tài)。

e.容器容錯狀態(tài)協(xié)調(diào):

群集管理器節(jié)點不斷監(jiān)視群集狀態(tài)甜孤,并協(xié)調(diào)您表示的期望狀態(tài)的實際狀態(tài)之間的任何差異协饲。例如,如果設(shè)置一個服務(wù)以運行容器的10個副本缴川,并且托管其中兩個副本的工作程序計算機崩潰茉稠,則管理器將創(chuàng)建兩個新副本以替換崩潰的副本。 swarm管理器將新副本分配給正在運行和可用的worker節(jié)點上把夸。

f.多主機網(wǎng)絡(luò):

您可以為服務(wù)指定覆蓋網(wǎng)絡(luò)而线。當swarm管理器初始化或更新應(yīng)用程序時,它會自動為覆蓋網(wǎng)絡(luò)上的容器分配地址。

g.服務(wù)發(fā)現(xiàn):

Swarm管理器節(jié)點為swarm中的每個服務(wù)分配唯一的DNS名稱吞获,并負載平衡運行的容器况凉。您可以通過嵌入在swarm中的DNS服務(wù)器查詢在群中運行的每個容器谚鄙。

h.負載平衡:

您可以將服務(wù)的端口公開給外部負載平衡器各拷。在內(nèi)部,swarm允許您指定如何在節(jié)點之間分發(fā)服務(wù)容器闷营。

m.缺省安全:

群中的每個節(jié)點強制執(zhí)行TLS相互驗證和加密烤黍,以保護其自身與所有其他節(jié)點之間的通信。您可以選擇使用自簽名根證書或來自自定義根CA的證書傻盟。

n.滾動更新:

在已經(jīng)運行期間速蕊,您可以增量地應(yīng)用服務(wù)更新到節(jié)點。 swarm管理器允許您控制將服務(wù)部署到不同節(jié)點集之間的延遲娘赴。如果出現(xiàn)任何問題规哲,您可以將任務(wù)回滾到服務(wù)的先前版本。

我的三臺測試機

IP 角色
172.16.10.85 manager
172.16.10.86 worker
172.16.10.87 worker

創(chuàng)建集群

在創(chuàng)建集群前诽表,如果開啟了防火墻唉锌,請確認三臺主機的防火墻能讓swarm需求的端口開放,需要打開主機之間的端口竿奏,以下端口必須可用袄简。在某些系統(tǒng)上,這些端口默認為打開泛啸。

  • 2377:TCP端口2377用于集群管理通信
  • 7946:TCP和UDP端口7946用于節(jié)點之間的通信
  • 4789:TCP和UDP端口4789用于覆蓋網(wǎng)絡(luò)流量

可以直接禁用系統(tǒng)防火墻來讓這些端口通信不受限制绿语,一般測試環(huán)境我們都會禁用防火墻

systemctl stop firewalld(立即生效)
systemctl disable firewalld(重啟生效)

docker環(huán)境自行安裝

常用命令
在Docker Swarm中經(jīng)常使用的主要有docker swarm、docker node候址、docker service吕粹、docker stack。
docker swarm
管理swarm岗仑,添加節(jié)點

Commands:
  init        Initialize a swarm   
  join        Join a swarm as a node and/or manager
  join-token  Manage join tokens
  leave       Leave the swarm
  unlock      Unlock swarm
  unlock-key  Manage the unlock key
  update      Update the swarm

docker node
用于管理節(jié)點

Commands:
  demote      Demote one or more nodes from manager in the swarm
  inspect     Display detailed information on one or more nodes
  ls          List nodes in the swarm
  promote     Promote one or more nodes to manager in the swarm
  ps          List tasks running on one or more nodes, defaults to current node
  rm          Remove one or more nodes from the swarm
  update      Update a node

docker service
管理service

Commands:
  create      Create a new service
  inspect     Display detailed information on one or more services
  logs        Fetch the logs of a service or task
  ls          List services
  ps          List the tasks of one or more services
  rm          Remove one or more services
  scale       Scale one or multiple replicated services
  update      Update a service

docker stack
與docker-compose結(jié)合的命令昂芜,可以方便地在集群中部署應(yīng)用。

Commands:
  deploy      Deploy a new stack or update an existing stack
  ls          List stacks
  ps          List the tasks in the stack
  rm          Remove one or more stacks
  services    List the services in the stack

初始化swarm:

docker swarm init --advertise-addr 172.16.10.85(本機IP)

在其它兩臺worker主機上執(zhí)行加入swarm:

[root@swarm-m ~]# docker swarm init --advertise-addr 172.16.10.85
Swarm initialized: current node (mclobj2doj65sek345mjkklfo) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-42w2dmkv2u18k9d6vi65rhqggjcqcc31iijnecd4bbi43bmom2-b3o89g28thkcken0v3qxtczuj 172.16.10.85:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

如果后續(xù)我們有新的主機被當做manager赔蒲、worker節(jié)點想要加入到集群中來泌神,但要不記得當時創(chuàng)建集群時的token,在manager主機上執(zhí)行以下命令:

  docker swarm join-token manager
  docker swarm join-token worker

查看swarm的節(jié)點

[root@swarm-m ~]# docker node ls
ID                            HOSTNAME                     STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
mclobj2doj65sek345mjkklfo *   swarm-m.nahong.com.cn        Ready               Active              Leader              18.06.1-ce
oyrkdwj3da9r275jxsj0lyqxe     swarm-node01.nahong.cm.cn    Ready               Active                                  18.06.1-ce
f295ymtj2t3vjojdbuwclykva     swarm-node02.nahong.com.cn   Ready               Active                                  18.06.1-ce

AVAILABILITY列的說明:

  • Active 意味著調(diào)度程序可以將任務(wù)分配給節(jié)點舞虱。
  • Pause 意味著調(diào)度程序不會將新任務(wù)分配給節(jié)點欢际,但現(xiàn)有任務(wù)仍在運行。
  • Drain 意味著調(diào)度程序不會向節(jié)點分配新任務(wù)矾兜。調(diào)度程序關(guān)閉所有現(xiàn)有任務(wù)并在可用節(jié)點上調(diào)度它們损趋。

MANAGER STATUS列的說明

顯示節(jié)點是屬于manager或者worker

  • 沒有值 表示不參與群管理的工作節(jié)點。
  • Leader 意味著該節(jié)點是使得群的所有群管理和編排決策的主要管理器節(jié)點椅寺。
  • Reachable 意味著節(jié)點是管理者節(jié)點正在參與Raft共識浑槽。如果領(lǐng)導(dǎo)節(jié)點不可用蒋失,則該節(jié)點有資格被選為新領(lǐng)導(dǎo)者。
  • Unavailable 意味著節(jié)點是不能與其他管理器通信的管理器桐玻。如果管理器節(jié)點不可用篙挽,您應(yīng)該將新的管理器節(jié)點加入群集,或者將工作器節(jié)點升級為管理器镊靴。

升級或降級節(jié)點
您可以將工作程序節(jié)點提升為manager角色铣卡。這在管理器節(jié)點不可用或者您希望使管理器脫機以進行維護時很有用。 類似地偏竟,您可以將管理器節(jié)點降級為worker角色煮落。
無論您升級或降級節(jié)點,您應(yīng)該始終在群中維護奇數(shù)個管理器節(jié)點踊谋。
要升級一個節(jié)點或一組節(jié)點蝉仇,請從管理器節(jié)點運行docker node promote:

[root@swarm-m ~]# docker node promote swarm-node01.nahong.cm.cn
Node swarm-node01.nahong.cm.cn promoted to a manager in the swarm.
[root@swarm-m ~]# docker node ls
ID                            HOSTNAME                     STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
mclobj2doj65sek345mjkklfo *   swarm-m.nahong.com.cn        Ready               Active              Leader              18.06.1-ce
oyrkdwj3da9r275jxsj0lyqxe     swarm-node01.nahong.cm.cn    Ready               Active              Reachable           18.06.1-ce
f295ymtj2t3vjojdbuwclykva     swarm-node02.nahong.com.cn   Ready               Active                                  18.06.1-ce

要降級一個節(jié)點或一組節(jié)點,請從管理器節(jié)點運行docker node demote:

[root@swarm-m ~]# docker node demote swarm-node01.nahong.cm.cn 
Manager swarm-node01.nahong.cm.cn demoted in the swarm.
[root@swarm-m ~]# docker node ls
ID                            HOSTNAME                     STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
mclobj2doj65sek345mjkklfo *   swarm-m.nahong.com.cn        Ready               Active              Leader              18.06.1-ce
oyrkdwj3da9r275jxsj0lyqxe     swarm-node01.nahong.cm.cn    Ready               Active                                  18.06.1-ce
f295ymtj2t3vjojdbuwclykva     swarm-node02.nahong.com.cn   Ready               Active                                  18.06.1-ce

創(chuàng)建自定義的overlay網(wǎng)絡(luò):

docker network create --driver overlay --subnet 10.10.10.0/16 my-overlay-network

查詢swarm網(wǎng)絡(luò) docker network ls

[root@docker01 ~]# docker network ls
NETWORK ID          NAME                 DRIVER              SCOPE
24de50a56f99        bridge               bridge              local
a4e5dcbfd6b8        docker_gwbridge      bridge              local
a261cf27e5bb        host                 host                local
l5abdspoesd9        ingress              overlay             swarm
lp2f4kze0osc        my-overlay-network   overlay             swarm
d625b46d604a        none                 null                local

創(chuàng)建一個nginx service
先摘取docker鏡像

docker pull linuxserver/nginx

執(zhí)行命令創(chuàng)建service:

docker service create --name webapp-nginx --replicas 3 --network my-overlay-network --publish 8089:80 linuxserver/nginx

docker service create中的參數(shù):

  • --name 服務(wù)名
  • --replicas 是創(chuàng)建的副本的數(shù)量
  • --network 是使用的網(wǎng)絡(luò)
  • --publish 是服務(wù)公開的端口 <Publish-Port>:<Target-Port>

查看webapp-nginx服務(wù)任務(wù)分配到的節(jié)點 docker service ps webapp-nginx

[root@swarm-m ~]# docker service ps webapp-nginx 
ID                  NAME                IMAGE                      NODE                         DESIRED STATE       CURRENT STATE                ERROR               PORTS
sv6y9jedbetw        webapp-nginx.1      linuxserver/nginx:latest   swarm-node02.nahong.com.cn   Running             Running about a minute ago                       
k26fewhj9lzq        webapp-nginx.2      linuxserver/nginx:latest   swarm-m.nahong.com.cn        Running             Running about a minute ago                       
jnr2t0msnumy        webapp-nginx.3      linuxserver/nginx:latest   swarm-node01.nahong.cm.cn    Running             Running 52 seconds ago           

外部訪問公開端口8089

查看manager主機上的docker容器

[root@swarm-m ~]# docker ps
CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS              PORTS               NAMES
d412b3ce543e        linuxserver/nginx:latest   "/init"             4 minutes ago       Up 4 minutes        80/tcp, 443/tcp     webapp-nginx.2.k26fewhj9lzqpva03zv6mgtpm

查看manager節(jié)點容器網(wǎng)絡(luò)

[root@swarm-m ~]# docker exec d412b3ce543e ifconfig
eth0      Link encap:Ethernet  HWaddr 02:42:0A:FF:00:08  
          inet addr:10.255.0.8  Bcast:10.255.255.255  Mask:255.255.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1450  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

eth1      Link encap:Ethernet  HWaddr 02:42:0A:0A:0A:08  
          inet addr:10.10.10.8  Bcast:10.10.10.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1450  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

eth2      Link encap:Ethernet  HWaddr 02:42:AC:12:00:03  
          inet addr:172.18.0.3  Bcast:172.18.255.255  Mask:255.255.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:8 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:648 (648.0 B)  TX bytes:0 (0.0 B)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

eth0轿衔、eth1、eth2網(wǎng)卡分別:

  • eth0:10.255.0.8 屬于docker的ingress網(wǎng)絡(luò)
  • eth1:10.10.10.8 屬于overlay的自定義網(wǎng)絡(luò)my-overlay-network
  • eth2:172.18.0.3 屬于docker_gwbridge網(wǎng)絡(luò)

ingress網(wǎng)絡(luò)會用于容器間的負載均衡嫌褪,docker_gwbridge網(wǎng)絡(luò)用于容器連接外網(wǎng)呀枢。

到另外兩臺查看網(wǎng)絡(luò):

[root@swarm-node01 ~]# docker ps
CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS              PORTS               NAMES
34dd665161bd        linuxserver/nginx:latest   "/init"             About an hour ago   Up About an hour    80/tcp, 443/tcp     webapp-nginx.3.jnr2t0msnumyd6znib3smcdj7
[root@swarm-node01 ~]# docker exec 34dd665161bd ifconfig | grep -A 1 eth1
eth1      Link encap:Ethernet  HWaddr 02:42:0A:0A:0A:06  
          inet addr:10.10.10.6  Bcast:10.10.10.255  Mask:255.255.255.0
[root@swarm-node02 ~]# docker ps
CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS              PORTS               NAMES
ba325bc18b97        linuxserver/nginx:latest   "/init"             About an hour ago   Up About an hour    80/tcp, 443/tcp     webapp-nginx.1.sv6y9jedbetw3lbxebtneqhf6
[root@swarm-node02 ~]# docker exec ba325bc18b97 ifconfig | grep -A 1 eth1
eth1      Link encap:Ethernet  HWaddr 02:42:0A:0A:0A:07  
          inet addr:10.10.10.7  Bcast:10.10.10.255  Mask:255.255.255.0

三個容器自定義IP分別是:

  • 10.10.10.8 manager主機的nginx容器
  • 10.10.10.6 worker主機的nginx容器
  • 10.10.10.7 worker主機的nginx容器

在容器10.10.10.6上ping 10.10.10.8

[root@swarm-node02 ~]# docker exec ba325bc18b97 ping 10.10.10.8
PING 10.10.10.8 (10.10.10.8): 56 data bytes
64 bytes from 10.10.10.8: seq=0 ttl=64 time=0.965 ms
64 bytes from 10.10.10.8: seq=1 ttl=64 time=0.600 ms
64 bytes from 10.10.10.8: seq=2 ttl=64 time=0.710 ms
64 bytes from 10.10.10.8: seq=3 ttl=64 time=0.587 ms
64 bytes from 10.10.10.8: seq=4 ttl=64 time=0.706 ms
64 bytes from 10.10.10.8: seq=5 ttl=64 time=0.555 ms

Swarm還內(nèi)置了DNS服務(wù)。將service name作為service的DNS笼痛,就可以訪問到這個service了
創(chuàng)建另一個服務(wù):

[root@swarm-m ~]# docker service create --name webapp-test --replicas 1 --network my-overlay-network --publish 9089:80 linuxserver/nginx
a7557hfsyh60t2km2g839irvy
overall progress: 1 out of 1 tasks 
1/1: running   [==================================================>] 
verify: Service converged 
[root@swarm-m ~]# docker service ps webapp-test 
ID                  NAME                IMAGE                      NODE                    DESIRED STATE       CURRENT STATE            ERROR               PORTS
kdhw9ykrmxo3        webapp-test.1       linuxserver/nginx:latest   swarm-m.nahong.com.cn   Running             Running 26 seconds ago                       

查看現(xiàn)有的服務(wù) docker service ls

[root@swarm-m ~]# docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE                      PORTS
n9bg26g83dd9        webapp-nginx        replicated          3/3                 linuxserver/nginx:latest   *:8089->80/tcp
a7557hfsyh60        webapp-test         replicated          1/1                 linuxserver/nginx:latest   *:9089->80/tcp

在webapp-test容器ping 服務(wù)名webapp-nginx

[root@swarm-m ~]# docker ps
CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS              PORTS               NAMES
30ef88e05ed4        linuxserver/nginx:latest   "/init"             3 minutes ago       Up 3 minutes        80/tcp, 443/tcp     webapp-test.1.kdhw9ykrmxo36i7ldu4a43uaz
d412b3ce543e        linuxserver/nginx:latest   "/init"             About an hour ago   Up About an hour    80/tcp, 443/tcp     webapp-nginx.2.k26fewhj9lzqpva03zv6mgtpm
[root@swarm-m ~]# docker exec 30ef88e05ed4 ifconfig | grep -A 1 eth1
eth1      Link encap:Ethernet  HWaddr 02:42:0A:0A:0A:0A  
          inet addr:10.10.10.10  Bcast:10.10.10.255  Mask:255.255.255.0
[root@swarm-m ~]# docker exec 30ef88e05ed4 ping webapp-nginx
PING webapp-nginx (10.10.10.5): 56 data bytes
64 bytes from 10.10.10.5: seq=0 ttl=64 time=0.259 ms
64 bytes from 10.10.10.5: seq=1 ttl=64 time=0.149 ms
64 bytes from 10.10.10.5: seq=2 ttl=64 time=0.153 ms
64 bytes from 10.10.10.5: seq=3 ttl=64 time=0.137 ms
64 bytes from 10.10.10.5: seq=4 ttl=64 time=0.135 ms

可以看到它們使用了同一個自定義網(wǎng)絡(luò) 10.10.10.10裙秋,但是webapp-nginx解析的IP和之前的不一樣,這應(yīng)該是swarm內(nèi)部負載均衡的機制

負載均衡
負載均衡分為兩種:Swarm集群內(nèi)的service之間的相互訪問需要做負載均衡缨伊,稱為內(nèi)部負載均衡(Internal LB)摘刑;從Swarm集群外部訪問服務(wù)的公開端口,也需要做負載均衡刻坊,稱外部部負載均衡(Exteral LB or Ingress LB)

Internal LB
內(nèi)部負載均衡就是集群內(nèi)部通過DNS訪問service時枷恕,Swarm默認通過VIP(virtual IP)、iptables谭胚、IPVS轉(zhuǎn)發(fā)到某個容器


圖片來源網(wǎng)絡(luò)

Exteral LB(Ingress LB)
外部負載均衡和Ingress網(wǎng)絡(luò)有關(guān)徐块。Swarm網(wǎng)絡(luò)要提供對外訪問的服務(wù)就需要打開公開端口,并映射到宿主機灾而。Ingress LB就是外部通過公開端口訪問集群時做的負載均衡胡控。

圖片來源網(wǎng)絡(luò)

上圖是三個節(jié)點的Swarm集群,app服務(wù)公開了8000端口旁趟,并且有兩個副;雖然服務(wù)只有兩個副本昼激,分別在A、B兩臺主機上,但是訪問C主機的8000端口橙困,ingress網(wǎng)絡(luò)會通過IPVS將請求轉(zhuǎn)到A瞧掺、B之一的容器中處理,依然可以對外提供服務(wù)這就是 routing mesh 的作用凡傅。

reference
docker swarm mode的服務(wù)發(fā)現(xiàn)和LB詳解

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末辟狈,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子像捶,更是在濱河造成了極大的恐慌上陕,老刑警劉巖桩砰,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拓春,死亡現(xiàn)場離奇詭異,居然都是意外死亡亚隅,警方通過查閱死者的電腦和手機硼莽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來煮纵,“玉大人懂鸵,你說我怎么就攤上這事⌒惺瑁” “怎么了匆光?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長酿联。 經(jīng)常有香客問我终息,道長,這世上最難降的妖魔是什么贞让? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任周崭,我火速辦了婚禮,結(jié)果婚禮上喳张,老公的妹妹穿的比我還像新娘续镇。我一直安慰自己,他們只是感情好销部,可當我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布摸航。 她就那樣靜靜地躺著,像睡著了一般舅桩。 火紅的嫁衣襯著肌膚如雪酱虎。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天江咳,我揣著相機與錄音逢净,去河邊找鬼。 笑死,一個胖子當著我的面吹牛爹土,可吹牛的內(nèi)容都是我干的甥雕。 我是一名探鬼主播,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼胀茵,長吁一口氣:“原來是場噩夢啊……” “哼社露!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起琼娘,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤峭弟,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后脱拼,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瞒瘸,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年熄浓,在試婚紗的時候發(fā)現(xiàn)自己被綠了情臭。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡赌蔑,死狀恐怖俯在,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情娃惯,我是刑警寧澤跷乐,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站趾浅,受9級特大地震影響愕提,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜潮孽,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一揪荣、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧往史,春花似錦仗颈、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至订歪,卻和暖如春脖祈,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背刷晋。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工盖高, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留慎陵,地道東北人。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓喻奥,卻偏偏與公主長得像席纽,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子撞蚕,可洞房花燭夜當晚...
    茶點故事閱讀 44,781評論 2 354

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