maker mariadb playbook reentrant 11/10911/9
authorcarey.xu <carey.xuhan@huawei.com>
Tue, 1 Mar 2016 09:50:10 +0000 (17:50 +0800)
committerJustin chi <chigang@huawei.com>
Mon, 14 Mar 2016 03:09:02 +0000 (03:09 +0000)
JIRA: COMPASS-329

Change-Id: I02680fe271f3896dc901a67c043570449fd3d64e
Signei-off-by: carey.xu <carey.xuhan@huawei.com>
Signed-off-by: carey.xu <carey.xuhan@huawei.com>
deploy/adapters/ansible/roles/database/tasks/mariadb_cluster.yml
deploy/adapters/ansible/roles/database/tasks/mariadb_cluster_debian.yml [deleted file]
deploy/adapters/ansible/roles/database/tasks/mariadb_cluster_redhat.yml [deleted file]
deploy/adapters/ansible/roles/database/tasks/mariadb_install.yml
deploy/adapters/ansible/roles/database/templates/my.cnf
deploy/adapters/ansible/roles/database/templates/my_debian.cnf [deleted file]
deploy/adapters/ansible/roles/database/templates/my_redhat.cnf [deleted file]
deploy/adapters/ansible/roles/database/vars/Debian.yml
deploy/adapters/ansible/roles/database/vars/RedHat.yml

index 84704fa..8fdb143 100644 (file)
@@ -7,8 +7,52 @@
 # http://www.apache.org/licenses/LICENSE-2.0
 ##############################################################################
 ---
-- include: mariadb_cluster_debian.yml
-  when: ansible_os_family == "Debian"
+- name: get cluster status
+  shell: mysql --silent --skip-column-names -e 'SHOW STATUS LIKE "wsrep_evs_state"'|awk '{print $2}'
+  register: cluster_status
+  when:
+    - inventory_hostname == haproxy_hosts.keys()[0]
 
-- include: mariadb_cluster_redhat.yml
-  when: ansible_os_family == "RedHat"
+- name: start first node to create new cluster
+  service:
+    name: mysql
+    state: restarted
+    enabled: yes
+    args: "--wsrep-new-cluster"
+  when: |
+    inventory_hostname == haproxy_hosts.keys()[0]
+    and not cluster_status.stdout | search("OPERATIONAL")
+
+- name: wait for cluster ready
+  shell: mysql --silent --skip-column-names -e 'SHOW STATUS LIKE "wsrep_evs_state"'|awk '{print $2}'
+  register: cluster_status
+  until: cluster_status|success
+  failed_when: not cluster_status.stdout | search("OPERATIONAL")
+  retries: 10
+  delay: 3
+  when: |
+    inventory_hostname == haproxy_hosts.keys()[0]
+    and not cluster_status.stdout | search("OPERATIONAL")
+
+- name: if I in the cluster nodes
+  shell: mysql --silent --skip-column-names -e 'SHOW STATUS LIKE "wsrep_incoming_addresses"'|awk '{print $2}'
+  register: cluster_nodes
+  changed_when: false
+
+- name: restart other nodes and join cluster
+  service:
+    name: mysql
+    state: restarted
+    enabled: yes
+  when: |
+    inventory_hostname != haproxy_hosts.keys()[0]
+    and not cluster_nodes.stdout | search("{{ internal_ip }}")
+
+- name: restart first nodes
+  service:
+    name: mysql
+    state: restarted
+  when: |
+    (inventory_hostname == haproxy_hosts.keys()[0]
+    and haproxy_hosts|length > 1
+    and not cluster_nodes.stdout | search('{{ internal_ip }}'))
diff --git a/deploy/adapters/ansible/roles/database/tasks/mariadb_cluster_debian.yml b/deploy/adapters/ansible/roles/database/tasks/mariadb_cluster_debian.yml
deleted file mode 100644 (file)
index 2ae9a2b..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-##############################################################################
-# Copyright (c) 2016 HUAWEI TECHNOLOGIES CO.,LTD and others.
-#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
-##############################################################################
----
-- name: start first node to create new cluster
-  service:
-    name: mysql
-    state: restarted
-    enabled: yes
-    args: "--wsrep-new-cluster"
-  when:
-    - inventory_hostname == haproxy_hosts.keys()[0]
-
-- name: wait for cluster ready
-  command: mysql --silent --skip-column-names -e 'SHOW STATUS LIKE "wsrep_evs_state"'
-  register: cluster_status
-  until: cluster_status|success
-  failed_when: not cluster_status.stdout | search("OPERATIONAL")
-  retries: 10
-  delay: 3
-  when:
-    - inventory_hostname == haproxy_hosts.keys()[0]
-
-- name: restart other nodes and join cluster
-  service:
-    name: mysql
-    state: restarted
-    enabled: yes
-  when:
-    - inventory_hostname != haproxy_hosts.keys()[0]
-
-- name: restart first nodes
-  service:
-    name: mysql
-    state: restarted
-  when: inventory_hostname == haproxy_hosts.keys()[0] and haproxy_hosts|length > 1
diff --git a/deploy/adapters/ansible/roles/database/tasks/mariadb_cluster_redhat.yml b/deploy/adapters/ansible/roles/database/tasks/mariadb_cluster_redhat.yml
deleted file mode 100755 (executable)
index 2fbde33..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-##############################################################################
-# Copyright (c) 2016 HUAWEI TECHNOLOGIES CO.,LTD and others.
-#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
-##############################################################################
----
-- name: start first node to create new cluster
-  shell: service mysql start --wsrep-new-cluster
-  when:
-    - inventory_hostname == haproxy_hosts.keys()[0]
-
-- name: wait for cluster ready
-  command: mysql -e"show status like 'wsrep%'" 
-  register: cluster_status
-  until: cluster_status|success
-  failed_when: not cluster_status.stdout | search("ON")
-  retries: 10
-  delay: 3
-  when:
-    - inventory_hostname == haproxy_hosts.keys()[0]
-
-- name: restart other nodes and join cluster
-  service:
-    name: mysql
-    state: restarted
-    enabled: yes
-  when:
-    - inventory_hostname != haproxy_hosts.keys()[0]
-
-- name: restart first nodes
-  service:
-    name: mysql
-    state: restarted
-  when: inventory_hostname == haproxy_hosts.keys()[0] and haproxy_hosts|length > 1
index 14fe163..bf9f346 100644 (file)
     - "\\s*uid = \\$MYUID$"
     - "\\s*gid = \\$MYGID$"
 
