利用RadonDB實(shí)現(xiàn)MySQL分庫(kù)分表

利用RadonDB實(shí)現(xiàn)MySQL分庫(kù)分表

RadonDB是青云上提供的MySQL分布式解決方案,提供數(shù)據(jù)庫(kù)的透明拆分及高可用服務(wù)想际。RadonDB包括Radon, Xenon, MySQL三部分安裝嘱蛋。其中Radon修陡,Xenon官方?jīng)]有發(fā)行二進(jìn)制包邀桑,需要編譯安裝, MySQL可以使用官方編譯后的版本安裝工窍,但需要使用MySQL 5.7這個(gè)版本割卖。在以下文檔安裝過(guò)程中如果遇到問(wèn)題請(qǐng)及時(shí)的反饋?zhàn)髡撸篞Q/Weixin: 82565387

本文內(nèi)容較長(zhǎng)大致分為:

  • 環(huán)境基本情況介紹

  • 編譯環(huán)境準(zhǔn)備

  • Xenon編譯安裝

  • Radon 編譯安裝

  • MySQL安裝部署及啟動(dòng)

  • Xtrabackup安裝

  • Xenon安裝部署

  • Xenon的基本管理

  • Radon安裝布署

  • Radon集群安裝

  • 小結(jié)

其中MySQL的配置限于文章長(zhǎng)度,這里不在放在文中患雏,如果需要聯(lián)系作者獲取即可究珊。

環(huán)境基本情況介紹

·.png

在環(huán)境安裝環(huán)節(jié),大致可以分為:radon和 xenon(包含:MySQL, xtrabackup)的安裝部署纵苛。

編譯環(huán)境準(zhǔn)備

Golang安裝需要在編譯機(jī)上安裝即可剿涮,其它機(jī)器不用安裝。

  • 下載go1.13.4安裝包
# wget https://dl.google.com/go/go1.13.4.linux-amd64.tar.gz
  • 解壓安裝包
# tar -xvf go1.13.4.linux-amd64.tar.gz -C /usr/local
  • 修改環(huán)境變量 在~/.bash_profile末尾添加一行
export PATH=$PATH:/usr/local/go/bin
# source ~/.bash_profile
  • 驗(yàn)證Go安裝是否成功
# go version
go version go1.13.4 linux/amd64

Xenon編譯安裝

  • 下載源代碼 & 編譯
# git clone https://github.com/radondb/xenon.git
# cd xenon
# make

確認(rèn)bin目錄下生成了: xenon攻人,xenoncli 便大功告成取试。

  • 簡(jiǎn)單的打包:
mkdir xenon
cp -r bin xenon
cp xenon.json xenon
echo "/etc/xenon/xenon.json"  >xenon/bin/config.path

其中xenon.json 后面需要根據(jù)機(jī)器的IP修改一下。把這個(gè)xenon同步復(fù)制到 :172.16.0.150怀吻, 172.16.0.151 瞬浓,172.16.0.152的/data目錄下:

scp -r xenon root@172.16.0.150:/data/
scp -r xenon root@172.16.0.151:/data/
scp -r xenon root@172.16.0.152:/data/

Radon 編譯安裝

  • 下載Radon&編譯
# git clone https://github.com/radondb/radon
# cd radon
# make

沒(méi)有報(bào)錯(cuò),確認(rèn)bin目錄下生成 radon

ls -l bin/
total 17024
-rwxr-xr-x 1 root root 17431669  Nov  15  11:11 radon
  • 簡(jiǎn)單打包
mkdir radon
cp -r bin radon/
cp conf/radon.default.json radon/bin/

后續(xù)對(duì)于部署radon節(jié)點(diǎn)蓬坡,直接復(fù)制 radon 這個(gè)目錄即可

scp -r radon root@172.16.0.121:/data/

MySQL安裝部署及啟動(dòng)

MySQL 需要在三臺(tái)Xenon角色的機(jī)器上都安裝猿棉,安裝步驟一樣,這里不再重復(fù)屑咳。下面給一個(gè)統(tǒng)一的安裝方式萨赁。

  1. 下載mysql
cd /data
  1. MySQL軟件路徑 :
mkdir /opt/mysql

3. 創(chuàng)建數(shù)據(jù)庫(kù)相關(guān)目錄:

mkdir /data/mysql/ -p

4. 創(chuàng)建mysql用戶(hù)&更改權(quán)限

