讀書筆記:Ansible自動(dòng)化運(yùn)維:技術(shù)與最佳實(shí)踐

觀其大綱

第一章 ansible架構(gòu)及其特點(diǎn)

架構(gòu)模式
特性
ansible與DevOps

第二章 ansible安裝與配置

第三章 ansible組件介紹

Ansible inventory
Ansible AD-Hoc命令
Ansible playbook
Ansible facts
Ansible role
Ansible Galaxy

第四章 playbook詳解

基本語法
變量與引用
循環(huán)
lookups
conditionals
Jinja2 filter
playbook內(nèi)置變量

第五章 ansible最佳實(shí)踐

優(yōu)化ansible速度
目錄結(jié)構(gòu)
定義多環(huán)境
灰度發(fā)布與檢測
統(tǒng)一管理
ansible-shell交互命令行

熟知概念

Ansible中文權(quán)威指南
Ansible是一個(gè)簡單的自動(dòng)化運(yùn)維管理工具,基于Python語言實(shí)現(xiàn),由Paramiko和PyYAML兩個(gè)關(guān)鍵模塊構(gòu)建,可用于自動(dòng)化部署應(yīng)用玷犹、配置死遭、編排task(持續(xù)交付、無宕機(jī)更新等)实胸。主版本大概每2個(gè)月發(fā)布一次郎任。

Ansible與Saltstack最大的區(qū)別是Ansible無需在被控主機(jī)部署任何客戶端代理秧耗,默認(rèn)直接通過SSH通道進(jìn)行遠(yuǎn)程命令執(zhí)行或下發(fā)配置:相同點(diǎn)是都具備功能強(qiáng)大、靈活的系統(tǒng)管理舶治、狀態(tài)配置分井,兩者都提供豐富的模板及API,對(duì)云計(jì)算平臺(tái)霉猛、大數(shù)據(jù)都有很好的支持尺锚。

python模塊paramiko

paramiko是一個(gè)用于做遠(yuǎn)程控制的模塊,使用該模塊可以對(duì)遠(yuǎn)程服務(wù)器進(jìn)行命令或文件操作韩脏,值得一說的是缩麸,fabric和ansible內(nèi)部的遠(yuǎn)程管理就是使用的paramiko來現(xiàn)實(shí)铸磅。

python模塊

Yaml —— Yet Another Markup Language :一種標(biāo)記語言
編程免不了要寫配置文件赡矢,怎么寫配置也是一門學(xué)問杭朱。
   YAML 是專門用來寫配置文件的語言,非常簡潔和強(qiáng)大吹散,遠(yuǎn)比 JSON 格式方便弧械。
   YAML在python語言中有PyYAML安裝包。

第一章 ansible架構(gòu)及其特點(diǎn)

ansible是新出現(xiàn)的自動(dòng)化運(yùn)維工具空民,基于Python開發(fā)刃唐,集合了眾多運(yùn)維工具(puppet、cfengine界轩、chef画饥、func、fabric)的優(yōu)點(diǎn)浊猾,實(shí)現(xiàn)了批量系統(tǒng)配置抖甘、批量程序部署、批量運(yùn)行命令等功能葫慎。

架構(gòu)模式

Ansible 與其他配置管理的對(duì)比

項(xiàng)目 Puppet SaltStack Ansible
開發(fā)語言 Ruby Python Python
是否有客戶端
是否支持二次開發(fā) 不支持 支持 支持
服務(wù)器與遠(yuǎn)程機(jī)器是否相互驗(yàn)證
服務(wù)器與遠(yuǎn)程機(jī)器的通信是否加密 是衔彻,標(biāo)準(zhǔn)的SSL協(xié)議 是,使用AES加密 是偷办,使用OpenSSH
平臺(tái)支持 AIX , BSD, HP-UX, Linux , Mac OSX , Solaris, Windows BSD, Linux , Mac OS X , Solaris, Windows AIX , BSD , HP-UX , Linux , Mac OS X , Solaris
是否提供Web UI 提供 提供 提供艰额,但是是商業(yè)版本
配置文件格式 Ruby 語法格式 YAML YAML
命令行執(zhí)行 不支持,大師可以通過配置模塊實(shí)現(xiàn) 支持 支持

