Centos7 Mysql 集群--之四(Haproxy安装)

  1. 检查是否有安装Haproxy软件
rpm -qa | grep haproxy

#卸载已安装的 haproxy(如已安装)
yum remove haproxy
  1. sysctl的建议配置
[root@elk-node2 ~]# vim /etc/sysctl.conf
   -------------------------------------------------------------------
    net.ipv4.tcp_tw_reuse = 1
    net.ipv4.ip_local_port_range = 1024 65023
    net.ipv4.tcp_max_syn_backlog = 10240:Q
    net.ipv4.tcp_max_tw_buckets = 400000
    net.ipv4.tcp_max_orphans = 60000
    net.ipv4.tcp_synack_retries = 3
    net.core.somaxconn = 10000
    ------------------------------------------------------------------
    
    [root@elk-node2 ~]# /sbin/sysctl -p  
  1. 创建HAProxy用户和组
[root@elk-node2 ~]# groupadd haproxy -g 501
[root@elk-node2 ~]# useradd -g haproxy haproxy -s /sbin/nologin        // 禁止用户登陆
[root@elk-node2 ~]# echo 'haproxy' | passwd haproxy --stdin            //  修改用户  haproxy 的密码为 'haproxy'
  1. 下载
[root@elk-node2 ~]# cd /usr/local/src/
[root@elk-node2 src]# wget http://www.haproxy.org/download/1.7/src/haproxy-1.7.10.tar.gz  
    https://src.fedoraproject.org/repo/pkgs/haproxy/
  1. 安装gcc
[root@elk-node2 ~]# yum install -y gcc
  1. 编译安装
[root@elk-node2 ~]# tar -zxvf haproxy-1.7.10.tar.gz
[root@elk-node2 ~]# cd haproxy-1.7.10
[root@elk-node2 ~]# make TARGET=linux2628 PREFIX=/usr/local/haproxy ARCH=x86_64 
                        make TARGET=linux2628 PREFIX=/usr/local/haproxy ARCH=x86_64
[root@elk-node2 ~]# make install PREFIX=/usr/local/haproxy
--------------------------------------------------------------------------------------------------------------
    install -d "/usr/local/haproxy/sbin"
    install haproxy  "/usr/local/haproxy/sbin"
    install -d "/usr/local/haproxy/share/man"/man1
    install -m 644 doc/haproxy.1 "/usr/local/haproxy/share/man"/man1
    install -d "/usr/local/haproxy/doc/haproxy"
    for x in configuration management architecture cookie-options lua WURFL-device-detection proxy-protocol linux-syn-cookies network-namespaces DeviceAtlas-device-detection 51Degrees-device-detection netscaler-client-ip-insertion-protocol close-options SPOE intro; do \
        install -m 644 doc/$x.txt "/usr/local/haproxy/doc/haproxy" ; \
--------------------------------------------------------------------------------------------------------------
--修改权限,执行命令
[root@elk-node2 ~]# cd /usr/local/haproxy
[root@elk-node2 ~]# chown -R haproxy.haproxy *
--添加配置文件
[root@elk-node2 ~]# mkdir conf
[root@haproxy-server-master haproxy]# ls
conf  doc  sbin  share
[root@haproxy-server-master haproxy]# cd conf/
[root@haproxy-server-master conf]# vim haproxy.cfg
-------------------------------------------------------------------------------------------------------------------
global
        log 127.0.0.1   local0
        maxconn 1000
        daemon

defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        retries 3
        timeout connect 5000
        timeout client  50000
        timeout server 50000

listen admin_stats
        bind 0.0.0.0:1080
        mode http
        option httplog
        maxconn 10
        stats refresh 30s
        stats uri /stats
        stats realm XingCloud\ Haproxy
        stats auth admin:admin
        stats auth  Frank:Frank
        stats hide-version
        stats  admin if TRUE
-------------------------------------------------------------------------------------------------------------------
防火墙中打开 1080 端口和 8866、9966 端口
# vim /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8866 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 9966 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 1080 -j ACCEPT
重启防火墙
# service iptables restart
  1. 启动haproxy
[root@elk-node2 ~]# /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/conf/haproxy.cfg

#验证一下是否启动成功:
[root@haproxy-server-master conf]# lsof -i :1080
-------------------------------------------------------------------------------------------------------------------
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
haproxy 2221 root    3u  IPv4  20285      0t0  TCP *:socks (LISTEN)
-------------------------------------------------------------------------------------------------------------------

#访问统计页面 http://192.168.40.134:1080/stats
  1. 安装rsyslog 软件(处理日志)
