SlideShare a Scribd company logo
1 of 58
Download to read offline
PhxSQL设计与实现
高可用强一致的MySQL集群
主讲人:陈俊超
目录
• 个人介绍
• 背景
• 思路
• 实现
• 效果
个人介绍
• 个人信息
– 2011年加入腾讯微信
– 微信后台中心高级工程师
• 个人经历
– 负责微信后台核心模块的设计和开发
• 查看附近的人,摇一摇,朋友圈
• 微信群聊,关系链
– 负责微信开源项目PhxSQL的设计和开发
原生MySQL的容灾缺陷
无法同时满足高可用和强一致
• 异步复制无法保证主备数据一致
• MySQL 5.7半同步增强了主备数据一致
MySQL常见复制方案
prepare commit
enqueue ……
request
Master
Slave
Time
prepare
enqueue
commit
……
ACK
Time
Master
Slave
binlog
binlog
response
request response
重启流程不执行半同步
prepare
commit
Semisync
restart
commit
Master Master
Slave
Slave
prepare
……
commit……
Binlog
Id=100
Id=101
Binlog
Id=100
Id=101
Id=101
Master
Crash
PendingBinlog
• http://bugs.mysql.com/bug.php?id=80395 • https://mariadb.atlassian.net/browse/MDEV-162
Master切换导致数据不一致
Master
Id=100
Id=101
Slave1
Id=100
Slave2
Id=100
Old Master
Id=100
Id=101
New Master
Id=100
Id=201
Slave2
Id=100
Id=201
Insert Data
Insert Data
Commit Id=101
旧Master比新Master多了Id=101数据,
旧Master无法成为新Master的Slave
Restart
Master切换导致幻读
Master
Id=100
Id=101
Slave1
Id=100
Slave2
Id=100
Old Master
Id=100
Id=101
New Master
Id=100
Slave2
Id=100
(1) Insert Data (3) Read Id=101 Fail
Master
Id=100
Id=101 CommitId=101
(2) Read Id=101 OK
Master切换导致调用端分裂
Slave1
Id=100
Slave2
Id=100
User1/User2
Old Master
Id=100
New Master
Id=100
Id=201
Slave2
Id=100
Id=201
User1仍然访问旧Master
Read Id=201 Fail
User2Master
Id=100
MySQL缺乏自动选主机制
Master
Id=99
Id=100
Id=101
Slave1
Id=99
Id=100
Id=101
Slave2
Id=99
Id=100
Insert Data
Slave1
Id=99
Id=100
Id=101
New Master
Slave2
Id=99
Id=100
MySQL无法同时满足高可用和强一致
• 主备数据不能保证一致
– Master重启并切换可能导致主备数据不一致
– Master重启并切换可能导致幻读
• 不能保证高可用
– Master切换导致调用端分裂
– 缺乏自动选主机制
• 二选一
– 要强一致,不做主备切换
– 借助MHA实现高可用,容忍主备数据不一致
PhxSQL设计思路
可靠日志存储和请求透传
以“可靠日志存储”为中心的架构
BinlogSvr
Id=100
Master
Id=100
Slave1
Id=100
Slave2
Id=100
用“可靠日志存储”校准重启过程
restart
commit
Master
BinlogSvr
Id=100check
Binlog
Id=100
Id=101
Binlog
Id=100
回顾:调用端分裂场景
Slave1
Id=100
Slave2
Id=100
User1/User2
Old Master
Id=100
New Master
Id=100
Id=201
Slave2
Id=100
Id=201
User1仍然访问旧Master
Read Id=201 Fail
User2Master
Id=100
用Proxy透传解决调用端通知问题
Slave1
Id=100
Slave2
Id=100
User1/User2
User1仍然访问旧Master
Master
Id=100
Id=101
Proxy
MySQL
Proxy
MySQL
Proxy
MySQL
Old Master
New Master Slave2
User不按规矩
去访问Slave2
MySQL
用Agent监控MySQL并发起选主
Agent
MySQL
Agent Agent
MySQL
BinlogSvr
Master=A
A
B C
Agent借助BinlogSvr的可靠日
志存储来实现选主,并把
Master信息保存在BinlogSvr
PhxSQL系统架构图
PhxSQLProxy
MySQL
PhxBinlogSvr
binlog
MInfo
PhxSQLProxy
MySQL
Phxsync
PhxBinlogSvr
binlog
MInfo
PhxSQLProxy
MySQL
PhxBinlogSvr
binlog
MInfo
User1 User2 User3
Slave
Data Read/Write Data Replication
Master Election/Query
Master Slave
PhxSQL实现
关键算法和流程
PhxSQL实现
• Proxy的功能和实现要点
• Phxsync的功能和实现要点
• Binlogsvr的功能和实现要点
Proxy要具备的功能
• 请求透传
– 读写端口请求透传
• 非Master节点收到的请求透传给Master节点
• Master节点收到的请求直接透传给MySQL
– 只读端口请求透传
• Master节点收到的请求透传给非Master节点
• 非Master节点收到的请求直接透传给MySQL
Proxy实现要点
• 请求透传
– 读写端口请求透传
– 只读端口请求透传
• 高性能
– 整个集群的读写性能与单机MySQL相当
• 完全兼容MySQL
– 调用端不需要修改
– 使用1:1模型兼容MySQL事务管理
– 透传源IP兼容IP权限设置
请求透传
PhxSQLProxy
MySQL
PhxBinlogSvr
MInfo
PhxSQLProxy
MySQL
User1
Slave Master
PhxSQLProxy
MySQL
PhxBinlogSvr
MInfo
PhxSQLProxy
MySQL
User1
Slave Master
PhxBinlogSvr
MInfo
PhxBinlogSvr
MInfo
读写请求端口 只读请求端口
User2 User2
用libco保证Proxy高性能
• Libco是微信团队开源的一个高性能协程库
– 用同步方式写代码,实现异步代码的性能
– 支持千万级的并发连接
• 项目地址
– https://github.com/tencent-wechat/libco
Proxy使用1:1模型兼容MySQL事务管理
• MySQL事务管理基于连接
– 同一个事务的所有请求通过同一个连接通信
– 在事务处理中途连接丢失,事务将被rollback
• http://dev.mysql.com/doc/refman/5.6/en/innodb-
autocommit-commit-rollback.html
• Proxy使用1:1连接模型能实现完全兼容
Proxy MySQL
User1
User2
User3
User4
Proxy透传源IP兼容权限设置
• MySQL需要源IP
– 权限管理基于(用户,源IP)对
– MySQL通过socket句柄获取源IP
• Proxy透传IP给MySQL
– 利用MySQL协议HEAD保留字段
Proxy MySQLClient
192.168.0.1
192.168.0.2
Head
Usernane:xxx
Password:xxx
SrcIP:192.168.0.1
Phxsync要具备的功能
• 重启时校准本地binlog
• 正常运行时提交binlog到BinlogSvr
Phxsync插件实现要点
• 基于插件形式,便于更新MySQL官方版本,
减少后续维护成本
– 抽象before_binlog_init新接口用于校准binlog
– 使用原有的after_flush接口提交binlog
– 提交补丁给MySQL官方
• http://bugs.mysql.com/bug.php?id=83158
BinlogSvr要具备的功能
• 可靠日志存储
– 接收MySQL Master推送的binlog并同步到其他节
点
– MySQL Slave利用原生复制协议拉取binlog
– 保证各节点的数据一致性
• 维护Master信息
– 监控PhxSQL节点的状态
– 自动切换Master
– 保证各节点的数据一致性
BinlogSvr实现要点
• Paxos协议
– 保证各节点的数据一致
– 保证集群机器超过一半存活还能服务
• Binlog存储
– 通过校验IP防止非Master提交
– 通过乐观锁防止拜占庭错误
• 兼容MySQL Slave复制协议
– BinlogSvr支持MySQL的原生复制协议
• Master管理
– 选举和续期
使用PhxPaxos库
• PhxPaxos是微信团队开源的Paxos类库
– 高性能
– 功能完善
– 稳定性经过大规模验证
– 接口方便易用
• 项目地址
– https://github.com/tencent-wechat/phxpaxos
通过校验IP防止非法Master错误提交
BinlogSvr
Id=100
Master
Id=100
Id=101
Slave1
Id=100
Slave2
Id=100
BinlogSvr
Id=100
Id=201
Old Master
Id=100
Id=101
New Master
Id=100
Id=201
Slave2
Id=100
Id=201
网络变慢,旧Master
被卡,切换到新
Master 网络恢复之后
继续提交Id=101。
Reject!
用乐观锁防止拜占庭错误
Last=100,now=101
Accept
Master数据被回退
BinlogSvr
Id=100
Id=101
Master
Id=100
Id=101
Slave1
Id=100
Id=101
Slave2
Id=100
Id=101
BinlogSvr
Id=100
Id=101
Master
Id=99
Id=100
Slave1
Id=100
Id=101
Slave2
Id=100
Id=101
Last=99,now=100
Reject!
BinlogSvr支持MySQL的异步复制协议
PhxSQLProxy
MySQL
PhxBinlogSvr
binlog
PhxSQLProxy
MySQL
Phxsync
PhxBinlogSvr
binlog
PhxSQLProxy
MySQL
PhxBinlogSvr
binlog
User
Slave Master Slave
用PhxPaxos实现Master管理
• Master管理
– Mysql已执行完所有binlog
– 通过paxos协议选举新master
– Master定期续期
– 旧master的租约过期后,重新选举新的master
– 监控mysql的状态
Master自动切换
start
Become Master end
Successful?
Check
Master
status
Check Master status:
• Is Master timeout?
• Has MySQL executed
all binlogs?
• Is Proxy running?
Fail
OK
Change MySQL
status
Start voting
Y
N
Master定期续租
start
end
Check
Master
status
Check Master status:
• Is MySQL healthy?
• Is Proxy running?
Fail
OK
Renew Lease
PhxSQL效果
容灾演习和性能
MySQL三机binlog数据的md5sum
PhxPaxos三机数据的checksum
Binlogsvr三机数据的checksum
通过比较PhxSQL集群中各节
点的数据(MySQL binlog,
PhxPaxos, Binlogsvr) 得知各节
点数据一致。
PhxSQL保证主备数据一致
PhxSQL自动切换Master
PhxSQL自动切换Master
数据来源:http://chuzhiyan.com/2016/10/11/PhxSQL-FAQ
PhxSQL性能
• MySQL版本
• Percona 5.6.31-77.0
• 机器信息
• CPU : Intel(R) Xeon(R) CPU E5-2420 0 @ 1.90GHz * 24
• Memory : 32G
• Disk : SSD Raid10
• Ping Costs
• Master -> Slave : 3 ~ 4ms
• Client -> Master : 4ms
• 工具和参数
• sysbench
• --oltp-tables-count=10 --oltp-table-size=1000000 --num-
threads=500
• --max-requests=100000 --report-interval=1 --max-time=200
PhxSQL的QPS性能对比
5076
46334
25657
4055
47528
20391
insert.lua
(100% write)
select.lua
(0% write)
OLTP.lua
(20% write)
200线程并发调用-QPS对比图
PhxSQL MySQL
8260
105928
46543
7072
121535
33229
insert.lua
(100% write)
select.lua
(0% write)
OLTP.lua
(20% write)
500线程并发调用-QPS对比图
PhxSQL MySQL
PhxSQL的平均耗时性能对比
39.34 4.21
140.16
49.27
4.1
176.39
insert.lua
(100% write)
select.lua
(0% write)
OLTP.lua
(20% write)
200线程并发调用-平均耗时对比图
PhxSQL MySQL
60.41
4.58
192.93
70.6
4.17
270.38
insert.lua
(100% write)
select.lua
(0% write)
OLTP.lua
(20% write)
500线程并发调用-平均耗时对比图
PhxSQL MySQL
PhxSQL成功案例
• QQ邮箱(域名邮箱)域名记录服务器
– 单个集群调用峰值40w/min
– 写请求平均耗时在20ms以下
– 读写比为20:1
• 机器配置
– intel(r) xeon(r) cpu x3440 @ 2.53ghz 8 core ,8g
ram
PhxSQL特点总结
• 同时满足数据强一致和服务高可用
• 性能优于半同步
• 完全兼容MySQL
PhxSQL下一步计划
• 适配MySQL 5.7
Q&A
联系我们:
phxteam@tencent.com
Github地址:
https://github.com/tencent-wechat/phxsql
PhxSQL
3个臭皮匠胜过一个猪脚亮
仅有3人的PhxSQL团队
努力在寻找命运中的第4人
附录
有可能被提问的
修正Master重启过程不能解决
问题
不能同时满足高可用和强一致
修正Master重启的方法
• 重启时执行半同步
• 重启时直接删除PendingBinlog
• 重启时直接提交PendingBinlog
• 重启时校准binlog
Master启动时执行半同步
Master
Id=100
Id=101
Slave1
Id=100
Slave2
Id=100
Old Master
Id=100
Id=101
New Master
Id=100
Id=201
Slave2
Id=100
Id=201
数据无法同
步导致启动
失败
Master启动直接删除Pending Binlog
Master
Id=100
Id=101
Slave1
Id=100
Id=101
Slave2
Id=100
Master
Id=100
Slave1
Id=100
Id=101
Slave2
Id=100
数据丢失
数据同步执行到一半
Master重启,重启时
删除Pending Binlog
Master启动直接提交Pending Binlog
Master
Id=100
Id=101
Slave1
Id=100
Slave2
Id=100
Old Master
Id=100
Id=101
New Master
Id=100
Id=201
Slave2
Id=100
Id=201
数据同步前Master故
障,重启时提交
Pending Binlog
Master启动时校准Binlog
Master
Id=100
Id=101
Slave1
Id=100
Id=101
Slave2
Id=100
Master
Id=100
Id=101
Slave1
Id=100
Id=101
Slave2
Id=100
需要Slave全活着
网络分区导致Slave和Master数据不一致
Master
Id=100
Id=101
Slave1
Id=100
Id=101
Slave2
Id=100
Slave3
Id=100
Slave4
Id=100
Old Master
Id=100
Id=101
Slave1
Id=100
Id=101
Slave2
Id=100
Id=401
w
Slave3
Id=100
Id=401
New Master
Id=100
Id=401
旧Master和Slave1被网络分区后,
Slave1和新的Master数据不一致
M 1
M 2
M
M 3
M: Vote Master R: Renew lease
R
M
• Master租约表
Master存活时
间.
• Master 定期续
约.
• Slave上加上额
外的Master
lease避免同时
申请成为
Master。
Master 租约设计

