-
Notifications
You must be signed in to change notification settings - Fork 48
/
Copy pathproxy-configuration.jps
128 lines (109 loc) · 6.03 KB
/
proxy-configuration.jps
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
jpsType: update
name: Database Cluster
description: ProxySQL Load Balancer Entry Point
success: "../texts/proxy-entrypoint.md"
nodeGroupAlias:
"${targetNodes.nodeGroup}": sqldb
globals:
PATH: "${settings.path}"
DB_USER: "${settings.db_user}"
DB_PASS: "${settings.db_pass}"
SCHEME: "${settings.scheme}"
MONITOR_USER: monitor-${fn.random}
MONITOR_PASS: "${fn.password(10)}"
ORCH_PASS: "${fn.password(10)}"
MAX_REPL_LAG: 20
onBeforeRemoveNode[proxy]:
stopEvent
onBeforeAddNode[proxy]:
stopEvent
onAfterScaleOut[sqldb]:
forEach(event.response.nodes):
- addMonitorUser:
filter: "${@i.id}"
- addSlave:
id: "${@i.id}"
onBeforeScaleIn[sqldb]:
forEach(event.response.nodes):
removeSlave:
id: "${@i.id}"
onAfterScaleIn[sqldb]:
forEach(event.response.nodes):
cmd[proxy]: mysql -h 127.0.0.1 -P3360 -uadmin -p${globals.ORCH_PASS} -e "DELETE FROM orchestrator.database_instance where hostname='node${@i.id}-${env.domain}';"
onInstall:
- log: Orchestrator configuration
- cmd [proxy]: |-
mysql -h 127.0.0.1 -P3360 -uroot -e "DROP DATABASE IF EXISTS orchestrator;"
mysql -h 127.0.0.1 -P3360 -uroot -e "CREATE DATABASE IF NOT EXISTS orchestrator;"
mysql -h 127.0.0.1 -P3360 -uroot -e "GRANT ALL PRIVILEGES ON orchestrator.* TO 'admin'@'127.0.0.1' IDENTIFIED BY '${globals.ORCH_PASS}';"
wget ${globals.PATH}/configs/orchestrator.conf.json -O /etc/orchestrator.conf.json &>> /var/log/run.log
sed -i -e 's|orc_client_user|${globals.DB_USER}|g' /etc/orchestrator.conf.json
sed -i -e 's|orc_client_password|${globals.DB_PASS}|g' /etc/orchestrator.conf.json
sed -i -e 's|orc_server_user|admin|g' /etc/orchestrator.conf.json
sed -i -e 's|orc_server_password|${globals.ORCH_PASS}|g' /etc/orchestrator.conf.json
sed -i -e 's|HTTP_Auth_User|admin|g' /etc/orchestrator.conf.json
sed -i -e 's|HTTP_Auth_Password|${globals.ORCH_PASS}|g' /etc/orchestrator.conf.json
systemctl restart orchestrator
user: root
- log: ProxySQL configuration
- cmd [proxy]: |-
mysql -h 127.0.0.1 -P6032 -uadmin -padmin -e "INSERT INTO mysql_replication_hostgroups VALUES (10,11,'Group setup');"
mysql -h 127.0.0.1 -P6032 -uadmin -padmin -e "INSERT INTO mysql_users (username, password, active, default_hostgroup, max_connections)
VALUES ('${globals.DB_USER}', '${globals.DB_PASS}', 1, 10, 1000);"
mysql -h 127.0.0.1 -P6032 -uadmin -padmin -e "INSERT INTO mysql_query_rules (active, match_pattern, destination_hostgroup, apply) VALUES (1, '^SELECT.*', 11, 1);"
mysql -h 127.0.0.1 -P6032 -uadmin -padmin -e "INSERT INTO mysql_query_rules (active, match_pattern, destination_hostgroup, apply) VALUES (1, '^SELECT.*FOR UPDATE', 10, 1);"
mysql -h 127.0.0.1 -P6032 -uadmin -padmin -e "UPDATE global_variables SET variable_value='${globals.MONITOR_USER}' WHERE variable_name='mysql-monitor_username';"
mysql -h 127.0.0.1 -P6032 -uadmin -padmin -e "UPDATE global_variables SET variable_value='${globals.MONITOR_PASS}' WHERE variable_name='mysql-monitor_password';"
mysql -h 127.0.0.1 -P6032 -uadmin -padmin -e "UPDATE global_variables SET variable_value='${nodes.sqldb.version}' WHERE variable_name='mysql-server_version';"
mysql -h 127.0.0.1 -P6032 -uadmin -padmin -e "LOAD MYSQL VARIABLES TO RUNTIME; SAVE MYSQL VARIABLES TO DISK;"
mysql -h 127.0.0.1 -P6032 -uadmin -padmin -e "LOAD MYSQL SERVERS TO RUNTIME; SAVE MYSQL SERVERS TO DISK;"
mysql -h 127.0.0.1 -P6032 -uadmin -padmin -e "LOAD MYSQL USERS TO RUNTIME; SAVE MYSQL USERS TO DISK;"
mysql -h 127.0.0.1 -P6032 -uadmin -padmin -e "LOAD MYSQL QUERY RULES TO RUNTIME; SAVE MYSQL QUERY RULES TO DISK;"
- forEach(nodes.sqldb):
addMonitorUser:
filter: "${@i.id}"
- if ('${globals.SCHEME}'.toLowerCase() == 'master'):
- setGlobals:
MAX_REPL_LAG: 0
- if ('${nodes.sqldb.master.id}' == '${nodes.sqldb.first.id}'):
- addMaster:
id: "${nodes.sqldb.master.id}"
- addMaster:
id: "${nodes.sqldb[1].id}"
- if ('${nodes.sqldb.master.id}' != '${nodes.sqldb.first.id}'):
- addMaster:
id: "${nodes.sqldb.master.id}"
- addMaster:
id: "${nodes.sqldb.first.id}"
- forEach(k:nodes.sqldb):
addSlave:
id: "${@k.id}"
- if ('${globals.SCHEME}'.toLowerCase() != 'master'):
forEach(l:nodes.sqldb):
- if (${@l.ismaster}):
addMaster:
id: "${@l.id}"
- addSlave:
id: "${@l.id}"
actions:
addMonitorUser:
cmd[${this.filter}]: |-
mysql -u${globals.DB_USER} -p${globals.DB_PASS} -e "CREATE USER '${globals.MONITOR_USER}'@'%' IDENTIFIED BY '${globals.MONITOR_PASS}';"
mysql -u${globals.DB_USER} -p${globals.DB_PASS} -e "GRANT SUPER,REPLICATION CLIENT ON *.* TO '${globals.MONITOR_USER}'@'%';"
mysql -u${globals.DB_USER} -p${globals.DB_PASS} -e "FLUSH PRIVILEGES;"
addMaster:
cmd [proxy]: |-
mysql -h 127.0.0.1 -P6032 -uadmin -padmin -e "INSERT INTO mysql_servers (hostgroup_id, hostname, port) VALUES (10, 'node${this.id}', 3306);"
mysql -h 127.0.0.1 -P6032 -uadmin -padmin -e "LOAD MYSQL SERVERS TO RUNTIME; SAVE MYSQL SERVERS TO DISK;"
/usr/local/orchestrator/orchestrator -c discover -i node${this.id} cli &>> /var/log/run.log
user: root
addSlave:
cmd[proxy]: |-
mysql -h 127.0.0.1 -P6032 -uadmin -padmin -e "INSERT INTO mysql_servers (hostgroup_id, hostname, port, max_replication_lag)
VALUES (11, 'node${this.id}', 3306, '${globals.MAX_REPL_LAG}');"
mysql -h 127.0.0.1 -P6032 -uadmin -padmin -e "LOAD MYSQL SERVERS TO RUNTIME;SAVE MYSQL SERVERS TO DISK;"
removeSlave:
cmd[proxy]: |-
mysql -h 127.0.0.1 -P6032 -uadmin -padmin -e "DELETE FROM mysql_servers WHERE hostname = 'node${this.id}';"
mysql -h 127.0.0.1 -P6032 -uadmin -padmin -e "LOAD MYSQL SERVERS TO RUNTIME; SAVE MYSQL SERVERS TO DISK;"
mysql -h 127.0.0.1 -P3360 -uadmin -p${globals.ORCH_PASS} -e "DELETE FROM orchestrator.database_instance where hostname='node${this.id}-${env.domain}';"