#查询是否有安装rsyslog 软件
[root@elk-node2 ~]# rpm -qa | grep rsyslog 
#安装 rsyslog(如未安装则如下命令安装)
[root@haproxy-server-master /]# yum -y install rsyslog

#error文件复制
[root@elk-node2 ~]# cp -r /usr/local/src/haproxy-1.7.10/examples/errorfiles/ /usr/local/haproxy/
    
#日志文件,创建文件
[root@elk-node2 ~]# mkdir -p /usr/local/haproxy/log
[root@elk-node2 ~]# touch /usr/local/haproxy/log/haproxy.log
[root@elk-node2 ~]# ln -s /usr/local/haproxy/log/haproxy.log /var/log/
[root@elk-node2 ~]# chown haproxy:haproxy /var/log/haproxy.log
    
[root@elk-node2 ~]# touch /usr/local/haproxy/log/haproxy_warn.log
[root@elk-node2 ~]# ln -s /usr/local/haproxy/log/haproxy_warn.log /var/log/
[root@elk-node2 ~]# chown haproxy:haproxy /var/log/haproxy_warn.log

#rsyslog主配置文件
[root@elk-node2 ~]# vim /etc/sysconfig/rsyslog
    SYSLOGD_OPTIONS="-c 2 -r -m 0"

#修改”SYSLOGD_OPTIONS”参数,-c 2 使用兼容模式,默认是 -c 5;-r 开启远程日志;-m 0 标记时间戳,单位是分钟,0表示禁用该功能。

#rsyslog文件
[root@elk-node2 ~]# cd /etc/rsyslog.d/
[root@elk-node2 rsyslog.d]# touch haproxy.conf
[root@elk-node2 rsyslog.d]# chown haproxy:haproxy haproxy.conf
[root@elk-node2 rsyslog.d]# vim haproxy.conf
---------------------------------------------------------------
    # Provides UDP syslog reception
    $ModLoad imudp
    $UDPServerRun 514
    # haproxy.log
    # 
    local0.* /usr/local/haproxy/log/haproxy_warn.log
    local1.* /usr/local/haproxy/log/haproxy.log
    #local2.* /usr/local/haproxy/log/haproxy.log
    &~
-----------------------------------------------------------------------


#SELinux 关闭
[root@elk-node2 rsyslog.d]# setenforce 0

[root@elk-node2 rsyslog.d]# vim /etc/selinux/config
    将SELINUX=enforcing改为SELINUX=disabled

#重启rsyslog
[root@elk-node2 rsyslog.d]# systemctl restart rsyslog.service   
#haproxy默认没有日志,依靠rsyslog收集日志;
#文件最末尾的“&~”,如果没有此配置,日志除写入指定文件外,会同步写入messages文件;
#关闭selinux,本文因没有关闭selinux导致排查问题用了半天时间。

#配置文件权限及软链接
--------------[root@elk-node2 ~]# mkdir -p /usr/local/haproxy/stats------
--------------[root@elk-node2 ~]# chown -R haproxy:haproxy /usr/local/haproxy/stats------
    
[root@elk-node2 ~]# chown -R haproxy:haproxy /usr/local/haproxy/
[root@elk-node2 ~]# mkdir -p /etc/haproxy
[root@elk-node2 ~]# ln -s /usr/local/haproxy/conf/haproxy.cfg /etc/haproxy/
[root@elk-node2 ~]# chown -R haproxy:haproxy /etc/haproxy

#配置开机启动
[root@elk-node2 ~]# cp /usr/local/src/haproxy-1.7.10/examples/haproxy.init /etc/rc.d/init.d/haproxy
[root@elk-node2 ~]# chown haproxy:haproxy /etc/rc.d/init.d/haproxy
[root@elk-node2 ~]# chmod +x /etc/rc.d/init.d/haproxy

#配置全局启动文件
[root@elk-node2 ~]# ln -s /usr/local/haproxy/sbin/haproxy /usr/sbin/
[root@elk-node2 ~]# chown haproxy:haproxy /usr/sbin/haproxy
[root@elk-node2 ~]#
#启动并验证
[root@elk-node2 ~]# service haproxy start
#端口验证
[root@elk-node2 ~]#  netstat -tunlp
#检查haproxy 状态
[root@elk-node2 ~]# systemctl status haproxy.service
  1. 用logrotate进行日志切分
#通过rsyslog输出的日志是不会进行切分的,所以需要依靠Linux提供的logrotate来进行切分工作
#使用root用户,创建haproxy日志切分配置文件:

[root@elk-node2 ~]# mkdir /root/logrotate
[root@elk-node2 ~]# vim /root/logrotate/haproxy
---------------------------------------------------------------------------------------------------
/usr/local/haproxy/log/haproxy.log /usr/local/haproxy/log/haproxy_warn.log 
{  
    #切分的两个文件名
    daily        #按天切分
    rotate 7     #保留7份
    create 0644 haproxy haproxy  #创建新文件的权限、用户、用户组
    compress     #压缩旧日志
    delaycompress  #延迟一天压缩
    missingok    #忽略文件不存在的错误
    dateext      #旧日志加上日志后缀
    sharedscripts  #切分后的重启脚本只运行一次
    postrotate   #切分后运行脚本重载rsyslog,让rsyslog向新的日志文件中输出日志
    /bin/kill -HUP $(/bin/cat /var/run/syslogd.pid 2>/dev/null) &>/dev/null
    endscript
}
-----------------------------------------------------------------------------------------------------------
#并配置在crontab中运行:
#查看/etc/crontab文件
[root@elk-node2 ~]# vim  /etc/crontab
------------------------------------------------------------------------------
0 0 * * * /usr/sbin/logrotate /root/logrotate/haproxy
---------------------------------------------------------------------------------
  1. 查看/usr/local/haproxy/conf/haproxy.cfg 配置文件
[root@elk-node2 ~]# cat /usr/local/haproxy/conf/haproxy.cfg
-----------------------------------------------------------------------------------------------------------
#全局配置, 用于设定义全局参数, 属于进程级的配置, 通常与操作系统配置有关.
global
    #定义全局日志, 配置在本地, 通过local0 输出, 默认是info级别,可配置两条
    log 127.0.0.1 local0 warning
    #定义日志级别【error warning info debug】
    log 127.0.0.1 local1 info
      
    #运行路径
    chroot /usr/local/haproxy
    #PID 文件存放路径
    pidfile /var/run/haproxy.pid
      
    #设置每haproxy进程的最大并发连接数, 其等同于命令行选项“-n”; “ulimit -n”自动计算的结果参照此参数设定.
    maxconn 4096
      
    #运行haproxy 用户, 或者使用关键字uid
    user haproxy
    #运行haproxy 用户组, 或者使用关键字gid
    group haproxy
      
    #后台运行haproxy
    daemon
   
    #设置启动的haproxy进程数量, 只能用于守护进程模式的haproxy;
    #默认只启动一个进程, 鉴于调试困难等多方面的原因, 一般只在单进程仅能打开少数文件描述符的场景中才使用多进程模式.
    nbproc 1
    #设置每进程所能够打开的最大文件描述符数目, 默认情况其会自动进行计算, 因此不推荐修改此选项.
    #ulimit-n 819200
      
    #调试级别, 一般只在开启单进程时调试, 且生产环境禁用.
    #debug
    #haproxy启动后不会显示任何相关信息, 这与在命令行启动haproxy时加上参数“-q”相同
    #quiet
      
    #定义统计信息保存位置
    stats socket /usr/local/haproxy/stats

#默认配置 
defaults
    #默认的模式【tcp:4层; http:7层; health:只返回OK】
    mode http
      
    #继承全局的日志定义输出
    log global
      
    #日志类别, httplog
    #option httplog
   
    #如果后端服务器需要记录客户端真实ip, 需要在HTTP请求中添加”X-Forwarded-For”字段;
    #但haproxy自身的健康检测机制访问后端服务器时, 不应将记录访问日志,可用except来排除127.0.0.0,即haproxy本身.
    #option forwardfor except 127.0.0.0/8
    option forwardfor
   
    #开启http协议中服务器端关闭功能, 每个请求完毕后主动关闭http通道, 使得支持长连接,使得会话可以被重用,使得每一个日志记录都会被记录.
    option httpclose
   
    #如果产生了一个空连接,那这个空连接的日志将不会记录.
    option dontlognull
   
    #当与后端服务器的会话失败(服务器故障或其他原因)时, 把会话重新分发到其他健康的服务器上; 当故障服务器恢复时, 会话又被定向到已恢复的服务器上;
    #还可以用”retries”关键字来设定在判定会话失败时的尝试连接的次数
    option redispatch
    retries 3
      
    #当haproxy负载很高时, 自动结束掉当前队列处理比较久的链接.
    option abortonclose
   
    #默认http请求超时时间
    timeout http-request 10s
    #默认队列超时时间, 后端服务器在高负载时, 会将haproxy发来的请求放进一个队列中.
    timeout queue 1m
    #haproxy与后端服务器连接超时时间.
    timeout connect 5s
    #客户端与haproxy连接后, 数据传输完毕, 不再有数据传输, 即非活动连接的超时时间.
    timeout client 1m
    #haproxy与后端服务器非活动连接的超时时间.
    timeout server 1m
    #默认新的http请求连接建立的超时时间,时间较短时可以尽快释放出资源,节约资源.
    timeout http-keep-alive 10s
    #心跳检测超时时间
    timeout check 10s
      
    #最大并发连接数
    maxconn 2000
      
    #设置默认的负载均衡方式
    #balance source
    #balnace leastconn

