多机房数据同步(一致性读写)视频 @Qcon
解决跨数据中心的数据同步和一致性问题,实现跨机房的高可用访问(比如中国特殊网络状况,提供多个数据中心的情况下,解决数据的可用性、一致性)。
解决跨数据中心的数据同步和一致性问题,实现跨机房的高可用访问(比如中国特殊网络状况,提供多个数据中心的情况下,解决数据的可用性、一致性)。
levelDB采用递增的数字作为版本号不适合大规模分布式系统用于底层存储使用,可以用当前的时间戳(微秒)作为版本号,这样在实现多版本控制的时候就非常方便了。
Golang1.1昨天发布,性能提升不少。让我想起去年写的mysql-proxy,于是拿出来又改了一下调用最为频繁的一个函数,发现性能已经非常理想。这里放出来给有兴趣的朋友试用。
目前支持的功能是读写分离(非事务,如果用事务的话不会分发到slave上)和slave的负载均衡,未做失效检查。另外prepare可能会有问题。
如果有什么需求可以后续添加,golang改起来非常方便,当初这个proxy我也就1个礼拜完成的。
下载地址:http://www.mysqlab.net/products/mysql-proxy/lbproxy64.tar.gz (linux 64位)
(有需要win版本的可以密我)
配置:
1. 需要配置用于连接proxy的用户名和密码(sha1(plain password))
2. 需要配置连接后端master和slave的用户和密码(sha1(plain password))
3. slaves需要按照proxy.ini 格式写,因为解析ini文件的目前还没有容错
(本来是打算配置用web界面来做的,被其他事情给耽搁了)
启动:
目前启动方式很山寨
cd /path/to/proxy && ./proxy
(这个容易改,我已经有现成的python manager,套用过来就行)
大家有什么反馈可以q我或者这里留言(第一次需要审核,防止垃圾广告。)
lbmysqlping (LegendBase MySQL Ping) is a tool that does MySQL service availability check for MySQL HA solution.
Of course, it could be used to monitor MySQL servers availability. If some server down, LBMySQLping will run “Down” command that could send email or message to your mobile.
有不少朋友在做MySQL数据库高可用(Heartbeat,keepalived)和主从负载均衡(LVS,F5,A10等)的时候都面对MySQL服务可用性检测的问题.
检测可用性面对的几个问题不太容易解决:
而且我了解到的有不少人都是用检测端口的方法,这是有风险的.
今天贡献的lbmysqlping通过可配置的方式,能够灵活的对MySQL服务进行检测,如果出现异常\超时或者Slave延时超过配置大小,可以执行指定的失效命令,当服务恢复可用的时候又可以执行恢复命令.
另外lbmysqlping还可以做简单的报警系统,
配置文件格式如下:
Go语言1.0出来之后,原来可用的MySQL驱动在新版本上基本不可用了,于是这几天自己写了个简单的MySQL的驱动,暂不支持prepare,没有implement sql/driver. 或许有能用的上的朋友,所以分享出来. 先介绍用法,后面提供下载链接.
先直接上例子
import (
"log"
"liblbmysql"
)
func main() {
settings := make(map[string]interface{})
settings["host"] = "localhost"
settings["port"] = 3306
settings["uname"] = "ivan"
settings["pass"] = "******"
settings["dbname"] = "test"
settings["charset"] = "utf8"
conn, err := liblbmysql.Connect(settings)
if err != nil {
log.Fatal("Connect to MySQL error: %v", err)
}
var qr *liblbmysql.QueryResult
qr, err = conn.ExecuteFetch("select * from ivan")
if err != nil {
log.Printf("query error: %v", err)
} else {
for {
m := qr.FetchMap()
if m != nil {
log.Printf("row map: %v\n", m)
} else {
break
}
}
}
qr.Free()
conn.Close()
}
今天很高兴得知Go1 release, 其实我一只在等它正式发布,因为我用go语言自己实现了一个MySQL代理,命名为LegendBase Proxy for MySQL(LPM),等Go1 release之后,我也可以尽快release出来了.
代码摘录:
case PARSE_COM_QUERY_FIELD:
写这个的初衷是因为除了部分程序开发者自己实现了读写分离\或者采用sharding方式之外,还有大量的程序是针对单一的MySQL数据库接口. 然而随着业务量的增加,db压力增大,单台db没法承载,需要扩展MySQL数据库为主从架构,这时候需要代理层来分发读写,因为改造程序的代价往往太大.
新开发的MySQL proxy的配置如下:
# For management
admin_user = admin
admin_password = 100c4e57374fc998e57164d4c0453bd3a4876a58 # sha1
admin_port = 8288
# For connecting to proxy
proxy_user = ivan
proxy_password = 100c4e57374fc998e57164d4c0453bd3a4876a58 # sha1
# For proxy to connect backend mysql server
mysql_user = ivan
mysql_password = 100c4e57374fc998e57164d4c0453bd3a4876a58 #sha1
mysql_dbname = test # default db
# connections setting
connections_per_weight_max = 32
# master and slaves setting. ip:port:w w: weight of load
master = 127.0.0.1:3306
#slaves = 127.0.0.1:3306:1|192.168.2.200:3306:2|192.168.2.203:3306:1
slaves = 127.0.0.1:3306:1
其中配置的密码是明文密码的sha1, 防止非相关人员获取数据库的密码,安全性能得到一定的保障.
通过其他的配置也可以看出proxy实现的功能,即能够配置多个slave,并且能够指定它们的权重.
这几天CSDN数据库明文密码泄密闹得满城风雨,人人自危。大家开始关注网络安全和隐私问题。由这次的问题,对加密验证过程我也思考过,有没有一套相对安全的存储和验证方法?这里我根据各种验证方法,确实总结了一套可行且相对安全的存储和验证方法,且看我细细道来,最后提出MySQL当前验证方法的改进。– by 谭俊青
一个系统对用户请求的合法性验证都是通过sessionid来判断的,这个层面的攻击和破解这里不涉及,我们只关心在session建立前的验证过程。密码存储的方式和验证方法大致可以归结为以下几种:
对第4种方法进行变种,可以得到很多验证方法,都相对安全可靠得多,但是都存在一个问题,这个问题在mysql4.1之前的版本也存在着,就是如果有人得到存储的hash值,即可以模拟登陆,并验证通过。
现在我们回到MySQL密码的存储和验证过程。在4.1之前,mysql的验证方法相对简单,方法如下:
这样的验证方法看似比较安全可靠,即使你监听网络也不会获得password或者其hash值。但是如果有人通过其他途径,获得了password的hash值,那么就可以模拟登陆系统,因此我们需要对验证过程进行改进。下面介绍mysql4.1之后的密码存储和登陆验证过程:
这个验证过程看似复杂,其实整个过程就是为了保证 sha1(password)不被监听到,用随机串进行了干扰。至此我们的密码存储方式和验证方法的安全性都得到了极大的提升。 当然我们发现mysql 4.1之后的密码存储还是有点小问题,没有加salt,因此存在一定的风险,可以建议官方版本改进,比如将 salt 用用户名代替,整个验证过程几乎不用大的改动。
MySQL InnoDB使用 Raid 1+0 stripe size 大小该如何配置?
By: 谭俊青@MySQL实验室
要理解Raid 1+0,我们首先要先理解Raid 0,看下图:
左图为 4kb stripe size;右图为 64kb stripe size
存储文件大小:红色:4kiB,蓝色:20kiB,绿色:100kiB,紫色:500kiB
Raid 0 准确的来说应该称 AID 0
大家可以看到,如果stripe size设置过大,在单线程的情况下起不到提速作用。而设置过小又会产生多次IO操作。因此我们通过简化模型,将大部分请求的文件块大小(IO_SIZE)除以RAID0 的磁盘数量(DISK_NUM)来估算stripe size大小(stripe size=IO_SIZE / DISK_NUM)。
比如MySQL InnoDB,假设平时大部分请求文件块的大小为1M(16kb*64),那么在8块盘组成的Raid1+0的情况下stripe size=1024kb / 4 = 256kb。这时候将Raid的条带大小配置为256kb是比较合适的。MyISAM存储引擎使用情况相对复杂。
实际上管理和磁盘定位等还有一定开销,更为主要的是不同的业务,请求的文件块大小相差很大,所以在实际环境中很难一刀切说多大的stripe size最佳,因此在估算之后可以上下浮动评测,选择适合自己系统的最优大小的stripe size。
顺便今天在MySQL实验室的2个群里调查了下,stripe size大小为64kb、256kb基本各占50%。
-- -------------
SDO:测试下8块及以上盘阵 strip size 256k最佳
点评网:256k
畅游:512k 综合效果更好 (来源评论)
继续统计更新…
Manager端下载
http://download.mysqlab.net/download/DMB/dmbmanager.zip
安装:直接解压 dmbmanager.zip(比如解压至 c:\dmbmanager) ,然后打开 c:\dmbmanager 执行 setup.exe
依次执行 保存配置项、初始化系统、获取key文件,然后将申请获得的dmb.key文件保存到安装目录,即对应的目录 c:\dmbmanager
然后点启动服务。
Agent端下载
http://download.mysqlab.net/download/DMB/dmbagent.zip
安装:直接解压 dbmagent.zip 至安装目录,比如 c:\dmbagent
配置安装目录下的 dmb.ini文件,将url地址改为Manager端安装的地址
然后执行 install.bat (win7右键以管理员身份执行)
系统管理
Manager安装好之后 用浏览器打开
http://localhost:8288/ (远程用 http://ip:8288/)进行管理
默认用户名和密码为:
用户:root
密码: mysqlab.net
进入系统之后,在右上角的系统配置里面修改用户名、密码等相关信息。
其中smtp用于报警发送邮件,收件人地址及为用户信息里配置的邮件地址。
补充:
1:目前DMBManager和DMBAgent只支持Windows平台。
2:本机备份的时候IP地址请填127.0.0.1
3:实例添加/编辑的时候,my.ini 请填写windows地址,比如:c:\windows\my.ini
4:备份配置的时候,本地备份目录请填写windows目录,比如:c:\dbbackup
版本更新主要解决的问题:
1:默认配置有些填充的是linux格式目录,造成部分用户混淆,先改成windows格式;
2:v2.2可以直接获取key文件。
欢迎大家使用,如有问题请直接反馈在本blog,我会及时给予回复和和更新。
很多企业,特别是中、大型互联网企业都在大量的使用MySQL数据库,并且绝大部分情况下使用的都是InnoDB存储引擎。使用InnoDB存储引擎有很多因素,比如事务安全、自动恢复、行锁、在线备份等等特性。
在MySQL数据库应用和运维中,除了数据库状态和性能监控之外,数据库的备份一直没有很好的工具去管理,DMB数据库监控及灾备系统就是为解决这一矛盾而诞生的。
DMB系统中备份配置中总共有7种备份模式,下面将针对它们分别介绍,什么样的情况下应该选择什么样的备份模式,以实现最高效的备份,且尽可能的减少对业务的影响。
说明:
作者:谭俊青@MySQL实验室(转载请保留该行及作者信息和原文链接,谢谢!)
NoSQL最近很火,因为它在K/V存储的优异性能表现,催生出很多产品,比如:Memcached、MongoDB、Redis、TT等等. 然而他们或多或少都有自己的某些缺陷,比如存在单点、数据安全持久化等等。然而这些随着新的技术和思路的在MySQL上面产品化,这些东西会被慢慢取代,MySQL重回她的王者地位。在这之前我说过Memcached会被MySQL+handler socket取代,现在情况有所变化,为了兼容现有大量的Memcache客户端,将handler socket用memcached替换掉,就出现了如下构架:
MySQL+InnoDB with Memcached 具有大量的优势: … 【阅读全文·MySQL实验室】
在去年MySQL用户大会的时候,Sun发布了MySQL5.5。今天Oracle MySQL在MySQL User Conference 2011(MySQL用户大会)又扔出了个重磅炸弹,MySQL5.6发布。
列举下MySQL5.6部分新特性:
新增 log_bin_basename (以前variables里面没有binlog位置信息,对数据库的监管很不方便)
更多信息见:http://dev.mysql.com/doc/refman/5.6/en/mysql-nutshell.html
为了这系统宅了很多个周末,又一个小长假过去了, DMB v2.1终于可以那得出手了,现在分享出来让朋友们使用,希望能得到更多更好的建议。DMB 对InnoDB存储引擎支持在线热备(ibbackup, xtrabackup等),还可以根据用户需求选择备份模式,是否加锁获取Master信息等。
“DMB数据库监控及灾备系统(监控、备份) for MySQL” 简单介绍见 http://www.mysqlab.net/tool/dmb/
Manager端下载
– ———————
update: 2011/10/1
根据朋友们的反馈信息,这里补充几点。
1:目前DMBManager和DMBAgent只支持Windows平台。
2:本机备份的时候IP地址请填127.0.0.1
3:实例添加/编辑的时候,my.ini 请填写windows地址,比如:c:\windows\my.ini
4:备份配置的时候,本地备份目录请填写windows目录,比如:c:\dbbackup
– ———————
作者:谭俊青@MySQL实验室
测试日期:2010/01/28
硬件环境:
– ———————————————————————-
CPU: Intel(R) Xeon(R) CPU E5620 @ 2.40 GHz ( x 2)
Memory: 32GB
Disk: 300GB*4, Raid 10 , BBU(wb)
– ———————————————————————-
MySQL配置:
– ———————————————————————
innodb_buffer_pool_size = 8G
innodb_additional_mem_pool_size = 20M
innodb_log_file_size = 128M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 2
innodb_lock_wait_timeout = 50
innodb_file_per_table = 1
innodb_thread_concurrency = 0
query_cache_size = 0
– ———————————————————————
sysbench r/w 测试
– ———————————————————————
oltp-table-size=1000000
oltp-test-mode=complex
– ———————————————————————
测试结果如下:
– ———————————————————————
– ———————————————————————
结论:
– ———————————————————————
在低并发情况下,MySQL5.1跟MySQL5.5性能持平,而实际应用中大部分并发数都低于10,因此绝大部分用户没有必要立即更换至5.5版本;
在高并发情况下,MySQL5.5的性能优势明显。
最近评论