同時(shí)更改一下mysql用戶(hù)的密碼,方便后續(xù)使用(建議ssh信任使用)兆龙,按個(gè)人習(xí)慣更改密碼杖爽。

groupadd mysql
  1. 更改權(quán)限
chown -R mysql:mysql /data/mysql/mysql3306

配置文參考 /data/mysql/mysql3306/my3306.cnf公眾號(hào)中沒(méi)辦法放置配置文件,如果需要聯(lián)系作者獲取

  1. 初始化
/usr/local/mysql/bin/mysqld --defaults-file=/data/mysql/mysql3306/my3306.cnf  --initialize

確認(rèn)沒(méi)有錯(cuò)誤提示,從error log中找到初始化的密碼慰安。

grep  "password" /data/mysql/mysql3306/data/error.log

7. 啟動(dòng)MySQL

/usr/local/mysql/bin/mysqld_safe --defaults-file=/data/mysql/mysql3306/my3306.cnf &

8. 進(jìn)入mysql更改密碼腋寨。

/usr/local/mysql/bin/mysql -S /tmp/mysql3306.sock -p

9. 關(guān)閉MySQL

/usr/local/mysql/bin/mysql -S /tmp/mysql3306.sock -p
  1. 創(chuàng)建帳號(hào)

測(cè)試用服務(wù)帳號(hào)

create user 'wubx'@'%' identified by 'wubxwubx';
grant all privileges on *.* to 'wubx'@'%';

MySQL復(fù)制使用帳號(hào)

create user 'repl'@'%' identified by 'repl4slave';
grant replication slave on *.* to 'repl'@'%';

11. 為MySQL加載半同步需要plugin

進(jìn)入MySQL執(zhí)行:

set global super_read_only=0;
set global read_only=0;
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';     

構(gòu)建成主從結(jié)構(gòu) 三臺(tái)機(jī)器最終構(gòu)建成基于GTID的復(fù)制結(jié)構(gòu),就完成了MySQL的安裝化焕。

Xtrabackup安裝

三臺(tái)xenon的機(jī)器上都需要安裝:

#wget https://www.percona.com/downloads/Percona-XtraBackup-2.4/Percona-\
XtraBackup-2.4.16/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.16-1.el7.x86_64.rpm

安裝xtrbackup24

#yum localinstall -y percona-xtrabackup-24-2.4.16-1.el7.x86_64.rpm

確認(rèn)無(wú)報(bào)錯(cuò)

利用 xtrabackup --version 驗(yàn)證有正確的結(jié)果輸出萄窜。

xtrabackup --version
xtrabackup: recognized server arguments:
xtrabackup version 2.4.16 based on MySQL server 5.7.26  Linux  (x86_64)  (revision id: c807cfa)

Xenon安裝部署

xenon的環(huán)境搭建,包括現(xiàn)有MySQL想引入xenon實(shí)現(xiàn)MySQL高可用需要把握以下幾點(diǎn):

1. 把MySQL的半同步plugin加載上去

2. 對(duì)外服務(wù)IP是在xenon.json配置文件中l(wèi)eader-start-command 這個(gè)項(xiàng)成為leader時(shí)觸發(fā)撒桨,如果我們使用的普通用戶(hù)運(yùn)行xenon查刻,還需要給該用戶(hù)配置sudo 相關(guān)權(quán)限。

3. xenon的rebuildme需要xenon.json中backup中"ssh-user" 指定的用戶(hù)打通ssh信任元莫,或是指定正確的密碼。

  1. Xenon中發(fā)生選舉后蝶押,新的服務(wù)節(jié)點(diǎn)一定要對(duì)外發(fā)起arping , 請(qǐng)參考xenon.json中"leader-start-command" 的定義踱蠢。
  • 基于編譯機(jī)上編譯copy過(guò)來(lái)的xenon部署。
