[GALERA] Install and configuration: first and other nodes
							parent
							
								
									e512d7d53c
								
							
						
					
					
						commit
						fc5aa46d94
					
				|  | @ -135,3 +135,8 @@ mariadb_repository: "http://ftp.igh.cnrs.fr/pub/mariadb/repo/{{ mariadb_version | |||
| # ------------------------------------- | ||||
| percona_version: '5.6' | ||||
| percona_repository: 'http://repo.percona.com/apt' | ||||
| 
 | ||||
| 
 | ||||
| # Galera | ||||
| mysql_galera_bootstrap: false | ||||
| mariadb_galera_members: [] | ||||
|  |  | |||
|  | @ -0,0 +1,23 @@ | |||
| --- | ||||
| - set_fact: | ||||
|     booboo: /var/lib/mysql/.ansible_galera_boostrap | ||||
| 
 | ||||
| - name: STAT | Bootstrap mark | ||||
|   stat: path={{ booboo }} | ||||
|   register: s | ||||
| 
 | ||||
| - block: | ||||
| 
 | ||||
|     - name: COMMAND | Stop MariaDB | ||||
|       service: name=mysql state=stopped | ||||
| 
 | ||||
|     - name: COMMAND | Bootstrap first node | ||||
|       command: galera_new_cluster | ||||
|       register: bootstrap_run | ||||
| 
 | ||||
|   when: not s.stat.exists | ||||
| 
 | ||||
| - name: COMMAND | Create Bootstrap mark | ||||
|   command: "touch {{ booboo }}" | ||||
|   args: | ||||
|     creates: "{{ booboo }}" | ||||
|  | @ -0,0 +1,19 @@ | |||
| --- | ||||
| 
 | ||||
| - name: TEMPLATE | Deploy Galera configuration | ||||
|   template: src=etc/mysql/conf.d/09-galera.cnf.j2 dest=/etc/mysql/conf.d/09-galera.cnf | ||||
|   register: galeraconfig | ||||
| 
 | ||||
| - name: INCLUDE | Bootstrap first node | ||||
|   include: 'bootstrap.yml' | ||||
|   when: inventory_hostname == mysql_galera_primary_node | ||||
| 
 | ||||
| - name: INCLUDE | Configure other nodes | ||||
|   include: 'nodes.yml' | ||||
|   when: inventory_hostname != mysql_galera_primary_node | ||||
| 
 | ||||
| - name: SERVICE | Restart MariaDB if needed | ||||
|   service: name=mysql state=restarted | ||||
|   when: > | ||||
|     (galeraconfig or (p is defined and p.changed)) and | ||||
|     (bootstrap_run is not defined) | ||||
|  | @ -0,0 +1,29 @@ | |||
| --- | ||||
| 
 | ||||
| - name: COMMAND | GET debian.cnf from primary node | ||||
|   command: cat /etc/mysql/debian.cnf | ||||
|   register: debiancnf | ||||
|   delegate_to: '{{ mysql_galera_primary_node }}' | ||||
| 
 | ||||
| - name: COMMAND | Get current debian.cnf | ||||
|   command: cat /etc/mysql/debian.cnf | ||||
|   register: ondc | ||||
| 
 | ||||
| - block: | ||||
| 
 | ||||
|   - name: SERVICE | Stop MariaDB | ||||
|     service: name=mysql state=stopped | ||||
| 
 | ||||
|   - name: COPY | Paste primary node's debian.cnf | ||||
|     copy: > | ||||
|       content={{ debiancnf.stdout }} | ||||
|       dest=/etc/mysql/debian.cnf | ||||
|       mode=0600 | ||||
|       owner=root | ||||
|       group=root | ||||
|     register: paste | ||||
| 
 | ||||
|   - name: SERVICE | Start MariaDB | ||||
|     service: name=mysql state=started | ||||
| 
 | ||||
|   when: debiancnf.stdout != ondc.stdout | ||||
|  | @ -16,20 +16,19 @@ | |||
|   template: src=etc/mysql/conf.d/10-extra.cnf.j2 dest=/etc/mysql/conf.d/10-extra.cnf | ||||
|   register: extraconfig | ||||
| 
 | ||||