#统计页面配置, frontend和backend的组合体, 监控组的名称可按需自定义
listen admin_status
    #配置监控运行模式
    mode http
      
    #配置统计页面访问端口
    bind 0.0.0.0:1080
      
    #统计页面默认最大连接数
    maxconn 10
      
    #http日志格式
    option httplog
      
    #开启统计
    stats enable
      
    #隐藏统计页面上的haproxy版本信息
    stats hide-version
      
    #监控页面自动刷新时间
    stats refresh 30s
      
    #统计页面访问url
    stats uri /stats
      
    #统计页面密码框提示文本
    stats realm mCloud\ Haproxy
      
    #监控页面的用户和密码:admin, 可设置多个用户名
    stats auth admin:admin
      
    #手工启动/禁用后端服务器, 可通过web管理节点
    stats admin if TRUE
    #设置haproxy错误页面
    errorfile 400 /usr/local/haproxy/errorfiles/400.http
    errorfile 403 /usr/local/haproxy/errorfiles/403.http
    errorfile 408 /usr/local/haproxy/errorfiles/408.http
    errorfile 500 /usr/local/haproxy/errorfiles/500.http
    errorfile 502 /usr/local/haproxy/errorfiles/502.http
    errorfile 503 /usr/local/haproxy/errorfiles/503.http
    errorfile 504 /usr/local/haproxy/errorfiles/504.http
        
listen allmycat_service
        bind 0.0.0.0:8866 ##转发到 mycat 的 8066 端口,即 mycat 的服务端口
        mode tcp
        option tcplog
        option httpchk OPTIONS * HTTP/1.1\r\nHost:\ www
        balance roundrobin       ## 定义负载均衡算法,可用于"defaults"、"listen"和"backend"中,默认为轮询方式 
        server mycat_101 192.168.40.101:8066 check port 48700 inter 5s rise 2 fall 3 weight 10
        server mycat_102 192.168.40.102:8066 check port 48700 inter 5s rise 2 fall 3 weight 10
        
        ## 格式:server <name> <address>[:[port]] [param*]
        ### serser 在后端声明一个server,只能用于listen和backend区段。
        ### <name>为此服务器指定的内部名称,其将会出现在日志及警告信息中
        ### <address>此服务器的IPv4地址,也支持使用可解析的主机名,但要在启动时需要解析主机名至响应的IPV4地址
        ### [:[port]]指定将客户端连接请求发往此服务器时的目标端口,此为可选项
        ### [param*]为此server设定的一系列参数,均为可选项,参数比较多,下面仅说明几个常用的参数:
        #### weight:权重,默认为1,最大值为256,0表示不参与负载均衡
        #### backup:设定为备用服务器,仅在负载均衡场景中的其他server均不可以启用此server
        #### check:启动对此server执行监控状态检查,其可以借助于额外的其他参数完成更精细的设定
        #### inter:设定监控状态检查的时间间隔,单位为毫秒,默认为2000,
        ##### 也可以使用fastinter和downinter来根据服务器端专题优化此事件延迟
        #### rise:设置server从离线状态转换至正常状态需要检查的次数(不设置的情况下,默认值为2)
        #### fall:设置server从正常状态转换至离线状态需要检查的次数(不设置的情况下,默认值为3)
        #### cookie:为指定server设定cookie值,此处指定的值将会在请求入站时被检查,
        ##### 第一次为此值挑选的server将会被后续的请求所选中,其目的在于实现持久连接的功能
        #### maxconn:指定此服务器接受的最大并发连接数,如果发往此服务器的连接数目高于此处指定的值,
        #####其将被放置于请求队列,以等待其他连接被释放

listen allmycat_admin
        bind :9966 ##转发到 mycat 的 9066 端口,即 mycat 的管理控制台端口
        mode tcp
        option tcplog
        option httpchk OPTIONS * HTTP/1.1\r\nHost:\ www
        balance roundrobin
        server mycat_101 192.168.40.101:9066 check port 48700 inter 5s rise 2 fall 3
        server mycat_101 192.168.40.102:9066 check port 48700 inter 5s rise 2 fall 3