Ansible 是一個(gè)模型驅(qū)動(dòng)的配置管理器椒涯,支持多節(jié)點(diǎn)發(fā)布柄沮、遠(yuǎn)程任務(wù)執(zhí)行。默認(rèn)使用 SSH 進(jìn)行遠(yuǎn)程連接废岂。無需在被管理節(jié)點(diǎn)上安裝附加軟件铡溪,可使用各種編程語言進(jìn)行擴(kuò)展。

Ansible基本架構(gòu)
ansible架構(gòu)

上圖為ansible的基本架構(gòu)泪喊,從上圖可以了解到其由以下部分組成:

  • 核心:ansible
  • 核心模塊(Core Modules):這些都是ansible自帶的模塊
  • 擴(kuò)展模塊(Custom Modules):如果核心模塊不足以完成某種功能棕硫,可以添加擴(kuò)展模塊
  • 插件(Plugins):完成模塊功能的補(bǔ)充
  • 劇本(Playbooks):ansible的任務(wù)配置文件,將多個(gè)任務(wù)定義在劇本中袒啼,由ansible自動(dòng)執(zhí)行
  • 連接插件(Connectior Plugins):ansible基于連接插件連接到各個(gè)主機(jī)上哈扮,雖然ansible是使用ssh連接到各個(gè)主機(jī)的,但是它還支持其他的連接方法蚓再,所以需要有連接插件
  • 主機(jī)群(Host Inventory):定義ansible管理的主機(jī)

特性

? 模塊化:調(diào)用特定的模塊滑肉,完成特定任務(wù)
? 有Paramiko,PyYAML摘仅,Jinja2(模板語言)三個(gè)關(guān)鍵模塊
? 支持自定義模塊
? 基于Python語言實(shí)現(xiàn)
? 部署簡單靶庙,基于python和SSH(默認(rèn)已安裝),agentless
? 安全娃属,基于OpenSSH
? 支持playbook編排任務(wù)
? 冪等性:一個(gè)任務(wù)執(zhí)行1遍和執(zhí)行n遍效果一樣,不因重復(fù)執(zhí)行帶來意外情況
? 無需代理不依賴PKI(無需ssl)
? 可使用任何編程語言寫模塊
? YAML格式缨睡,編排任務(wù)汇荐,支持豐富的數(shù)據(jù)結(jié)構(gòu)
? 較強(qiáng)大的多層解決方案

第二章 ansible安裝與配置

安裝

Ansible默認(rèn)不在標(biāo)準(zhǔn)倉庫中,需要用到EPEL源卵皂。
yum -y install ansible

配置文件

配置文件或指令 描述
/etc/ansible/ansible.cfg 主配置文件,配置ansible工作特性
/etc/ansible/hosts 主機(jī)清單
/etc/ansible/roles/ 存放角色的目錄
指令
/usr/bin/ansible 主程序砚亭,臨時(shí)命令執(zhí)行工具
/usr/bin/ansible-doc 查看配置文檔灯变,模塊功能查看工具
/usr/bin/ansible-galaxy 下載/上傳優(yōu)秀代碼或Roles模塊的官網(wǎng)平臺(tái)
/usr/bin/ansible-playbook 定制自動(dòng)化任務(wù),編排劇本工具
/usr/bin/ansible-pull 遠(yuǎn)程執(zhí)行命令的工具
/usr/bin/ansible-vault 文件加密工具
/usr/bin/ansible-console 基于Console界面與用戶交互的執(zhí)行工具

每個(gè)命令可以加上 -h 獲取幫助信息

第三章 ansible組件介紹

Ansible inventory

管理不同業(yè)務(wù)的不同機(jī)器捅膘,這些機(jī)器的信息都存放在Ansible的Inventory組件里面添祸,默認(rèn)是一個(gè)靜態(tài)的INI格式文件/etc/ansible/hosts
主機(jī)(hosts)部分可以使用域名、主機(jī)名寻仗、IP地址表示

定義主機(jī)和主機(jī)組膝捞,舉例如下

168.100.100.112 ansible_ssh_pass = '123456' //定義一個(gè)主機(jī)168.100.100.100 ,使用Inventory內(nèi)置定義了的SSH登錄密碼
[docker] //定義了一個(gè)組叫docker
168.100.100.100[1:3] //定義docker組下面4臺(tái)主機(jī)從168.100.100.100-168.100.100.103
[docker:vars]
ansible_ssh_pass='123456' //定義docker組使用Inventory內(nèi)置定義了的SSH登錄密碼
[ansible:children]
docker //定義一個(gè)組叫ansible,這個(gè)組包含docker組