More Related Content

What's hot

OWST - Orange Web Security Toolkit Documentation
OWST - Orange Web Security Toolkit DocumentationOWST - Orange Web Security Toolkit Documentation
OWST - Orange Web Security Toolkit Documentation
Orange Tsai
 
浅析浏览器解析和渲染
浅析浏览器解析和渲染浅析浏览器解析和渲染
浅析浏览器解析和渲染
Ailsa126
 

What's hot (14)

服务器基准测试-叶金荣@CYOU-20121130
服务器基准测试-叶金荣@CYOU-20121130服务器基准测试-叶金荣@CYOU-20121130
服务器基准测试-叶金荣@CYOU-20121130
 
ASP.NET 5 快速入門 (Getting Started ASP.NET 5)
ASP.NET 5 快速入門 (Getting Started ASP.NET 5)ASP.NET 5 快速入門 (Getting Started ASP.NET 5)
ASP.NET 5 快速入門 (Getting Started ASP.NET 5)
 
OWST - Orange Web Security Toolkit Documentation
OWST - Orange Web Security Toolkit DocumentationOWST - Orange Web Security Toolkit Documentation
OWST - Orange Web Security Toolkit Documentation
 
雲端上的資訊安全-Global Azure Bootcamp 2015 臺北場
雲端上的資訊安全-Global Azure Bootcamp 2015 臺北場雲端上的資訊安全-Global Azure Bootcamp 2015 臺北場
雲端上的資訊安全-Global Azure Bootcamp 2015 臺北場
 