| - name: TEMPLATE | Deploy Galera configuration | ||||
|   template: src=etc/mysql/conf.d/09-galera.cnf.j2 dest=/etc/mysql/conf.d/09-galera.cnf | ||||
|   register: galeraconfig | ||||
| 
 | ||||
| - name: SERVICE | Restart now (prevent bugs) | ||||
|   service: name=mysql state=restarted | ||||
|   when: > | ||||
|     config.changed or | ||||
|     extraconfig.changed or | ||||
|     (galeraconfig is defined and galeraconfig.changed) | ||||
|     extraconfig.changed | ||||
| 
 | ||||
| - name: TEMPLATE Create .my.cnf for root | ||||
|   template: src=root/my.cnf dest=/root/.my.cnf owner=root group=root mode=0600 backup=yes | ||||
| 
 | ||||
| - name: INCLUDE | Galera | ||||
|   include: galera/main.yml | ||||
|   when: mysql_vendor == 'mariadb_galera' | ||||
| 
 | ||||
| - name: INCLUDE | Replication | ||||
|   include: replication/main.yml | ||||
|   when: mysql_replication_master or mysql_replication_slave | ||||
|  | @ -49,4 +48,3 @@ | |||
|     host="{{ item.host | default('localhost') }}" | ||||
|     state=present | ||||
|   with_items: "{{ mysql_users }}" | ||||
| 
 | ||||
|  |  | |||
|  | @ -4,16 +4,26 @@ | |||
| 
 | ||||
| [mysqld] | ||||
| 
 | ||||
| # -------------------- | ||||
| # Galera config | ||||
| # -------------------- | ||||
| 
 | ||||
| # Global | ||||
| wsrep_on=ON | ||||
| # TODO: wsrep_cluster_address=gcomm://cluster01,cluster02,cluster03 | ||||
| wsrep_cluster_address=gcomm://127.0.0.1 | ||||
| wsrep_provider=/usr/lib/galera/libgalera_smm.so | ||||
| wsrep_cluster_address=gcomm://{{ mariadb_galera_members | join(",") }} | ||||
| # TODO: https://mariadb.com/kb/en/mariadb/galera-cluster-system-variables/#wsrep_sst_method | ||||
| wsrep_sst_method=rsync | ||||
| # TODO: wsrep_cluster_name="my_wsrep_cluster" | ||||
| 
 | ||||
| # Node Configuration | ||||
| wsrep_node_address="{{ mysql_wsrep_node_address | default(ansible_eth0.ipv4.address) }}" | ||||
| wsrep_node_name="{{ mysql_wsrep_node_name | default(ansible_fqdn) }}" | ||||
| 
 | ||||
| 
 | ||||