Ansible AD-Hoc命令

什么是ad-hoc 命令愧沟?

ad-hoc 命令是一種可以快速輸入的命令蔬咬,而且不需要保存起來的命令。就相當(dāng)于bash中的一句話shell沐寺。這也是一個(gè)好的地方林艘,在學(xué)習(xí)ansible playbooks時(shí)可以先了解另外一種ansible基本的快速用法,不一定非要寫一個(gè)palybook文件混坞。
不過狐援,對(duì)于配置管理和應(yīng)用部署這種工作,還是需要使用“/usr/bin/ansible-playbook”命令究孕。

1.需要使用Ad-Hoc的場景

情景1:
節(jié)假日將至,我們需要關(guān)閉所有不必要的服務(wù)器,并對(duì)所有服務(wù)器進(jìn)行節(jié)前健康檢查啥酱。
情景2:
臨時(shí)更新Apache&Nginx的配置文件,且需同時(shí)將其分發(fā)至所有需更新該配置的Web服務(wù)器

2. 需要使用ansible-playbook的場景

情景1:
新購置的服務(wù)器安裝完系統(tǒng)后需做一系列固化的初始化工作,諸如:定制防火墻策略、添加NTP時(shí)間同步配置厨诸、添加EPEL源等镶殷。
情景2:
業(yè)務(wù)側(cè)每周定期對(duì)生產(chǎn)環(huán)境發(fā)布更新程序代碼。
基本語法
ansible <pattern_goes_here> -m <module_name> -a <arguments>

<pattern_goes_here> 指定host信息
<module_name> 指定模塊
<arguments> 指定參數(shù)

常用示例

1微酬、并行執(zhí)行

# 重啟 atlanta 組的機(jī)器绘趋,并發(fā)分支 10
ansible atlanta -a "/sbin/reboot" -f 10

2、Shell 命令

# 在  172.25.99.101 輸出 hello
ansible 172.25.99.101 -m shell -a 'echo hello'

3颗管、文件傳輸

# 將當(dāng)前服務(wù)器的 /srv/foo/a.txt 文件傳輸?shù)?webservers 組
ansible webservers -m file -a "dest=/srv/foo/a.txt mode=600"

4陷遮、軟件包管理

# 在 webservers 組安裝最新版 acme
ansible webservers -m yum -a "name=acme state=latest"

5、Users 和 Groups 管理

# 創(chuàng)建用戶 foo
ansible all -m user -a "name=foo password=<crypted password here>"

6垦江、從源代碼管理部署

ansible webservers -m git -a 
"repo=https://foo.example.org/repo.git dest=/srv/myapp version=HEAD"

7帽馋、服務(wù)管理

# 確保在 webservers 組啟動(dòng) httpd 服務(wù)
ansible webservers -m service -a "name=httpd state=started"

8、時(shí)間有限的后臺(tái)操作

# 在后臺(tái)異步執(zhí)行 long_running_operation,超時(shí)時(shí)間為3600秒(-B)绽族,沒有輪詢(-P)
ansible all -B 3600 -P 0 -a "/usr/bin/long_running_operation --do-stuff

ansible常用模塊

