psql+pgpool(psql一主两从,单节点pgpool)

关键此: postgresql(psql) pgpool

Pgpool安装部署指导

1 环境准备

1.1软件

  • CentOS 7.6
  • PGPool 3.5
  • PostgreSQL11.2

1.2节点

  • node1 172.16.3.103(主库)
  • node2 172.16.3.104(从库)
  • node3 172.16.3.105(从库)
  • vip 172.16.5.9(虚拟ip)

1.3配置

  • PostgreSQL Port:18083
  • 复制账号:replica/replica-vcredit
  • pgpool-II 管理功能接口用户:app1/1jwMn5UKO4f1lTmo PORT:18999

2 建立ssh互信

通过ssh互信,在pgpool集群中,一旦存在pgpool服务器或者postgreSql发生切换,可免密连接。配置步骤如下:

  1. 在三个服务器中cd ~/.ssh/ 进入.ssh目录

  2. 执行 ssh-keygen -t rsa生成秘钥,一路回车即可

  3. 查看秘钥 ls,其中id_rsa.pub 为公钥,用于加密,id_rsa 为私钥用于解密

  4. 将A服务器的id_rsa.pub中的内容拷贝到B服务器的authorized_keys认证文件中,三个服务器均应做此操作,以172.16.3.104环境为例

  5. 第一次ssh登录时需要输入密码,再次访问时即可免密码登录。第一次连接时会问你是否连接,点击yes就可以了。下次登录就不会再提示了。先在172.16.3.7上测试连接172.16.3.104:直接用命令ssh 172.16.3.104连接。三个环境均需相互测试。

  6. 注意在ssh连接后,会连接至另一服务器上,此时需要通过exit命令退出再进行测试连接。

3 PostgreSql一主二从配置

3.1 安装PostgreSql及PostGis

三个服务器均需做如下操作:

#1) cat /etc/redhat-release查询系统版本,目前发现有些主机系统类型为redhat或者centos,更新源(手动下载)
sudo yum install -y https://download.postgresql.org/pub/repos/yum/11/redhat/rhel-7-x86_64/pgdg-centos11-11-2.noarch.rpm

#2) 下载安装postgresql11
sudo yum  -y  install postgresql11

#3) 下载安装postgresql11-devel和postgresql11-server插件
sudo yum install -y postgresql11-devel 
sudo yum install -y postgresql11-server

#4) 查看postgresql是否安装
rpm -qa | grep postgresql

#5) 安装完毕之后, 执行执行:vim /etc/profile,文件末尾添加以下内容,最后执行source /etc/profile
export PGSQL_HOME=/usr/pgsql-11
export PATH=$PGSQL_HOME/bin:$PATH

#6) 初始化数据库集群,这个集群是指单机下的数据库集合,初始化后存在两个自带的数据库postgres和template1,指令如下:
initdb -D /data/pgsql11/data

#7) 注意/data/pgsql11/data/postgresql.conf该文件包含了postgresql的所有配置信息,在这里我们修改log路径,绑定端口号等等功能。修改postgresql.conf文件如下:
#只需要修改主节点的配置,下文将会在从节点拖主节点配置
listen_addresses = '*'
port = 18083 
log_directory = '/data/pgsql11/log'

#8) 修改pg_hba.conf文件,增加
host  all    all    0.0.0.0/0     trust
#所有用户在任意ip上均可访问所有库
#此处需将IPV4设置为MD5认证,且APP1用户需存在于sql中才能客户端登录。

#9) 启动postgresql服务
chown -R app1:app1 /var/run/postgresql #更改文件夹操作权限
#创建日志存放路经:  /data/pgsql11/log/pgsql.log
pg_ctl -D /data/pgsql11/data -l /data/pgsql11/log/pgsql.log start #启动数据库

#10 创建数据库
createdb -h localhost -p 18083 smart_boundary #创建smart_boundary的数据库
psql -h localhost -p 18083 -d smart_boundary #连接smart_boundary数据库

#11 安装postGis
sudo yum install -y postgis25_11-client.x86_64 postgis25_11.x86_64

#12 给postgreSql安装gis扩展
psql -h 172.16.3.103 -p 18083 -d smart_boundary
smart_boundary=# CREATE EXTENSION postgis;
CREATE EXTENSION
smart_boundary=# SELECT postgis_full_version();

