diff --git a/ansible/group_vars/all.yml b/ansible/group_vars/all.yml
index 53d6270d45eb210bdd7c19cd971c396e7e9da55d..85a5655b63c065aeb23099a7b1bba95a03d95432 100644
--- a/ansible/group_vars/all.yml
+++ b/ansible/group_vars/all.yml
@@ -684,7 +684,7 @@ skip_stop_containers: []
 ####################
 
 elasticsearch_address: "{{ kolla_internal_fqdn }}"
-enable_elasticsearch: "{{ 'yes' if enable_central_logging | bool or enable_freezer | bool or enable_osprofiler | bool or enable_skydive | bool or enable_monasca | bool else 'no' }}"
+enable_elasticsearch: "{{ 'yes' if enable_central_logging | bool or enable_osprofiler | bool or enable_skydive | bool or enable_monasca | bool else 'no' }}"
 enable_kibana: "{{ 'yes' if enable_central_logging | bool or enable_monasca | bool else 'no' }}"
 
 ####################
diff --git a/ansible/roles/freezer/defaults/main.yml b/ansible/roles/freezer/defaults/main.yml
index a9df2d9cfa810385579ba41d93ddcdd689759d13..4dad18d517ddede42a2f5776e931ce9c4c9c5e81 100644
--- a/ansible/roles/freezer/defaults/main.yml
+++ b/ansible/roles/freezer/defaults/main.yml
@@ -28,6 +28,17 @@ freezer_services:
     volumes: "{{ freezer_scheduler_default_volumes + freezer_scheduler_extra_volumes }}"
     dimensions: "{{ freezer_scheduler_dimensions }}"
 
+####################
+## Database
+#####################
+freezer_database_backend: "mariadb"
+freezer_database_name: "freezer"
+freezer_database_user: "{% if use_preconfigured_databases | bool and use_common_mariadb_user | bool %}{{ database_user }}{% else %}freezer{% endif %}"
+freezer_database_address: "{{ database_address }}:{{ database_port }}"
+freezer_elasticsearch_replicas: "1"
+freezer_es_protocol:
+freezer_es_address:
+freezer_es_port:
 
 ####################
 # Docker
diff --git a/ansible/roles/freezer/tasks/bootstrap.yml b/ansible/roles/freezer/tasks/bootstrap.yml
new file mode 100644
index 0000000000000000000000000000000000000000..c8fc34bcc4ec9387cc3cb2be8abca2eb52185def
--- /dev/null
+++ b/ansible/roles/freezer/tasks/bootstrap.yml
@@ -0,0 +1,38 @@
+---
+- name: Creating Freezer database
+  kolla_toolbox:
+    module_name: mysql_db
+    module_args:
+      login_host: "{{ database_address }}"
+      login_port: "{{ database_port }}"
+      login_user: "{{ database_user }}"
+      login_password: "{{ database_password }}"
+      name: "{{ freezer_database_name }}"
+  become: true
+  register: database
+  run_once: True
+  delegate_to: "{{ groups['freezer-api'][0] }}"
+  when:
+    - not use_preconfigured_databases | bool
+
+- name: Creating Freezer database user and setting permissions
+  kolla_toolbox:
+    module_name: mysql_user
+    module_args:
+      login_host: "{{ database_address }}"
+      login_port: "{{ database_port }}"
+      login_user: "{{ database_user }}"
+      login_password: "{{ database_password }}"
+      name: "{{ freezer_database_user }}"
+      password: "{{ freezer_database_password }}"
+      host: "%"
+      priv: "{{ freezer_database_name }}.*:ALL"
+      append_privs: "yes"
+  become: true
+  run_once: True
+  delegate_to: "{{ groups['freezer-api'][0] }}"
+  when:
+    - not use_preconfigured_databases | bool
+
+- include_tasks: bootstrap_service.yml
+  when: database.changed or use_preconfigured_databases | bool
diff --git a/ansible/roles/freezer/tasks/deploy.yml b/ansible/roles/freezer/tasks/deploy.yml
index a4c9f89359f4c1844ce4db5f908ffd06b33cc060..7a283ae3b3be580f9992af93377965f65fe5ea96 100644
--- a/ansible/roles/freezer/tasks/deploy.yml
+++ b/ansible/roles/freezer/tasks/deploy.yml
@@ -6,6 +6,9 @@
   when: inventory_hostname in groups['freezer-api'] or
         inventory_hostname in groups['freezer-scheduler']
 
+- include_tasks: bootstrap.yml
+  when: freezer_database_backend == 'mariadb' and inventory_hostname in groups['freezer-api']
+
 - include_tasks: bootstrap_service.yml
   when: inventory_hostname in groups['freezer-api']
 
diff --git a/ansible/roles/freezer/templates/freezer.conf.j2 b/ansible/roles/freezer/templates/freezer.conf.j2
index 15ac9a14135411a8da20ae4f8dc85de17fd0b1b0..35b5741c623c7b6c2843338474b361c03857787e 100644
--- a/ansible/roles/freezer/templates/freezer.conf.j2
+++ b/ansible/roles/freezer/templates/freezer.conf.j2
@@ -46,12 +46,25 @@ enable_proxy_headers_parsing = True
 [paste_deploy]
 config_file = /etc/freezer/freezer-paste.ini
 
+
+{% if freezer_database_backend == 'mariadb' %}
+[storage]
+backend = sqlachemy
+driver = sqlalchemy
+
+[database]
+connection = mysql+pymysql://{{ freezer_database_user }}:{{ freezer_database_password }}@{{ freezer_database_address }}/{{ freezer_database_name }}
+max_retries = -1
+{% endif %}
+
+{% if freezer_database_backend == 'elasticsearch' %}
 [storage]
 backend = elasticsearch
 driver = elasticsearch
 
 [elasticsearch]
-hosts = {{ internal_protocol }}://{{ kolla_internal_fqdn }}:{{ elasticsearch_port }}
-number_of_replicas = 0
+hosts = {{ freezer_es_protocol }}://{{ freezer_es_address }}:{{ freezer_es_port }}
+number_of_replicas = {{ freezer_elasticsearch_replicas }}
 index = freezer
 {% endif %}
+{% endif %}
diff --git a/etc/kolla/globals.yml b/etc/kolla/globals.yml
index 0e86f942b236a18a0eed566c1679fc86bb460e94..7893363a47f12861b75b67de69def061b77ce3f4 100644
--- a/etc/kolla/globals.yml
+++ b/etc/kolla/globals.yml
@@ -565,3 +565,12 @@
 #enable_prometheus_ceph_mgr_exporter: "{{ enable_prometheus | bool and enable_ceph | bool }}"
 #enable_prometheus_openstack_exporter: "{{ enable_prometheus | bool }}"
 #enable_prometheus_elasticsearch_exporter: "{{ enable_prometheus | bool and enable_elasticsearch | bool }}"
+
+#########
+# Freezer
+#########
+# Freezer can utilize two different database backends, elasticsearch or mariadb.
+# Elasticsearch is preferred, however it is not compatible with the version deployed
+# by kolla-ansible. You must first setup an external elasticsearch with 2.3.0.
+# By default, kolla-ansible deployed mariadb is the used database backend.
+#freezer_database_backend: "mariadb"
diff --git a/releasenotes/notes/freezer-backend-531eececd69c0cd4.yaml b/releasenotes/notes/freezer-backend-531eececd69c0cd4.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..71aa964f4f328fc6023d732b0063f15eafaf418e
--- /dev/null
+++ b/releasenotes/notes/freezer-backend-531eececd69c0cd4.yaml
@@ -0,0 +1,13 @@
+---
+upgrade:
+  - |
+    Freezer now use MariaDB as default backend for database.
+
+    Elasticsearch remains as an optional backend due to the requirement of
+    Freezer to use Elasticsearch version 2.3.0. Elasticsearch in kolla-ansible
+    is 5.6.x and that doesn't work with Freezer.
+
+    New variables have been added:: ``freezer_database_backend``,
+    ``freezer_database_name``, ``freezer_database_user``,
+    ``freezer_database_address``, ``freezer_elasticsearch_replicas``,
+    ``freezer_es_protocol``, ``freezer_es_address``, ``freezer_es_port``