模塊 功能 實(shí)例
1姨涡、ping模塊 檢查指定節(jié)點(diǎn)機(jī)器是否還能連通,用法很簡單项秉,不涉及參數(shù)绣溜,主機(jī)如果在線慷彤,則回復(fù)pong ansible 10.1.1.113 -m ping
2娄蔼、raw模塊 執(zhí)行原始的命令,而不是通過模塊子系統(tǒng)底哗。在任何情況下岁诉,使用shell或命令模塊是合適的。給定原始的參數(shù)直接通過配置的遠(yuǎn)程shell運(yùn)行跋选√檠ⅲ可返回標(biāo)準(zhǔn)輸出、錯(cuò)誤輸出和返回代碼前标。此模塊沒有變更處理程序支持坠韩。 這個(gè)模塊不需要遠(yuǎn)程系統(tǒng)上的Python,就像腳本模塊一樣炼列。此模塊也支持Windows目標(biāo)只搁。 -
3、yum模塊 這個(gè)模塊是RedHat / CentOS作為遠(yuǎn)端節(jié)點(diǎn)的OS的時(shí)候俭尖,用的最多的氢惋。Yum是啥就不多說了,RedHat / CentOS包管理工具 選項(xiàng)state:狀態(tài)(present稽犁,absent焰望,latest),表示是安裝還卸載 present:默認(rèn)的已亥,表示為安裝 lastest: 安裝為最新的版本 absent:表示刪除 ansible test -m yum -a ‘name=httpd state=latest’
4熊赖、apt模塊 這個(gè)模塊是ubuntu作為遠(yuǎn)端節(jié)點(diǎn)的OS的時(shí)候,用的最多的虑椎。Apt是啥就不多說了秫舌,Ubuntu/Debian的包管理工具。 -
5绣檬、pip模塊 用于管理Python庫依賴項(xiàng)足陨,為了使用pip模塊,必須提供參數(shù)name或者requirements -
6娇未、synchronize模塊 使用rsync同步文件墨缘,將主控方目錄推送到指定節(jié)點(diǎn)的目錄下 -
7、template模塊 基于模板方式生成一個(gè)文件復(fù)制到遠(yuǎn)程主機(jī)(template使用Jinjia2格式作為文件模版,進(jìn)行文檔內(nèi)變量的替換的模塊镊讼。它的每次使用都會(huì)被ansible標(biāo)記為”changed”狀態(tài)宽涌。) -
8、copy模塊 在遠(yuǎn)程主機(jī)執(zhí)行復(fù)制操作文件蝶棋。 -
9卸亮、user 模塊與group模塊 user模塊是請(qǐng)求的是useradd, userdel, usermod三個(gè)指令,goup模塊請(qǐng)求的是groupadd, groupdel, groupmod 三個(gè)指令玩裙。 -
10兼贸、service 模塊 用于管理服務(wù),記得針對(duì)Centos7就不要使用這個(gè)模塊了吃溅。 -
11溶诞、get_url 模塊 該模塊主要用于從http、ftp决侈、https服務(wù)器上下載文件(類似于wget) -
12螺垢、fetch模塊 它用于從遠(yuǎn)程機(jī)器獲取文件,并將其本地存儲(chǔ)在由主機(jī)名組織的文件樹中赖歌。 -
13枉圃、file模塊 file模塊主要用于遠(yuǎn)程主機(jī)上的文件操作 -
14、unarchive模塊 用于解壓文件 -
15庐冯、command 模塊和shell 用于在各被管理節(jié)點(diǎn)運(yùn)行指定的命令 孽亲,shell和command的區(qū)別:shell模塊可以特殊字符,而command是不支持 -

Ansible playbook

像很多其它配置文件管理方法一樣肄扎,Ansible使用一種比較直白的方法來描述自己的任務(wù)配置文件墨林。
Ansible 的任務(wù)配置文件被稱之為“playbook”,我們可以稱之為“劇本”犯祠。每一出劇本(playbook)中都包含一系列的任務(wù)旭等,這每個(gè)任務(wù)在ansible中又被稱為一出“戲劇”(play)。一個(gè)劇本(playbook)中包含多出戲労庠亍(play)搔耕,這很容易理解。

Ansible facts

facts組件是ansible用于采集被管理及其設(shè)備信息的一個(gè)功能痰娱,我們可以使用setup模塊查及其所有facts信息弃榨,可以使用filter來查看指定信息。整個(gè)facts信息被包裝在一個(gè)JSON格式的數(shù)據(jù)結(jié)構(gòu)中梨睁,ansible_facts是最上層的值鲸睛。
fact組件默認(rèn)已經(jīng)收集了很多的設(shè)備基礎(chǔ)信息,這些信息可以在做配置管理的時(shí)候進(jìn)行引用坡贺。fact信息直接當(dāng)做playbook變量信息進(jìn)行引用官辈。通過定制facts以便收集我們想要的信息箱舞,同時(shí)可以通過facter和ohai來拓展facts信息。使用facter拓展facts信息拳亿。facter是pupper里面負(fù)責(zé)收集主機(jī)靜態(tài)信息的組件晴股,ansible的facts功能也一樣。ansible的facts組件也會(huì)判斷被控制機(jī)器上是否安裝有facter和ruby-json包肺魁,如果存在的話电湘,ansible的facts也會(huì)采集facter信息。使用ansible查看目標(biāo)主機(jī)是否安裝facter包鹅经。