雲端環境的快取策略-Global Azure Bootcamp 2015 臺北場
雲端環境的快取策略-Global Azure Bootcamp 2015 臺北場雲端環境的快取策略-Global Azure Bootcamp 2015 臺北場
雲端環境的快取策略-Global Azure Bootcamp 2015 臺北場
 
MySQL压力测试经验
MySQL压力测试经验MySQL压力测试经验
MySQL压力测试经验
 
WebConf 2013「Best Practices - The Upload」
WebConf 2013「Best Practices - The Upload」WebConf 2013「Best Practices - The Upload」
WebConf 2013「Best Practices - The Upload」
 
Squid中文权威指南
Squid中文权威指南Squid中文权威指南
Squid中文权威指南
 
Ansible 101
Ansible 101Ansible 101
Ansible 101
 
Kafka in Depth
Kafka in DepthKafka in Depth
Kafka in Depth
 
Alice库构建
Alice库构建Alice库构建
Alice库构建
 
浅析浏览器解析和渲染
浅析浏览器解析和渲染浅析浏览器解析和渲染
浅析浏览器解析和渲染
 
Nodejs api server_implement
Nodejs api server_implementNodejs api server_implement
Nodejs api server_implement
 
浅谈电商网站数据访问层(DAL)与 ORM 之适用性
浅谈电商网站数据访问层(DAL)与 ORM 之适用性浅谈电商网站数据访问层(DAL)与 ORM 之适用性
浅谈电商网站数据访问层(DAL)与 ORM 之适用性
 

