标签: database-replication

Zookeeper/Chubby -vs- MySql NDB

我最近一直在阅读Paxos论文,FLP定理等,并为一个项目评估Apache Zookeeper.我也一直在通过Chubby(谷歌的分布式锁定服务)以及可在线获得的各种文献.我对Zookeeper的基本用法是为分布式系统实现复制和一般协调.

我只是想知道,Zookeeper或像分布式锁定系统这样的Chubby带来的具体优势是什么.基本上我只是想知道为什么我不能只使用MySQL NDB集群.我一直听说MySQL有很多复制问题.我希望有一些关于这个主题的更多经验可能会对它有所了解.

提前致谢..

简单列出我的要求:

  • 我有一个同质的分布式系统.
  • 我需要一些方法来保持所有节点的一致状态.
  • 我的系统公开了一项服务,与客户的交互将导致我的系统集体状态发生一些变化.
  • 高可用性是一个目标,因此关闭的节点不得影响服务.
  • 我希望系统至少服务1000 req/sec.
  • 我希望系统的集体状态大小有限(基本上插入/删除将是暂时的......但在稳定状态下,我期望大量的更新和读取)

java mysql replication database-replication apache-zookeeper

15
推荐指数
2
解决办法
6478
查看次数

MySQL复制

我应该使用MySQL复制来同步本地数据库和远程数据库吗?如果是这样,我如何设置主设备和从设备?有没有其他方法可以做到这一点?

mysql database-replication

14
推荐指数
2
解决办法
3656
查看次数

AWS RDS MySQL只读副本滞后问题

我运行的服务需要能够支持大约4000+ IOPS并保持副本延迟<= 1秒才能正常运行.

我正在使用AWS RDS MySQL实例并拥有2个只读副本.我的服务在阅读副本上遇到了巨大的副本延迟峰值,所以我与AWS支持人员联系了一个星期,试图理解为什么我遇到了延迟 - 我有6000个IOPS配置,我的实例非常强大.他们给了我各种理由.

在更改实例类型后,从5.5升级到MySQL 5.6以利用多线程,并且它们替换了底层硬件,我仍然看到了随机的重复延迟.

最终我决定开始修改参数组,改变我的配置,只读取复制过程中涉及的任何我可以找到的复制品,现在终于遇到<= 1秒的复制延迟.

以下是我更改的设置及其看似成功的值(我复制了默认的mysql 5.6 param组并更改了这些值,将更新的参数组应用于只读的副本):

innodb_flush_log_at_trx_commit=0
sync_binlog=0
sync_master_info=0
sync_relay_log=0
sync_relay_log_info=0
Run Code Online (Sandbox Code Playgroud)

请阅读以下每个内容以了解修改的影响:http://dev.mysql.com/doc/refman/5.6/en/innodb-parameters.html

其他事项,以确保你照顾:

Convert any MyISAM tables to InnoDB
Upgrade from MySQL < 5.6 to MySQL >= 5.6
Ensure that your provisioned IOPS are > the combined read/write IOPS you require
Ensure that your read replica instances are >= master instance
Run Code Online (Sandbox Code Playgroud)

如果其他人有任何其他参数可以在只读副本或主数据库上修改,以获得最佳的复制性能,我很乐意听到更多.

更新于2014年8月7日至8日

为了利用我设置的Mysql 5.6多线程复制:

slave_parallel_workers=5 (Set it to the number of read replica DBs you have running) …
Run Code Online (Sandbox Code Playgroud)

mysql database-replication amazon-web-services amazon-rds

14
推荐指数
1
解决办法
8908
查看次数

MySQL复制失败,错误"无法解析中继日志事件条目".

我已经彻底搜索了谷歌一个确定的解决方案或一组步骤来解决这个问题,但似乎没有很多高质量的结果,我没有发现堆栈溢出的问题.我们正在尝试使用一个slave来设置MySQL复制.从属似乎正在复制,然后发生以下错误:

无法解析中继日志事件条目.可能的原因是:主服务器的二进制日志已损坏(您可以通过在二进制日志上运行'mysqlbinlog'来检查),从服务器的中继日志已损坏(您可以通过在中继日志上运行'mysqlbinlog'来检查),网络问题,或者主服务器或从服务器的MySQL代码中的错误.如果要检查主站的二进制日志或从站的中继日志,您可以通过在此从站上发出"SHOW SLAVE STATUS"来了解其名称.

为了使大量的人从搜索中不可避免地偶然发现这个问题,如果有人回复提供了可能出错的概述以及采取了哪些步骤来解决这个问题,那将会很有帮助,但我会还提供了与我的特定情况相关的更多详细信息,希望有人可以帮我解决.


我们导入到从服务器以启动它的转储是在主服务器上使用以下命令创建的:

mysqldump --opt --allow-keywords -q -uroot -ppassword dbname > E:\Backups\dbname.sql
Run Code Online (Sandbox Code Playgroud)

执行此备份的脚本还会记录主服务器的当前二进制日志位置.然后,我们采取以下步骤在slave上启动复制:

1. STOP SLAVE;
2. DROP DATABASE dbname;
3. SOURCE dbname.sql;
    (... waited a few hours for the 10gb dump to import)
