使用powershell配置和管理基于Windows的iSCSI

iSCSI简介

iSCSI (Internet Small Computer Systems Interface),Internet 小型计算机接口,又称IP-SAN,一种用于链接数据存储基础设施的基于IP的存储网络实现标准。通过TCP/IP网络传送SCSI协议来提供对存储设备的块级别访问,极大的扩展了存储的管理距离,被广泛用于局域网(local area network)LANs,广域网(wide area networks) WANS,和因特网(Internet),打破了数据存储和检索的物理区域限制。(SCSI 点击此处了解更多SCSI协议相关内容)
iSCSI协议允许客户端(Initiator)发送SCSI命令到远程主机上的存储设备(Targets),该协议允许组织将存储整合到存储阵列,然后为客户端(例如数据库和web服务器)提供本地附加块存储,让其能够像管理本地磁盘一样管理和使用它们。iSCSI存储网络主要使用光纤通道来通信,但是与传统光纤不同的是,它无须专用光纤通道,便可以通过现存网络实现长距离传输。

概念

实际上,iSCSI允许两个主机使用IP(Internet)协议进行协商 ,然后交换SCSI命令。这样iSCSI可以把在通过高性能存储总线的存储进行模拟仿真,然后将仿真后的存储创建为存储区域网络(SAN),与其它SAN协议不同,iSCSI不需要专用的线缆,它可以在现有的IP网络的基础上运行和数据传输,因此它是基于光纤通道SAN的低成本解决方案。光纤通道除了需要其FCOE(以太网光纤通道)支持外,还需要专用的基础架构。但是,若iSCSI不配置专用的网络或子网,那么其性能可能遭遇网络带宽瓶颈。

尽管iSCSI可以与任意类型的SCSI设备进行通讯,但是系统管理员最常用的方式还是用其来允许服务器访问存储阵列上的磁盘卷。iSCSI SAN通常用来实现如下两个目的:

  • 存储整合
    将分散的存储资源从网络中的服务器移动到数据中心集中管理。由于存储本身不再绑定到特定的服务器,因此这可以提高分配效率。在SAN环境中,可以为服务器分配新的磁盘卷,而无需更改硬件和线缆。
  • 灾难恢复
    组织将存储资源从一个数据中心经乡道一个远程数据中心,如果长时间停机,远程数据中心可作为热备。并且,iSCSI SAN允许整个磁盘阵列在WAN配置中进行迁移而无需大量配置,使存储分配就像网络一样具有可路由特性。
Initiator

Initiator iSCSI客户端,其目的是充当计算机上的SCSI总线适配器,其功能便使通过IP网络向SCSI服务端(Target)发送SCSI命令,有两类Initiator

  • 软件Initiator
    软件Initiator通过装载在内核中的驱动程序调用网卡(NIC)和网络协议栈,通过iSCSI协议来模拟计算机的SCSI设备。在大多数流行系统发行版中均内这这种Initiator
  • 硬件Initiator使用专用硬件及其故将来实现iSCSI。硬件Initiator可以减轻iSCSI和TCP处理以及以太网中断开销,提供使用iSCSI服务器的性能,一般通过iSCSI主机总线适配器(HBA)来实现。典型HBA打包有千兆或万兆以太网网络接口控制器,TCP/IP卸载引擎技术(TOE)和一个SCSI总线适配器。通用的可引导网络接口,不支持从远程iSCSI存储读取数据进行无盘引导启动,网卡会寻找一台提供PXE或者BOOTP引导镜像的DHCP服务器来完成基于iSCSI的无盘启动。另外,内置BIOS的专用HBA,也可实现从iSCSI SAN无盘启动。
Target

iSCSI将位于iSCSI服务器上的存储资源(通常是该服务器上运行的众多iSCSI存储节点实例之一)作为Target
iSCSI Target通常是专用的网络连接存储设备,但也可以是通用计算机,现在流行的各大主流操作系统都提供有iSCSI Target 程序。
iSCSI Target常见部署方案

  • 存储阵列(Storage Array)
    在数据中心或者企业环境中,iSCSI Target 常位于一个大的存储阵列。这些存储阵列可以通过免费的或者商用软件来实现。
    一个存储阵列可以分别为不同的客户端提供不同的Target
  • 软件Target (Softeware Target)
    几乎所有专用的现在主流操作系统都提供iSCSI Target功能,既可以作为内置功能,也可以与补充软件一起提供。另外,有专为系统提供iSCSI Target