Ansible role

Ansible之roles介紹

一寂呛、什么場景下會(huì)用roles?
假如我們現(xiàn)在有3個(gè)被管理主機(jī)瞬雹,第一個(gè)要配置成httpd昧谊,第二個(gè)要配置成php服務(wù)器刽虹,第三個(gè)要配置成MySQL服務(wù)器酗捌。我們?nèi)绾蝸矶xplaybook?

第一個(gè)play用到第一個(gè)主機(jī)上涌哲,用來構(gòu)建httpd胖缤,第二個(gè)play用到第二個(gè)主機(jī)上,用來構(gòu)建php阀圾,第三個(gè)play用到第三個(gè)主機(jī)上哪廓,用來構(gòu)建MySQL。這些個(gè)play定義在playbook中比較麻煩初烘,將來也不利于模塊化調(diào)用涡真,不利于多次調(diào)。比如說后來又加進(jìn)來一個(gè)主機(jī)肾筐,這個(gè)第4個(gè)主機(jī)既是httpd服務(wù)器哆料,又是php服務(wù)器,我們只能寫第4個(gè)play吗铐,上面寫上安裝httpd和php东亦。這樣playbook中的代碼就重復(fù)了。

二唬渗、roles示例

  1. 創(chuàng)建roles的必需目錄
[root@node1 opt]# mkdir -pv ansible_playbooks/roles/{websrvs,dbsrvs}/
{tasks,files,templates,meta,handlers,vars}

tree ansible_playbooks/
每個(gè)role下面有個(gè)目錄叫meta典阵,在里面可以新建文件main.yml,在文件中可以設(shè)置該role和其它role之前的關(guān)聯(lián)關(guān)系镊逝。

Ansible Galaxy

命令行工具

ansible-galaxy命令與Ansible捆綁在一起壮啊,您可以使用它從Galaxy或直接從基于git的SCM安裝角色。 您還可以使用它在Galaxy網(wǎng)站上創(chuàng)建新角色撑蒜,刪除角色或執(zhí)行任務(wù)歹啼。

默認(rèn)情況下充坑,命令行工具使用服務(wù)器地址https://galaxy.ansible.com與Galaxy網(wǎng)站API通信。 由于Galaxy項(xiàng)目是一個(gè)開源項(xiàng)目染突,您可能會(huì)運(yùn)行自己的內(nèi)部Galaxy服務(wù)器捻爷,并希望覆蓋默認(rèn)的服務(wù)器地址。 您可以使用-server選項(xiàng)或通過在ansible.cfg文件中設(shè)置Galaxy服務(wù)器值來執(zhí)行此操作份企。 有關(guān)在ansible.cfg中設(shè)置值的信息也榄,請(qǐng)?jiān)L問Galaxy設(shè)置

Installing Roles

使用ansible-galaxy命令從Galaxy網(wǎng)站下載角色

第四章 playbook詳解

基本語法

YAML所表示的YAML Ain’t Markup Language司志,YAML 是一種簡潔的非標(biāo)記語言甜紫。YAML以數(shù)據(jù)為中心,使用空白骂远,縮進(jìn)囚霸,分行組織數(shù)據(jù),從而使得表示更加簡潔易讀激才。

基本規(guī)則

YAML有以下基本規(guī)則:
1拓型、大小寫敏感
2、使用縮進(jìn)表示層級(jí)關(guān)系
3瘸恼、禁止使用tab縮進(jìn)劣挫,只能使用空格鍵
4、縮進(jìn)長度沒有限制东帅,只要元素對(duì)齊就表示這些元素屬于一個(gè)層級(jí)压固。
5、使用#表示注釋
6靠闭、字符串可以不用引號(hào)標(biāo)注

三種數(shù)據(jù)結(jié)構(gòu)

  • 1帐我、map,散列表
    使用冒號(hào)(:)表示鍵值對(duì)愧膀,同一縮進(jìn)的所有鍵值對(duì)屬于一個(gè)map拦键,示例:
# YAML表示
age : 12
name : huang