4. RESET SLAVE;
5. CHANGE MASTER TO MASTER_HOST='[masterhostname]', MASTER_USER='[slaveusername]', MASTER_PASSWORD='[slaveuserpassword]', MASTER_PORT=[port], MASTER_LOG_FILE='[masterlogfile]', MASTER_LOG_POS=[masterlogposition];
6. START SLAVE;
Run Code Online (Sandbox Code Playgroud)

经过大约一天的复制工作正常,它在凌晨3:43再次失败.MySQL错误日志中出现的第一件事就是上面的错误.然后使用相同的时间戳出现另一个一般错误:

Error running query, slave SQL thread aborted. Fix the problem, and restart the slave SQL thread with "SLAVE START". We stopped at log '[masterlogfile]' position [masterlogpos] …
Run Code Online (Sandbox Code Playgroud)

mysql master-slave database-replication mysqlbinlog

13
推荐指数
1
解决办法
1万
查看次数

为什么Master认为它是重启的奴隶?

在简单的MySQL复制主从配置中,我遇到一个问题,即Master在重启时尝试连接自身作为从属设备.

因此,当我在Master上重启MySQL时,我看到与同一服务器有关的错误试图复制到自身,mysql -e "STOP SLAVE;"每次重启MySQL时我都必须手动运行.

如何在master上禁用slave?

以下是相关部分my.cnf:

## Logging
binlog_format                   = mixed
log_bin                         = /var/log/mysql/mysql-bin.log
sync_binlog                     = 1
pid_file                        = /var/run/mysqld/mysqld.pid
log_error                       = /var/log/mysql/error.log
#general_log                     = 0
#general_log_file                = /var/log/mysql/general.log
slow_query_log                  = 1
slow_query_log_file             = /var/log/mysql/slow.log
long_query_time                 = 3
expire_logs_days                = 14

sql_mode                        = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
# sql_mode                        = ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

## Replication
server_id                       = 200

## Master Configuration
binlog-do-db                    = my_db_1
binlog-do-db                    = my_db_2
binlog-do-db                    = my_db_3
binlog-do-db                    = my_db_4
binlog-do-db                    = my_db_5
binlog-do-db                    = my_db_6
Run Code Online (Sandbox Code Playgroud)

此外,当我跑步时,我 …

mysql replication database-replication

13
推荐指数
1
解决办法
385
查看次数

从H2数据库生成构建脚本的任何简单方法?

让我们创建一个带有表,索引等的H2数据库的图像...是否有一种简单的方法来提取SQL脚本以在另一个H2数据库中重新创建该数据库的结构?

我不是指表,索引等的内容......我只是对数据库的一般结构感兴趣,以便在其他地方复制它.谢谢.

h2 sql-scripts database-replication

12
推荐指数
1
解决办法
1万
查看次数

在my.cnf中忽略了expire_logs_days

我有一对为主从复制设置的MySQL数据库.奴隶做得很好.

另一方面,尽管我做了最好的(自动化)努力,但主人仍在囤积二进制日志.

我正在尝试在MySQL的my.cnf文件中设置'expire_logs_days'变量,但由于某种原因它似乎被忽略了.我的my.cnf文件看起来像:

[mysqld]
...
log-bin=/var/log/mysql/mysql-bin.log
server-id=1
expire_logs_days=3
log_bin_trust_function_creators=TRUE
sync_binlog=1

[mysqld_safe]
...
Run Code Online (Sandbox Code Playgroud)

但是当我SHOW VARIABLES WHERE Variable_Name='expire_logs_days'在MySQL中运行时,它会返回一个值0

我试过了:

  • 重启MySQL
  • 使用此行: expire_logs_days='3'
  • 检查其他my.cnf文件:
    • mysqld --help --verbose | grep cnf
    • 找到了这条线: /etc/mysql/my.cnf /etc/my.cnf ~/.my.cnf order of preference
    • 我的my.cnf档案位于/etc/my.cnf
    • 在其他位置没有名为my.cnf的文件
  • SET GLOBAL expire_logs_days=3 在MySQL中工作,但本身并没有真正解决我的问题

这就是我能想到的所有事情.我已经运行了手动PURGE命令,它运行得很好,但是我更喜欢(尽管如果没有办法,我还是会这样做)不使用cron运行PURGE命令.

有人有什么想法吗?我只是轻拍.

谢谢.

mysql database-replication

12
推荐指数
1
解决办法
3万
查看次数

将副本集转换为独立服务器后遇到MongoDB警告

将mongodb副本集转换为独立服务器后,我遇到以下警告.我做了rs.remove('host')并在启动mongo db时删除了replSet参数.

[root@sam ~]# mongo
MongoDB shell version: 2.4.3
connecting to: test
Server has startup warnings: 
Tue Jul  9 17:18:46.076 [initandlisten] 
Tue Jul  9 17:18:46.076 [initandlisten] ** WARNING: mongod started without --replSet yet 1 documents are present in local.system.replset
Tue Jul  9 17:18:46.077 [initandlisten] **          Restart with --replSet unless you are doing maintenance and no other clients are connected.
Tue Jul  9 17:18:46.077 [initandlisten] **          The TTL collection monitor will not start because of this.
Tue Jul  9 17:18:46.077 [initandlisten] …
Run Code Online (Sandbox Code Playgroud)

