-
Notifications
You must be signed in to change notification settings - Fork 9
/
play.yaml
221 lines (171 loc) · 5.3 KB
/
play.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
---
- name: Install Percona XtraDB Cluster
hosts: database_nodes
become: yes
tasks:
- name: Update the system
apt:
update_cache: yes
- name: Install the necessary packages
apt:
name: "{{ item }}"
state: present
loop:
- wget
- gnupg2
- lsb-release
- curl
- python3-pip
- name: Download and install Percona repository
shell: |
wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb
dpkg -i percona-release_latest.generic_all.deb
pip3 install pymysql
args:
chdir: /tmp
- name: Update package cache after adding Percona repository
apt:
update_cache: yes
- name: Enable the release repository for Percona XtraDB Cluster
shell: percona-release setup pxc80
- name: Install Percona Xtradb Cluster
shell: DEBIAN_FRONTEND=noninteractive apt install -y percona-xtradb-cluster < /dev/null
- name: Configure Percona XtraDB Cluster
template:
src: my.cnf.j2
dest: /etc/mysql/mysql.conf.d/mysqld.cnf
- name: Bootstrap nodes and joining to the cluster
hosts: database_nodes
become: yes
vars:
passwords_file: "password.yaml"
tasks:
- name: Stop MySQL service on all nodes
service:
name: mysql
state: stopped
- name: Update safe_to_bootstrap value in grastate.dat
replace:
path: /var/lib/mysql/grastate.dat
regexp: '^safe_to_bootstrap: 0$'
replace: 'safe_to_bootstrap: 1'
when: inventory_hostname == groups['database_nodes'] | first
- name: Start Bootstrap service on the first node
command: systemctl start [email protected]
when: inventory_hostname == groups['database_nodes'] | first
- name: Start MySQL service on other nodes
service:
name: mysql
state: started
when: inventory_hostname != groups['database_nodes'] | first
- name: Stop Bootstrap service on the first node
command: systemctl stop mysql@bootstrap
when: inventory_hostname == groups['database_nodes'] | first
- name: Start MySQL service on the first node after bootstrap
service:
name: mysql
state: started
when: inventory_hostname == groups['database_nodes'] | first
- name: Include passwords from file
include_vars:
file: "{{ passwords_file }}"
name: passwords
- name: Set MySQL root password
mysql_user:
name: root
password: "{{ passwords.mysql_root_password }}"
login_unix_socket: /var/run/mysqld/mysqld.sock
login_user: root
login_password: "" # Empty password for the initial connection
state: present
when: inventory_hostname == groups['database_nodes'] | first
- name: Install Proxysql
hosts: proxysql_nodes
become: yes
tasks:
- name: Update the system
apt:
update_cache: yes
- name: Install the necessary packages
apt:
name: "{{ item }}"
state: present
loop:
- wget
- gnupg2
- lsb-release
- curl
- python3-pip
- name: Download and install Percona repository
shell: |
wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb
dpkg -i percona-release_latest.generic_all.deb
pip3 install pymysql
args:
chdir: /tmp
- name: Update package cache
apt:
update_cache: yes
- name: Enable the release repository for Percona XtraDB Cluster
shell: percona-release setup pxc80
- name: Install Percona XtraDB Cluster client
apt:
name: percona-xtradb-cluster-client
state: present
- name: Install ProxySQL
apt:
name: proxysql2
state: present
- name: configure proxysql nodes
hosts: database_nodes
become: yes
vars:
passwords_file: "password.yaml"
tasks:
- name: Include passwords from file
include_vars:
file: "{{ passwords_file }}"
name: passwords
- name: Create proxysql user
mysql_user:
name: proxysql
password: "{{ passwords.proxysql_password }}"
host: "%"
priv: "*.*:ALL"
login_user: root
login_password: "{{ passwords.mysql_root_password }}"
state: present
loop_control:
loop_var: item
loop: "{{ groups['database_nodes'] }}"
when: item == groups['database_nodes'] | first
- name: Grant privileges to proxysql user
mysql_user:
name: proxysql
priv: "*.*:ALL"
host: "%"
login_user: root
login_password: "{{ passwords.mysql_root_password }}"
state: present
loop_control:
loop_var: item
loop: "{{ groups['database_nodes'] }}"
when: item == groups['database_nodes'] | first
- name: configure proxysql nodes
hosts: proxysql_nodes
become: yes
vars:
passwords_file: "password.yaml"
tasks:
- name: Include passwords from file
include_vars:
file: "{{ passwords_file }}"
name: passwords
- name: Configure Proxysql admin Config File
template:
src: proxysql_admin_config.j2
dest: /etc/proxysql-admin.cnf
- name: Configure ProxySQL Config File
template:
src: proxysql_config.j2
dest: /etc/proxysql.cnf