# 對(duì)應(yīng)的Json表示
{'age':12,'name':'huang'}

也可以將一個(gè)map寫在一行:

# YAML表示
{age:12,name:huang}
# 對(duì)應(yīng)的Json表示
{'age':12,'name':'huang'}
  • 2、list扇调,數(shù)組
    使用連字符(-)表示:
# YAML表示
- a
- b
- 12

# 對(duì)應(yīng)Json表示
['a','b',12]

也可以寫在一行:

# YAML表示
[a,b,c]

# 對(duì)應(yīng)Json表示
[ 'a', 'b', 'c' ]
  • 3矿咕、scalar,純量
    數(shù)據(jù)最小的單位狼钮,不可以再分割碳柱。

數(shù)據(jù)結(jié)構(gòu)嵌套

map和list的元素可以是另一個(gè)map或者list或者是純量。由此出現(xiàn)4種常見的數(shù)據(jù)嵌套:

  • 1熬芜、map嵌套map
# YAML表示
websites:
 YAML: yaml.org 
 Ruby: ruby-lang.org 
 Python: python.org 
 Perl: use.perl.org 

# 對(duì)應(yīng)Json表示
{ websites: 
   { YAML: 'yaml.org',
     Ruby: 'ruby-lang.org',
     Python: 'python.org',
     Perl: 'use.perl.org' } }

2莲镣、map嵌套list

# YAML表示
languages:
 - Ruby
 - Perl
 - Python 
 - c

# 對(duì)應(yīng)Json表示
{ languages: [ 'Ruby', 'Perl', 'Python', 'c' ] }

3、list嵌套list

# YAML表示
-
  - Ruby
  - Perl
  - Python 
- 
  - c
  - c++
  - java

# 對(duì)應(yīng)Json表示
[ [ 'Ruby', 'Perl', 'Python' ], [ 'c', 'c++', 'java' ] ]

除此以外涎拉,還可以如下表示該結(jié)構(gòu)

# 方法2
- - Ruby
  - Perl
  - Python 
- - c
  - c++
  - java

# 方法3
- [Ruby,Perl,Python]
- [c,c++,java]

4瑞侮、list嵌套map

# YAML表示
-
  id: 1
  name: huang
-
  id: 2
  name: liao

# 對(duì)應(yīng)Json表示
[ { id: 1, name: 'huang' }, { id: 2, name: 'liao' } ]

變量與引用
循環(huán)
lookups
conditionals
Jinja2 filter
playbook內(nèi)置變量

第五章 ansible最佳實(shí)踐

優(yōu)化ansible速度
目錄結(jié)構(gòu)
定義多環(huán)境
灰度發(fā)布與檢測
統(tǒng)一管理
ansible-shell交互命令行

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末的圆,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子半火,更是在濱河造成了極大的恐慌越妈,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件钮糖,死亡現(xiàn)場離奇詭異梅掠,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)店归,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門阎抒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人消痛,你說我怎么就攤上這事且叁。” “怎么了秩伞?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵逞带,是天一觀的道長。 經(jīng)常有香客問我稠歉,道長掰担,這世上最難降的妖魔是什么汇陆? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任怒炸,我火速辦了婚禮,結(jié)果婚禮上毡代,老公的妹妹穿的比我還像新娘阅羹。我一直安慰自己,他們只是感情好教寂,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布捏鱼。 她就那樣靜靜地躺著,像睡著了一般酪耕。 火紅的嫁衣襯著肌膚如雪导梆。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天迂烁,我揣著相機(jī)與錄音看尼,去河邊找鬼。 笑死盟步,一個(gè)胖子當(dāng)著我的面吹牛藏斩,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播却盘,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼狰域,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼媳拴!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起兆览,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤屈溉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后抬探,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體语婴,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年驶睦,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了砰左。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡场航,死狀恐怖缠导,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情溉痢,我是刑警寧澤僻造,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站孩饼,受9級(jí)特大地震影響髓削,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜镀娶,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一立膛、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧梯码,春花似錦宝泵、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至鳄抒,卻和暖如春闯捎,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背许溅。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來泰國打工瓤鼻, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人闹司。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓娱仔,卻偏偏與公主長得像,于是被迫代替她去往敵國和親游桩。 傳聞我的和親對(duì)象是個(gè)殘疾皇子牲迫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

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