Clustering am Beispiel von BitrixVM: einfach und verständlich

Die Sicherstellung der Ausfallsicherheit ist der Schlüssel für einen kontinuierlichen Betrieb und generell für die Zufriedenheit von Benutzern und Administratoren. In diesem Artikel zeigen wir Ihnen, wie Sie BitrixVM mit einfachen und kostengünstigen Mitteln clustern können, damit alle Beteiligten zufrieden sind und einem ruhigen Arbeiten nichts im Wege steht.

Wir verfügen in diesem Fall über zwei Server, auf denen die Systeme BitrixVM und Bitrix24 installiert sind. Das erste, was zu tun ist, ist die Aufrechterhaltung der gleichen Art von Daten auf beiden Knoten. Führen Sie die Synchronisation sowohl zwischen den Datenbanken als auch zwischen den Bitrix-Dateien durch. ить синхронизацию как между базами данных, так и между файлами bitrix.

Bitrix1 — 172.16.10.1
Bitrix2 — 172.16.10.2

Stellen Sie sicher, dass Sie die folgenden Zeilen in die Dateien des Hosts auf beiden Maschinen schreiben:

172.16.10.1 bitrix1
172.16.10.2 bitrix2

Für die Datenbank werden wir die Master-Master-Datenreplikation verwenden. Dazu müssen wir die Einstellungen in den /etc/my.cnf-Dateien korrigieren

Bitrix empfiehlt, die Datei /etc/mysql/conf.d/z_bx_custom.cnf zu erstellen, um Ihre eigenen Einstellungen zu überschreiben, die Sie bearbeiten sollten:

[root@bitrix1 /]# cat /etc/my.cnf
#
# Basic mysql configuration. Use bvat for advanced settings.
# Parameters set by bvat are stored in /etc/mysql/conf.d/bvat.cnf
# If you want to change any parameter, you'll have to redefine it in #/etc/mysql/conf.d/z_bx_custom.cnf
#

Lassen Sie uns eine Datei gemäß der Empfehlung erstellen:

touch /etc/mysql/conf.d/z_bx_custom.cnf

[root@bitrix1 /]# nano /etc/mysql/conf.d/z_bx_custom.cnf [mysqld]

Eindeutiger Server-Identifikator unter den Replikationsteilnehmern:

server-id = 1

Geänderte Binärdaten werden in die Logs geschrieben. Ohne Angabe dieser Option kann sowohl in den Logs als auch beim Aufruf des bitrix-Portals selbst ein Fehler auftreten:

Cannot execute statement: impossible to write to binary log since BINLOG_FORMAT = STATEMENT and at least one table uses a storage engine limited to row-based logging. InnoDB is limited to row-logging when transaction isolation level is #READ #COMMITTED or READ UNCOMMITTED.
binlog_format=row

Fehlerprotokolle:

log=/var/log/mysqld.log
log_error = /var/log/mysqld.log

Pfad zu den Transaktionsprotokollen des Servers (binlog wird vom Master verwaltet):

log-bin = /var/lib/mysql/server-mysql-bin
log-bin-index = /var/lib/mysql/server-mysql-bin.index

Pfad zu den Slave-Relay-Protokollen (binlog wird vom Master heruntergeladen):

relay-log = /var/lib/mysql/slave-mysql-relay-bin
relay-log-index = /var/lib/mysql/slave-mysql-relay-bin.index

Datenbanken, die repliziert werden müssen bzw. nicht repliziert werden müssen (wir führen nur eine Replikation für die Standard-Bitrix-Datenbank - sitemanager0 durch):

replicate-do-db = sitemanager0
replicate-ignore-db=test
replicate-ignore-db=information_schema
replicate-ignore-db=mysql
replicate-ignore-db=performance_schema

Die Datenbank nicht binloggen:

binlog-ignore-db = information_schema
binlog-ignore-db = mysql
binlog-ignore-db = performance_schema