#监控haproxy后端服务器的监控状态
#listen site_status
#       bind 0.0.0.0:1081 #监听端口
#       mode http #http的7层模式
#       log 127.0.0.1 local2 err #[err warning info debug]
#       monitor-uri /site_status #网站健康检测URL,用来检测HAProxy管理的网站是否可以用,正常返回200,不正常返回503
#       acl site_dead nbsrv(php_server) lt 1 #定义网站down时的策略当挂在负载均衡上的指定backend的中有效机器数小于1台时返回true
#       acl site_dead nbsrv(html_server) lt 1
#       acl site_dead nbsrv(backend_default) lt 1 
#       monitor fail if site_dead #当满足策略的时候返回503,网上文档说的是500,实际测试为503
#       monitor-net 192.168.4.171/32 #来自192.168.4.152的日志信息不会被记录和转发
#       monitor-net 192.168.4.172/32
      
#frontend, 名字自定义
#frontend HAproxy_Cluster
    #定义前端监听端口, 建议采用bind *:80的形式,否则做集群高可用的时候有问题,vip切换到其余机器就不能访问.
#    bind 0.0.0.0:80
  
    #acl后面是规则名称,当请求的url末尾是以.php结尾时,匹配触发php_web规则,以下两种写法均可.
 
    #当请求的url末尾是以.css、.jpg、.png、.jpeg、.js、.gif结尾时,匹配并触发static_web规则.
    #acl static_web path_end .gif .png .jpg .css .js .jpeg
    #acl static_web url_reg /*.(css|jpg|png|jpeg|js|gif)$
    #-i为忽略大小写,当被请求的是以www.test.com开头的主机时,匹配并触发dns_name规则.
#    acl html_web hdr_beg(host) -i www.haproxytest.com
    #acl html_web hdr_beg(host) 10.11.4.152
    #当客户端的IP是x.x.x.x时,匹配并触发src_ip规则.
    #acl src_ip src x.x.x.x
    #如果匹配acl规则php_web,将请求转交到php_server组处理;如果匹配acl规则html_web,将请求转交到html_server组处理.
#    use_backend php_server if php_web
#    use_backend html_server if html_web
    #如果以上规则都不匹配时,将请求转交到default_backend组处理.
#    default_backend backend_default

#backend后端配置, 配置php_server组与html_server组
#backend php_server
    #定义负载均衡方式为roundrobin方式, 即基于权重进行轮询调度的算法, 在服务器性能分布较均匀情况下推荐.
    #另有如下几种负载均衡方式:
    #-- static-rr: 也是基于权重进行轮转调度, 但属于静态方法, 运行时调整后端机组权重不会使用新的权重;
    #-- source: 基于请求源IP进行hash运算匹配后端服务器组;
    #-- leastconn: 不适合会话较短的环境, 如基于http的应用;
    #-- uri: 对整个URI进行hash运算;
    #-- uri_param: 对URI中的参数进行转发;
    #-- hdr(<name>):根据http头进行转发, 无该头部则转为使用roundrobin.
#    balance roundrobin
#    mode http
    #允许插入serverid到cookie中,serverid后面可定义
#    cookie SERVERID
    #心跳检测方式为检测后端服务器index.html文件,还有其他方式
#    option httpchk GET /index.html
    #后端服务器定义, maxconn 1024表示该服务器的最大连接数, cookie 1表示serverid为1, weight代表权重(默认1,最大为265,0则表示不参与负载均衡),
    #check inter 1500是检测心跳频率, rise 2是2次正确认为服务器可用, fall 3是3次失败认为服务器不可用.
#    server php1 192.168.4.171:80 maxconn 1024 cookie 1 weight 3 check inter 1500 rise 2 fall 3

#backend html_server
#    balance source
#    mode http
#    server html1 192.168.4.172:80 maxconn 1024 cookie 1 weight 3 check inter 1500 rise 2 fall 3

#backend backend_default
#    balance source
#    mode http
#    server default1 192.168.4.171:80 maxconn 1024 cookie 1 weight 3 check inter 1500 rise 2 fall 3
-----------------------------------------------------------------------------------------------------------

参考如下资料
https://blog.csdn.net/u012758088/article/details/78642063
https://www.jianshu.com/p/c9f6d55288c0
http://blog.chinaunix.net/uid-26168435-id-5761429.html

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

推荐阅读更多精彩内容