Similar to Phx sql设计与实现

MySQL自动切换设计与实现
MySQL自动切换设计与实现MySQL自动切换设计与实现
MySQL自动切换设计与实现
orczhou
 
Mysql proxy cluster
Mysql proxy clusterMysql proxy cluster
Mysql proxy cluster
Yiwei Ma
 
云端的数据库
云端的数据库云端的数据库
云端的数据库
thinkinlamp
 
浅谈 My sql 性能调优
浅谈 My sql 性能调优浅谈 My sql 性能调优
浅谈 My sql 性能调优
thinkinlamp
 
优酷 Web网站架构案例分析
优酷   Web网站架构案例分析优酷   Web网站架构案例分析
优酷 Web网站架构案例分析
George Ang
 
Key value store
Key value storeKey value store
Key value store
xuanhan863
 
Youku arch qcon2009_beijing
Youku arch qcon2009_beijingYouku arch qcon2009_beijing
Youku arch qcon2009_beijing
drewz lin
 
Bypat博客出品-服务器运维集群方法总结3
Bypat博客出品-服务器运维集群方法总结3Bypat博客出品-服务器运维集群方法总结3
Bypat博客出品-服务器运维集群方法总结3
redhat9
 
MySQL多机房容灾设计(with Multi-Master)
MySQL多机房容灾设计(with Multi-Master)MySQL多机房容灾设计(with Multi-Master)
MySQL多机房容灾设计(with Multi-Master)
Lixun Peng
 
