Master Server (Primary)
Folgende Schritte sind erforderlich, um einen DATA Server als Master zu konfigurieren.
Als erstes muss ein entsprechendes Konfigurationsmodul erstellt werden. Dies erfolgt mit folgendem Befehl:
cat <<EOFF > /etc/my.cnf.d/jtel-master.cnf # Custom MySQL settings for a specific SQL master server # # WARNING: This file is specific to the master server [mysqld] # # Replication Options # # Specific options for MASTER role # server_id = 1 binlog_format = ROW expire_logs_days = 3 max_binlog_size = 100M log_bin = binlog EOFF
ACHTUNG
Der Wert server_id
taucht sowohl in den Konfigurationsmodulen für Master-Server als auch in den Konfigurationsmodulen für Slave-Server auf. Hierbei ist strikt darauf zu achten, dass dieser Wert eindeutig ist. In einem Verbund dürfen keine DATA-Server die gleiche server_id
haben.
Als nächstes wird ein Benutzer angelegt, mit dem sich die Slave-Server mit dem Master-Server verbinden können:
mysql -u root -pfireball -v -e"CREATE USER 'repl'@'%' IDENTIFIED BY 'fireball'" mysql -u root -pfireball -v -e"GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'" mysql -u root -pfireball -v -e"FLUSH PRIVILEGES"
Im Anschluss muss der MySQL-Server neu gestartet werden, damit alle Einstellungen übernommen werden:
service mysqld restart
Slave Server
Folgende Schritte sind erforderlich, um einen DATA-Server als Slave zu konfigurieren. Es handelt sich hierbei um eine unverschlüsselte Replikation. Eine verschlüsselte Replikation kann gemäß https://www.thomas-krenn.com/de/wiki/MySQL_Verbindungen_mit_SSL_verschl%C3%BCsseln umgesetzt werden.
Als erstes muss ein entsprechendes Konfigurationsmodul erstellt werden. Dies erfolgt mit folgendem Befehl:
cat <<EOFF > /etc/my.cnf.d/jtel-slave.cnf # Custom MySQL settings for a specific SQL slave server # # WARNING: This file is specific to the slave server [mysqld] # Specific options for SLAVE role # server_id = 2 EOFF
ACHTUNG
Der Wert server_id
taucht sowohl in den Konfigurationsmodulen für Master-Server als auch in den Konfigurationsmodulen für Slave-Server auf. Hierbei ist strikt darauf zu achten, dass dieser Wert eindeutig ist. In einem Verbund dürfen keine DATA-Server die gleiche server_id
haben.
Im Anschluss muss der MySQL-Server neu gestartet werden, damit alle Einstellungen übernommen werden:
service mysqld restart
Ersteinrichtung der Systemdaten
Die folgenden Operationen erfolgen nicht mehr im Kontext des Benutzers root
sondern müssen im Kontext des Benutzers jtel
ausgeführt werden. Dafür kann man sich entweder in einer separaten SSH Sitzung als Benutzer jtel
anmelden oder, wenn man bereits als Benutzer root
angemeldet ist, in den Kontext des Benutzers jtel
wechseln. Dies erfolgt durch folgenden Befehl:
su jtel cd
Nach Eingabe dieser Befehle erkennt man den Benutzerwechsel am Systemprompt, welches nun [jtel@acd-db1 ~]$
lautet (Das Systemprompt setzt sich zusammen ausbenutzername@hostname aktuelles Verzeichnis
).
ACHTUNG
Wenn diese Operation von einer anderen Maschine ausgeführt werden sollte, dann ist unbedingt darauf zu achten, daß als Zielserver der primäre DATA-Server angegeben wird. Im Nachfolgenden Beispiel wird davon ausgegangen, dass die Operation auf dem primären DATA-Server ausgeführt wird, der Zielserver ist also localhost
.
Die Ersteinrichtung der Datenbank erfolgt über folgende Befehle:
cd ~/shared/JTELCarrierPortal/DB/mySQL/init mysql -h localhost -u root -pfireball -vvv -f -n -q -e"source Init.sql" cd ~/shared/JTELCarrierPortal/DB/mySQL ./update_all.sh root:fireball@localhost cd ~/shared/JTEL/DB ./update_all.sh root:fireball@localhost
Im Falle dass für den Kunden noch spezifische Anpassungen oder Erweiterungen programmiert wurden die auch spezifische Anpassungen der Datenbank enthalten, muss zusätzlich das kundenspezifische Datenbank-Skript ausgeführt werden. Dies erfolgt exemplarisch durch einen Befehl der folgendermaßen aufgebaut ist:
cd ~/shared/acme/DB ./update_all.sh root:fireball@localhost
All diese Skripte geben Feedback über ihren Fortschritt und Erfolg. Sollte es bei der Ausführung eines dieser Skripte eine Fehlermeldung geben, so ist sorgfältig zu prüfen, ob die Übergebenen Parameter korrekt sind (z.B. Datenbankpasswort, Hostname). Eine erfolgreiche Ausführung sieht folgendermaßen aus:
[jtel@acd-db1 ~]$ cd ~/shared/JTELCarrierPortal/DB/mySQL [jtel@acd-db1 mySQL]$ ./update_all.sh root:fireball@localhost Updating Database..................... CONGRATULATIONS: no errors during update. [jtel@acd-db1 mySQL]$ cd ~/shared/JTEL/DB [jtel@acd-db1 DB]$ ./update_all.sh root:fireball@localhost Updating database.......... CONGRATULATIONS: no errors during update. [jtel@acd-db1 DB]$ cd ~/shared/acme/DB [jtel@acd-db1 DB]$ ./update_all.sh root:fireball@localhost Updating database... CONGRATULATIONS: no errors during update. [jtel@acd-db1 DB]$
Nach der Erstinitialisierung müssen noch einige Werte an die Systemumgebung angepasst werden. Um dies zu vereinfachen, wird eine spezielle Datenbankprozedur aufgerufen, die nahezu alle benötigten Anpassungen für ein Standard-System vornimmt. Diese Prozedur muss folgende Parameter übergeben bekommen:
Parameter | Bedeutung | Wert in diesem Beispiel | |
---|---|---|---|
1 | _softwareHome | UNC des Verzeichnisses in dem das jtel-System alle Daten unterbringt. Dort befinden sich z.B. die Verzeichnisse Data , LogFiles und LogFilesCall . | '//acd-lb/shared/' |
2 | _dataHome | UNC des Verzeichnisses in dem das jtel-System alle Programmdateien vorfindet. Dort befinden sich z.B. die Verzeichnisse JTELCarrierPortal und JTEL . | '//acd-lb/shared/' |
3 | _webServerList | Komma-Separierte Liste aller WEB-Application-Server. | 'acd-jb1,acd-jb2' |
4 | _telServerList | Komma-Separierte Liste aller TEL-Server die Call-Flow-Applikationen ausführen. | 'acd-tel1' |
5 | _daemonServer | TEL-Server auf dem die Verwaltungsapplikationen ausgeführt werden. | 'acd-tel1' |
6 | _loadBalancer | Name des Servers auf dem die Rolle LB ausgeführt wird. | 'acd-lb' |
7 | _https | TRUE , falls der Load Balancer die Dienste über HTTPS zur Verfügung stellt, FALSE falls nicht. | FALSE |
ACHTUNG
Bei den UNC bzw. Pfadangaben gelten folgende Regeln:
- Das Trennzeichen ist ein / (slash) und kein \ (backslash)
- Die Pfade müssen mit / enden
Der Aufruf erfolgt mittels folgendem Befehl:
mysql -u root -pfireball -v -e "CALL JTELWeb.Hardstyle_ReconfigureFullSystem('//acd-store/shared/','//acd-store/shared/','acd-jb1,acd-jb2','acd-tel1','acd-tel1','acd-lb',FALSE)"
Damit ist die Einrichtung der Rolle DATA abgeschlossen.
Weiterführende Links
Keep only bin logs for 4 hours
This step is necessary, on servers with a high load and low disk capacity:
echo "FLUSH LOGS;" > /home/jtel/purge.sql echo "PURGE BINARY LOGS BEFORE NOW() - INTERVAL 4 HOUR;" >> /home/jtel/purge.sql echo '#!/bin/bash' > /home/jtel/purge.sh echo "mysql -uroot -pfireball < /home/jtel/purge.sql" >> /home/jtel/purge.sh chmod 700 /home/jtel/purge.sh mv /home/jtel/purge.sh /etc/cron.hourly/