cd /data/xenon
mkdir /etc/xenon
mv xenon.json /etc/xenon/
chown -R mysql:mysql /etc/xenon
chown -R mysql:mysql /data/xenon
  • xenon的配置xenon.json
{
     "server":
     {
             "endpoint":"172.16.0.150:8801"
     },
    
     "raft":
     {
             "meta-datadir":"raft.meta",
             "heartbeat-timeout":1000,
             "election-timeout":3000,
             "leader-start-command":"sudo /sbin/ip a a 172.18.0.100/16 dev eth0 && arping -c 3 -A  172.18.0.100  -I eth0",
             "leader-stop-command":"sudo /sbin/ip a d 172.18.0.100/16 dev eth0"
     },
    
     "mysql":
     {
             "admin":"root",
             "passwd":"",
             "host":"127.0.0.1",
             "port":3306,
             "basedir":"/usr/local/mysql",
             "defaults-file":"/data/mysql/mysql3306/my3306.cnf",
             "ping-timeout":1000,
             "master-sysvars":"super_read_only=0;read_only=0;sync_binlog=default;innodb_flush_log_at_trx_commit=default",
             "slave-sysvars":                 "super_read_only=1;read_only=1;sync_binlog=1000;innodb_flush_log_at_trx_commit=2"
     },
    
     "replication":
     {
             "user":"repl",
             "passwd":"repl4slave"
     },
    
     "backup":
     {
             "ssh-host":"172.16.0.150",
             "ssh-user":"mysql",
             "ssh-passwd":"mysql",
             "ssh-port":22,
             "backupdir":"/data/mysql/mysql3306/data",
             "xtrabackup-bindir":"/usr/bin",
             "backup-iops-limits":100000,
             "backup-use-memory":  "1GB",
             "backup-parallel":  2
      },
      "rpc":
      {
             "request-timeout":500
      },
    
      "log":
      {
             "level":"INFO"
      }
}

對(duì)于xenon的配置文件在三臺(tái)機(jī)器上注意IP處理一下就可以,每臺(tái)機(jī)器換成自已的IP即可棋电。對(duì)于Xenon的配置茎截,從實(shí)踐來(lái)看遇到遇到最多的問(wèn)題忘了做arpping 造成 集群切換時(shí)新節(jié)點(diǎn)VIP對(duì)外生效。

  • 配置sudo 相關(guān)權(quán)限 需要xenon所在的機(jī)器上利用root執(zhí)行
visudo

添加:

mysql ALL=(ALL) NOPASSWD: /usr/sbin/ip

  • 為Xenon中節(jié)點(diǎn)自動(dòng)重建準(zhǔn)備,為xenon的rebuildme準(zhǔn)備一個(gè)ssh信任赶盔。該ssh 信任是需要用Xenon啟動(dòng)的帳號(hào), 在172.16.0.150上執(zhí)行
su - mysql
ssh-keygen
一路回車(chē)
cd .ssh
cat id_rsa.pub >authorized_keys
rm known_hosts
chmod 600  *

把.ssh 目錄分發(fā)到其它兩臺(tái)機(jī)器上

scp -r .ssh mysql@172.16.0.151:~/
scp -r .ssh mysql@172.16.0.152:~/

測(cè)試ssh信任是不是工作ok企锌。

ssh 172.16.0.151
ssh 172.16.0.150
ssh 172.16.0.152
  • 安裝sshpass
yum install -y sshpass

Xenon的基本管理

  • 啟動(dòng)xenon:
su - mysql
cd /data/xenon
nohup ./bin/xenon -c /etc/xenon/xenon.json >./xenon.log 2>&1  &

生產(chǎn)中推薦使用:screen 或是supervisor

  • 關(guān)閉: xenon:
pkill xenon
  • xenon的raft節(jié)點(diǎn)間通信 在xenon進(jìn)程啟動(dòng)的情況下,執(zhí)行(這個(gè)動(dòng)作需要在三個(gè)節(jié)點(diǎn)上都要執(zhí)行)
./bin/xenoncli cluster add 172.16.0.150:8801,172.16.0.151:8801,172.16.0.152:8801

-節(jié)點(diǎn)成員狀態(tài)查看

./bin/xenoncli cluster raft

提示 ./bin/xenoncli cluster add 172.16.0.150:8801,172.16.0.151:8801,172.16.0.152:8801 后面的節(jié)點(diǎn)成員不要出現(xiàn)空格于未。到這里xenon部署完成撕攒。下面讓我們檢查一下xenon是不是可以工作起來(lái)。

  • xenon工作情況檢查
  1. 節(jié)點(diǎn)成員狀態(tài)是不是正常
/data/xenon/bin/xenoncli cluster status
image

從上圖可以看到目前l(fā)eader節(jié)點(diǎn)是172.16.0.152 這個(gè)節(jié)點(diǎn) 可以去這個(gè)節(jié)點(diǎn)上查看一下是不是擁有服務(wù)IP烘浦。

  1. leader節(jié)點(diǎn)是不是有服務(wù)IP及關(guān)閉了只讀狀態(tài)

