De flesta av installationsstegen som finns tillgängliga på Internet täcker standardinstallationen online, förutsatt att databasvärdarna har en aktiv internetanslutning till paketförråden och uppfyller alla beroenden. Installationssteg och kommandon är dock lite annorlunda för offlineinstallation. Offlineinstallation är en vanlig praxis i en strikt och säker miljö som finansiella och militära sektorer för att uppfylla säkerhetskrav, minska exponeringsriskerna och upprätthålla konfidentialitet.
I det här blogginlägget kommer vi att installera ett MariaDB-kluster med tre noder i en offlinemiljö på CentOS-värdar. Tänk på följande tre noder för den här installationen:
- mariadb1 - 192.168.0.241
- mariadb2 - 192.168.0.242
- mariadb3 - 192.168.0.243
Ladda ner paket
Den mest tidskrävande delen är att få alla paket som krävs för vår installation. Gå först till respektive MariaDB-förråd som vi vill installera (i det här exemplet är vårt operativsystem CentOS 7 64bit):
- MariaDB 10.4:http://yum.mariadb.org/10.4/centos7-amd64/rpms/
- MariaDB 10.3:http://yum.mariadb.org/10.3/centos7-amd64/rpms/
- MariaDB 10.2:http://yum.mariadb.org/10.2/centos7-amd64/rpms/
- MariaDB 10.1:http://yum.mariadb.org/10.1/centos7-amd64/rpms/
- MariaDB 10.0:http://yum.mariadb.org/10.0/centos7-amd64/rpms/
Se till att du laddar ner exakt samma mindre version för alla MariaDB-relaterade paket. I det här exemplet laddade vi ner MariaDB version 10.4.13. Det finns ett gäng paket i det här förrådet men vi behöver inte alla bara för att köra ett MariaDB-kluster. Vissa av paketen är föråldrade och för felsökningsändamål. För MariaDB Galera 10.4 och CentOS 7 måste vi ladda ner följande paket från MariaDB 10.4-förvaret:
- jemalloc
- galera-3/galera-4
- libzstd
- MariaDB backup
- MariaDB-server
- MariaDB-klient
- MariaDB delade
- MariaDB common
- MariaDB compat
Följande wget-kommandon skulle förenkla nedladdningsprocessen:
wget http://yum.mariadb.org/10.4/centos7-amd64/rpms/galera-4-26.4.4-1.rhel7.el7.centos.x86_64.rpm
wget http://yum.mariadb.org/10.4/centos7-amd64/rpms/jemalloc-3.6.0-1.el7.x86_64.rpm
wget http://yum.mariadb.org/10.4/centos7-amd64/rpms/libzstd-1.3.4-1.el7.x86_64.rpm
wget http://yum.mariadb.org/10.4/centos7-amd64/rpms/MariaDB-backup-10.4.13-1.el7.centos.x86_64.rpm
wget http://yum.mariadb.org/10.4/centos7-amd64/rpms/MariaDB-client-10.4.13-1.el7.centos.x86_64.rpm
wget http://yum.mariadb.org/10.4/centos7-amd64/rpms/MariaDB-common-10.4.13-1.el7.centos.x86_64.rpm
wget http://yum.mariadb.org/10.4/centos7-amd64/rpms/MariaDB-compat-10.4.13-1.el7.centos.x86_64.rpm
wget http://yum.mariadb.org/10.4/centos7-amd64/rpms/MariaDB-server-10.4.13-1.el7.centos.x86_64.rpm
wget http://yum.mariadb.org/10.4/centos7-amd64/rpms/MariaDB-shared-10.4.13-1.el7.centos.x86_64.rpm
Vissa av dessa paket är beroende av andra paket. För att tillfredsställa dem alla är det förmodligen bäst att montera operativsystemets ISO-avbildning och peka på yum-pakethanteraren att använda ISO-avbildningen som ett offlinebaslager istället. Annars skulle vi slösa mycket tid på att försöka ladda ner/överföra paketen från en värd/media till en annan.
Om du letar efter äldre MariaDB-paket, leta upp dem i dess arkivförråd här. När de har laddats ned överför du paketen till alla databasservrar via USB-enhet, DVD-brännare eller någon nätverkslagring ansluten till databasvärdarna.
Montera ISO-bilden lokalt
Vissa av beroenden behövs för att uppfyllas under installationen och ett sätt att enkelt uppnå detta är genom att sätta upp offline yum-förvaret på databasservrarna. Först måste vi ladda ner CentOS 7 DVD ISO-avbildningen från närmaste CentOS-spegelwebbplats, under "isos"-katalogen:
$ wget http://centos.shinjiru.com/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-2003.iso
Du kan antingen överföra bilden och montera den direkt eller bränna den till en DVD och använda DVD-enheten och ansluta den till servern. I det här exemplet kommer vi att montera ISO-avbildningen som en DVD på servern:
$ mkdir -p /media/CentOS
$ mount -o loop /root/CentOS-7-x86_64-DVD-2003.iso /media/CentOS
Aktivera sedan arkivet CentOS-Media (c7-media) och inaktivera standardarkiven online (bas, uppdateringar, extramaterial):
$ yum-config-manager --disable base,updates,extras
$ yum-config-manager --enable c7-media
Vi är nu redo för installationen.
Installera och konfigurera MariaDB-servern
Installationsstegen är ganska enkla om vi har alla nödvändiga paket redo. För det första rekommenderas det att inaktivera SElinux (eller ställa in det i tillåtande läge):
$ setenforce 0
$ sed -i 's/^SELINUX=.*/SELINUX=permissive/g' /etc/selinux/config
Navigera till katalogen där alla paket finns, i det här fallet /root/installer/. Se till att alla paket finns där:
$ cd /root/installer
$ ls -1
galera-4-26.4.4-1.rhel7.el7.centos.x86_64.rpm
jemalloc-3.6.0-1.el7.x86_64.rpm
libzstd-1.3.4-1.el7.x86_64.rpm
MariaDB-backup-10.4.13-1.el7.centos.x86_64.rpm
MariaDB-client-10.4.13-1.el7.centos.x86_64.rpm
MariaDB-common-10.4.13-1.el7.centos.x86_64.rpm
MariaDB-compat-10.4.13-1.el7.centos.x86_64.rpm
MariaDB-server-10.4.13-1.el7.centos.x86_64.rpm
MariaDB-shared-10.4.13-1.el7.centos.x86_64.rpm
Låt oss först installera mariabackup-beroendet som heter socat och sedan köra kommandot yum localinstall för att installera RPM-paketen och tillfredsställa alla beroenden:
$ yum install socat
$ yum localinstall *.rpm
Starta MariaDB-tjänsten och kontrollera statusen:
$ systemctl start mariadb
$ systemctl status mariadb
Se till att du inte ser något fel i processen. Kör sedan skriptet mysql_secure_installation för att konfigurera MySQL root-lösenordet och härdningen:
$ mysql_secure_installation
Se till att MariaDB-rotlösenordet är identiskt på alla MariaDB-värdar. Skapa en MariaDB-användare för att utföra säkerhetskopiering och SST. Detta är viktigt om vi vill använda den rekommenderade mariabackupen som SST-metoden för MariaDB Cluster, och även för säkerhetskopieringsändamål:
$ mysql -uroot -p
MariaDB> CREATE USER [email protected] IDENTIFIED BY 'P455w0rd';
MariaDB> GRANT SELECT, INSERT, CREATE, RELOAD, PROCESS, SUPER, LOCK TABLES, REPLICATION CLIENT, SHOW VIEW, EVENT, CREATE TABLESPACE ON *.* TO [email protected];
Vi måste ändra standardkonfigurationsfilen för att ladda upp MariaDB Cluster-funktioner. Öppna /etc/my.cnf.d/server.cnf och se till att följande rader finns för minimal konfiguration:
[mysqld]
log_error = /var/log/mysqld.log
[galera]
wsrep_on=ON
wsrep_provider=/usr/lib64/galera-4/libgalera_smm.so
wsrep_cluster_address=gcomm://192.168.0.241,192.168.0.242,192.168.0.243
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
innodb_flush_log_at_trx_commit=2
wsrep_sst_method=mariabackup
wsrep_sst_auth=backup_user:P455w0rd
wsrep_node_address=192.168.0.241 # change this
Glöm inte att ändra värdet wsrep_node_address med IP-adressen för databasnoden för MariaDB Cluster-kommunikation. Dessutom kan wsrep_provider-värdet vara annorlunda beroende på MariaDB-servern och MariaDB Cluster-versionen som du har installerat. Leta upp sökvägen till libgalera_smm.so och specificera den i enlighet med det här.
Upprepa samma steg på alla databasnoder och vi är nu redo att starta vårt kluster.
Starta klustret
Eftersom detta är ett nytt kluster kan vi välja vilken som helst av MariaDB-noderna för att bli referensnoden för klusterstartprocessen. Låt oss välja mariadb1. Se till att MariaDB stoppas först, kör sedan kommandot galera_new_cluster för att bootstrap:
$ systemctl stop mariadb
$ galera_new_cluster
$ systemctl status mariadb
På de andra två noderna (mariadb2 och mariadb3), kommer vi att starta den med hjälp av standard MariaDB startkommando:
$ systemctl stop mariadb
$ systemctl start mariadb
Verifiera om alla noder är en del av klustret genom att titta på den wsrep-relaterade statusen på varje nod:
MariaDB> SHOW STATUS LIKE 'wsrep%';
Se till att den rapporterade statusen är som följer:
wsrep_local_state_comment | Synced
wsrep_cluster_size | 3
wsrep_cluster_status | Primary
För MariaDB 10.4 och Galera Cluster 4 kan vi hämta klustermedlemsinformationen direkt från tabellen mysql.wsrep_cluster_members på vilken MariaDB-nod som helst:
$ mysql -uroot -p -e 'select * from mysql.wsrep_cluster_members'
Enter password:
+--------------------------------------+--------------------------------------+---------------+-----------------------+
| node_uuid | cluster_uuid | node_name | node_incoming_address |
+--------------------------------------+--------------------------------------+---------------+-----------------------+
| 35177dae-a7f0-11ea-baa4-1e4604dc8f68 | de82efcb-a7a7-11ea-8273-b7a81016a75f | maria1.local | AUTO |
| 3e6f9d0b-a7f0-11ea-a2e9-32f4a0481dd9 | de82efcb-a7a7-11ea-8273-b7a81016a75f | maria2.local | AUTO |
| fd63108a-a7f1-11ea-b100-937c34421a67 | de82efcb-a7a7-11ea-8273-b7a81016a75f | maria3.local | AUTO |
+--------------------------------------+--------------------------------------+---------------+-----------------------+
Om något går fel under klusterstarten, kontrollera MySQL-felloggen på /var/log/mysqld.log på alla MariaDB-noder. När ett kluster är bootstrappat och körs, kör inte galera_new_cluster-skriptet igen för att starta en MariaDB-tjänst. Det borde räcka genom att använda standardkommandot "systemctl start/restart mariadb", såvida det inte finns någon databasnod i PRIMARY-tillståndet längre. Kolla in det här blogginlägget, How to Bootstrap MySQL eller MariaDB Cluster för att förstå varför detta steg är avgörande.
Bonussteg
Nu har du redan ett databaskluster igång utan några övervaknings- och hanteringsfunktioner. Varför importerar du inte databasklustret till ClusterControl? Installera ClusterControl på en annan separat server och ställ in lösenordslös SSH från ClusterControl-servern till alla databasnoder. Förutsatt att ClusterControl-serverns IP är 192.168.0.240, kör följande kommandon på ClusterControl-servern:
$ whoami
root
$ ssh-keygen -t rsa # generate key, press Enter for all prompts
$ ssh-copy-id [email protected] # root password on 192.168.0.241
$ ssh-copy-id [email protected] # root password on 192.168.0.242
$ ssh-copy-id [email protected] # root password on 192.168.0.243
Gå sedan till ClusterControl -> Importera -> MySQL Galera och ange nödvändiga SSH-uppgifter:
I det andra steget under Definiera MySQL-servrar, stäng av "Automatic Node Discovery" " och ange alla IP-adresser för databasnoderna, och se till att det finns en grön bock bredvid IP-adressen, vilket indikerar att ClusterControl kan nå noden via lösenordslös SSH:
Klicka på Importera och vänta tills importjobbet är klart. Du bör se det under klusterlistan:
Du är i goda händer nu. Observera att ClusterControl som standard kommer att använda 30-dagars fullständiga företagsfunktioner och efter att den löper ut kommer den som standard tillbaka till Community Edition, som är gratis för alltid.