| # -------------------- | ||||
| # Deps | ||||
| # -------------------- | ||||
| binlog_format=ROW | ||||
| default_storage_engine=InnoDB | ||||
| innodb_autoinc_lock_mode=2 | ||||
|  |  | |||
								
									
									
										
											34
										
									
									tests/gen.pl
									
									
									
									
								
								
							
							
										
											34
										
									
									tests/gen.pl
									
									
									
									
								|  | @ -24,7 +24,8 @@ my @a = ( | |||
| 
 | ||||
| my $start_ip = '192.168.200.10'; | ||||
| my $iip = ip2long($start_ip); | ||||
| my $tmp_ip = 0; | ||||
| 
 | ||||
| my @galera = (); | ||||
| 
 | ||||
| foreach my $n (@a) | ||||
| { | ||||
|  | @ -40,27 +41,40 @@ foreach my $n (@a) | |||
| 	if($data[-1] eq 'slave') | ||||
| 	{ | ||||
| 		open(FILE, '>', "host_vars/$n"); | ||||
| 		printf FILE (qq/his_master: '%s'\n/, $tmp_ip); | ||||
| 		printf FILE (qq/his_master: '%s'\n/, long2ip($iip)); | ||||
| 		close(FILE); | ||||
| 	} | ||||
| 
 | ||||
| 	if($data[-1] =~ /^\d$/ && $data[-2] eq 'mariadbgalera') | ||||
| #	if($data[-1] =~ /^\d$/ && $data[-2] eq 'mariadbgalera') | ||||
| #	{ | ||||
| #		open(FILE, '>', "host_vars/$n"); | ||||
| #		printf FILE (qq/galera_id: '%s'\n/, $data[-1]); | ||||
| #		close(FILE); | ||||
| #	} | ||||
| 
 | ||||
| 	if($data[-2] eq 'mariadbgalera') | ||||
| 	{ | ||||
| 		open(FILE, '>', "host_vars/$n"); | ||||
| 		printf FILE (qq/galera_id: '%s'\n/, $data[-1]); | ||||
| 		close(FILE); | ||||
| 		push(@galera, long2ip($iip)); | ||||
| 		goto SKIP; | ||||
| 	} | ||||
| 
 | ||||
| 	open(FILE, '>', "group_vars/" . $data[2]); | ||||
| 	my $mv = $data[-2]; | ||||
| 	$mv = 'mariadb_galera' if($mv eq 'mariadbgalera'); | ||||
| 	printf FILE (qq/mysql_vendor: '%s'\n/, $mv); | ||||
| 	printf FILE (qq/mysql_vendor: '%s'\n/, $data[2]); | ||||
| 	close(FILE); | ||||
| 
 | ||||
| 	$tmp_ip = long2ip($iip); | ||||
| 	SKIP: | ||||
| 	$iip++; | ||||
| } | ||||
| 
 | ||||
| open(FILE, '>', 'group_vars/mariadbgalera'); | ||||
| say FILE qq/mysql_vendor: 'mariadb_galera'/; | ||||
| say FILE qq/mariadb_galera_members:/; | ||||
| foreach(@galera) | ||||
| { | ||||
| 	say FILE qq/  - '$_'/; | ||||
| } | ||||
| close(FILE); | ||||
| 
 | ||||
| sub ip2long { | ||||
| 	return unpack("l*", pack("l*", unpack("N*", inet_aton(shift)))); | ||||
| } | ||||
|  |  | |||
|  | @ -1,2 +1,2 @@ | |||
| mysql_use_percona_repository: true | ||||
| mysql_bind_address: '0.0.0.0' | ||||
| mysql_bind_address: '{{ ansible_eth1.ipv4.address }}' | ||||
|  |  | |||
|  | @ -1,3 +1,5 @@ | |||
| mysql_vendor: 'mariadb_galera' | ||||
| mysql_use_percona_repository: false | ||||
| mariadb_version: '10.1' | ||||
| mariadb_galera_members: | ||||
|   - '192.168.200.18' | ||||
|   - '192.168.200.19' | ||||
|   - '192.168.200.20' | ||||
|  |  | |||
|  | @ -1 +1 @@ | |||
| his_master: '192.168.200.16' | ||||
| his_master: '192.168.200.17' | ||||
|  |  | |||
|  | @ -1 +1 @@ | |||
| his_master: '192.168.200.10' | ||||
| his_master: '192.168.200.11' | ||||
|  |  | |||
|  | @ -1 +1 @@ | |||
| his_master: '192.168.200.12' | ||||
| his_master: '192.168.200.13' | ||||
|  |  | |||
|  | @ -1 +0,0 @@ | |||
| galera_id: '1' | ||||
|  | @ -1 +0,0 @@ | |||
| galera_id: '2' | ||||
|  | @ -1 +0,0 @@ | |||
| galera_id: '3' | ||||
|  | @ -1 +1 @@ | |||
| his_master: '192.168.200.14' | ||||
| his_master: '192.168.200.15' | ||||
|  |  | |||
|  | @ -38,6 +38,11 @@ | |||
|       when: c.changed | ||||
| 
 | ||||
| - hosts: mariadbgalera | ||||
|   vars: | ||||
|     mysql_galera_primary_node: 'jessie-upstream-mariadbgalera-1' | ||||
|     mysql_wsrep_node_address: "{{ ansible_eth1.ipv4.address }}" | ||||
|     mysql_use_percona_repository: false | ||||
|     mariadb_version: '10.1' | ||||
|   roles: | ||||
|     - ../../ | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue