trove introduction and practice

introduction

Trove is Database as a Service for OpenStack.

design

1
2
3
4
5
6
7
8
9
10
+————-+ +———–+ rabbitmq +————-+ 
| troveclient |—–>| trove-api |———>| taskmanager |
+————-+ +———–+ +————-+
|
+———————————–+ | rabbitmq
| | |

| trove instance +————————-+ +—————–+
| | datastore/guest |—–>| trove-conductor |

| +————————-+ +—————–+
+———————————–+

  • trove-api
  • trove-taskmanager: 管理数据库实例的生命周期和在数据库实例上的操作。
  • trove-guestagent: 运行在数据库实例内,监听 RPC,执行请求操作。
  • trove-conductor: guestagent 访问数据库的代理。

一个 trove instance 对应一个 vm,trove-guestagent 运行在 vm 内, vm内数据库的数据分区硬盘是 cinder 提供,vm 关联一个 SecurityGroup,允许数据库端口打开。
一段源码:

create_dns_client = import_class(CONF.remote_dns_client) create_guest_client = import_class(CONF.remote_guest_client) create_nova_client = import_class(CONF.remote_nova_client) create_swift_client = import_class(CONF.remote_swift_client) create_cinder_client = import_class(CONF.remote_cinder_client) create_heat_client = import_class(CONF.remote_heat_client) create_neutron_client = import_class(CONF.remote_neutron_client) 

调用了其他的组件来完成,trove 专注与数据库的管理。

images

image 包含了操作系统、cloud-init 等,另外:

  • sql engine (mysql)
  • trove-guestagent

engine 和 trove-guestagent 也可以通过网络动态加载,在 API 中有一个参数是packages 可以指定软件,在 prepare instance 的时候会进行安装。

  • 优点:

    *   灵活,只需要一个镜像,不同的 sql,指定不同的 packages*   缺点:
    
    *   效率,受网络等影响,延长了 instance init 的时间
    
    • packages 生成的默认配置文件等可能会被 agent 用到

feature

datastore、database、instance、configuration、backup、replication、cluster 和 数据库中的database、user

datastore

理解为数据库系统,对支持的数据库类型及其版本的管理。mysql、postgresql、mongo、redis、cassandra等, 主要针对 mysql 的 5.5 和 5.6。

database instance

对数据库实例生命周期的管理,以及 instance 和 volume 的动态 resize。

configuration

动态配置更新,针对不同的 datastore有一组预定义的配置,提供给用户来自定义配置,并动态的 attach到数据库实例并生效。

backup

对数据库进行备份。

针对 mysql 提供全量备份和增量备份。

mysql 备份的实现:在 guest 使用 mysql 的备份工具 mysqldump 或innobackupex 进行备份,并通过 swift api 上传到对象存储。

我们 stack 没有使用 openstack swift,测试了 rgw 集成 keystone,使用 rgw的 swift api 来备份,有一个问题:在创建备份的时候,都会为 tenant创建一个名为 database_backups 的 bucket,目前 rgw 的 bucket命名是全局唯一的。

replication

主从结构。

支持 mysql 的主从数据库创建,实现主从同步复制。

cluster

数据库集群。

juno 版支持 mongo 集群。

database、user

API 提供对数据库系统的数据库进行管理,提供对数据库用户的管理。

example

查询 datastore 及其版本

1
2
3
4
5
6
7
8
9
10
11
12
13
# trove datastore-list 
+————————————–|——-+
| ID | Name |

+————————————–|——-+
| f30f5a8c-51b2-4c19-9d13-26bb644dca3e | mysql |

+————————————–|——-+
# trove datastore-version-list f30f5a8c-51b2-4c19-9d13-26bb644dca3e
+————————————–|——+
| ID | Name |

+————————————–|——+
| 42bce448-ec76-4c80-bea0-128c4eee3471 | 5.5 |

| c0581e9a-6597-4ee9-9f34-08362ab3bcc6 | 5.6 |
+————————————–|——+

查询 flavor

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# trove flavor-list 
+—-|———–|——-+
| ID | Name | RAM |

+—-|———–|——-+
| 1 | m1.tiny | 512 |

| 2 | m1.small | 2048 |
| 3 | m1.medium | 4096 |
| 4 | m1.large | 8192 |
| 5 | m1.xlarge | 16384 |
| 6 | DS-512M | 512 |
| 7 | DS-640M | 640 |
| 8 | DS-384M | 384 |
| 9 | DS-1024M | 1024 |
+—-|———–|——-+

创建 database instance

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# trove create master_1 6 –size=1 –datastore_version 5.5 –datastore mysql 
+——————-|————————————–+
| Property | Value |
+——————-|————————————–+
| created | 2016-12-07T03:00:46 |
| datastore | mysql |

| datastore_version | 5.5 |
| flavor | 6 |

| id | 9788b066-a071-4aa8-bfb3-dd592596b3c6 |
| name | master_1 |
| status | BUILD |
| updated | 2016-12-07T03:00:46 |

| volume | 1 |
+——————-|————————————–+

查看已存在的 configuration group, 并 attach 到 instance

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# trove configuration-list 
+————————————–|———-|————-|—————-|————————+
| ID | Name | Description | Datastore Name | Datastore Version Name |

+————————————–|———-|————-|—————-|————————+
| bd81ea8e-e94d-4d49-a83b-ec78ffc6f15d | charset | charset | mysql | 5.5 |
+————————————–|———-|————-|—————-|————————+
# trove configuration-show bd81ea8e-e94d-4d49-a83b-ec78ffc6f15d
+————————|——————————————————————————————————————————————————————–$———————————————————————————————————————————-+
| Property | Value |

+————————|——————————————————————————————————————————————————————–$———————————————————————————————————————————-+
| created | 2016-11-25T03:11:28 |

| datastore_name | mysql |
| datastore_version_name | 5.5 |
| description | charset |
| id | bd81ea8e-e94d-4d49-a83b-ec78ffc6f15d |
| instance_count | 0 |
| name | charset |
| updated | 2016-11-25T03:11:28 |
| values | {”collation_database”: “utf8”, “character_set_connection”: “utf8”, “character_set_client”: “utf8”, “collation_server”: “utf8”, “character_set_database”: “utf8”, “c$llation_connection”: “utf8”, “character_set_results”: “utf8”, “character_set_server”: “utf8”, “character_set_filesystem”: “utf8”} |
+————————|——————————————————————————————————————————————————————–$
———————————————————————————————————————————-+
# trove configuration-attach 9788b066-a071-4aa8-bfb3-dd592596b3c6 bd81ea8e-e94d-4d49-a83b-ec78ffc6f15d

创建一个 database 和 database user

1
2
# trove database-create 9788b066-a071-4aa8-bfb3-dd592596b3c6 mydb 
# trove user-create 9788b066-a071-4aa8-bfb3-dd592596b3c6 admin admin –host % –databases mydb

创建一个 backup

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# trove backup-create 9788b066-a071-4aa8-bfb3-dd592596b3c6 backup.001 
+————-|————————————————————————————————-+
| Property | Value |
+————-|————————————————————————————————-+
| created | 2016-12-07T03:17:22 |
| datastore | {u’version’: u’5.5’, u’type’: u’mysql’, u’version_id’: u’42bce448-ec76-4c80-bea0-128c4eee3471’} |
| description | None |
| id | 538afc35-1112-4d44-bd32-eb1ac39a5f97 |
| instance_id | 9788b066-a071-4aa8-bfb3-dd592596b3c6 |
| locationRef | None |
| name | backup.001 |
| parent_id | None |
| size | None |
| status | NEW |
| updated | 2016-12-07T03:17:22 |
+————-|————————————————————————————————-+

创建一个 replica

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# trove create slave_1 6 –size=1 –datastore_version 5.5 –datastore mysql –replica_of 9788b066-a071-4aa8-bfb3-dd592596b3c6 
+——————-|————————————–+
| Property | Value |
+——————-|————————————–+
| created | 2016-12-07T03:18:50 |

| datastore | mysql |
| datastore_version | 5.5 |
| flavor | 6 |
| id | 819b1d3c-638a-4db2-a193-6066c54b1676 |

| name | slave_1 |
| replica_of | 9788b066-a071-4aa8-bfb3-dd592596b3c6 |
| status | BUILD |
| updated | 2016-12-07T03:18:50 |
| volume | 1 |
+——————-|————————————–+