[root@dzst152 xenon]#ip addr show

image

3. 把152上MySQL關(guān)閉看看會(huì)不會(huì)切換 mysql> shutdown;

[root@dzst152 xenon]# ./bin/xenoncli cluster status

image

從圖上看leader節(jié)點(diǎn)切換到151這臺(tái)機(jī)器上抖坪。可以去151上查看一下服務(wù)ip是不是切換過(guò)去闷叉。而且神奇的發(fā)現(xiàn)172.16.0.152上的MySQL又被Xenon 拉起來(lái)擦俐。

4. 節(jié)點(diǎn)重建

這個(gè)屬于一個(gè)新的運(yùn)維理念∥詹啵可以把故障分為已知自動(dòng)可修復(fù)蚯瞧,已知但不可能自動(dòng)修復(fù)(重建), 未知故障節(jié)點(diǎn)下線品擎,新加入節(jié)點(diǎn)重建加入埋合。xenon在這里也引入了這樣的理念。節(jié)點(diǎn)重建在xenon中引入了一個(gè)保護(hù)萄传,只對(duì)從節(jié)點(diǎn)可以重建饥悴,主節(jié)點(diǎn)不能在線重建。

基于上面的情況,我這里對(duì)dzst152重建一下西设。

./bin/xenoncli mysql rebuildme
image

從以上流程上看xenon的的節(jié)點(diǎn)重建是封裝了xtrabackup的備份及恢復(fù)瓣铣,自動(dòng)重建一個(gè)節(jié)點(diǎn)。

5. 通過(guò)xenon提供服務(wù)IP連接MySQL

mysql -h 172.16.0.100  -P3306 -uwubx -pwubxwubx

其中IP要指向提供的服務(wù)IP贷揽,這個(gè)IP有點(diǎn)VIP的感覺(jué)棠笑,但這個(gè)只是在leader機(jī)器的網(wǎng)卡上多綁一個(gè)IP罷了,和利用VRRP搞定的VIP還是有區(qū)別的禽绪。所以在云上環(huán)境xenon也是可以跑的蓖救。到這里xenon的搭建告一段落,在RadonDB中有多組Xenon組成印屁,在Xenon中默認(rèn)架構(gòu)中也只有帶有服務(wù)節(jié)點(diǎn)的IP對(duì)外提供服務(wù)循捺。其它節(jié)點(diǎn)屬于standby狀態(tài)。當(dāng)然standby的機(jī)器也可以對(duì)外服務(wù)雄人。

Radon安裝布署

Radon 可以部署為獨(dú)立節(jié)點(diǎn)从橘,也可以部署為集群模式。Radon在定位上是做一個(gè)無(wú)狀態(tài)路由節(jié)點(diǎn)础钠,對(duì)業(yè)務(wù)層提供數(shù)據(jù)庫(kù)的分庫(kù)分表的能力恰力。

基于編譯的radon運(yùn)行

  • radon配置 /data/radon/bin/radon.json
{
        "proxy":  {
               "endpoint":  ":3306",
               "meta-dir":  "bin/radon-meta",
               "peer-address":  ":8080"
        },
        "audit":  {
                  "audit-dir":  "bin/radon-audit"
        },
        "log":  {
                  "level":  "INFO"
        },
        "monitor":  {
            "monitor-address":  "0.0.0.0:13380"
        }
}
  • 啟動(dòng)Radon
# /data/radon/bin/radon -c /data/radon/con/radon.json > radon.log 2>&1 &

為了方便查看,先直接把日志寫(xiě)到了當(dāng)前目前下面旗吁。

  • 向Radon中添加MySQL節(jié)點(diǎn)

目前Radon是通過(guò)開(kāi)放API接口的方式進(jìn)行集群管理踩萎,這樣方便開(kāi)發(fā)人員進(jìn)行定制化的開(kāi)發(fā),所以我們?cè)谂渲眠^(guò)程中也是通過(guò)調(diào)用Radon開(kāi)放的API接口進(jìn)行MySQL節(jié)點(diǎn)的添加很钓。Radon默認(rèn)采用8080為管理端口香府,3308為訪問(wèn)端口通過(guò)管理端口開(kāi)放API添加MySQL節(jié)點(diǎn)