Bypat博客出品-服务器运维集群方法总结
Bypat博客出品-服务器运维集群方法总结Bypat博客出品-服务器运维集群方法总结
Bypat博客出品-服务器运维集群方法总结
redhat9
 

Similar to Phx sql设计与实现 (20)

MySQL自动切换设计与实现
MySQL自动切换设计与实现MySQL自动切换设计与实现
MySQL自动切换设计与实现
 
主库自动切换 V2.0
主库自动切换 V2.0主库自动切换 V2.0
主库自动切换 V2.0
 
Mysql proxy cluster
Mysql proxy clusterMysql proxy cluster
Mysql proxy cluster
 
1到100000000 - 分布式大型网站的架构设计
1到100000000 - 分布式大型网站的架构设计1到100000000 - 分布式大型网站的架构设计
1到100000000 - 分布式大型网站的架构设计
 
NoSQL误用和常见陷阱分析
NoSQL误用和常见陷阱分析NoSQL误用和常见陷阱分析
NoSQL误用和常见陷阱分析
 
淘宝主备数据库自动切换
淘宝主备数据库自动切换淘宝主备数据库自动切换
淘宝主备数据库自动切换
 
Introduction to MySQL and phpMyAdmin
Introduction to MySQL and phpMyAdminIntroduction to MySQL and phpMyAdmin
Introduction to MySQL and phpMyAdmin
 