Um Auto-Increment-Konflikte zu vermeiden, weisen wir den Server an, die IDs ab der 3. zu generieren und jeweils 10 hinzuzufügen, d. h. 13, 23, 33, 43 usw:

auto_increment_increment = 10
auto_increment_offset = 3

Speichern Sie die Logs vom Master in Ihrem binlog, um sie an den Slave zu senden:

log-slave-updates

Starten Sie danach mysql neu:

[root@bitrix1 /]# /etc/init.d/mysqld restart

Als Nächstes müssen Sie auf die zweite BitrixVM, d.h. bitrix2, wechseln und ähnliche Einstellungen für mysql vornehmen, nachdem Sie auch die Datei z_bx_custom.cnf in /etc/mysql/conf.d/ erstellt und gleichzeitig die server-id und auto_increment_offset geändert haben:

[root@bitrix2 ~]# cat /etc/mysql/conf.d/z_bx_custom.cnf [mysqld]
server-id = 2
binlog_format=row

log=/var/log/mysqld.log
log_error = /var/log/mysqld.log

log-bin = /var/lib/mysql/server-mysql-bin
log-bin-index = /var/lib/mysql/server-mysql-bin.index

relay-log = /var/lib/mysql/slave-mysql-relay-bin
relay-log-index = /var/lib/mysql/slave-mysql-relay-bin.index

replicate-do-db = sitemanager0
replicate-ignore-db=test
replicate-ignore-db=information_schema
replicate-ignore-db=mysql
replicate-ignore-db=performance_schema

binlog-ignore-db = information_schema
binlog-ignore-db = mysql
binlog-ignore-db = performance_schema
auto_increment_increment = 10
auto_increment_offset = 4

log-slave-updates

Starten wir mysql auf der zweiten Maschine neu:

[root@bitrix2 ~]# /etc/init.d/mysqld restart

Für die Replikation legen Sie auf beiden Maschinen einen Replicator-User an:

root@bitrix1 /]# mysql -u root -p
Enter password:
mysql> create user 'replicator'@'%' identified by 'aGiV4uac';
mysql> grant replication slave on *.* to 'replicator'@'%';

root@bitrix2 /]# mysql -u root -p
Enter password:
mysql> create user 'replicator'@'%' identified by 'aGiV4uac';
mysql> grant replication slave on *.* to 'replicator'@'%';

Wieder gehen wir zur ersten Maschine und starten die Replikation. Dazu müssen Sie den master_log name und die master_log_position der zweiten bitrix2-Maschine kennen:

[root@bitrix2 /]# mysql -u root -p -e 'show master status;'

+-----------------------+--------+------------+-------------------------------------------+
| File |Position|Binlog_Do_DB| Binlog_Ignore_DB |
+-----------------------+--------+------------+-------------------------------------------+
|server-mysql-bin.000029| 819 | |information_schema,mysql,performance_schema|
+-----------------------+--------+------------+------------------------------------------+

Aus der resultierenden Liste ergibt sich: MASTER_LOG_FILE = server-mysql-bin.000029 und MASTER_LOG_POS = 819

Wir verwenden diese Daten, um die Replikation auf der ersten Maschine einzurichten:

[root@bitrix1 /]# root -p -e "CHANGE MASTER TO MASTER_HOST = '172.16.10.2', MASTER_USER = 'replicator', MASTER_PASSWORD = 'aGiV4uac', MASTER_LOG_FILE = 'server-mysql-bin.000029', MASTER_LOG_POS = 819;"

Wir starten den Slave:

[root@bitrix1 /]# mysql -u root -p -e 'start slave;'
Dedizierter Server

Dedizierter Server

Finden Sie die passende vorgefertigte Serverkonfiguration von SIM-Networks

Pakete ansehen

Überprüfen Sie den Status:

[root@bitrix1 /]# mysql -u root -p -e 'show slave status \G;'
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 172.16.10.2
Master_User: replicator
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: server-mysql-bin.000029
Read_Master_Log_Pos: 819
Relay_Log_File: slave-mysql-relay-bin.000002
Relay_Log_Pos: 72951
Relay_Master_Log_File: server-mysql-bin.000029
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: sitemanager0
Replicate_Ignore_DB: test,information_schema,mysql,performance_schema
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 819
Relay_Log_Space: 73113
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 2

The Seconds_Behind_Master parameter (the time the replica lags behind the master) must be zero: Slave_IO_State should say «Waiting for master to send even» Slave_IO_Running = Yes Slave_SQL_Running = Yes

Wenn in der Zeile Slave_IO_State kein Wert steht und Seconds_Behind_Master NULL ist, dann hat die Replikation nicht begonnen.

Ermitteln Sie das master_log und die master_log_position der ersten bitrix1-Maschine:

[root@bitrix1 /]# mysql -u root -p -e 'show master status;'

+-----------------------+--------+------------+-------------------------------------------+
| File |Position|Binlog_Do_DB| Binlog_Ignore_DB |
+-----------------------+--------+------------+-------------------------------------------+
|server-mysql-bin.000026| 2930 | |information_schema,mysql,performance_schema|
+-----------------------+--------+------------+-------------------------------------------+

Richten Sie die Replikation auf der zweiten bitrix2-Maschine ein:

[root@bitrix2 ~]# mysql -u root -p -e "CHANGE MASTER TO MASTER_HOST = '172.16.10.1', MASTER_USER = 'replicator', MASTER_PASSWORD = 'aGiV4uac', MASTER_LOG_FILE = 'server-mysql-bin.000026', MASTER_LOG_POS = 2930;"

[root@bitrix2 ~]# mysql -u root -p -e 'stop slave;'
[root@bitrix2 ~]# mysql -u root -p -e 'show slave status \G;'

Die folgenden Parameter sollten angezeigt werden: Seconds_Behind_Master, Slave_IO_State, Slave_IO_Running, and Slave_SQL_Running mit den gleichen Parametern wie bei der Einrichtung der Replikation auf der bitrix1-Maschine.

Als nächstes müssen Sie mit der Synchronisierung der Daten zwischen Bitrix24 fortfahren. Wir werden die Dateien mit csync2 synchronisieren.

Die Installation von csync muss auf beiden Maschinen durchgeführt werden:

[root@bitrix1 /]# yum install csync2
[root@bitrix2 /]# yum install csync2

Aktivieren Sie auf beiden Maschinen:

chkconfig xinetd on
chkconfig csync2 on

Wir generieren Zertifikate, während wir uns auf der ersten bitrix1-Maschine befinden:

[root@bitrix1 /]# openssl genrsa -out /etc/csync2/csync2_ssl_key.pem 1024
[root@bitrix1 /]# openssl req -new -key /etc/csync2/csync2_ssl_key.pem -out /etc/csync2/csync2_ssl_cert.csr
[root@bitrix1 /]# openssl x509 -req -days 600 -in /etc/csync2/csync2_ssl_cert.csr -signkey /etc/csync2/csync2_ssl_key.pem -out /etc/csync2/csync2_ssl_cert.pem

Erzeugen Sie den csync2-Key:

csync2 -k /etc/csync2/csync2.cluster.key

Nach einem ziemlich langen Generierungsprozess wird der csync2.cluster.key im Ordner /etc/csync2/ erscheinen.

Die csync-Konfiguration sieht wie folgt aus:

[root@bitrix1 /]# cat /etc/csync2/csync2.cfg
group cluster
{
host bitrix1 bitrix2;

key /etc/csync2/csync2.cluster.key;

include /home/bitrix/www;

Wir schließen die Dateien für die Einstellungen der Datenbankverbindung aus, da wir auf beiden Maschinen unterschiedliche Kennwörter verwenden. Außerdem schließen wir die Cache-Verzeichnisse aus:

exclude /home/bitrix/www/bitrix/php_interface/dbconn.php;
exclude /home/bitrix/www/bitrix/.settings.php;
exclude /home/bitrix/www/bitrix/cache;
exclude /home/bitrix/www/bitrix/managed_cache;

Setzen Sie den Parameter für die Dateiauswahl; die neueste Datei bleibt erhalten:

auto younger;
}

