trove mysql replication

introduction

trove 版本:newton

mysql replication 的方式:

  • binlog
  • GTID

operations

创建一个普通的 trove instance:

1
[root@trove-service-1]#trove create master 6 –size 1 –datastore mysql –datastore_version 5.5

创建一个从实例,以上一个实例为主:

1
[root@trove-service-1]#trove create slave_1 6 –size 1 –datastore mysql –datastore_version 5.5 –replica_of 8f43762e-e324-4e1f-b628-a4ec41bc9035

problem

mysql5.5 只支持 binlog,而 trove 默认使用 GTID, 如果需要使用 binlog 的方式,修改配置文件 trove-guestagent.conf

1
2
3
[mysql]
replication_strategy = MysqlBinlogReplication
replication_namespace = trove.guestagent.strategies.replication.mysql_binlog

在进行 replication 时需要设置 master, 即 enableasmaster, 会根据不同的 datastoreversion 去 patch 不同的 config template trove/taskmanager/models.py

1
2
3
4
5
def _render_replica_source_config(self, flavor):
config = template.ReplicaSourceConfigTemplate(
self.datastore_version, flavor, self.id)
config.render()
return config

如果定义的 datastoreversion 不是 5.5 或者 5.6,则会使用了默认的 GTID 的 config, 若你使用的是 mysql5.5 则会导致配置文件错误 mysql 启动失败, 从而主从失败, 如:

1
2
3
4
5
6
7
[root@trove-service-1]# trove datastore-version-list mysql
+————————————–|———–+
| ID | Name |
+————————————–|———–+
| 67e93968-2d67-4ed4-81e4-4688d539d3c2 | 5.5 |
| ac3b88b1-d349-4b23-9b50-6edb3b55dcbc | mysql-5.5 |
+————————————–|———–+

当以 version 是 mysql-5.5 创建的 trove instance 作为 master 来创建从节点的时候就会失败。