#curl -i -H 'Content-Type: application/json' -X POST -d '{"name": "backend1", "address": "172.16.0.100:3306", "user":"wubx", "password": "wubxwubx", "max-connections":1024}' http://127.0.0.1:8080/v1/radon/backend

name表示后端節(jié)點(diǎn)的名稱(chēng),可自定義码倦,但要求唯一回还。

address表示要添加的MySQL的連接地址以及端口,這個(gè)建議指Xenon對(duì)外提供的服務(wù)IP叹洲;

userpassword表示用于連接MySQL的用戶(hù)名和密碼柠硕;

max-connections表示最大連接數(shù);

從API請(qǐng)求上看运提,這里也沒(méi)涉及到從庫(kù)的節(jié)點(diǎn)蝗柔。

如果添加節(jié)點(diǎn)成功會(huì)返回以下內(nèi)容:

HTTP/1.1  200 OK
Date:  Sat,  17  Nov  2018  06:23:49 GMT
Content-Length:  0
  • 通過(guò)RadonDB訪問(wèn)MySQL 這里可以通過(guò)后端Xenon數(shù)據(jù)庫(kù)上提供的任意用戶(hù)名和密碼連接到Radon上,Radon上對(duì)于認(rèn)證民泵,還是需要和后端做一次認(rèn)證處理癣丧,同時(shí)radon上也不保存用戶(hù)名和密碼。
# mysql -h 172.16.0.121 -P3306 -uwubx -pwubxwubx

連接接到radon操作

create database zst;
create table tb1(id bigint not  null auto_increment, c1 varchar(64), d1 datetime, primary key(id));
**Query OK,  0 rows affected (11.91 sec)**

從上面的操作上看栈妆, 創(chuàng)建一個(gè)單表為什么這么慢呢胁编?密秘就在: /data/radon/bin/radon-eta下面

image

從上面可以看出來(lái)radon厢钧,創(chuàng)建的db,對(duì)應(yīng)的在radon-meta下創(chuàng)建了一個(gè)目錄記錄著表創(chuàng)建情況,如:

image

在上圖中可以看出嬉橙, tb1屬于zst下面的一個(gè)表早直,利用id做hash拆分,總共創(chuàng)建了64個(gè)分片市框,對(duì)應(yīng)4096個(gè)slot, 在partions中標(biāo)明每個(gè)分片的名稱(chēng)及對(duì)應(yīng)的slot和后端的節(jié)點(diǎn)霞扬。后續(xù)擴(kuò)容就可以通過(guò)移動(dòng)分片到后面不同的Xenon上,從而實(shí)現(xiàn)擴(kuò)容枫振。

  • Radon的一些高級(jí)API

通過(guò)上面添加后面數(shù)據(jù)庫(kù)的操作喻圃,大家可能會(huì)有一個(gè)大概的感受:Radon是通過(guò)http restful api來(lái)控制配置。

完整API列表請(qǐng)查閱:https://github.com/radondb/radon/blob/master/docs/api.md

使用方法粪滤,例如獲取后面分區(qū)情況:

curl http://127.0.0.1:8080/v1/shard/shardz

其中我們大家可能比較感興趣的:Radon是如何擴(kuò)容的斧拍?

這個(gè)API: https://github.com/radondb/radon/blob/master/docs/api.md#shift

從這個(gè)API上看,目前只是提供一個(gè)radon的配置變更杖小,實(shí)質(zhì)的數(shù)據(jù)遷移還需要另外的工具配置完成肆汹, 從這點(diǎn)看青云的RadonDB后面還有不少自動(dòng)管理工作內(nèi)容并不是全在Radon中完成的。

Radon集群安裝

單節(jié)點(diǎn)的Radon工作并不能讓人放心窍侧,MySQL的高可用我們可以用Xenon搞定县踢。但現(xiàn)在Radon還是單點(diǎn)中转绷,下面我們?cè)诮oRadon也配置成cluster模式伟件。Radon原生支持高可用模式,配置在任意節(jié)點(diǎn)更改會(huì)自動(dòng)同步到其它節(jié)點(diǎn)上。

這里通過(guò)舉例看一下radon本身的cluster搭建议经。我們現(xiàn)在已經(jīng)有一個(gè)radon節(jié)點(diǎn):172.16.0.121 (master)接下來(lái)我們?cè)诖罱ㄒ粋€(gè)節(jié)點(diǎn):172.16.0.122 (slave)