3.2 配置主服务器

  1. 创建同步账号,用于同步数据
psql -h 172.16.3.103 -p 18083 -d smart_boundary
CREATE USER replica WITH PASSWORD 'replica-vcredit' REPLICATION;
  1. 修改postgresql的pg_hba.conf,配置运行刚刚创建的replica用户可以进行连接,在pg_hba.conf文件末尾加入如下内容:
host  all          all            172.16.3.104/32      trust
host  replication  replica    172.16.3.104/32      md5 
host  all          all            172.16.3.105/32      trust
host  replication  replica    172.16.3.105/32      md5
  1. 配置postgresql.conf
listen_addresses = ‘*’  #监听所有ip
archive_mode = on  #开启归档模式
archive_command = ‘cp %p /data/pgsql11/data/pg_archive/%f’  #归档命令 pg_archive目录需要自己手动创建
wal_level = hot_standby  #热备模式
max_wal_senders = 32  #最多有10个流复制连接 
wal_sender_timeout = 60s  #流复制超时时间
wal_keep_segments = 10240
max_connections = 100  #最大连接时间,必须要小于从库的配置
  1. 重启数据库服务
pg_ctl -D /data/pgsql11/data -l /data/pgsql11/log/pgsql.log restart

3.3 配置从服务器

  1. 进入172.16.3.105和172.16.3.104服务器,清空PostgreSQL数据的存储文件夹/data/pgsql11/data
