Funktionelle Komponenten der Rolle
Die Rolle DATA kann auf einem oder mehrere Server aufgeteilt werden, wobei ein Setup mit nur einem DATA server nur bei sehr kleinen Installationen zu empfehlen ist. Die Aufteilung entspricht dabei folgenden funktionellen Komponenten:
Funktion | Beschreibung | Zugriff | Menge | Redundanzstrategie |
---|
Primary | Alle Schreibzugriffe erfolgen hier. Des weiteren wird hier immer alle funktionellen Routinen ausgeführt, die Daten verändern. Insbesondere die Anrufverteilung erfolgt hier. | Schreiben und Lesen | 1 | Kann durch eine Active/Passive Konfiguration redundant ausgelegt werden |
Reporting | Erstellung komplexer Datenauswertungen. Diese Vorgänge erfordern mitunter ein hohes Maß an Speicher-, Berechnungs- und I/O Ressourcen. | Lesen | 0 - n | In sehr großen Systemen können verschiedene Gruppen Web-Server auf verschiedene Reporting-Slaves aufgeteilt werden. Des weiteren können mehrere Reporting-Slaves als Active/Active Cluster zusammengefasst werden |
Realtime Statistik | Berechnung der Echtzeitstatistiken in kurzen Intervallen für die angemeldeten Benutzer bzw. Supervisoren und Wallboards. | Lesen | 0 - n | In sehr großen Systemen können verschiedene Gruppen Web-Server auf verschiedene Statistik-Slaves aufgeteilt werden. Des weiteren können mehrere Statistik-Slaves als Active/Active Cluster zusammengefasst werden |
Kunden Abfragen | Erstellung kundenspezifischer Datenauswertungen. Die Auslagerung dieser Funktion in einem separaten System dient vor allen der Absicherung des Kernsystems | Lesen | 0 - n | |
Aus Sicht der Installation haben diese funktionelle Komponenten keine Auswirkungen da eine vollständige lokale (synchronisierte) Fassung der Datenbank auf jedem Server des Verbundes lagert. Die Aufteilung der Funktionen ergibt sich mehr aus Sicht der "Verbraucher" in denen Konfiguriert werden kann, auf welchem Server gegebenenfalls für welche Aufgaben zugegriffen werden kann. So ist es z.B. im Web-Application-Server möglich, die Datenbankanbindung für die Bereiche Primary, Reporting und Realtime separat anzugeben, so dass es möglich ist, diese Rollen auf verschiedene Server aufzuteilen.
Der einzige Aspekt der Installation der durch die Funktionsaufteilung betroffen ist, ergibt sich aus der Tatsache, dass bei einem Verteilen der Funktionen auf verschiedene Server ein entsprechendes MySQL-Replikations-Setup aufgebaut und konfiguriert werden muss. Dadurch ergibt sich, dass die Funktion "Primary" erzwungenermaßen auf einem Replikations-Master läuft, während alle anderen Funktionen auf Replikations-Slaves laufen können.
Eine sehr besondere Art der Konfiguration ist des weiteren ein spezielles Setup in dem zwei Server in einer Master-Master-Replikation zusammengeschlossen werden (die wiederrum beide als Master für weitere Slaves diesenen können). In einer solchen hoch verfügbaren Konfiguration wird nur einer der Master als "Primary" verwendet. Der andere würde üblicherweise als passive Reserve des HA-Clusters dienen. Es bietet sich allerdings an, diese Ressource sinnvoller zu nutzen, in dem der passive Master entweder die "Reporting" oder die "Statistik" Funktion übernimmt. Die Funktionsbezogenen IP-Adressen werden soweit vom HA-Manager verwaltet. Eine solche Konfiguration hat den Vorteil ein hohes Maß an Verfügbarkeit zu bieten, ohne allzu verschwenderisch mit den Ressourcen umzugehen.
Gemeinsame Installationsschritte
Unabhängig von der Funktion die ein DATA Server übernehmen soll, sind erst mal folgende Installationsschritte zu tätigen auf sowohl Master als auch Slave.
Anbinden des Datenbereiches
Datenbereich anbinden, wie auf der Seite Anbindung STORE (Alle Linux ausser STORE) beschrieben.
Installation der Software
Das Einbinden der offiziellen MySQL Software Repositores und die Installation des MySQL-Servers erfolgt mit folgenden Befehlen:
Functional Components of the RoleThe DATA role can be split on one or more servers. A setup with only one DATA server is only recommended for very small installations. The division corresponds to the following functional components: Function | Description | Access | Quantity | Redundancy strategy |
---|
Primary | All write accesses occur here. Furthermore, all functional routines that change data are always executed here. Especially the call distribution is done here. | Write and Read | 1 | Can be designed redundantly through an active/passive configuration. | Reporting | Creation of complex data evaluations. These operations typically require a high level of storage, computation and I/O resources. | Read | 0 - n | In very large systems, different groups of web servers can be distributed to different reporting slaves. Furthermore, several Reporting Slaves can be combined as an Active/Active Cluster | Realtime Statistics | Calculation of real-time statistics at short intervals for logged in users or supervisors and wallboards. | Read | 0 - n | In very large systems, different groups of web servers can be distributed to different statistics slaves. Furthermore, several statistic slaves can be combined as an Active/Active Cluster | Customer queries | Creation of customer-specific data evaluations. The outsourcing of this function in a separate system serves primarily to protect the core system. | Read | 0 - n |
|
From the installation point of view, these functional components have no effect because a complete local (synchronized) version of the database is stored on each server in the network. The distribution of the functions results more from the point of view of the "consumers" in which it is possible to configure which server can be accessed for which tasks. In the Web application server, for example, it is possible to specify the database connection for the primary, reporting, and real-time areas separately, so that it is possible to distribute these roles among different servers. The only aspect of the installation that is affected by the function distribution is that if you are distributing the functions to different servers, you will need to build and configure an appropriate MySQL replication setup. This means that the "Primary" function is forced to run on a Replication Master, while all other functions can run on Replication Slaves. Another very special type of configuration is a special setup in which two servers are connected in a master-master replication (which in turn can be used as masters for other slaves). In such a highly available configuration, only one of the masters is used as "primary". The other would normally serve as a passive reserve of the HA cluster. However, it is advisable to use this resource more sensibly by having the passive master perform either the "reporting" or the "statistics" function. The function-related IP addresses are managed by the HA manager. Such a configuration has the advantage of offering a high degree of availability without being too wasteful with resources. Common installation stepsIndependent of the function that a DATA server is to take over, the following installation steps must first be carried out on both master and slave. Linking the data areaConnect data area as described on the page Connection STORE (All Linux except STORE) Installing the SoftwareTo include the official MySQL software repositories and install the MySQL server, use the following commands: MySQL 8.x |
...
| Server installieren | yum -y install libaio
yum -y install |
| httphttps://dev.mysql.com/get/ |
| mysqlmysql80-community-release- |
| el653.noarch.rpm
yum -y install mysql-community-server |
|
|
...
MySQL 5.6 | Dienst autostart
chkconfig mysqld on |
Als nächstes müssen in der Firewall die Port-Freigaben für den MySQL Server Dienst eingetragen und persistent gespeichert werden:
| yum -y install http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm
yum -y install mysql-community-server |
|
Both variantsThe MySQL Server service is added to the list of automatically starting services and started with the following command: | Firewall konfigurieren | | chkconfig mysqld on
service mysqld start |
|
Next, the port shares for the MySQL server service must be entered and permanently stored in the firewall: Translations Ignore |
---|
Code Block |
---|
language | bash |
---|
title | Configure firewall |
---|
| firewall-cmd --zone=public --add-port= |
| firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload |
|
|
Nun muss der MySQL Server manuell gestartet werden:
To simplify the configuration of the MySQL server, a directory is now created where modular configuration files can be stored. In order for these to be loaded from MySQL Server, an entry must be made in the main configuration file. This is done by entering the following commands: Translations Ignore |
---|
Code Block |
---|
language | bash |
---|
title | Configure MySQL Server |
---|
|
|
| starten
service mysqld start |
Nach dem ersten Start des MySQL Servers müssen nun die Zugangsdaten für den root-Benutzer festgelegt werden. Da in MySQL ein Benutzerkonto nicht nur aus einem Benutzernamen sondern auch aus eine Herkunftsadresse der Verbindung besteht, muss noch ein weiterer root-Benutzer erzeugt werden, der sich von beliebigen Herkunftsadressen verbinden darf. Dies erfolgt mit folgenden Befehlen:
Code Block |
---|
language | bash |
---|
title | MySQL Server Benutzer anlegen und konfigurieren |
---|
|
mysqladmin -u root password 'fireball'
mysqladmin -u root -h $(hostname -f) password 'fireball'
mysql -u root -pfireball -v -e"CREATE USER 'root'@'%' IDENTIFIED BY 'fireball'"
mysql -u root -pfireball -v -e"GRANT ALL ON *.* TO 'root'@'%' WITH GRANT OPTION"
mysql -u root -pfireball -v -e"FLUSH PRIVILEGES" |
...
| mkdir /etc/my.cnf.d
cat <<EOFF >> /etc/my.cnf
#
# * IMPORTANT: Additional settings that can override those from this file!
# The files must end with '.cnf', otherwise they'll be ignored.
#
!includedir /etc/my.cnf.d/
EOFF
semanage fcontext -a -t mysqld_etc_t "/etc/my\.cnf\.d(/.*)?"
restorecon -R -v /etc/my.cnf.d
|
|
These commands create the directory, add the load instruction for the modular configuration files to the main configuration file, create a SELINUX security share for the new configuration directory and generate the corresponding security labels. Next, a modular configuration file with some commented relevant optimization settings is imported. MySQL 8.x | MySQL Server konfigurieren | mkdir
cat <<EOFF >> /etc/my.cnf
#
# * IMPORTANT: Additional settings that can override those from this file!
# The files must end with '.cnf', otherwise they'll be ignored.
#
!includedir /etc/my.cnf.d/
EOFF
semanage fcontext -a -t mysqld_etc_t "/etc/my\.cnf\.d(/.*)?"
restorecon -R -v /etc/my.cnf.d
|
Diese Befehle erzeugen das Verzeichnis, fügen der Hauptkonfigurationsdatei die Ladeanweisung für die modularen Konfigurationsdateien hinzu, erstellen eine SELINUX-Sicherheitsfreigabe für das neue Konfigurationsverzeichnis und erzeugen die entsprechenden Security-Labels.
Als nächstes wird eine modulare Konfigurationsdatei mit einigen kommentierten relevanten Optimierungseinstellungen eingespielt:
http://cdn.jtel.de/downloads/configs/jtel-enhanced-8.cnf |
|
The File /etc/mycnf.d/jtel-enhanced-8.cnf contains a number of well-commented configuration statements that can be used to optimize the functionality of the MySQL Server. Most of these instructions are commented upon. If necessary, these parameters should be adjusted with caution. However, the default values should be fine for most installations. MySQL 5.6 Translations Ignore |
---|
Code Block |
---|
language | bash |
---|
title | Load the basic settings |
---|
| wget -P /etc/my.cnf.d http://cdn.jtel.de/downloads/configs/jtel-enhanced.cnf |
|
The File /etc/mycnf.d/jtel-enhanced.cnf contains a number of well-commented configuration statements that can be used to optimize the functionality of the MySQL Server. Most of these instructions are commented upon. If necessary, these parameters should be adjusted with caution. However, the default values should be fine for most installations. Both VariantsNow the MySQL server must be restarted: | Laden der Grundeinstellungen |
wget -P /etc/my.cnf.d http://cdn.jtel.de/downloads/configs/jtel-enhanced.cnf |
Die Datei /etc/mycnf.d/jtel-enhanced.cnf
enthält eine Reihe gut kommentierter Konfigurationsanweisungen mit denen die Funktion des MySQL Server optimiert werden kann. Die meisten dieser Anweisungen sind auskommentiert. Je nach Bedarf sollten diese Parameter mit Vorsicht angepasst werden. Die Standardwerte sollten aber für die meisten Installationen in Ordnung sein.
Als nächstes wird noch ein zusätzliches Plugin-Modul dem MySQL Server hinzugefügt. Dieses Modul wird ab jtel Software Version 3.06 für die Kommunikation mit weiteren Softwarekomponenten benötigt. Bei Neuinstallationen soll es aber auch dann installiert werden, wenn geplant ist, ältere Revisionen der Software einzuspielen, damit einem späteren Update nichts im Wege steht. Dies erfolgt durch folgende Befehle:
After the first start of the MySQL server, the access data for the root user must now be defined. Since in MySQL a user account consists not only of a username but also of an origin address of the connection, another root user must be created to connect from any origin address. MySQL 8.xMySQL 8.x stores a generated password for the root user in the file /var/log/mysqld.log This password must be extracted first. Since it often contains special characters that cannot easily be entered in the command line, the first adjustment is made by entering the password manually. Translations Ignore |
---|
Code Block |
---|
language | bash |
---|
title | MySQL 8.x - Create and configure server users |
---|
| mysqladmin -u root -p password '<password>' |
|
Then the following command chain is entered to create the additional user: ATTENTION: replace <password> with the corresponding password. Translations Ignore |
---|
Code Block |
---|
language | bash |
---|
title | MySQL 8.x - Create and configure server users |
---|
| mysql -u root -p<password> -v -e"CREATE USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '<password>'"
mysql -u root -p<password> -v -e"GRANT ALL ON *.* TO 'root'@'%' WITH GRANT OPTION"
mysql -u root -p<password> -v -e"FLUSH PRIVILEGES" |
|
MySQL 5.6ATTENTION: replace <password> with the corresponding password. |
Code Block |
---|
language | bash |
---|
title | UDP Send Plugin installieren - MASTER |
---|
|
cp /home/jtel/shared/JTELCarrierPortal/Libraries/jtel_udf_udpsend/jtel_udf_udpsend.so /usr/lib64/mysql/plugin/
chown root:root /usr/lib64/mysql/plugin/jtel_udf_udpsend.so
chmod 755 /usr/lib64/mysql/plugin/jtel_udf_udpsend.so
chcon system_u:object_r:lib_t:s0 /usr/lib64/mysql/plugin/jtel_udf_udpsend.so | UDP Send Plugin installieren - SLAVE |
cp /home/jtel/shared/JTELCarrierPortal/Libraries/jtel_udf_udpsend/dummy/jtel_udf_udpsend.so /usr/lib64/mysql/plugin/
chown root:root /usr/lib64/mysql/plugin/jtel_udf_udpsend.so
chmod 755 /usr/lib64/mysql/plugin/jtel_udf_udpsend.so
chcon system_u:object_r:lib_t:s0 /usr/lib64/mysql/plugin/jtel_udf_udpsend.so |
Um die zusätzliche Funktion den SQL Prozeduren verfügbar zu machen, muss noch folgender Befehl ausgeführt werden:
Code Block |
---|
language | bash |
---|
title | Registrieren des UDP Send Befehls |
---|
|
mysql -u root -pfireball -v -e"DROP FUNCTION IF EXISTS udpsend"
mysql -u root -pfireball -v -e"CREATE FUNCTION udpsend RETURNS STRING SONAME 'jtel_udf_udpsend.so'" |
Note |
---|
|
Die oben aufgelisteten SQL Befehle müssen auf einem Datenbankserver ausgeführt werden, bevor er Teil eines Replikationsverbundes wird. Soll das UDP Plugin auf bestehenden DATA-Server nachgerüstet werden, so muss eine andere Vorgehensweise gewählt werden: - Das Modul muss auf allen Server des Verbunden (Sowohl Master als auch Slaves) in das Plugin-Verzeichnis kopiert werden (Siehe Code Block "UDP Send Plugin installieren").
- Die Registrierung des Plugins dar nur auf dem Master Server erfolgen. Da der Befehl durch Replikation auch auf den Slaves ausgeführt wird, ist es nicht erforderlich, den Befehl auch dort auszuführen.
ACHTUNG: Wird der Befehl ausgeführt ohne dass das UDP Plugin auf allen Servern des Verbundes vorhanden ist, verursacht dies einen Abbruch der Replikation, der nur durch einen händischen Eingriff repariert werden kann. |
...
MySQL 5.6 - Create and configure server users |
| mysqladmin -u root password '<password>'
mysql -u root -p<password> -v -e"CREATE USER 'root'@'%' IDENTIFIED BY '<password>'"
mysql -u root -p<password> -v -e"GRANT ALL ON *.* TO 'root'@'%' WITH GRANT OPTION"
mysql -u root -p<password> -v -e"FLUSH PRIVILEGES" |
|
Both VariantsNext, an additional plugin module is added to MySQL Server. This module is required from jtel software version 3.06 for communication with other software components. For new installations, it should also be installed if it is planned to install older revisions of the software, so that nothing hinders a later update. This is done with the following commands: Translations Ignore |
---|
Code Block |
---|
language | bash |
---|
title | Install UDP Send Plugin - MASTER |
---|
| cp /home/jtel/shared/JTELCarrierPortal/Libraries/jtel_udf_udpsend/jtel_udf_udpsend.so /usr/lib64/mysql/plugin/
chown root:root /usr/lib64/mysql/plugin/jtel_udf_udpsend.so
chmod 755 /usr/lib64/mysql/plugin/jtel_udf_udpsend.so
chcon system_u:object_r:lib_t:s0 /usr/lib64/mysql/plugin/jtel_udf_udpsend.so |
|
| Neustart des MySQL Servers |
service mysqld restart |
Anpassung my.cnf auf RAM des Servers
Damit der Server den zur Verfügung gestellten RAM vollständig nutzt, muss eine Konfiguration angepasst werden:
*****
Spezifische Installationsschritte für Master und Slave Server
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:
Code Block |
---|
language | bash |
---|
title | MySQL Master konfigurieren |
---|
|
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 |
Note |
---|
|
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:
Code Block |
---|
title | Replikationsuser anlegen |
---|
|
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:
Code Block |
---|
language | bash |
---|
title | Neustart des MySQL Servers |
---|
|
service mysqld restart |
Installation des Hazelcast Platform UDP Listeners (ab Version 3.06)
Ab Version 3.06 der jtel-Software muss auf dem Primären DATA-Server weitere Software installiert werden. Da der UDP Listener Prozess die Java-Laufzeitumgebung erfordert, muss diese vorab mit folgendem Befehl installiert werden:
Code Block |
---|
language | bash |
---|
title | Java Laufzeitumgebung installieren |
---|
|
yum -y install http://cdn.jtel.de/downloads/java/jdk-7u79-linux-x64.rpm |
Im Anschluss wird der UDP Listener mit folgenden Befehlen installiert:
Code Block |
---|
title | platform UDP Listener kopieren |
---|
|
cp -a /home/jtel/shared/JTELCarrierPortal/Utils/Install/PlatformUDPlistener/ /home/jtel/
cp -a /home/jtel/PlatformUDPlistener/init.d/jtel-listener /etc/init.d |
Note |
---|
|
Wenn die Repositories auf einer Windows Maschine liegen und der PlattformUDPlistener vor dort auf dem DATA in /etc/init.d kopiert wird, dann muss folgender Befehl noch ausgeführt werden: Code Block |
---|
title | platform UDP Listener kopieren |
---|
| sed -i -e 's/\r//g' /etc/init.d/jtel-listener |
Da die Datei von einer Windows Maschine kopiert wird, ist die Datei unter Unix nicht in Ordnung. |
Als nächstes muss die Konfigurationsdatei des UDP Listeners der Umgebung angepasst werden. Hierfür muss die Datei /home/jtel/PlatformUDPlistener/conf/hazelcast.xml
entsprechend angepasst werden. Hierbei sind insbesondere folgende zwei Abschnitte anzupassen:
Code Block |
---|
language | xml |
---|
title | Cluster Identität |
---|
|
<group>
<name>jtel-cluster-NAME</name>
<password>jtel-cluster-pass</password>
</group> |
Da nicht hundertprozentig auszuschließen ist, dass sich im Netz weitere auf Hazelcast basierende Applikationen befinden können (wie z.B. weitere jtel-Systeme in größeren Cloud-Umgebungen, ist es wichtig für das entsprechende jtel-System den Cluster-Namen und das Cluster-Passwort zu individualisieren.
Ein weiterer wichtiger Abschnitt betrifft die Zusammensetzung des Clusters. Im Auslieferungszustand ist die Konfigurationsdatei so ausgelegt, dass die Cluster-Members sich mittels Multicast finden und kommunizieren. Diese Methode sollte im Wirkbetrieb nicht verwendet werden, da sie zusätzlichen überflüssigen Netzwerkverkehr erzeugt und auch Auswirkungen auf andere Applikationen haben kann. Des weiteren wäre dafür eine Firewall-Konfiguration erforderlich, die hier nicht weiter erörtert wird. Aus diesem Grunde ist diese Kommunikationsform abzuschalten (<multicast enabled="false" />
) und hingegen die Liste der Kommunikationspartner einzutragen. Dabei ist darauf zu achten, dass der entsprechende Abschnitt, der im Auslieferungszustand auskommentiert ist, aktiviert werden muss. Die Liste der Kommunikationspartner setzt sich folgendermaßen zusammen:
- Der primäre DATA-Server
- Jeder TEL-Server
- Jeder WEB-Server
Im spezifischen Fall des hier vorgestellten Installationsszenario, würden die Anpassungen folgendermaßen aussehen:
Code Block |
---|
language | xml |
---|
title | Cluster Zusammensetzung |
---|
|
<network>
<join>
<!-- DO NOT USE MULTICAST IN PRODUCTION ENVIRONMENTS -->
<multicast enabled="false" />
<!-- USE THIS SECTION INSTEAD AND ADAPT THE LIST OF MEMBERS -->
<tcp-ip enabled="true">
<member>192.168.1.21</member>
<member>192.168.1.31</member>
<member>192.168.1.32</member>
<member>192.168.1.40</member>
</tcp-ip>
</join>
</network> |
Da diese Konfigurationsdatei auf allen oben aufgelisteten Servern existieren muss und exakt gleich sein muss, empfiehlt es sich die nun angepasste Datei kurzfristig ins freigegebene Verzeichnis zu kopieren, so dass sie bei der Installation der folgenden Rollen direkt von dort bezogen werden kann:
Code Block |
---|
language | bash |
---|
title | Bereitstellen der Datei hazelcast.xml für die Installation weiterer Rollen |
---|
|
cp /home/jtel/PlatformUDPlistener/conf/hazelcast.xml /home/jtel/shared |
Der UDP Listener Dienst wird mit folgendem Befehl in die Liste der automatisch startenden Dienste aufgenommen:
Install UDP Send Plugin - SLAVE |
| cp /home/jtel/shared/JTELCarrierPortal/Libraries/jtel_udf_udpsend/dummy/jtel_udf_udpsend.so /usr/lib64/mysql/plugin/
chown root:root /usr/lib64/mysql/plugin/jtel_udf_udpsend.so
chmod 755 /usr/lib64/mysql/plugin/jtel_udf_udpsend.so
chcon system_u:object_r:lib_t:s0 /usr/lib64/mysql/plugin/jtel_udf_udpsend.so |
|
To make the additional function available to SQL procedures, the following command must be executed (replace <password> with the corresponding password): Translations Ignore |
---|
Code Block |
---|
language | bash |
---|
title | Register the UDP send command |
---|
| mysql -u root -p<password> -v -e"DROP FUNCTION IF EXISTS udpsend"
mysql -u root -p<password> -v -e"CREATE FUNCTION udpsend RETURNS STRING SONAME 'jtel_udf_udpsend.so'" |
|
Note |
---|
| The SQL commands listed above must be executed on a database server before it becomes part of a replication group. If the UDP plugin is to be retrofitted on existing DATA servers, a different procedure must be selected: - The module must be copied to the plugin directory on all servers of the group (both master and slaves) (see code block "Install UDP Send Plugin")
- The plugin may only be registered on the master server. Since the command is also executed on the slaves by replication, it is not necessary to execute the command there as well.
ATTENTION: If the command is executed without the UDP plugin being present on all servers in the network, the replication is aborted and can only be repaired by manual intervention. |
Adaptation of my.cnf to server RAM In order for the server to make full use of the provided RAM, a configuration must be adjusted with vi. This setting should be about 3/4 of the server's RAM, but leave 3-4 GB for mysql and other processes. Translations Ignore |
---|
Code Block |
---|
language | bash |
---|
title | vi /etc/my.cnf.d/jtel-enhanced.cnf |
---|
| # For 8 GB RAM
innodb_buffer_pool_size = 5120M
# For 12 GB RAM
innodb_buffer_pool_size = 8192M
# For 16 GB RAM
innodb_buffer_pool_size = 12288M
...
# From 16 GB simply take 3/4 of the RAM |
|
MySQL RestartFinally, the MySQL server is restarted so that all settings are applied: Translations Ignore |
---|
Code Block |
---|
language | bash |
---|
title | Restart the MySQL server |
---|
| service mysqld restart |
|
|
Sv translation |
---|
|
Funktionelle Komponenten der RolleDie Rolle DATA kann auf einem oder mehrere Server aufgeteilt werden, wobei ein Setup mit nur einem DATA server nur bei sehr kleinen Installationen zu empfehlen ist. Die Aufteilung entspricht dabei folgenden funktionellen Komponenten: Funktion | Beschreibung | Zugriff | Menge | Redundanzstrategie |
---|
Primary | Alle Schreibzugriffe erfolgen hier. Des weiteren wird hier immer alle funktionellen Routinen ausgeführt, die Daten verändern. Insbesondere die Anrufverteilung erfolgt hier. | Schreiben und Lesen | 1 | Kann durch eine Active/Passive Konfiguration redundant ausgelegt werden | Reporting | Erstellung komplexer Datenauswertungen. Diese Vorgänge erfordern mitunter ein hohes Maß an Speicher-, Berechnungs- und I/O Ressourcen. | Lesen | 0 - n | In sehr großen Systemen können verschiedene Gruppen Web-Server auf verschiedene Reporting-Slaves aufgeteilt werden. Des weiteren können mehrere Reporting-Slaves als Active/Active Cluster zusammengefasst werden | Realtime Statistik | Berechnung der Echtzeitstatistiken in kurzen Intervallen für die angemeldeten Benutzer bzw. Supervisoren und Wallboards. | Lesen | 0 - n | In sehr großen Systemen können verschiedene Gruppen Web-Server auf verschiedene Statistik-Slaves aufgeteilt werden. Des weiteren können mehrere Statistik-Slaves als Active/Active Cluster zusammengefasst werden | Kunden Abfragen | Erstellung kundenspezifischer Datenauswertungen. Die Auslagerung dieser Funktion in einem separaten System dient vor allen der Absicherung des Kernsystems | Lesen | 0 - n |
|
Aus Sicht der Installation haben diese funktionelle Komponenten keine Auswirkungen da eine vollständige lokale (synchronisierte) Fassung der Datenbank auf jedem Server des Verbundes lagert. Die Aufteilung der Funktionen ergibt sich mehr aus Sicht der "Verbraucher" in denen Konfiguriert werden kann, auf welchem Server gegebenenfalls für welche Aufgaben zugegriffen werden kann. So ist es z.B. im Web-Application-Server möglich, die Datenbankanbindung für die Bereiche Primary, Reporting und Realtime separat anzugeben, so dass es möglich ist, diese Rollen auf verschiedene Server aufzuteilen. Der einzige Aspekt der Installation der durch die Funktionsaufteilung betroffen ist, ergibt sich aus der Tatsache, dass bei einem Verteilen der Funktionen auf verschiedene Server ein entsprechendes MySQL-Replikations-Setup aufgebaut und konfiguriert werden muss. Dadurch ergibt sich, dass die Funktion "Primary" erzwungenermaßen auf einem Replikations-Master läuft, während alle anderen Funktionen auf Replikations-Slaves laufen können. Eine sehr besondere Art der Konfiguration ist des weiteren ein spezielles Setup in dem zwei Server in einer Master-Master-Replikation zusammengeschlossen werden (die wiederrum beide als Master für weitere Slaves diesenen können). In einer solchen hoch verfügbaren Konfiguration wird nur einer der Master als "Primary" verwendet. Der andere würde üblicherweise als passive Reserve des HA-Clusters dienen. Es bietet sich allerdings an, diese Ressource sinnvoller zu nutzen, in dem der passive Master entweder die "Reporting" oder die "Statistik" Funktion übernimmt. Die Funktionsbezogenen IP-Adressen werden soweit vom HA-Manager verwaltet. Eine solche Konfiguration hat den Vorteil ein hohes Maß an Verfügbarkeit zu bieten, ohne allzu verschwenderisch mit den Ressourcen umzugehen. Gemeinsame InstallationsschritteUnabhängig von der Funktion die ein DATA Server übernehmen soll, sind erst mal folgende Installationsschritte zu tätigen auf sowohl Master als auch Slave. Anbinden des DatenbereichesDatenbereich anbinden, wie auf der Seite Linking STORE (All Linux except STORE) beschrieben. Installation der SoftwareDas Einbinden der offiziellen MySQL Software Repositores und die Installation des MySQL-Servers erfolgt mit folgenden Befehlen: MySQL 8.x Translations Ignore |
---|
Code Block |
---|
language | bash |
---|
title | MySQL 8.x |
---|
| yum -y install libaio
yum -y install https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
yum -y install mysql-community-server |
|
MySQL 5.6 Translations Ignore |
---|
Code Block |
---|
language | bash |
---|
title | MySQL 5.6 |
---|
| yum -y install http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm
yum -y install mysql-community-server |
|
Beide VariantenDer MySQL Server Dienst wird mit folgendem Befehl in die Liste der automatisch startenden Dienste aufgenommen und gestartet. Translations Ignore |
---|
Code Block |
---|
language | bash |
---|
title | MySQL service autostart |
---|
| chkconfig mysqld on
service mysqld start |
|
|
...
language | bash |
---|
title | UDP Listener Dienst autostart |
---|
...
Als nächstes müssen in der Firewall die Port-Freigaben für den |
...
MySQL Server Dienst eingetragen und persistent gespeichert werden: |
...
| firewall-cmd --zone=public --add-port= |
|
|
...
Code Block |
---|
language | bash |
---|
title | UDP Listener starten |
---|
|
service jtel-listener start |
...
3306/tcp --permanent
firewall-cmd --reload |
|
|
Nun muss der UDP Listener manuell gestartet werden:
Um die Konfiguration des MySQL Servers zu vereinfachen, wird nun |
...
ein Verzeichnis angelegt, in dem modulare Konfigurationsdateien abgelegt werden können. Damit diese auch vom MySQL Server geladen werden, muss in der Hauptkonfigurationsdatei noch ein Eintrag erfolgenden. Dies erfolgt durch die Eingabe folgender Befehle: |
...
cat <<EOFF > /usr/local/bin/updatepl.sh
#!/bin/bash
service jtel-listener stop
cp /home/jtel/shared/JTELCarrierPortal/Utils/Install/PlatformUDPlistener/bin/platform-UDP-listener-1.0-jar-with-dependencies.jar /home/jtel/PlatformUDPlistener/bin
chown jtel:jtel /home/jtel/PlatformUDPlistener/bin/*
service jtel-listener start
EOFF
chmod +x /usr/local/bin/updatepl.sh
MySQL-Backup anlegen (Nur einer der Master)
Code Block |
---|
|
CONFIG_mysql_dump_username='root'
CONFIG_mysql_dump_password='fireball'
CONFIG_backup_dir='/home/jtel/backup/sql'
CONFIG_mysql_dump_host='localhost'
URI="http://downloads.sourceforge.net/project/automysqlbackup/AutoMySQLBackup/AutoMySQLBackup%20VER%203.0/automysqlbackup-v3.0_rc6.tar.gz"
cd /home/jtel
mkdir -p /home/jtel/automysqlbackup
mkdir -p ${CONFIG_backup_dir}
cd /home/jtel/automysqlbackup
curl -O -L ${URI}
tar xfvz ${URI##*/}
cp automysqlbackup.conf automysqlbackup.conf.orig
cp automysqlbackup automysqlbackup.orig
# remove parameter '--password' to fall back to .my.cnf
sed -i -e 's/--password="${CONFIG_mysql_dump_password}" //' automysqlbackup
cat << EOF > /home/jtel/.my.cnf
[client]
user = ${CONFIG_mysql_dump_username}
password = ${CONFIG_mysql_dump_password}
host = ${CONFIG_mysql_dump_host}
EOF
cat /home/jtel/.my.cnf
cat << EOF > automysqlbackup.conf
CONFIG_mysql_dump_username="${CONFIG_mysql_dump_username}"
CONFIG_mysql_dump_password="${CONFIG_mysql_dump_password}"
CONFIG_mysql_dump_host="${CONFIG_mysql_dump_host}"
CONFIG_backup_dir="${CONFIG_backup_dir}"
# Include CREATE DATABASE in backup?
CONFIG_mysql_dump_create_database='yes'
# Separate backup directory and file for each DB? (yes or no)
CONFIG_mysql_dump_use_separate_dirs='no'
# List of databases for Daily/Weekly Backup e.g. ( 'DB1' 'DB2' 'DB3' ... )
# set to (), i.e. empty, if you want to backup all databases
#CONFIG_db_names=()
# List of databases for Monthly Backups.
# set to (), i.e. empty, if you want to backup all databases
#CONFIG_db_month_names=()
# List of DBNAMES to EXLUCDE if DBNAMES is empty, i.e. ().
CONFIG_db_exclude=( 'information_schema' 'performance_schema' )
# Rotation Settings
# Which day do you want monthly backups? (01 to 31)
# If the chosen day is greater than the last day of the month, it will be done
# on the last day of the month.
# Set to 0 to disable monthly backups.
#CONFIG_do_monthly="01"
# Which day do you want weekly backups? (1 to 7 where 1 is Monday)
# Set to 0 to disable weekly backups.
#CONFIG_do_weekly="5"
# Set rotation of daily backups. VALUE*24hours
# If you want to keep only today's backups, you could choose 1, i.e. everything older than 24hours will be removed.
#CONFIG_rotation_daily=6
# Set rotation for weekly backups. VALUE*24hours
#CONFIG_rotation_weekly=35
# Set rotation for monthly backups. VALUE*24hours
#CONFIG_rotation_monthly=150
EOF
/home/jtel/automysqlbackup/automysqlbackup /home/jtel/automysqlbackup/automysqlbackup.conf
cat << 'EOF' > automysqlbackup.cron
#!/bin/bash
su - jtel -c '/home/jtel/automysqlbackup/automysqlbackup /home/jtel/automysqlbackup/automysqlbackup.conf'
EOF
chmod 750 automysqlbackup.cron
sudo ln -s /home/jtel/automysqlbackup/automysqlbackup.cron /etc/cron.daily |
Auf dem Master Server wird das MySQL-Backup angelegt. Der Server führt täglich das Backup aus und löscht alle Dateien, die älter als 7 Tage sind.
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:
Code Block |
---|
language | bash |
---|
title | MySQL Slave konfigurieren |
---|
|
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 |
Note |
---|
|
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:
Code Block |
---|
language | bash |
---|
title | Neustart des MySQL Servers |
---|
|
service mysqld restart |
Replikation des Slave Servers bei Erstinstallation einrichten und starten
Als erstes sollte geprüft werden, dass die Kommunikation zwischen Slave und Master Server einwandfrei funktioniert. Dies kann getestet werden, in dem versucht wird sich mittels des MySQL-Clients mit dem Replikationsbenutzer an den Master Server anzumelden:
Code Block |
---|
title | Test der Verbindung zum Master Server |
---|
|
[root@acd-dbs ~]# mysql -h acd-dbm -u repl -pfireball -v -e "SHOW DATABASES"
Warning: Using a password on the command line interface can be insecure.
--------------
SHOW DATABASES
--------------
+--------------------+
| Database |
+--------------------+
| information_schema |
+--------------------+
[root@acd-dbs ~]# |
Sollte dies nicht funktionieren, muss die Ursache geprüft und beseitigt werden. Mögliche Ursachen:
- Master Server läuft nicht
- Firewallkonfiguration auf dem Master Server
- Replikationsbenutzer nicht angelegt oder fehlerhaft
Als nächstes muss der Aktuelle Stand des Binlogs auf dem Master-Server abgefragt werden:
Code Block |
---|
title | Stand des Binlogs auf dem Master Server |
---|
|
[root@acd-dbs ~]# mysql -h acd-dbm -u root -pfireball -v -e "SHOW MASTER STATUS"
Warning: Using a password on the command line interface can be insecure.
--------------
SHOW MASTER STATUS
--------------
+---------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000001 | 120 | | | |
+---------------+----------+--------------+------------------+-------------------+
[root@acd-dbs ~]# |
Diese Informationen werden nun benötigt, um auf dem Slave-Server die Replikation zu konfigurieren. Um dies einzuleiten, ist es erforderlich den MySQL-Client mit einer Verbindung zum Slave-Server zu starten:
Code Block |
---|
language | bash |
---|
title | Starten des MySQL Clients |
---|
|
mysql -u root -pfireball |
Im MySQL-Client werden nun folgende Befehle eingeben die entsprechend der vorher ermittelten Positionsdaten anzupassen sind:
Code Block |
---|
language | sql |
---|
title | Konfiguration der Replikation |
---|
|
CHANGE MASTER TO MASTER_HOST='acd-dbm',MASTER_USER='repl',MASTER_PASSWORD='fireball',MASTER_LOG_FILE='binlog.000001',MASTER_LOG_POS=120;
START SLAVE;
SHOW SLAVE STATUS\G |
Der letzte dieser drei Befehle gibt Aufschluß über den Status der Replikation. Die Ausgabe umfasst mehrere Zeilen. Im Erfolgsfall sollte unbedingt folgende Zeile zu sehen sein:
Code Block |
---|
title | Erfolgreiche Replikation |
---|
|
Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it |
Note |
---|
|
Die vorhergehende Anleitung ist nur gültig, falls der Master-Server "frisch" ist und noch keine Datenbanken enthält. Wird hingegen ein Slave-Server einem bereits bestehenden jtel-System hinzugefügt, muss hier anders vorgegangen werden. Der nachfolgende Abschnitt beschreibt die dafür benötigte Prozedur. |
Replikation des Slave Servers einrichten und Starten bei bereits bestehendem jtel-System
Soll ein Slave-Server einem bereits bestehenden und laufenden jtel-System hinzugefügt werden, so ist die Vorgehensweise für die Konfiguration anderes als bei einer Erstinstallation. Auch hier muss vorher geprüft werden, ob die Kommunikation zum Master Server einwandfrei funktioniert. Die Vorgehensweise hierfür ist im vorigen Abschnitt beschrieben.
Als nächstes muss vom Master-Server eine Kopie der Daten inklusive der Information welchem Binlog-Stand diese Kopie entspricht erstellt werden. DIes erfolgt mittels folgendem Befehl:
Code Block |
---|
language | bash |
---|
title | Datensnapshot vom Master Server erstellen |
---|
|
mysqldump -h acd-dbm -u root -pfireball --master-data=2 --add-drop-database --add-drop-table --events --routines --databases JTELWeb JTELStats JTELLog > dump.sql |
Diese Prozedur kann je nach Größe der bestehenden Datenbank recht lange dauern. Als nächstes muss die Information über den aktuellen Stand des Binlogs auf dem Master-Server aus dem gesicherten Snapshot ermittelt werden. Dies erfolgt praktischerweise über folgendem Befehl und könnte so aussehen:
Code Block |
---|
title | Ermitteln der Binlog-Position |
---|
|
[root@acd-dbs ~]# head -n 1000 dump.sql | grep "CHANGE MASTER"
-- CHANGE MASTER TO MASTER_LOG_FILE='binlog.000003', MASTER_LOG_POS=8624588;
[root@acd-dbs ~]# |
Als nächstes muss der Snapshot nun in das frisch installierte Slave-System importiert werden. Dies erfolgt über folgende Befehl:
Code Block |
---|
language | bash |
---|
title | Importieren des Snapshots ins Slave-System |
---|
|
mysql -u root -pfireball -v -e "source dump.sql" |
Auch diese Prozedur kann je nach Größe der bestehenden Datenbank recht lange dauern. War der Import des Snapshots erfolgreich, kann die Replikation nun mit Hilfe der vorher ermittelten Positionsdaten konfiguriert und gestartet werden. Um dies einzuleiten, ist es erforderlich den MySQL-Client mit einer Verbindung zum Slave-Server zu starten:
Code Block |
---|
language | bash |
---|
title | Starten des MySQL Clients |
---|
|
mysql -u root -pfireball |
Im MySQL-Client werden nun folgende Befehle eingeben die entsprechend der vorher ermittelten Positionsdaten anzupassen sind:
Code Block |
---|
language | sql |
---|
title | Konfiguration der Replikation |
---|
|
CHANGE MASTER TO MASTER_HOST='acd-dbm',MASTER_USER='repl',MASTER_PASSWORD='fireball',MASTER_LOG_FILE='binlog.000003',MASTER_LOG_POS=8624588;
START SLAVE;
SHOW SLAVE STATUS\G |
Der letzte dieser drei Befehle gibt Aufschluß über den Status der Replikation. Die Ausgabe umfasst mehrere Zeilen. Im Erfolgsfall sollte folgende Zeile zu sehen sein:
Code Block |
---|
title | Erfolgreiche Replikation |
---|
|
Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it |
Ist zwischen dem Erstellen des Snapshots und dem aktivieren der Replikation einige Zeit vergangen, kann es unter Umständen ein wenig dauern, bis dass der Slave Server die inzwischen aufgelaufenen Änderungen nachgeholt hat. In dieser Phase wird man unter Slave_SQL_Running_State
verschiedene Meldungen über die gerade ausgeführte Operation sehen. Erst wenn alle Änderungen nachgeholt wurden und zur Zeit keine weiteren Operationen anfallen, ist die oben aufgeführte Meldung zu sehen. Der Befehl SHOW SLAVE STATUS\G
kann beliebig oft ausgeführt werden, um den Fortschritt zu verfolgen.
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:
Code Block |
---|
language | bash |
---|
title | Benutzerkontext wechseln |
---|
|
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
).
Die Ersteinrichtung der Systemdaten kann prinzipiell von jeder Linux-Maschine aus gemacht werden, da jede Maschine Zugriff auf die Datenbank-Skripte hat und über einen MySQL-Client verfügt. Aus Performance-Gründen ist es aber ratsam, diese Operation auf dem primären DATA-Server auszuführen, da so die Netzwerkbelastung am geringsten ist und die Ersteinrichtung schnell von Statten geht.
Note |
---|
|
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:
Code Block |
---|
language | bash |
---|
title | Ersteinrichtung der Datenbank |
---|
|
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:
Code Block |
---|
language | bash |
---|
title | Kundenspezifisches Datenbank-Skript |
---|
|
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:
Code Block |
---|
title | Beispiel einer Ausführung |
---|
|
[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 |
Note |
---|
|
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:
Code Block |
---|
language | bash |
---|
title | Werte an die Systemumgebung |
---|
|
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:
| mkdir /etc/my.cnf.d
cat <<EOFF >> /etc/my.cnf
#
# * IMPORTANT: Additional settings that can override those from this file!
# The files must end with '.cnf', otherwise they'll be ignored.
#
!includedir /etc/my.cnf.d/
EOFF
semanage fcontext -a -t mysqld_etc_t "/etc/my\.cnf\.d(/.*)?"
restorecon -R -v /etc/my.cnf.d
|
|
Diese Befehle erzeugen das Verzeichnis, fügen der Hauptkonfigurationsdatei die Ladeanweisung für die modularen Konfigurationsdateien hinzu, erstellen eine SELINUX-Sicherheitsfreigabe für das neue Konfigurationsverzeichnis und erzeugen die entsprechenden Security-Labels. Als nächstes wird eine modulare Konfigurationsdatei mit einigen kommentierten relevanten Optimierungseinstellungen eingespielt. MySQL 8.x Translations Ignore |
---|
Code Block |
---|
language | bash |
---|
title | Load the basic settings |
---|
| wget -P /etc/my.cnf.d http://cdn.jtel.de/downloads/configs/jtel-enhanced-8.cnf |
|
Die Datei /etc/mycnf.d/jtel-enhanced-8.cnf enthält eine Reihe gut kommentierter Konfigurationsanweisungen mit denen die Funktion des MySQL Server optimiert werden kann. Die meisten dieser Anweisungen sind auskommentiert. Je nach Bedarf sollten diese Parameter mit Vorsicht angepasst werden. Die Standardwerte sollten aber für die meisten Installationen in Ordnung sein. MySQL 5.6 Translations Ignore |
---|
Code Block |
---|
language | bash |
---|
title | Load the basic settings |
---|
| wget -P /etc/my.cnf.d http://cdn.jtel.de/downloads/configs/jtel-enhanced.cnf |
|
Die Datei /etc/mycnf.d/jtel-enhanced.cnf enthält eine Reihe gut kommentierter Konfigurationsanweisungen mit denen die Funktion des MySQL Server optimiert werden kann. Die meisten dieser Anweisungen sind auskommentiert. Je nach Bedarf sollten diese Parameter mit Vorsicht angepasst werden. Die Standardwerte sollten aber für die meisten Installationen in Ordnung sein. Beide VariantenNun muss der MySQL Server neu gestartet werden: Translations Ignore |
---|
Code Block |
---|
language | bash |
---|
title | Start MySQL Server |
---|
| service mysqld restart |
|
Nach dem ersten Start des MySQL Servers müssen nun die Zugangsdaten für den root-Benutzer festgelegt werden. Da in MySQL ein Benutzerkonto nicht nur aus einem Benutzernamen sondern auch aus eine Herkunftsadresse der Verbindung besteht, muss noch ein weiterer root-Benutzer erzeugt werden, der sich von beliebigen Herkunftsadressen verbinden darf. MySQL 8.xMySQL 8.x speichert ein generiertes Passwort für den root Benutzer in der Datei /var/log/mysqld.log Dieses Passwort muss als erstes extrahiert werden. Da es oft Sonderzeichen enthält, die nicht ohne Weiteres in die Kommandozeile eingegeben werden können, erfolgt die erste Anpassung durch manuelle Eingabe des Passwortes. Translations Ignore |
---|
Code Block |
---|
language | bash |
---|
title | MySQL 8.x - Create and configure server users |
---|
| mysqladmin -u root -p password '<password>' |
|
Anschließend wird folgende Befehlskette eingegeben um den weiteren User zu erstellen: ACHTUNG: <password> mit den entsprechenden Passwort ersetzen. Translations Ignore |
---|
Code Block |
---|
language | bash |
---|
title | MySQL 8.x - Create and configure server users |
---|
| mysql -u root -p<password> -v -e"CREATE USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '<password>'"
mysql -u root -p<password> -v -e"GRANT ALL ON *.* TO 'root'@'%' WITH GRANT OPTION"
mysql -u root -p<password> -v -e"FLUSH PRIVILEGES" |
|
MySQL 5.6ACHTUNG: <password> mit den entsprechenden Passwort ersetzen. Translations Ignore |
---|
Code Block |
---|
language | bash |
---|
title | MySQL 5.6 - Create and configure server users |
---|
| mysqladmin -u root password '<password>'
mysql -u root -p<password> -v -e"CREATE USER 'root'@'%' IDENTIFIED BY '<password>'"
mysql -u root -p<password> -v -e"GRANT ALL ON *.* TO 'root'@'%' WITH GRANT OPTION"
mysql -u root -p<password> -v -e"FLUSH PRIVILEGES" |
|
Beide VariantenAls nächstes wird noch ein zusätzliches Plugin-Modul dem MySQL Server hinzugefügt. Dieses Modul wird ab jtel Software Version 3.06 für die Kommunikation mit weiteren Softwarekomponenten benötigt. Bei Neuinstallationen soll es aber auch dann installiert werden, wenn geplant ist, ältere Revisionen der Software einzuspielen, damit einem späteren Update nichts im Wege steht. Dies erfolgt durch folgende Befehle: Translations Ignore |
---|
Code Block |
---|
language | bash |
---|
title | Install UDP Send Plugin - MASTER |
---|
| cp /home/jtel/shared/JTELCarrierPortal/Libraries/jtel_udf_udpsend/jtel_udf_udpsend.so /usr/lib64/mysql/plugin/
chown root:root /usr/lib64/mysql/plugin/jtel_udf_udpsend.so
chmod 755 /usr/lib64/mysql/plugin/jtel_udf_udpsend.so
chcon system_u:object_r:lib_t:s0 /usr/lib64/mysql/plugin/jtel_udf_udpsend.so |
|
Translations Ignore |
---|
Code Block |
---|
language | bash |
---|
title | Install UDP Send Plugin - SLAVE |
---|
| cp /home/jtel/shared/JTELCarrierPortal/Libraries/jtel_udf_udpsend/dummy/jtel_udf_udpsend.so /usr/lib64/mysql/plugin/
chown root:root /usr/lib64/mysql/plugin/jtel_udf_udpsend.so
chmod 755 /usr/lib64/mysql/plugin/jtel_udf_udpsend.so
chcon system_u:object_r:lib_t:s0 /usr/lib64/mysql/plugin/jtel_udf_udpsend.so |
|
Um die zusätzliche Funktion den SQL Prozeduren verfügbar zu machen, muss noch folgender Befehl ausgeführt werden (<password> mit den entsprechenden Passwort ersetzen): Translations Ignore |
---|
Code Block |
---|
language | bash |
---|
title | Register the UDP send command |
---|
| mysql -u root -p<password> -v -e"DROP FUNCTION IF EXISTS udpsend"
mysql -u root -p<password> -v -e"CREATE FUNCTION udpsend RETURNS STRING SONAME 'jtel_udf_udpsend.so'" |
|
Note |
---|
| Die oben aufgelisteten SQL Befehle müssen auf einem Datenbankserver ausgeführt werden, bevor er Teil eines Replikationsverbundes wird. Soll das UDP Plugin auf bestehenden DATA-Server nachgerüstet werden, so muss eine andere Vorgehensweise gewählt werden: - Das Modul muss auf allen Server des Verbunden (Sowohl Master als auch Slaves) in das Plugin-Verzeichnis kopiert werden (Siehe Code Block "UDP Send Plugin installieren").
- Die Registrierung des Plugins dar nur auf dem Master Server erfolgen. Da der Befehl durch Replikation auch auf den Slaves ausgeführt wird, ist es nicht erforderlich, den Befehl auch dort auszuführen.
ACHTUNG: Wird der Befehl ausgeführt ohne dass das UDP Plugin auf allen Servern des Verbundes vorhanden ist, verursacht dies einen Abbruch der Replikation, der nur durch einen händischen Eingriff repariert werden kann. |
Anpassung my.cnf auf RAM des Servers Damit der Server den zur Verfügung gestellten RAM vollständig nutzt, muss eine Konfiguration angepasst werden mit vi. Diese Einstellung sollte ca. 3/4 des RAMs des Servers entsprechen, wobei 3-4 GB für mysql und andere Prozesse übrig bleiben sollten. Translations Ignore |
---|
Code Block |
---|
language | bash |
---|
title | vi /etc/my.cnf.d/jtel-enhanced.cnf |
---|
| # For 8 GB RAM
innodb_buffer_pool_size = 5120M
# For 12 GB RAM
innodb_buffer_pool_size = 8192M
# For 16 GB RAM
innodb_buffer_pool_size = 12288M
...
# From 16 GB simply take 3/4 of the RAM |
|
MySQL NeustartAls letztes wird der MySQL Server neu gestartet, damit alle Einstellungen übernommen werden: Translations Ignore |
---|
Code Block |
---|
language | bash |
---|
title | Restart the MySQL server |
---|
| service mysqld restart |
|
|
Sv translation |
---|
|
Composantes fonctionnelles du rôleLe rôle de DONNÉES peut être réparti sur un ou plusieurs serveurs. Une installation avec un seul serveur DONNÉES n'est recommandée que pour les très petites installations. La division correspond aux composantes fonctionnelles suivantes : Fonction | Description | Accès | Quantité | Stratégie de redondance |
---|
Primaire | Tous les accès en écriture se font ici. En outre, toutes les routines fonctionnelles qui modifient les données sont toujours exécutées ici. C'est surtout ici que se fait la distribution des appels. | Ecrire et lire | 1 | Peut être conçu de manière redondante grâce à une configuration active/passive. | Déclaration | Création d'évaluations de données complexes. Ces opérations nécessitent généralement un niveau élevé de ressources de stockage, de calcul et d'entrées/sorties. | Lire | 0 - n | Dans les très grands systèmes, différents groupes de serveurs web peuvent être distribués à différents esclaves de reporting. En outre, plusieurs esclaves de reporting peuvent être combinés en un groupe actif/actif | Statistiques en temps réel | Calcul de statistiques en temps réel à intervalles rapprochés pour les utilisateurs ou superviseurs connectés et les panneaux muraux. | Lire | 0 - n | Dans les très grands systèmes, différents groupes de serveurs web peuvent être distribués à différents esclaves statistiques. En outre, plusieurs esclaves statistiques peuvent être combinés en un groupe actif/actif | Demandes des clients | Création d'évaluations de données spécifiques aux clients. L'externalisation de cette fonction dans un système séparé sert principalement à protéger le système central. | Lire | 0 - n |
|
Du point de vue de l'installation, ces composants fonctionnels n'ont aucun effet car une version locale (synchronisée) complète de la base de données est stockée sur chaque serveur du réseau. La répartition des fonctions résulte davantage du point de vue des "consommateurs" dans lequel il est possible de configurer quel serveur est accessible pour quelles tâches. Dans le serveur d'application Web, par exemple, il est possible de spécifier séparément la connexion à la base de données pour les zones primaire, de rapport et en temps réel, de sorte qu'il est possible de répartir ces rôles entre différents serveurs. Le seul aspect de l'installation qui est affecté par la distribution des fonctions est que si vous distribuez les fonctions à différents serveurs, vous devrez construire et configurer une installation de réplication MySQL appropriée. Cela signifie que la fonction "Primary" est forcée de s'exécuter sur un maître de réplication, tandis que toutes les autres fonctions peuvent s'exécuter sur des esclaves de réplication. Un autre type de configuration très particulier est une configuration spéciale dans laquelle deux serveurs sont connectés dans une réplication maître-maître (qui à son tour peut être utilisée comme maître pour d'autres esclaves). Dans une telle configuration hautement disponible, un seul des maîtres est utilisé comme "primaire". L'autre servirait normalement de réserve passive du cluster HA. Toutefois, il est conseillé d'utiliser cette ressource de manière plus judicieuse en demandant au maître passif d'effectuer soit la fonction "reporting", soit la fonction "statistiques". Les adresses IP liées aux fonctions sont gérées par le responsable de l'AP. Une telle configuration a l'avantage d'offrir un haut degré de disponibilité sans être trop gourmande en ressources. Common installation stepsIndépendamment de la fonction qu'un serveur DONNÉES doit prendre en charge, les étapes d'installation suivantes doivent d'abord être effectuées à la fois sur le maître et l'esclave. Relier le zones de donnéesConnecter la zone de données comme décrit sur la page Connection MAGASIN (Tous les Linux sauf MAGASIN) Installation du logicielPour inclure les dépôts officiels de logiciels MySQL et installer le serveur MySQL, utilisez les commandes suivantes : MySQL 8.x Translations Ignore |
---|
Code Block |
---|
language | bash |
---|
title | MySQL 8.x |
---|
| yum -y install libaio yum -y install https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm yum -y install mysql-community-server |
|
MySQL 5.6 Translations Ignore |
---|
Code Block |
---|
language | bash |
---|
title | MySQL 5,6 |
---|
| yum -y install http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm yum -y install mysql-community-server |
|
Les deux variantesLe service MySQL Server est ajouté à la liste des services à démarrage automatique et démarré avec la commande suivante : Translations Ignore |
---|
Code Block |
---|
language | bash |
---|
title | MySQL service autostart |
---|
| chkconfig mysqld on service mysqld start |
|
Ensuite, les parts de port pour le service de serveur MySQL doivent être saisies et stockées de façon permanente dans le pare-feu : Translations Ignore |
---|
Code Block |
---|
language | bash |
---|
title | Configurer le parefeu |
---|
| firewall-cmd --zone=public --add-port=3306/tcp --permanent firewall-cmd --reload |
|
Pour simplifier la configuration du serveur MySQL, un répertoire est maintenant créé où les fichiers de configuration modulaire peuvent être stockés. Pour qu'ils puissent être chargés à partir du serveur MySQL, une entrée doit être faite dans le fichier de configuration principal. Cela se fait en entrant les commandes suivantes : Translations Ignore |
---|
Code Block |
---|
language | bash |
---|
title | Configurer le serveur MySQL |
---|
| mkdir /etc/mon.cnf.d cat <<EOFF >> /etc/mon.cnf # # * IMPORTANT : Paramètres supplémentaires qui peuvent remplacer ceux de ce fichier ! # Les fichiers doivent se terminer par ".cnf", sinon ils seront ignorés. # !includedir /etc/mon.cnf.d/ EOFF semanage fcontext -a -t mysqld_etc_t "/etc/mon\.cnf\.d(/.*) ?" restorecon -R -v /etc/mon.cnf.d |
|
Ces commandes créent le répertoire, ajoutent l'instruction de chargement des fichiers de configuration modulaire au fichier de configuration principal, créent une part de sécurité SELINUX pour le nouveau répertoire de configuration et génèrent les étiquettes de sécurité correspondantes. Ensuite, un fichier de configuration modulaire avec quelques paramètres d'optimisation pertinents commentés est importé. MySQL 8.x Translations Ignore |
---|
Code Block |
---|
language | bash |
---|
title | Charger les paramètres de base |
---|
| wget -P /etc/my.cnf.d http://cdn.jtel.de/downloads/configs/jtel-enhanced-8.cnf |
|
Le fichier /etc/mycnf.d/jtel-enhanced-8.cnf contient un certain nombre d'instructions de configuration bien commentées qui peuvent être utilisées pour optimiser la fonctionnalité du serveur MySQL. La plupart de ces instructions sont commentées. Si nécessaire, ces paramètres doivent être ajustés avec prudence. Cependant, les valeurs par défaut devraient être correctes pour la plupart des installations. MySQL 5,6 Translations Ignore |
---|
Code Block |
---|
language | bash |
---|
title | Charger les paramètres de base |
---|
| wget -P /etc/my.cnf.d http://cdn.jtel.de/downloads/configs/jtel-enhanced.cnf |
|
Le fichier /etc/mycnf.d/jtel-enhanced.cnf contient un certain nombre d'instructions de configuration bien commentées qui peuvent être utilisées pour optimiser la fonctionnalité du serveur MySQL. La plupart de ces instructions sont commentées. Si nécessaire, ces paramètres doivent être ajustés avec prudence. Cependant, les valeurs par défaut devraient être correctes pour la plupart des installations. Les deux variantesMaintenant, le serveur MySQL doit être redémarré : Translations Ignore |
---|
Code Block |
---|
language | bash |
---|
title | Dmarrer le serveur MySQL |
---|
| service mysqld restart |
|
Après le premier démarrage du serveur MySQL, les données d'accès pour l'utilisateur root doivent maintenant être définies. Comme dans MySQL, un compte utilisateur ne se compose pas seulement d'un nom d'utilisateur mais aussi d'une adresse d'origine de la connexion, un autre utilisateur root doit être créé pour se connecter à partir de n'importe quelle adresse d'origine. MySQL 8.xMySQL 8.x stocke un mot de passe généré pour l'utilisateur root dans le fichier /var/log/mysqld.log Ce mot de passe doit d'abord être extrait. Comme il contient souvent des caractères spéciaux qui ne peuvent pas être facilement saisis dans la ligne de commande, le premier ajustement est effectué en saisissant le mot de passe manuellement. Translations Ignore |
---|
Code Block |
---|
language | bash |
---|
title | MySQL 8.x - Créer et configurer les utilisateurs du serveur |
---|
| mysqladmin -u root -p password '<password>' |
|
Ensuite, la chaîne de commande suivante est saisie pour créer l'utilisateur supplémentaire : ATTENTION : remplacer <password> par le mot de passe correspondant. Translations Ignore |
---|
Code Block |
---|
language | bash |
---|
title | MySQL 8.x - Créer et configurer les utilisateurs du serveur |
---|
| mysql -u root -p<password> -v -e"CREATE USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '<password>'" mysql -u root -p<password> -v -e"GRANT ALL ON *.* TO 'root'@'%' WITH GRANT OPTION" mysql -u root -p<password> -v -e"FLUSH PRIVILEGES" |
|
MySQL 5,6ATTENTION : remplacer <password> par le mot de passe correspondant. Translations Ignore |
---|
Code Block |
---|
language | bash |
---|
title | MySQL 5,6 - Créer et configurer les utilisateurs du serveur |
---|
| mysqladmin -u root password '<password>' mysql -u root -p<password> -v -e"CREATE USER 'root'@'%' IDENTIFIED BY '<password>'" mysql -u root -p<password> -v -e"GRANT ALL ON *.* TO 'root'@'%' WITH GRANT OPTION" mysql -u root -p<password> -v -e"FLUSH PRIVILEGES" |
|
Les deux variantesEnsuite, un module de plugin supplémentaire est ajouté au serveur MySQL. Ce module est requis à partir de la version 3,06 du logiciel jtel pour la communication avec d'autres composants logiciels. Pour les nouvelles installations, il doit également être installé s'il est prévu d'installer d'anciennes révisions du logiciel, afin que rien n'entrave une mise à jour ultérieure. Cela se fait avec les commandes suivantes : Translations Ignore |
---|
Code Block |
---|
language | bash |
---|
title | Installer UDP Send Plugin - MAÎTRE |
---|
| cp /home/jtel/shared/JTELCarrierPortal/Libraries/jtel_udf_udpsend/jtel_udf_udpsend.so /usr/lib64/mysql/plugin/ chown root:root /usr/lib64/mysql/plugin/jtel_udf_udpsend.so chmod 755 /usr/lib64/mysql/plugin/jtel_udf_udpsend.so chcon system_u:object_r:lib_t:s0 /usr/lib64/mysql/plugin/jtel_udf_udpsend.so |
|
Translations Ignore |
---|
Code Block |
---|
language | bash |
---|
title | Installer UDP Send Plugin - ESCLAVE |
---|
| cp /home/jtel/shared/JTELCarrierPortal/Libraries/jtel_udf_udpsend/dummy/jtel_udf_udpsend.so /usr/lib64/mysql/plugin/ chown root:root /usr/lib64/mysql/plugin/jtel_udf_udpsend.so chmod 755 /usr/lib64/mysql/plugin/jtel_udf_udpsend.so chcon system_u:object_r:lib_t:s0 /usr/lib64/mysql/plugin/jtel_udf_udpsend.so |
|
Pour mettre la fonction supplémentaire à la disposition des procédures SQL, la commande suivante doit être exécutée (remplacer <password> par le mot de passe correspondant) : Translations Ignore |
---|
Code Block |
---|
language | bash |
---|
title | Enregistrer la commande UDP send |
---|
| mysql -u root -p<password> -v -e"DROP FUNCTION IF EXISTS udpsend" mysql -u root -p<password> -v -e"CREATE FUNCTION udpsend RETURNS STRING SONAME 'jtel_udf_udpsend.so'" |
|
Note |
---|
| Les commandes SQL énumérées ci-dessus doivent être exécutées sur un serveur de base de données avant qu'elle fait partie d'un groupe de réplication. Si le plugin UDP doit être installé ultérieurement sur des serveurs de données existants, une procédure différente doit être choisie : - Le module doit être copié dans le répertoire des plugins sur tous les serveurs du groupe (à la fois maître et esclaves) (voir le bloc de code "Installer le plugin UDP send")
- Le plugin ne peut être enregistré que sur le serveur maître. Étant donné que la commande est également exécutée sur les esclaves par réplication, il n'est pas nécessaire d'exécuter la commande là aussi.
ATTENTION: Si la commande est exécutée sans que le plugin UDP soit présent sur tous les serveurs du réseau, la réplication est interrompue et ne peut être réparée que par une intervention manuelle. |
Adaptation de mon .cnf à la RAM du serveur Pour que le serveur puisse utiliser pleinement la mémoire vive fournie, une configuration doit être ajustée avec vi. Ce réglage devrait représenter environ 3/4 de la mémoire vive du serveur, mais laisse 3-4 Go pour mysql et d'autres processus. Translations Ignore |
---|
Code Block |
---|
language | bash |
---|
title | vi /etc/my.cnf.d/jtel-enhanced.cnf |
---|
| # For 8 GB RAM innodb_buffer_pool_size = 5120M # For 12 GB RAM innodb_buffer_pool_size = 8192M # For 16 GB RAM innodb_buffer_pool_size = 12288M ... # From 16 GB simply take 3/4 of the RAM |
|
Redémarrer MYSQLEnfin, le serveur MySQL est redémarré afin que tous les paramètres soient appliqués : Translations Ignore |
---|
Code Block |
---|
language | bash |
---|
title | Redémarrer le serveur MySQL |
---|
| service mysqld restart |
|
|
Code Block |
---|
language | bash |
---|
title | Werte an die Systemumgebung |
---|
|
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/ |
...