Kopieren Sie die generierten Keys zusammen mit der Konfigurationsdatei csync2.cfg von bitrix1 nach bitrix2, z.B. per scp:

scp /etc/csync2/csync2* root@172.16.10.2:/test

Erstellen wir eine lokale Datenbank mit allen Projektdateien, mit denen csync2 arbeiten soll.

[root@bitrix1 csync2]# csync2 -cr /

Danach - run (ausführen):

[root@bitrix1 /]# /usr/sbin/csync2 –xv

Im Falle von Fehlern können Sie /usr/sbin/csync2 -Tv verwenden.

Wenn der Befehl ohne Fehler abgeschlossen wurde, können Sie auf beiden Maschinen einen Eintrag in /etc/crontab hinzufügen, um csync jede Minute auszuführen:

*/1 * * * * root /usr/sbin/csync2 -x >/dev/null 2>&1

Nun sollten Sie die korrekte Ausführung noch einem überprüfen: indem Sie z.B. im Portal selbst, im bitrix24-Chat eine Nachricht erstellt, diese löscht, eine Datei erstellt und sicherstellt, dass die vorgenommenen Änderungen zwischen den Knoten übertragen werden.

Als eine der Möglichkeiten für einen Single Point of Entry können Sie den HAProxy nutzen, der auf einem zusätzlichen Server liegt. Eine Übersicht über die Installation und Konfiguration von HAProxy wird in diesem Artikel nicht behandelt. Es gibt jedoch ausreichend Handbücher zu diesem Thema. Als Beispiel sei hier die Konfigurationsdatei /etc/haproxy/haproxy.cfg genannt:

[root@haproxy haproxy]# cat haproxy.cfg global
log 127.0.0.1 local2 notice

chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
daemon
nbproc 1 # Number of processing cores.
ulimit-n 65536
# turn on stats unix socket
stats socket /var/lib/haproxy/stats

defaults
mode http
log global
option httplog
option dontlognull
option http-server-close
option forwardfor except 127.0.0.0/8
option redispatch
retries 3
timeout http-request 5000
timeout queue 5000
timeout connect 5000
timeout client 5000
timeout server 5000
timeout http-keep-alive 30
timeout check 20 #
maxconn 3000

frontend bitrix.local
mode http
bind :80
default_backend bitrix

backend bitrix
mode http
balance roundrobin
option httpchk
option httpclose
server bitrix1 172.16.10.1:80 check
server bitrix2 172.16.10.2:80 check

Clustern Sie Ihre Server für effektiven Betrieb und möge die Macht mit Ihnen sein!

War dieser Artikel hilfreich?

Stichworten:

#server

Hat dir der Artikel gefallen?

Cookie-Zustimmung

Indem Sie auf «Ich stimme zu» klicken, stimmen Sie der Verwendung von Cookies auf unserer Website zu. Die Verwendung dieser Cookies dient der Optimierung Ihrer Nutzererfahrung, indem u. a. Präferenzen für kommende Besuche auf unserer Website gespeichert werden. Sie können unter «Cookies verwalten» detaillierte Einstellungen vornehmen und Ihre Cookie-Auswahl anpassen. Mehr dazu

Cookie-Einstellungen

funktional

Funktionale bzw. notwendige Cookies sind für die Grundfunktionen der Website von entscheidender Bedeutung und die Website funktioniert ohne sie nicht wie vorgesehen.

analyse

Analytische Cookies werden verwendet, um zu verstehen, wie Besucher mit der Website interagieren.

werbung

Werbe-Cookies werden verwendet, um Besuchern relevante Anzeigen und Angebote bereitzustellen.