云端的数据库
云端的数据库云端的数据库
云端的数据库
 
Bypat博客出品-服务器运维集群方法总结2
Bypat博客出品-服务器运维集群方法总结2Bypat博客出品-服务器运维集群方法总结2
Bypat博客出品-服务器运维集群方法总结2
 
浅谈 My sql 性能调优
浅谈 My sql 性能调优浅谈 My sql 性能调优
浅谈 My sql 性能调优
 
MySQL应用优化实践
MySQL应用优化实践MySQL应用优化实践
MySQL应用优化实践
 
Php study.20130110
Php study.20130110Php study.20130110
Php study.20130110
 
优酷 Web网站架构案例分析
优酷   Web网站架构案例分析优酷   Web网站架构案例分析
优酷 Web网站架构案例分析
 
Key value store
Key value storeKey value store
Key value store
 
Youku arch qcon2009_beijing
Youku arch qcon2009_beijingYouku arch qcon2009_beijing
Youku arch qcon2009_beijing
 
Bypat博客出品-服务器运维集群方法总结3
Bypat博客出品-服务器运维集群方法总结3Bypat博客出品-服务器运维集群方法总结3
Bypat博客出品-服务器运维集群方法总结3
 
新浪微博Feed服务架构
新浪微博Feed服务架构新浪微博Feed服务架构
新浪微博Feed服务架构
 
Nosql三步曲
Nosql三步曲Nosql三步曲
Nosql三步曲
 
MySQL多机房容灾设计(with Multi-Master)
MySQL多机房容灾设计(with Multi-Master)MySQL多机房容灾设计(with Multi-Master)
MySQL多机房容灾设计(with Multi-Master)
 
Bypat博客出品-服务器运维集群方法总结
Bypat博客出品-服务器运维集群方法总结Bypat博客出品-服务器运维集群方法总结
Bypat博客出品-服务器运维集群方法总结
 

Recently uploaded

ChatGPT Plus GPT-4账号购买指南(chatgpt plus gpt-4 账号)👉top233.com👈
ChatGPT Plus GPT-4账号购买指南(chatgpt plus gpt-4 账号)👉top233.com👈ChatGPT Plus GPT-4账号购买指南(chatgpt plus gpt-4 账号)👉top233.com👈
ChatGPT Plus GPT-4账号购买指南(chatgpt plus gpt-4 账号)👉top233.com👈
百家乐赌场经营模式_访问【3977.AT】
 
苹果ID批发_国外ID购买_苹果appleid账号购买👉top233.com👈
苹果ID批发_国外ID购买_苹果appleid账号购买👉top233.com👈苹果ID批发_国外ID购买_苹果appleid账号购买👉top233.com👈
苹果ID批发_国外ID购买_苹果appleid账号购买👉top233.com👈
庄家补牌_访问【3977.AT】
 
谷歌留痕技术教程【推广网址☆seotg8.com】谷歌留痕教学
谷歌留痕技术教程【推广网址☆seotg8.com】谷歌留痕教学谷歌留痕技术教程【推广网址☆seotg8.com】谷歌留痕教学
谷歌留痕技术教程【推广网址☆seotg8.com】谷歌留痕教学
pingbizh
 

Recently uploaded (20)

虾漫抖阴【破解版下载:K782.com】☆☆☆官网下载☆☆☆人妖视频破解版app最新下载地址
虾漫抖阴【破解版下载:K782.com】☆☆☆官网下载☆☆☆人妖视频破解版app最新下载地址虾漫抖阴【破解版下载:K782.com】☆☆☆官网下载☆☆☆人妖视频破解版app最新下载地址
虾漫抖阴【破解版下载:K782.com】☆☆☆官网下载☆☆☆人妖视频破解版app最新下载地址
 
麻豆印画【破解版下载:K782.com】☆☆☆官网下载☆☆☆麻豆传媒许月珍破解版app最新下载地址
麻豆印画【破解版下载:K782.com】☆☆☆官网下载☆☆☆麻豆传媒许月珍破解版app最新下载地址麻豆印画【破解版下载:K782.com】☆☆☆官网下载☆☆☆麻豆传媒许月珍破解版app最新下载地址
麻豆印画【破解版下载:K782.com】☆☆☆官网下载☆☆☆麻豆传媒许月珍破解版app最新下载地址
 
qq号查询个人信息{查询网:zt580.com}qq号定位查找人可以吗
qq号查询个人信息{查询网:zt580.com}qq号定位查找人可以吗qq号查询个人信息{查询网:zt580.com}qq号定位查找人可以吗
qq号查询个人信息{查询网:zt580.com}qq号定位查找人可以吗
 
黑桃A资源【破解版下载:K782.com】☆☆☆官网下载☆☆☆韩漫破解版app最新下载地址
黑桃A资源【破解版下载:K782.com】☆☆☆官网下载☆☆☆韩漫破解版app最新下载地址黑桃A资源【破解版下载:K782.com】☆☆☆官网下载☆☆☆韩漫破解版app最新下载地址
黑桃A资源【破解版下载:K782.com】☆☆☆官网下载☆☆☆韩漫破解版app最新下载地址
 
做爱药购买【购买网站: ghb3.com☆】 药 王 网上 药物 商城,迷药,春药,乖乖水,ghb购买
做爱药购买【购买网站:  ghb3.com☆】 药 王 网上 药物 商城,迷药,春药,乖乖水,ghb购买做爱药购买【购买网站:  ghb3.com☆】 药 王 网上 药物 商城,迷药,春药,乖乖水,ghb购买
做爱药购买【购买网站: ghb3.com☆】 药 王 网上 药物 商城,迷药,春药,乖乖水,ghb购买
 
ChatGPT Plus GPT-4账号购买指南(chatgpt plus gpt-4 账号)👉top233.com👈
ChatGPT Plus GPT-4账号购买指南(chatgpt plus gpt-4 账号)👉top233.com👈ChatGPT Plus GPT-4账号购买指南(chatgpt plus gpt-4 账号)👉top233.com👈
ChatGPT Plus GPT-4账号购买指南(chatgpt plus gpt-4 账号)👉top233.com👈
 
苹果ID批发_国外ID购买_苹果appleid账号购买👉top233.com👈
苹果ID批发_国外ID购买_苹果appleid账号购买👉top233.com👈苹果ID批发_国外ID购买_苹果appleid账号购买👉top233.com👈
苹果ID批发_国外ID购买_苹果appleid账号购买👉top233.com👈
 
真的有迷药嗎【网址☆THC88.com】真迷药哪里有卖
真的有迷药嗎【网址☆THC88.com】真迷药哪里有卖真的有迷药嗎【网址☆THC88.com】真迷药哪里有卖
真的有迷药嗎【网址☆THC88.com】真迷药哪里有卖
 
如何通过手机号码机主个人信息【下单查询网站:KF367.com】专业查询服务,查询个人信息怎么用电话号查询机主户口
如何通过手机号码机主个人信息【下单查询网站:KF367.com】专业查询服务,查询个人信息怎么用电话号查询机主户口如何通过手机号码机主个人信息【下单查询网站:KF367.com】专业查询服务,查询个人信息怎么用电话号查询机主户口
如何通过手机号码机主个人信息【下单查询网站:KF367.com】专业查询服务,查询个人信息怎么用电话号查询机主户口
 
七彩直播【破解版下载:K782.com】☆☆☆官网下载☆☆☆交换妻子破解版app最新下载地址
七彩直播【破解版下载:K782.com】☆☆☆官网下载☆☆☆交换妻子破解版app最新下载地址七彩直播【破解版下载:K782.com】☆☆☆官网下载☆☆☆交换妻子破解版app最新下载地址
七彩直播【破解版下载:K782.com】☆☆☆官网下载☆☆☆交换妻子破解版app最新下载地址
 