逻辑单元号(Logical unit number)

在SCSI术语中,LU代表逻辑单元,一个LUN表示一个可单独寻址逻辑SCSI设备的地址,是物理SCSI设备(Target)的一部分。LUN本质上是已编号的磁盘驱动器。一个InitiatorTarget协商并连接到一个LUN上,其目的即是创建一个连接到一块SCSI硬盘的链接。连接到LUN后,LUN对当前系统来京即使一块磁盘,iSCSI系统会格式化和直接管理它。
在企业中,LUNs常常作为一个大的RAID磁盘阵列的子集,通常会为每个客户端分配一个LUN。iSCSI不会限制多台计算机共享同一个LUN,计算机操作系统负责文件系统之上的权限管理。

地址与端口

iSCSI 使用TCP作为其传输协议,端口为3260,使用更高级别的名称来寻址协议中的对象。特殊名称制的使IntiatorTarget,iSCSI提供三种格式:

  1. iSCSI 标准名称
  • 字符串 iql(iSCSI Qualified Name)
  • 日期(yyyy-mm) ,iSCSI命名所在域的日期
  • 当前授权域的反向域名 (例如org.alpinelinux,com.example,to.yp.cr)
  • 可选:可自定义的后缀Target名称


    image.png
  1. 可扩展唯一标识(Extended Unique Identifier

格式: eui.{EUI-64 bit address} (e.g. eui.02004567A425678D)

  1. 网络地址认证 T11 Network Address Authority (NAA)
    格式: naa.{NAA 64 or 128 bit identifier} (e.g. naa.52004567BA64678D)
    下面仅供参考

IQN format addresses occur most commonly. They are qualified by a date (yyyy-mm) because domain names can expire or be acquired by another entity.
The IEEE Registration authority provides EUI in accordance with the EUI-64 standard. NAA is part OUI which is provided by the IEEE Registration Authority. NAA name formats were added to iSCSI in RFC 3980, to provide compatibility with naming conventions used in Fibre Channel and Serial Attached SCSI (SAS) storage technologies.
Usually, an iSCSI participant can be defined by three or four fields:

  • Hostname or IP Address (e.g., "iscsi.example.com")
  • Port Number (e.g., 3260)
  • iSCSI Name (e.g., the IQN "iqn.2003-01.com.ibm:00.fcd0ab21.shark128")
  • An optional CHAP Secret (e.g., "secretsarefun")

Windows Server(2012 or above)使用Powershell配置Target

实验环境:192.168.200.0/24 网段专用于iSCSI通信

Target:(服务端)srv19.buffallos.com 192.168.100.209
Initiator:(客户端)node1.buffallos.com 192.168.100.201

  1. 定义iSCSI Target 变量

$server="svr19.buffallos.com"

  1. 安装iSCSI Target 功能组件
PS C:\Windows\system32> Install-WindowsFeature -ComputerName svr9.buffallos.com -Name FS-iSCSITarget-Server 
Success Restart Needed Exit Code      Feature Result                               
------- -------------- ---------      --------------                               
True    No             Success        {iSCSI 目标服务器}                                
  1. 创建iSCSI target-server,iSCSI客户端(initiator)将连接到到target,下面创建target-server Target01
PS C:\Windows\system32> New-IscsiServerTarget -ComputerName $server -TargetName Target01

ChapUserName                : 
ClusterGroupName            : 
ComputerName                : SRV19.buffallos.com
Description                 : 
EnableChap                  : False
EnableReverseChap           : False
EnforceIdleTimeoutDetection : True
FirstBurstLength            : 65536
IdleDuration                : 00:00:00
InitiatorIds                : {}
LastLogin                   : 
LunMappings                 : {}
MaxBurstLength              : 262144
MaxReceiveDataSegmentLength : 65536
ReceiveBufferCount          : 10
ReverseChapUserName         : 
Sessions                    : {}
Status                      : NotConnected
TargetIqn                   : iqn.1991-05.com.microsoft:srv19-target01-target
TargetName                  : Target01

注:默认创建的target会监听在所有IP地址的3260端口,可以使用下列命令禁止特定地址监听
PS C:\Windows\system32> Set-IscsiTargetServerSetting -ComputerName $server -IP 192.168.199.210 -Enable $false

  1. 创建虚拟磁盘,后面将需要把这些虚拟磁盘映射到Target
PS C:\Windows\system32> New-IscsiVirtualDisk -ComputerName $server -Path "e:\iscsivirtualdisks\vDisk01.vhdx" -SizeBytes 50GB


ClusterGroupName   : 
ComputerName       : SRV19.buffallos.com
Description        : 
DiskType           : Dynamic
HostVolumeId       : {B862A936-580D-420E-8F5E-6E108EF26A66}
LocalMountDeviceId : 
OriginalPath       : 
ParentPath         : 
Path               : e:\iscsivirtualdisks\vDisk01.vhdx
SerialNumber       : E82BD048-A055-486A-9267-9F678FEDD316
Size               : 53687091200
SnapshotIds        : 
Status             : NotConnected
VirtualDiskIndex   : 1528507487

PS C:\Windows\system32> New-IscsiVirtualDisk -ComputerName $server -Path "e:\iscsivirtualdisks\vDisk02.vhdx" -SizeBytes 30GB


ClusterGroupName   : 
ComputerName       : SRV19.buffallos.com
Description        : 
DiskType           : Dynamic
HostVolumeId       : {B862A936-580D-420E-8F5E-6E108EF26A66}
LocalMountDeviceId : 
OriginalPath       : 
ParentPath         : 
Path               : e:\iscsivirtualdisks\vDisk02.vhdx
SerialNumber       : AE07D222-24FC-441C-AD07-1B8F197AE050
Size               : 32212254720
SnapshotIds        : 
Status             : NotConnected
VirtualDiskIndex   : 1978411738

默认磁盘是可动态扩展的,如果想使用固定大小,可以加-UseFixed参数,如下

PS C:\Windows\system32> New-IscsiVirtualDisk -ComputerName $server -Path "e:\iscsivirtualdisks\vDisk03.vhdx" -SizeBytes 1GB -UseFixed


ClusterGroupName   : 
ComputerName       : SRV19.buffallos.com
Description        : 
DiskType           : Fixed
HostVolumeId       : {B862A936-580D-420E-8F5E-6E108EF26A66}
LocalMountDeviceId : 
OriginalPath       : 
ParentPath         : 
Path               : e:\iscsivirtualdisks\vDisk03.vhdx
SerialNumber       : 9DB2F0CD-590C-45B5-BA46-FAB902248D84
Size               : 1073741824
SnapshotIds        : 
Status             : NotConnected
VirtualDiskIndex   : 2021853343
  1. 将创建好的虚拟磁盘映射到Target
PS C:\Windows\system32> Add-IscsiVirtualDiskTargetMapping -ComputerName $server -TargetName Target01 -Path "e:\iscsivirtualdisks\vDisk01.vhdx"

PS C:\Windows\system32> Add-IscsiVirtualDiskTargetMapping -ComputerName $server -TargetName Target01 -Path "e:\iscsivirtualdisks\vDisk02.vhdx"

PS C:\Windows\system32> Add-IscsiVirtualDiskTargetMapping -ComputerName $server -TargetName Target01 -Path "e:\iscsivirtualdisks\vDisk03.vhdx"

如下图,已经将3快磁盘映射到Target01

PS C:\Windows\system32> Get-IscsiServerTarget


ChapUserName                : 
ClusterGroupName            : 
ComputerName                : SRV19.buffallos.com
Description                 : 
EnableChap                  : False
EnableReverseChap           : False
EnforceIdleTimeoutDetection : True
FirstBurstLength            : 65536
IdleDuration                : 00:18:09
InitiatorIds                : {}
LastLogin                   : 
LunMappings                 : {TargetName:Target01;VHD:"e:\iscsivirtualdisks\vDisk01.vhdx";LUN:0, TargetName:Target01;VHD:"e:\iscsivirtualdisks\vDisk02.vhdx";LUN:1, TargetName:Target01;V
                              HD:"e:\iscsivirtualdisks\vDisk03.vhdx";LUN:2}
MaxBurstLength              : 262144
MaxReceiveDataSegmentLength : 65536
ReceiveBufferCount          : 10
ReverseChapUserName         : 
Sessions                    : {}
Status                      : NotConnected
TargetIqn                   : iqn.1991-05.com.microsoft:srv19-target01-target
TargetName                  : Target01
  1. 将需要访问Target的客户端地址(initiator)添加到Target01,一般只会添加一个客户端,但是群集场景可能会添加多个,比如用于Hypter-V群集、vmware vsphere群集,每个节点都需要添加。
PS C:\Windows\system32> Set-IscsiServerTarget -ComputerName $server -TargetName Target01 -InitiatorIds IPAddress:192.168.100.201,IPAddress:192.168.100.202

将iSCSI 虚拟磁盘添加到客户端

  1. 定义需要连接到Target01的客户端

$servers='node1.buffallos.com','node2.buffallos.com'
或者

PS C:\Windows\system32> $servers=@('node1.buffallos.com','node2.buffallos.com')

PS C:\Windows\system32> $servers
node1.buffallos.com
node2.buffallos.com
  1. 在两个客户端上将iSCSI initiator服务设为自动启动并启动服务
PS C:\Windows\system32> Invoke-Command ($servers) {set-service MSiSCSI -StartupType Automatic;start-service MSiSCSI}
警告: 正在等待服务“Microsoft iSCSI Initiator Service (MSiSCSI)”启动...
警告: 正在等待服务“Microsoft iSCSI Initiator Service (MSiSCSI)”启动...
  1. 添加target-server到客户端,即为client添加对应Target01的iSCSITargetPortal,本文中,Target Server的地址是192.168.100.209
PS C:\Windows\system32> Invoke-Command ($servers) {New-IscsiTargetPortal -TargetPortalAddress 192.168.100.209}


PSComputerName         : node2.buffallos.com
RunspaceId             : 942336c5-7793-4498-bfc2-64cf4d3dd442
InitiatorInstanceName  : 
InitiatorPortalAddress : 
IsDataDigest           : False
IsHeaderDigest         : False
TargetPortalAddress    : 192.168.100.209
TargetPortalPortNumber : 3260

PSComputerName         : node1.buffallos.com
RunspaceId             : 20030c51-9ff1-423a-ad7c-3e1c78250dfb
InitiatorInstanceName  : 
InitiatorPortalAddress : 
IsDataDigest           : False
IsHeaderDigest         : False
TargetPortalAddress    : 192.168.100.209
TargetPortalPortNumber : 3260

测试是否已成功连接到服务器端,可以看到,Target server已经被识别到,但是还没有被连接(IsConnected : False

PS C:\Windows\system32> Invoke-Command ($servers) {Get-IscsiTarget}


PSComputerName : node1.buffallos.com
RunspaceId     : d7aa436a-5aff-47a0-b159-76daed9e0c2e
IsConnected    : False
NodeAddress    : iqn.1991-05.com.microsoft:srv19-target01-target

PSComputerName : node2.buffallos.com
RunspaceId     : 89e41daf-397d-462b-9858-8f4b20bcc9ac
IsConnected    : False
NodeAddress    : iqn.1991-05.com.microsoft:srv19-target01-target
  1. 连接到Target Server
PS C:\Windows\system32> Invoke-Command ($servers) {$target=Get-IscsiTarget;Connect-IscsiTarget -NodeAddress $target.NodeAddress}


PSComputerName          : node1.buffallos.com
RunspaceId              : ca4bdd64-9262-4784-8b37-902fc8cfe1a3
AuthenticationType      : NONE
InitiatorInstanceName   : ROOT\ISCSIPRT\0000_0
InitiatorNodeAddress    : iqn.1991-05.com.microsoft:node1.buffallos.com
InitiatorPortalAddress  : 0.0.0.0
InitiatorSideIdentifier : 400001370000
IsConnected             : True
IsDataDigest            : False
IsDiscovered            : True
IsHeaderDigest          : False
IsPersistent            : False
NumberOfConnections     : 1
SessionIdentifier       : ffffe000f2d4d020-4000013700000003
TargetNodeAddress       : iqn.1991-05.com.microsoft:srv19-target01-target
TargetSideIdentifier    : 0100

PSComputerName          : node2.buffallos.com
RunspaceId              : f29a6979-c23f-4669-830b-33a7828628c5
AuthenticationType      : NONE
InitiatorInstanceName   : ROOT\ISCSIPRT\0000_0
InitiatorNodeAddress    : iqn.1991-05.com.microsoft:node2.buffallos.com
InitiatorPortalAddress  : 0.0.0.0
InitiatorSideIdentifier : 400001370000
IsConnected             : True
IsDataDigest            : False
IsDiscovered            : True
IsHeaderDigest          : False
IsPersistent            : False
NumberOfConnections     : 1
SessionIdentifier       : ffffe00165f89020-4000013700000003
TargetNodeAddress       : iqn.1991-05.com.microsoft:srv19-target01-target
TargetSideIdentifier    : 0200

查看是否已连接,下图可以看到,已经连接(IsConnected : True)

PS C:\Windows\system32> Invoke-Command ($servers) {Get-IscsiTarget}


PSComputerName : node1.buffallos.com
RunspaceId     : 53b6ade6-fbb4-4028-ac97-b1103670c040
IsConnected    : True
NodeAddress    : iqn.1991-05.com.microsoft:srv19-target01-target

PSComputerName : node2.buffallos.com
RunspaceId     : 96a83ff6-1b33-4b9a-b093-78117db0d40b
IsConnected    : True
NodeAddress    : iqn.1991-05.com.microsoft:srv19-target01-target
  1. 查看已有的iSCSI Target 连接的详细信息
PS C:\Windows\system32> Invoke-Command ($servers) {Get-IscsiConnection}


PSComputerName       : node2.buffallos.com
RunspaceId           : 76286dc2-a029-4c60-9e16-bdd04b6324e0
ConnectionIdentifier : ffffe00165f89020-2
InitiatorAddress     : 0.0.0.0
InitiatorPortNumber  : 30144
TargetAddress        : 192.168.100.209
TargetPortNumber     : 3260

PSComputerName       : node1.buffallos.com
RunspaceId           : d0ed9cd5-744b-4bfd-bd12-a1741f25ad32
ConnectionIdentifier : ffffe000f2d4d020-2
InitiatorAddress     : 0.0.0.0
InitiatorPortNumber  : 26353
TargetAddress        : 192.168.100.209
TargetPortNumber     : 3260

5.查看iSCSI会话(一个iSCSI会话中可能会存在多个连接,本文实验中上一步可以看到,仅有一个连接)

PS C:\Windows\system32> Invoke-Command ($servers) {Get-IscsiSession}


PSComputerName          : node2.buffallos.com
RunspaceId              : cfdc1e88-ffb6-4a15-9980-db3f6cfa8f60
AuthenticationType      : NONE
InitiatorInstanceName   : ROOT\ISCSIPRT\0000_0
InitiatorNodeAddress    : iqn.1991-05.com.microsoft:node2.buffallos.com
InitiatorPortalAddress  : 0.0.0.0
InitiatorSideIdentifier : 400001370000
IsConnected             : True
IsDataDigest            : False
IsDiscovered            : True
IsHeaderDigest          : False
IsPersistent            : False
NumberOfConnections     : 1
SessionIdentifier       : ffffe00165f89020-4000013700000003
TargetNodeAddress       : iqn.1991-05.com.microsoft:srv19-target01-target
TargetSideIdentifier    : 0200

PSComputerName          : node1.buffallos.com
RunspaceId              : c0b86967-389f-4b4d-b2c7-64fb173d1ee9
AuthenticationType      : NONE
InitiatorInstanceName   : ROOT\ISCSIPRT\0000_0
InitiatorNodeAddress    : iqn.1991-05.com.microsoft:node1.buffallos.com
InitiatorPortalAddress  : 0.0.0.0
InitiatorSideIdentifier : 400001370000
IsConnected             : True
IsDataDigest            : False
IsDiscovered            : True
IsHeaderDigest          : False
IsPersistent            : False
NumberOfConnections     : 1
SessionIdentifier       : ffffe000f2d4d020-4000013700000003
TargetNodeAddress       : iqn.1991-05.com.microsoft:srv19-target01-target
TargetSideIdentifier    : 0100

可看到,当前会话并非持久会话,机器重启将会丢失会话,下面的命令可以将其置为持久。

PS C:\Windows\system32> Invoke-Command ($servers) {Get-IscsiSession | Register-IscsiSession}

PS C:\Windows\system32> Invoke-Command ($servers) {Get-IscsiSession}


PSComputerName          : node1.buffallos.com
RunspaceId              : 2878c1fe-057d-4cc4-bd9b-fe80febc56f0
AuthenticationType      : NONE
InitiatorInstanceName   : ROOT\ISCSIPRT\0000_0
InitiatorNodeAddress    : iqn.1991-05.com.microsoft:node1.buffallos.com
InitiatorPortalAddress  : 0.0.0.0
InitiatorSideIdentifier : 400001370000
IsConnected             : True
IsDataDigest            : False
IsDiscovered            : True
IsHeaderDigest          : False
IsPersistent            : True
NumberOfConnections     : 1
SessionIdentifier       : ffffe000f2d4d020-4000013700000003
TargetNodeAddress       : iqn.1991-05.com.microsoft:srv19-target01-target
TargetSideIdentifier    : 0100

PSComputerName          : node2.buffallos.com
RunspaceId              : 226b78f8-25dd-4864-9165-c4483b463826
AuthenticationType      : NONE
InitiatorInstanceName   : ROOT\ISCSIPRT\0000_0
InitiatorNodeAddress    : iqn.1991-05.com.microsoft:node2.buffallos.com
InitiatorPortalAddress  : 0.0.0.0
InitiatorSideIdentifier : 400001370000
IsConnected             : True
IsDataDigest            : False
IsDiscovered            : True
IsHeaderDigest          : False
IsPersistent            : True
NumberOfConnections     : 1
SessionIdentifier       : ffffe00165f89020-4000013700000003
TargetNodeAddress       : iqn.1991-05.com.microsoft:srv19-target01-target
TargetSideIdentifier    : 0200

至此,客户端上应能够查看到offline状态的磁盘了

PS C:\Windows\system32> Invoke-Command ($servers) {Get-disk}

Number Friendly Name                            Serial Number                    HealthStatus         OperationalStatus      Total Size Partition  PSComputerName                         
                                                                                                                                        Style                                             
------ -------------                            -------------                    ------------         -----------------      ---------- ---------- --------------                         
0      VMware, VMware Virtual S SCSI Disk De...                                  Warning              Other                       60 GB MBR        node2.buffallos.com                    
1      MSFT Virtual HD SCSI Disk Device         E82BD048-A055-486A-9267-9F678... Warning              Stressed                    50 GB RAW        node2.buffallos.com                    
2      MSFT Virtual HD SCSI Disk Device         AE07D222-24FC-441C-AD07-1B8F1... Warning              Stressed                    30 GB RAW        node2.buffallos.com                    
3      MSFT Virtual HD SCSI Disk Device         9DB2F0CD-590C-45B5-BA46-FAB90... Warning              Stressed                     1 GB RAW        node2.buffallos.com                    
0      VMware, VMware Virtual S SCSI Disk De...                                  Warning              Other                       60 GB MBR        node1.buffallos.com                    
1      MSFT Virtual HD SCSI Disk Device         E82BD048-A055-486A-9267-9F678... Warning              Stressed                    50 GB RAW        node1.buffallos.com                    
2      MSFT Virtual HD SCSI Disk Device         AE07D222-24FC-441C-AD07-1B8F1... Warning              Stressed                    30 GB RAW        node1.buffallos.com                    
3      MSFT Virtual HD SCSI Disk Device         9DB2F0CD-590C-45B5-BA46-FAB90... Warning              Stressed                     1 GB RAW        node1.buffallos.com                    
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,905评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,140评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,791评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,483评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,476评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,516评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,905评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,560评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,778评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,557评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,635评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,338评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,925评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,898评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,142评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,818评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,347评论 2 342

推荐阅读更多精彩内容