-- stat: path=/opt/mysql_init_complete
-  register: mysql_init_complete
-
 - name: enable auto start
   file:
     path=/usr/sbin/policy-rc.d
     state=absent
   when: ansible_os_family == "Debian"
 
-- name: rm old datafiles
-  shell: rm -rf /var/lib/mysql/ib_logfile*
-
 - name: set owner
   file: path=/var/lib/mysql owner=mysql group=mysql recurse=yes state=directory
+
+- name: get logfile stat
+  stat: path='{{ mysql_data_dir }}/ib_logfile0'
+  register: logfile_stat
+
+- debug: msg='{{ logfile_stat.stat.exists}}'
+- debug: msg='{{ logfile_stat.stat.size }}'
+  when: logfile_stat.stat.exists
+
+- name: rm logfile if exist and size mismatch
+  shell: 'rm -rf {{ mysql_data_dir }}/ib_logfile*'
+  when: |
+    logfile_stat.stat.exists
+    and logfile_stat.stat.size != 1073741824
index 68e0fca..f1170ec 100644 (file)
@@ -56,4 +56,4 @@ quote-names
 max_allowed_packet = 16M
 
 
-!includedir /etc/my.cnf.d/
+!includedir {{ mysql_config_dir }}
diff --git a/deploy/adapters/ansible/roles/database/templates/my_debian.cnf b/deploy/adapters/ansible/roles/database/templates/my_debian.cnf
deleted file mode 100644 (file)
index b801684..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-[client]
-port = 3306
-socket = /var/run/mysqld/mysqld.sock
-
-
-[mysqld_safe]
-socket = /var/run/mysqld/mysqld.sock
-nice = 0
-
-
-[mysql]
-default-character-set = utf8
-
-[mysqld]
-user = mysql
-collation-server = utf8_unicode_ci
-init-connect = 'SET NAMES utf8'
-character-set-server = utf8
-datadir = /var/lib/mysql
-bind-address = {{ internal_ip }}
-
-max-allowed-packet = 16M
-max-connect-errors = 1000000
-
-max_connections = {{ ansible_processor_vcpus * 100 }}
-
-wait_timeout = 28800
-tmp-table-size = 32M
-max-heap-table-size = 32M
-query-cache-type = 0
-query-cache-size = 0M
-thread-cache-size = 50
-open-files-limit = 65535
-table-definition-cache = 4096
-table-open-cache = 10240
-
-innodb-flush-method = O_DIRECT
-innodb-additional-mem-pool-size = 24M
-innodb-log-file-size = 1024M
-innodb-file-per-table = 1
-innodb-buffer-pool-size = 4096M
-
-innodb-read-io-threads = 4
-innodb-write-io-threads = 4
-innodb-doublewrite = 1
-innodb-log-buffer-size = 1024M
-innodb-buffer-pool-instances = 8
-innodb-log-files-in-group = 2
-innodb-thread-concurrency = {{ ansible_processor_vcpus * 2 }}
-
-innodb_stats_on_metadata = 0
-
-[mysqldump]
-quick
-quote-names
-max_allowed_packet = 16M
-
-
-!includedir /etc/mysql/conf.d/
diff --git a/deploy/adapters/ansible/roles/database/templates/my_redhat.cnf b/deploy/adapters/ansible/roles/database/templates/my_redhat.cnf
deleted file mode 100644 (file)
index 68e0fca..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-[client]
-port = 3306
-socket = /var/run/mysqld/mysqld.sock
-
-
-[mysqld_safe]
-socket = /var/run/mysqld/mysqld.sock
-nice = 0
-
-
-[mysql]
-default-character-set = utf8
-
-[mysqld]
-user = mysql
-collation-server = utf8_unicode_ci
-init-connect = 'SET NAMES utf8'
-character-set-server = utf8
-datadir = /var/lib/mysql
-bind-address = {{ internal_ip }}
-
-max-allowed-packet = 16M
-max-connect-errors = 1000000
-
-max_connections = {{ ansible_processor_vcpus * 100 }}
-
-wait_timeout = 28800
-tmp-table-size = 32M
-max-heap-table-size = 32M
-query-cache-type = 0
-query-cache-size = 0M
-thread-cache-size = 50
-open-files-limit = 65535
-table-definition-cache = 4096
-table-open-cache = 10240
-
-innodb-flush-method = O_DIRECT
-innodb-additional-mem-pool-size = 24M
-innodb-log-file-size = 1024M
-innodb-file-per-table = 1
-innodb-buffer-pool-size = 4096M
-
-innodb-read-io-threads = 4
-innodb-write-io-threads = 4
-innodb-doublewrite = 1
-innodb-log-buffer-size = 1024M
-innodb-buffer-pool-instances = 8
-innodb-log-files-in-group = 2
-innodb-thread-concurrency = {{ ansible_processor_vcpus * 2 }}
-
-innodb_stats_on_metadata = 0
-
-[mysqldump]
-quick
-quote-names
-max_allowed_packet = 16M
-
-
-!includedir /etc/my.cnf.d/
index 2eefc70..621dc49 100644 (file)
@@ -30,10 +30,13 @@ services: []
 mongodb_service: mongodb
 mysql_config:
   - dest: /etc/mysql/my.cnf
-    src: my_debian.cnf
+    src: my.cnf
   - dest: /etc/mysql/conf.d/wsrep.cnf
     src: wsrep.cnf
 
+mysql_config_dir: /etc/mysql/conf.d
+mysql_data_dir: /var/lib/mysql
+
 mongodb_config:
   dest: /etc/mongodb.conf
   src: mongodb.conf
index fe2d3f0..aed1ac9 100644 (file)
@@ -31,10 +31,13 @@ mongodb_service: mongod
 
 mysql_config:
   - dest: /etc/my.cnf
-    src: my_redhat.cnf
+    src: my.cnf
   - dest: /etc/my.cnf.d/wsrep.cnf
     src: wsrep.cnf
 
+mysql_config_dir: /etc/my.cnf.d
+mysql_data_dir: /var/lib/mysql
+
 mongodb_config:
   dest: /etc/mongod.conf
   src: mongodb.conf