在122上直接利用一個(gè)新的配置啟動(dòng)一個(gè)Radon/data/radon/bin/radon.json

{
          "proxy":  {
                 "endpoint":  ":3306",
                 "meta-dir":  "bin/radon-meta",
                 "peer-address":  ":8080"
          },
          "audit":  {
                 "audit-dir":  "bin/radon-audit"
          },
          "log":  {
               "level":  "INFO"
          },
               "monitor":  {
                   "monitor-address":  "0.0.0.0:13380"
          }
}

啟動(dòng)122上面的radon

/data/radon/bin/radon -c /data/radon/conf/radon.json >radon.log 2>&1  &
  • 原121上操作
curl -i -H 'Content-Type: application/json'  -X POST -d '{"address": "172.16.0.121:8080"}' http://172.16.0.121:8080/v1/peer/add
    
curl -i -H 'Content-Type: application/json'  -X POST -d '{"address": "172.16.0.122:8080"}' http://172.16.0.121:8080/v1/peer/add
  • 在122上操作
curl -i -H 'Content-Type: application/json'  -X POST -d '{"address": "172.16.0.121:8080"}' http://172.16.0.122:8080/v1/peer/add
    
curl -i -H 'Content-Type: application/json'  -X POST -d '{"address": "172.16.0.122:8080"}' http://172.16.0.122:8080/v1/peer/add

分別連接到兩個(gè)節(jié)點(diǎn)上操作:

mysql -h 172.16.0.121  -P3306 -uwubx -pwubxwubx
mysql -h 172.16.0.122  -P3306 -uwubx -pwubxwubx
    
insert into tb1(c1, d1) values(uuid(), now());
...
select  *  from tb1;
delete  from tb1 where id=  ?  ;  --  上面獲取的值執(zhí)行一下斧账。

到此Radondb Cluster也搭建完成。如果看完文檔還有問(wèn)題煞肾,可以留言或是加作者微信交流:82565387

小結(jié)

RadonDB是基于Golang構(gòu)建的MySQL高可用+分庫(kù)分表方案咧织,基本Xenon也可以獨(dú)立應(yīng)用于MySQL的高可用架構(gòu), Radon相當(dāng)于一個(gè)分庫(kù)分表的Proxy和Xenon并沒(méi)有特別的關(guān)聯(lián)籍救。對(duì)于生產(chǎn)中使用感覺(jué)也非常容易上手习绢。如果你在使用中遇到技術(shù)問(wèn)題或是其它需要技術(shù)支持的情況請(qǐng)聯(lián)系我。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蝙昙,一起剝皮案震驚了整個(gè)濱河市闪萄,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌奇颠,老刑警劉巖败去,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異烈拒,居然都是意外死亡圆裕,警方通過(guò)查閱死者的電腦和手機(jī)广鳍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)吓妆,“玉大人赊时,你說(shuō)我怎么就攤上這事」⒄剑” “怎么了蛋叼?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)剂陡。 經(jīng)常有香客問(wèn)我狈涮,道長(zhǎng),這世上最難降的妖魔是什么鸭栖? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任歌馍,我火速辦了婚禮,結(jié)果婚禮上晕鹊,老公的妹妹穿的比我還像新娘松却。我一直安慰自己,他們只是感情好溅话,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布晓锻。 她就那樣靜靜地躺著,像睡著了一般飞几。 火紅的嫁衣襯著肌膚如雪砚哆。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,292評(píng)論 1 301
  • 那天屑墨,我揣著相機(jī)與錄音躁锁,去河邊找鬼。 笑死卵史,一個(gè)胖子當(dāng)著我的面吹牛战转,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播以躯,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼槐秧,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了忧设?” 一聲冷哼從身側(cè)響起刁标,我...
    開(kāi)封第一講書(shū)人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎见转,沒(méi)想到半個(gè)月后命雀,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡斩箫,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年吏砂,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了撵儿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡狐血,死狀恐怖淀歇,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情匈织,我是刑警寧澤浪默,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站缀匕,受9級(jí)特大地震影響纳决,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜乡小,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一阔加、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧满钟,春花似錦胜榔、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至吠撮,卻和暖如春尊惰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背纬向。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工择浊, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留戴卜,地道東北人逾条。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像投剥,于是被迫代替她去往敵國(guó)和親师脂。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

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