谷歌留痕技术教程【推广网址☆seotg8.com】谷歌留痕教学
谷歌留痕技术教程【推广网址☆seotg8.com】谷歌留痕教学谷歌留痕技术教程【推广网址☆seotg8.com】谷歌留痕教学
谷歌留痕技术教程【推广网址☆seotg8.com】谷歌留痕教学
 
渝中区找妹子上门服务【选妹网:gj668.com】渝中区会所模特保健按摩服务
渝中区找妹子上门服务【选妹网:gj668.com】渝中区会所模特保健按摩服务渝中区找妹子上门服务【选妹网:gj668.com】渝中区会所模特保健按摩服务
渝中区找妹子上门服务【选妹网:gj668.com】渝中区会所模特保健按摩服务
 
合肥市酒店怎么找小姐【选妹网:gj668.com】合肥市资源联系方式
合肥市酒店怎么找小姐【选妹网:gj668.com】合肥市资源联系方式合肥市酒店怎么找小姐【选妹网:gj668.com】合肥市资源联系方式
合肥市酒店怎么找小姐【选妹网:gj668.com】合肥市资源联系方式
 
国产真实幼女迷奸视频【破解版下载:K782.com】☆☆☆官网下载☆☆☆小马视频破解版app最新下载地址
国产真实幼女迷奸视频【破解版下载:K782.com】☆☆☆官网下载☆☆☆小马视频破解版app最新下载地址国产真实幼女迷奸视频【破解版下载:K782.com】☆☆☆官网下载☆☆☆小马视频破解版app最新下载地址
国产真实幼女迷奸视频【破解版下载:K782.com】☆☆☆官网下载☆☆☆小马视频破解版app最新下载地址
 
tg账号出售【官方网址🎉top233.com🎉】Telegram账号购买,电报账号出售自动发货
tg账号出售【官方网址🎉top233.com🎉】Telegram账号购买,电报账号出售自动发货tg账号出售【官方网址🎉top233.com🎉】Telegram账号购买,电报账号出售自动发货
tg账号出售【官方网址🎉top233.com🎉】Telegram账号购买,电报账号出售自动发货
 
上海外围女上门【微信☆15377704975】上海
上海外围女上门【微信☆15377704975】上海上海外围女上门【微信☆15377704975】上海
上海外围女上门【微信☆15377704975】上海
 
上海同城上门品茶【选妞网址☆qmm123.com】上海同城上门特殊服务
上海同城上门品茶【选妞网址☆qmm123.com】上海同城上门特殊服务上海同城上门品茶【选妞网址☆qmm123.com】上海同城上门特殊服务
上海同城上门品茶【选妞网址☆qmm123.com】上海同城上门特殊服务
 
小草社【破解版下载:K782.com】☆☆☆官网下载☆☆☆涩涩屋破解版app最新下载地址
小草社【破解版下载:K782.com】☆☆☆官网下载☆☆☆涩涩屋破解版app最新下载地址小草社【破解版下载:K782.com】☆☆☆官网下载☆☆☆涩涩屋破解版app最新下载地址
小草社【破解版下载:K782.com】☆☆☆官网下载☆☆☆涩涩屋破解版app最新下载地址
 
撸撸社【破解版下载:K782.com】☆☆☆官网下载☆☆☆醉花视频破解版app最新下载地址
撸撸社【破解版下载:K782.com】☆☆☆官网下载☆☆☆醉花视频破解版app最新下载地址撸撸社【破解版下载:K782.com】☆☆☆官网下载☆☆☆醉花视频破解版app最新下载地址
撸撸社【破解版下载:K782.com】☆☆☆官网下载☆☆☆醉花视频破解版app最新下载地址
 
楼凤宫【破解版下载:K782.com】☆☆☆官网下载☆☆☆性爱视频破解版app最新下载地址
楼凤宫【破解版下载:K782.com】☆☆☆官网下载☆☆☆性爱视频破解版app最新下载地址楼凤宫【破解版下载:K782.com】☆☆☆官网下载☆☆☆性爱视频破解版app最新下载地址
楼凤宫【破解版下载:K782.com】☆☆☆官网下载☆☆☆性爱视频破解版app最新下载地址
 

Phx sql设计与实现