sudo rm -rf /data/pgsql11/data/*
  1. 基础备份
pg_basebackup -F p --progress -D /data/pgsql11/data/ -h 172.16.3.103 -p 18083 -U replica

命令行参数如下:
-F p  指定输出格式:p原样输出,即把主数据库中的各个数据文件,配置文件、目录结构都完全一样的写到备份目录;
-P, --progress  在备份过程中实时打印备份进度
-D 指定把备份写到那个目录
-h 启动的主库数据库地址
-p 端口号
-U 流复制用户 
  1. 在/data/pgsql11/data/目录下,创建recovery.conf文件,内容如下
standby_mode = on  #表示该节点是从库
primary_conninfo = 'host=172.16.3.103 port=18083 user=replica password=replica-vcredit' #主机信息和连接用户
recovery_target_timeline = 'latest' #说明恢复到最新状态
  1. 配置从机的postgresql.conf文件
wal_level = hot_standby  #热备模式
max_connections = 300  #最大连接时间 
hot_standby = on #说明这台机器用于数据归档和数据查询
#max_standby_streaming_delay = 30s #流备份的最大延迟时间
#wal_receiver_status_interval = 1s #向主机汇报本机状态的间隔时间
hot_standby_feedback = on #r出现错误复制,向主机反馈
  1. 重启数据库服务
    pg_ctl -D /data/pgsql11/data restart -l /data/pgsql11/log/pgsql.log
    至此,主从配置完成,可更改主库数据,查看从库是否更新进行测试。

4 Pgpool集群安装部署

注意:postgreSql及pgpool相关文件及文件夹需将操作权限配给app1账号,否则更改文件内容及启动会出现没有权限的问题。

4.1 pgpool-II安装

  1. 在三个节点下载并安装pgpool-II和其扩展函数
sudo yum install -y pgpool-II-11.x86_64
sudo yum install -y pgpool-II-11-extensions.x86_64
  1. 在主服务器上安装扩展函数
  • 安装pgpool-regclass函数,此函数可解决在不同的 schema 中处理相同的表名出现的问题(临时表不会出问题)。
psql -h 172.16.3.103 -p 18083 -d smart_boundary #连接主库
smart_boundary=# CREATE EXTENSION pgpool_regclass;
CREATE EXTENSION
  • 安装C语言函数 pgpool-recovery,用于在线恢复节点。
smart_boundary=# CREATE EXTENSION pgpool_recovery;
CREATE EXTENSION
  • 建立insert_lock 表,该表主要用与解决 pgpool-Ⅱ和 VACUUM 表锁的互斥问题。
psql -f /usr/pgpool-11/share/pgpool-II/insert_lock.sql -h 172.16.3.103 -p 18083 -U app1 smart_boundary

4.2 服务器配置pgpool-II

复制pgpool-Ⅱ 模板文件:

cd etc/pgpool-II-11
cp pcp.conf.sample pcp.conf
cp pgpool.conf.sample pgpool.conf
cp pool_hba.conf.sample pool_hba.conf

4.2.1 配置pgpool.conf文件

这里只对目前应用到的参数进行配置讲解。下面是在三个环境上配置pgpool.conf文件。

1. 连接

listen_addresses = '*' #指定pgpool-II 将接受 TCP/IP 连接的主机名或者IP地址
port = 18999 # pgpool-II 监听 TCP/IP 连接的端口号
socket_dir = '/var/run' # pgpool-II 建立用于建立接受 UNIX 域套接字连接的目录。 
pcp_listen_addresses = '*' #指定 pcp 进程接收 TCP/IP 连接的主机名或IP地址。
pcp_port = 18898 # PCP 进程接受连接的端口号。
pcp_socket_dir = '/var/run' #PCP 进程用于建立接受 UNIX 域套接字连接的目录。

2. 后端(postgreSql服务)

backend_hostname0 = '172.16.3.103' #指出连接到 PostgreSQL 后台程序的地址。0为主数据库//主库IP
backend_port0 = 18083 #指定后台程序的端口号。
backend_weight0 = 1 #指定后台程序的负载均衡权重。
backend_data_directory0 = '/data/pgsql11/data' #指定后台的数据库实例的目录。
backend_flag0 = 'ALLOW_TO_FAILOVER' #允许故障切换或者从后台程序断开。
backend_hostname1 = '172.16.3.104'        /从库1
backend_port1 = 18083
backend_weight1 = 1000
backend_data_directory1 = '/data/pgsql11/data'
backend_flag1 = 'ALLOW_TO_FAILOVER'
backend_hostname2 = '172.16.3.105'    //从库2
backend_port2 = 18083
backend_weight2 = 1000
backend_data_directory2 = '/data/pgsql11/data'
backend_flag2 = 'ALLOW_TO_FAILOVER'

3. 客户端认证

enable_pool_hba = on #如果为 on,则使用 pgpool_hba.conf 来进行客户端认证。
pool_passwd = 'pool_passwd' #指定用于 md5 认证的文件名。默认值为"pool_passwd"。"" 表示禁用。

4. 日志

log_line_prefix = '%t: pid %p: ' #输出到每行日志开头的打印样式字符串,默认值打印时间戳和进程号
log_connections = off #如果为 on,进入的连接将被打印到日志中。
log_hostname = off #如果为 on,ps 命令将显示客户端的主机名而不是 IP 地址。
log_statement = off当设置为 on 时生成 SQL 日志消息。 
log_per_node_statement = on #针对每个 DB 节点产生日志,要知道一个 SELECT 的结果是不是从查询缓存获得,需要启用它
pid_file_name = '/var/run/pgpool-II-11/pgpool.pid' #到包含 pgpool-II 进程 ID 的文件的完整路径名。//目录需要手动创建

logdir = '/data/pgsql11/log' #保存日志文件的目录。

5. 主备模式下开启负载均衡

replication_mode = off#设置为 on 以启用复制模式,在主/备模式中, [replication_mode](http://www.pgpool.net/docs/pgpool-II-3.5.4/doc/pgpool-zh_cn.html#REPLICATION_MODE) 必须被设置为 off,并且 [master_slave_mode](http://www.pgpool.net/docs/pgpool-II-3.5.4/doc/pgpool-zh_cn.html#MASTER_SLAVE_MODE) 为 on
load_balance_mode = on # 当设置为 on时,SELECT 查询将被分发到每个后台程序上用于负载均衡。
master_slave_mode = on # 主备模式
master_slave_sub_mode = 'stream' # 使用 PostgreSQL 内置的复制系统(基于流复制)时被设置 
sr_check_period = 10 #本参数指出基于流复制的延迟检查的间隔,单位为秒
#注:需要提前创建好以下配置所指定的用户
sr_check_user = 'pgpool1' #执行基于流复制检查的用户名。用户必须存在于所有的 PostgreSQL 后端上,否则,检查将出错。
sr_check_password = 'pgpool1' #执行流复制检测的用户的密码。
sr_check_database = 'smart_boundary' #执行流复制延迟检测的数据库。
delay_threshold = 10000000 #指定能够容忍的备机上相对于主服务器上的 WAL 的复制延迟,单位为字节。 如果延迟到达了 delay_threshold,pgpool-II 不再发送 SELECT 查询到备机。 所有的东西都被发送到主服务器,即使启用了负载均衡模式,直到备机追赶上来。

6. 健康检查

health_check_period = 10 # 本参数指出健康检查的间隔,单位为秒。
health_check_timeout = 20 # 本参数用于避免健康检查在例如网线断开等情况下等待很长时间。 
health_check_user = 'pgpool1' #用于执行健康检查的用户。用户必须存在于 PostgreSQL 后台中。
health_check_password = 'pgpool1' #用于执行健康检查的用户的密码。
health_check_database = 'smart_boundary' #执行健康检查的数据库名。

7 .配置看门狗---单点不需要

use_watchdog = on #如果为 on,则激活看门狗。
wd_hostname = '172.16.3.7' #指定 pgpool-II 的主机名或者IP地址,设置本节点的节点名
wd_port = 19998 #指定看门狗的通信端口。
wd_priority = 1 #本参数用于设定在主看门狗节点选举时本地看门狗节点的优先权。 在集群启动的时候或者旧的看门狗故障的时候,wd_priority 值较高的节点会被选为主看门狗节点。
wd_ipc_socket_dir = '/var/run' #建立 pgpool-II 看门狗 IPC 连接的本地域套接字建立的目录。

8 .虚拟IP控制---单点不需要

delegate_IP = '172.16.5.9' #指定客户端的服务(例如应用服务等)连接到的 pgpool-II 的虚拟 IP (VIP) 地址。 当一个 pgpool-II 从备节点切换为激活节点时,pgpool-II 接管这个 VIP。
if_cmd_path = '/sbin' #本参数指定用于切换 IP 地址的命令的所在路径。
if_up_cmd = 'ifconfig ens192:0 inet $_IP_$ netmask 255.255.255.0' #本参数指定一个命令用以启用虚拟 IP。设置命令和参数,例如 "ip addr add $_IP_$/24 dev eth0 label eth0:0"。 参数 $_IP_$ 会被 [delegate_IP](http://www.pgpool.net/docs/pgpool-II-3.5.4/doc/pgpool-zh_cn.html#DELEGATE_IP) 设置的值替换。ens192根据现场机器改掉。

if_down_cmd = 'ifconfig ens192:0 down' #本参数指定一个命令用以停用虚拟 IP

注:ifconfig ens192:0 inet _IP_ netmask 255.255.255.0'为给网卡配置ip的命令,ens192:0表示虚拟网络接口,给单个网卡配置多个ip时可设置为eth192:x (x是0-255),netmask 255.255.255.0 配置的是子网掩码,我们可以通过ifconfig命令查看本机网卡,如图所示:

9 .心跳模式—单点不需要

wd_lifecheck_method = 'heartbeat' #本参数指定存活检查的模式。
wd_interval = 10 #本参数指定 pgpool-II 进行存活检查的间隔,单位为秒
wd_heartbeat_port = 9694 #本选项指定接收心跳信号的端口号。默认为 9694 。
wd_heartbeat_keepalive = 2 #本选项指定发送心跳信号的间隔(秒)。默认值为 2。
wd_heartbeat_deadtime = 30 #如果本选项指定的时间周期内没有收到心跳信号,则看门狗认为远端的 pgpool-II 发生故障。
heartbeat_destination0 = '172.16.3.104' #本选项指定心跳信号发送的目标,可以是 IP 地址或主机名。设置其它PostgreSQL节点的节点名
heartbeat_destination_port0 = 9694 #本选项指定由 [heartbeat_destinationX](http://www.pgpool.net/docs/pgpool-II-3.5.4/doc/HEARTBEAT_DESTINATION) 指定的心跳信号目标的端口号。这个值通常等于 [wd_heartbeat_port](http://www.pgpool.net/docs/pgpool-II-3.5.4/doc/WD_HEARTBEAT_PORT)。
heartbeat_device0 = 'ens192' #本选项指定用于发送心跳信号到由 [heartbeat_destinationX](http://www.pgpool.net/docs/pgpool-II-3.5.4/doc/HEARTBEAT_DESTINATION)指定的目标的设备名。
heartbeat_destination1 = '172.16.3.105' #设置其它PostgreSQL节点的节点名
heartbeat_destination_port1 = 9694
heartbeat_device1 = 'ens192'

10. 服务监控—不需要全部注释

other_pgpool_hostname0 = '172.16.3.104' #指定需要监控的 pgpool-II 服务器主机。这用于发送/接收查询和数据包,同时也是看门狗的标识。 设置其它Pgpool节点的节点名
other_pgpool_port0 = 18999 # 指定需要监控的 pgpool-II 服务器的 pgpool 服务的端口。
other_wd_port0 = 19998 # 指定需要监控的 pgpool-II 服务器的看门狗的端口。
other_pgpool_hostname1 = '172.16.3.105'
other_pgpool_port1 = 18999
other_wd_port1 = 19998

4.2.2 配置pool_hba.config文件(权限配置)

4.2.2.1 配置pcp命令

pgpool-II 有一个用于管理功能的接口,用于通过网络获取数据库节点信息、关闭 pgpool-II 等。要使用 PCP 命令,必须进行用户认证。这需要在 pcp.conf 文件中定义一个用户和密码。(pcp具体命令可参考网址http://www.pgpool.net/docs/pgpool-II-3.5.4/doc/pgpool-zh_cn.html#memcached_params)。

  1. 使用pg_md5命令加密

pg_md5 app1

  1. 编写pcp.config文件
vi /etc/pgpool-II-11/pcp.conf
app1: f92ea1839dc16d7396db358365da7066
  1. 编写用于md5认证的文件pool_passwd
cd /etc/pgpool-II-11
sudo pg_md5 -p -m -u app1 pool_passwd
1jwMn5UKO4f1lTmo

4.2.2.2 配置pool_hba.conf

pgpool可以按照和PostgreSQL的hba.conf类似的方式配置自己的主机认证,所有连接到pgpool上的客户端连接将接受认证,这解决了后端PostgreSQL无法直接对前端主机进行IP地址限制的问题。

host  all       all    0.0.0.0/0    trust   #  放开所有网段连接
host  all          all            172.16.3.103/32      trust
host  replication  replica    172.16.3.103/32      md5 
host  all          all            172.16.3.104/32      trust
host  replication  replica    172.16.3.104/32      md5 
host  all          all            172.16.3.105/32      trust
host  replication  replica    172.16.3.105/32      md5

4.3 pgpool的启动与测试

4.3.1 pgpool的启动

  1. 启动。注意:所有后端服务(sql、缓存)都必须在启动 pgpool-II 之前启动。
sudo pgpool -n #前端启动命令,退出后会自动关闭
sudo pgpool -n > /data/pgpool/logfile/pgpool.log 2>&1 & #后端启动命令,先启动主服务器,再启动从服务器,启动日志在pgpool.log查看
  1. 连接。可以通过命令行或者navicat客户端进行连接测试。
psql -h 172.16.3.103 -p 18999 -d smart_boundary #连接主pgpool
psql -h 172.16.3.104 -p 18999 -d smart_boundary #连接从pgpool
psql -h 172.16.3.105 -p 18999 -d smart_boundary #连接从pgpool
在172.16.3.7环境上,连接vip:
psql -h 172.16.5.9 -p 18999 -d smart_boundary #通过虚拟ip连接pgpool

通过 show pool_nodes;命令查看集群状态:

4.3.2 pgpool的停止

sudo pgpool stop #停止命令,如果还有客户端连接着, pgpool-II 等待它们断开连接,然后才结束运行。可用以下命令:
sudo pgpool -m fast stop #快速停止命令
若以上均不能停止pgpool,则需kill掉pgpool的所有进程:
sudo killall -9 pgpool
删除所占端口文件
/tmp/下
/var/run/postgresql/下
sudo rm -rf /run/.s.PGSQL.18898
sudo rm -rf /run/.s.PGSQL.18999

4.3.3 HA测试 ---后面为主备模式pgpool所进行的操作,单节点pgpool无需操作

  1. 模拟master端pgpool宕机

sudo pgpool -m fast stop

  1. psql -h 172.16.5.9 -p 18999 -d smart_boundary #通过虚拟ip连接pgpool

通过 show pool_nodes;命令查看集群状态

4.4 配置使用memcached

4.4.1 安装memcached

  1. 安装
sudo yum install -y libevent libevent-devel
sudo yum install -y memcached
  1. 启动

/usr/bin/memcached -p 11211 -m 64m -d

4.4.2 配置pgpool.config缓存参数

memory_cache_enabled = on #要启用基于内存的查询缓存,设置以下选项为 on
memqcache_method = 'memcached' #你可以选择一个缓存策略:共享内存或者 [memcached](http://memcached.org/)(不能同时使用)。
memqcache_memcached_host = '172.16.3.7' #指定 memcached 工作的主机的主机名或 IP 地址。
memqcache_memcached_port = 11211 #指定 memcached 的端口。默认为 11211。
memqcache_total_size = 67108864 #指定用于缓存的共享内存的大小,单位为字节。
memqcache_max_num_cache = 1000000 #制定缓存的项目数。这用于定义缓存管理空间的大小。
memqcache_expire = 0 #查询缓存的生命周期,默认为 0。0 表示没有缓存超时,而且缓存被启用直到表被更新。
memqcache_auto_cache_invalidation = on #如果为 on,则在表被更新的时候自动删除相关的缓存。
memqcache_maxcache = 40960000 #select结果集的大小最大现在
memqcache_oiddir = '/data/pgpool/oiddir' #用于 SELECT 的存储表的 OID 的目录的完整路径。
white_memqcache_table_list = '' #指定一个以逗号分隔的表名的列表,用于使 SELECT 的结果被缓存
black_memqcache_table_list = '' #指定一个以逗号分隔的表名的列表,用于使 SELECT 的结果不被缓存

4.4.3 测试memcached

通过jmeter构建压力测试,查询某条数据,查看日志,日志如下,表示从缓存中查询:

4.5 参考资料

http://www.pgpool.net/docs/pgpool-II-3.5.4/doc/pgpool-zh_cn.html#memcached_params
http://blog.chinaunix.net/uid-20726500-id-5755219.html
https://blog.csdn.net/yaoqiancuo3276/article/details/80983201#
http://www.mamicode.com/info-detail-2658684.html

5 报错及解决

  • 错误1:
#pgpool.log中报错:
0000480: FATAL: unable to read data from DB node 0 Detail: EOF encountered with backend.
  • 解决:
#此处的问题是4.2.1.5 配置中的基于流复制检查的用户尚未在数据库中创建
#登录数据库并创建用户
psql -h 172.16.3.103 -p 18083 -d smart_boundary
CREATE USER pgpool1 WITH PASSWORD 'pgpool1'
sudo pgpool -n > /data/pgpool/logfile/pgpool.log 2>&1 &
  • 错误2:
all backend nodes are down, pgpool requires at least one valid node
repair the backend nodes and restart pgpool
  • 解决:
重启pgpool后查看pgpool.log 发现:
DEBUG: find_primary_node: not in streaming replication mode
vim  pgpool.conf
#将下文注释删去
master_slave_sub_mode = 'stream'
  • 错误3
$ psql -h ip -p port -d db_name 
psql: server closed the connection unexpectedly
    This probably means the server terminated abnormally
    before or while processing the request.
  • 解决:
sudo pgpool stop
sudo pgpool -C -D -n > /data/pgpool/logfile/pgpool.log 2>&1 &

#  -C, --clear-oidmaps Clear query cache oidmaps when memqcache_method is memcached
#                      (If shmem, discards whenever pgpool starts.)
#  -D, --discard-status Discard pgpool_status file and do not restore previous status

#-C,在memqcache_method=memcached时清除查询缓存oidmaps(如果是shmem,则在pgpool启动时丢弃。)
#-D,--放弃状态放弃pgpool_status文件,不还原以前的状态 
  • 操作
 psql -h 172.22.204.14 -p 18083 -d faceai -f  faceai_public_mq_instance.sql
 
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,384评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,845评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,148评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,640评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,731评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,712评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,703评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,473评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,915评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,227评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,384评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,063评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,706评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,302评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,531评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,321评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,248评论 2 352