replication mongodb database-replication

12
推荐指数
2
解决办法
4405
查看次数

Mysql主/从复制.即使对于读取查询,也要连接到master?(在去奴隶之前司机"ping"主人吗?)

我用ReplicationDriver使用mysql主/从复制(写入主服务器并读取到从服务器).我的连接URL如下:

"jdbc:mysql:replication://master:3306,slave1:3307,slave2:3308/sampledb?allowMasterDownConnections=true"  
Run Code Online (Sandbox Code Playgroud)

我使用Spring + Spring MyBatis模块.

我已将事务标记为readOnly,如下所示:

@Override
    @Transactional(rollbackFor=Exception.class,readOnly=true)
    public Sample getSample(SampleKey sampleKey) throws SampleException {
       //Call MyBastis based DAO  with "select" queries.
    }
Run Code Online (Sandbox Code Playgroud)

但是当我看到事务/ db日志时,它表明即使是"readOnly"事务,ReplicationDriver也会首先命中master.注意"获取连接"和"释放JDBC连接"行.

为什么会这样?

1)无论是否为只读查询,JDBC驱动程序是否仍然"ping"master以检查它是否存在然后转到slave以进行实际查询?

2)如果readOnly = true,Spring是否设置了底层Connection对象的readOnly(true)?

2014-03-19 12:32:28,280 DEBUG [http-8080-2] [AbstractPlatformTransactionManager.java:365] - Creating new transaction with name [com.rakuten.gep.foo.businesslogic.impl.SampleBusinessLogicImpl.getSample]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT,readOnly; '',-java.lang.Exception
2014-03-19 12:32:28,390 DEBUG [http-8080-2] [DataSourceTransactionManager.java:204] - Acquired Connection [jdbc:mysql://master:3306/, UserName=root@10.174.10.72, MySQL Connector Java] for JDBC transaction
CACHED DAO
Trying to retrive from the Cache
2014-03-19 12:32:31,334 DEBUG [http-8080-2] [Slf4jImpl.java:47] - ooo Using Connection [jdbc:mysql://slave1:3307/, UserName=root@10.174.10.72, …
Run Code Online (Sandbox Code Playgroud)

mysql spring jdbc database-replication spring-transactions

12
推荐指数
1
解决办法
6124
查看次数

Postgres热备和长期查询奴隶

问题:在热备模式下,在从属设备上应用WAL更新(从属角色是报告数据库服务器)时,是否可以运行长时间运行的查询(30秒+)?它现在的工作方式是,要么设置下面的参数来杀死长时间运行的查询,以便可以应用WAL更新,或者无限期地延迟WAL更新,直到没有运行查询来应用它们.我们可以同时拥有吗?长时间运行的查询和WAL更新同时应用?

案例实现:我们目前正在使用热备模式来同步从一个主服务器到一个服务器的任何更改.slave角色是一个报告数据库服务器,其查询不断地并发地运行(一些以ms为单位,一些以秒为单位,一些以分钟为单位.)在从站上运行没有活动查询的间隙是非常罕见的.

我们调整了这两个参数,以便在热备用上进行长时间查询:

max_standby_archive_delay = -1  # max delay before canceling queries
max_standby_streaming_delay = -1  # max delay before canceling queries
Run Code Online (Sandbox Code Playgroud)

在postgres邮件列表中查看类似于我们的存档邮件问题:

http://www.postgresql.org/message-id/AANLkTinLg+bpzcjzdndsnGGNFC=D1OsVh+hKb85A-s=n@mail.gmail.com

我理解在查询运行时阻止WAL更新应用于从属的概念.但是,我认为与使用MVCC,从属节点上的活动查询的(长期运行30秒+)可以运行从一个版本/快照读书,一边在施加WAL更新,因此后续的查询将得到WAL更新时WAL事务已提交.我还没有完全消化PostgreSQL中使用的MVCC模型[ https://devcenter.heroku.com/articles/postgresql-concurrency],所以这只是我的假设 - 即使表在一个表中被删除/截断WAL更新,当前运行的查询应该仍然有效,因为它正在使用它查询的表的版本/快照?

简介:无论如何(即使有第三方扩展)我们可以从主服务器同步从服务器并将主服务器的更新立即应用于从服务器,同时让任何执行时间的查询继续运行直到他们在备用服务器上完成/奴隶?如果Hot Standby无法做到这一点,你会为这种情况推荐什么?我们的情况是,我们正在不断地运行postgres并同时运行(一些以ms为单位,一些以秒为单位,一些以分钟为单位),几乎没有时间来应用WAL更新.我们使用过Bucardo,但在这种情况下这不是一个好的选择,因为我们需要同步200多个表,包括视图以及除主数据库之外的40多个其他数据库.

任何帮助将不胜感激.

谢谢!

postgresql replication database-replication

12
推荐指数
2
解决办法
8459
查看次数