Heim Datenbank MySQL-Tutorial 基于 GlusterFS 的高可用 MySQL 数据库系统测试

基于 GlusterFS 的高可用 MySQL 数据库系统测试

Jun 07, 2016 pm 03:46 PM
glusterfs mysql Verfügbar bezogen auf 数据库 高可用

MySQL 是使用最广泛的数据库之一,而 GlusterFS 是一个开源分布式文件系统。MySQL 的一个主要问题是存在单点故障,当MySQL节点发生故障时,整个业务系统将崩溃。MySQL replication,MySQL Cluster 和 MySQLGalera 都试图不同程度的解决这个问题,本文试图使

MySQL 是使用最广泛的数据库之一,而 GlusterFS 是一个开源分布式文件系统。MySQL 的一个主要问题是存在单点故障,当MySQL节点发生故障时,整个业务系统将崩溃。MySQL replication,MySQL Cluster 和 MySQL+Galera 都试图不同程度的解决这个问题,本文试图使用分布式文件系统 GlusterFS 来尝试解决 MySQL 的高可用性。

1. 安装 Ubuntu

首先我们搭建一个测试环境,在一台物理机(笔记本上)安装 2 个Ubuntu 13.10 虚拟机. 虚拟机软件可以使用VMWare的,也可以用VirtualBox。

虚拟机规范:
- 1 CPU
- 1G memory
- 2 Disks: 一块磁盘20G,用于安装系统,一块磁盘10G,留给 Gluster 使用。在安装的时候第二块磁盘可以留着,装完后用fdisk 分区并格式化。
- 其他设置: 保持2个VM配置一致,例如时区等。

安装完Ubuntu后可以做个 snapshot,系统崩溃后可以快速恢复。

2. 配置 Ubuntu

使用gluster和mysql前,先对ubuntu虚拟机做一些配置

2.1 network
安装之后虚拟机默认使用DHCP, 为了避免IP地址的变化,使用静态IP。

选择右上角的网络连接图标 -> 编辑连接

进入 IPv4 设置页面,选择 Manual 方法,并加入以下地址信息 (根据你自己的系统做适当的修改):
- Address: 192.168.53.218
- mask: 255.255.255.0
- Gateway: 192.168.53.2
- DNS: 192.168.53.2

如果不知道当前系统的 IP、网关和DNS,可以使用 nm-tool 显示系统的网络信息。

2.2 disk
在第二块磁盘上分区、创建文件系统,并mount

$ sudo fdisk /dev/sdb<br> n > w<br> $ sudo mkfs.ext4 /dev/sdb1<br> $ sudo mkdir -p /data/gv0/brick1<br> $ sudo vi /etc/fstab # 将下面这一行加入到 /etc/fstab 中。<br> /dev/sdb1 /data/gv0/brick1 ext4 defaults 1 2<br> $ sudo mount -a && mount

2.3 其他配置
2.3.1 sudoers
修改 sudoers 打开无密码访问。将下面一行加入到 /etc/sudoers, u1 是用户名,替换成你自己的用户名。

u1 ALL=(ALL:ALL) NOPASSWD: ALL<br> %sudo ALL=(ALL:ALL) NOPASSWD: ALL

2.3.2 ssh
$ sudo apt-get install ssh

3. 安装 gluster

首先安装 gluster 的依赖包, 如有需要,使用 apt-cache search 搜索包得名字。

$ sudo apt-get install -y flex bison openssl libssl-dev libreadline6 libreadline6-dev systemtap systemtap-sdt-dev

编译并安装最新的 gluster (目前最新版本是 3.4.2)

$ wget http://download.gluster.org/pub/gluster/glusterfs/3.4/3.4.2/glusterfs-3.4.2.tar.gz<br> $ tar zxf gluster-3.4.2.tar.gz<br> $ cd gluster-3.4.2<br> $ ./configure --enable-debug<br> $ make && sudo make install<br> $ sudo ldconfig<br> $ gluster --version
现在安装另一个虚拟机,可以做个snapshot,以免后面发生问题时可以快速恢复到可用状态。

安装之后,2台主机的主机名和IP地址信息:
- u1: 192.168.53.218
- u2: 192.168.53.221

4. 配置 Gluster replication (AFR) 并进行简单的测试

4.1 准备 bricks
bricks 是 gluster 的术语,是一个volume的基本组成部分,可以认为是主机上的一个目录。

在两个虚拟机上:

$ sudo mkdir -p /data/gv0/brick1/test

4.2 组建2个虚拟机组成的可信存储池
在 192.168.53.218 上执行下面命令

$ sudo gluster peer probe 192.168.53.221 # 替换为你的系统<br> $ sudo gluster peer status<br> Number of Peers: 1

Hostname: 192.168.53.221<br> Port: 24007<br> Uuid: e1de158a-1a81-4d6c-af55-b548d4c4c174<br> State: Peer in Cluster (Connected)

4.3 创建 replicated volume
在任意一台虚拟机上执行下面命令:

$ sudo gluster volume create testvol replica 2 192.168.53.218:/data/gv0/brick1/test 192.168.53.221:/data/gv0/brick1/test

// disable NFS (这一步是可选的)<br> $ sudo gluster volume set testvol nfs.disable on

$ sudo gluster volume start testvol<br> $ sudo gluster volume status

在一台虚拟机上(譬如 192.168.53.218 上)挂载创建的 gluster volume.

$ sudo mount -t glusterfs 192.168.53.218:/testvol /mnt/testvol

4.4 启动和停止 gluster 服务
- 启动: sudo /etc/init.d/glusterd start
- 停止: umount: sudo umount /path/to/dir
- 停止: volume: sudo gluster volume stop <volname></volname>
- 停止: glusterd: sudo /etc/init.d/glusterd stop

4.5 测试 Gluster 的 replication 功能
在前面挂载了 gluster volume 的虚拟机上创建一个文件:
$ echo "a\nb\n\c" > /mnt/testvol/test.txt

观察 brick 目录,test 文件应该出现在两个机器上的 /data/gv0/brick/test 目录下面。

$ cd /data/gv0/brick/test && rm test.txt
在一个brick目录内删除刚刚创建的文件,gluster 会自动恢复它。 (不是真正的全自动,只有在访问这个文件时才会恢复,否则gluster 不会恢复被删除的文件)

$ ls /data/gv0/brick/test/test.txt # gluster 会发现文件丢失了,并自动恢复。

4.5.1 由于 DNS 问题,文件不能自动恢复
在测试的过程中发现文件在一个brick上被删除后, gluster 不能自动恢复,并且log里面报告了大量的connection timeout、不能连接之类的错误。 阅读代码后返现 gluster 的自动恢复部分代码会使用 DNS, 尽管我们前面使用的都是 IP 地址。

而 Ubuntu 自带了一个小巧的 DNS server dnsmasq。它支持不在全局DNS内的局域网机器域名解析。 dnsmasq 用户场景是通过ADSL接入的家庭局域网。 也适合任何小型网络(小于1000个client)。 对这个测试而言最关键的是,它支持 /etc/hosts 配置文件。 Ubuntu 的network-manager 会自动启动 dnsmasq,然而默认它会忽略 /etc/hosts。 可以创建下面一个文件,使得这个文件生效:
$ cat /etc/NetworkManager/dnsmasq.d/hosts.conf<br> addn-hosts=/etc/hosts

$ sudo service networking restart<br> $ sudo /etc/init.d/dns-clean restart

修改后要求下面的几个命令输出相同的IP地址:

$ host u1<br> $ nslookup u1<br> $ getent ahosts u1

5. 安装 mysql

在所有虚拟机上上创建 gluster brick 目录,用来保存 mysql data。

$ mkdir -p /data/gv0/brick1/mysqldata
创建一个新的 volume:
$ sudo gluster volume create mysqldata replica 2 192.168.53.218:/data/gv0/brick1/mysqldata 192.168.53.221:/data/gv0/brick1/mysqldata

启动新创建的 volume:
$ sudo gluster volume start mysqldata

登录一台机器,mount gluster volume
$ sudo mount -t glusterfs 192.168.53.218:/mysqldata /mnt/mysqldata

安装 mysql 并使用新mount的volume:
$ 首先下载 MySQL 二进制包<br> $ sudo groupadd mysql<br> $ sudo useradd -r -g mysql mysql<br> $ cd /usr/local<br> $ sudo tar zxvf /path/to/mysql-VERSION-OS.tar.gz<br> $ sudo ln -s full-path-to-mysql-VERSION-OS mysql<br> $ cd /usr/local/mysql<br> $ sudo chown -R mysql:mysql .

$ sudo apt-get install -y libaio-dev # mysql 需要libaio.so
# 以上操作需要在所有 VM 上执行。

修改最大连接数, 这在后面的测试中会使用:
mysql> show variables like “max_connections”;
mysql> set global max_connections = 300; # 重启就失效了。
永久修改的办法是加入到配置文件中:
max_connections = 300
安装 mysql
$ sudo /usr/local/mysql/scripts/mysql_install_db --user=mysql<br> --basedir=/usr/local/mysql --datadir=/mnt/mysqldata<br> --defaults-file=/usr/local/mysql/my.cnf

启动mysql:
$ sudo /usr/local/mysql/support-files/mysql.server start<br> --datadir=/mnt/mysqldata --log-error=/usr/local/mysql/mysql.error

配置mysql:
$ /usr/local/mysql/bin/mysqladmin -u root password ''<br> $ echo 'bind-address: 0.0.0.0' >> /usr/local/mysql/my.cnf

$ /usr/local/mysql/bin/mysql -uroot # 执行下面的语句.

CREATE USER 'yydzero'@'localhost' IDENTIFIED BY 'goodluck';<br> GRANT ALL PRIVILEGES ON *.* TO 'yydzero'@'localhost' WITH GRANT OPTION;<br> CREATE USER 'yydzero'@'%' IDENTIFIED BY 'goodluck';<br> GRANT ALL PRIVILEGES ON *.* TO 'yydzero'@'%' WITH GRANT OPTION;

6. 测试 MySQL + GlusterFS

mysql> create database gluster<br> mysql> use gluster<br> mysql> CREATE TABLE IF NOT EXISTS test1 (i int, v varchar(1024), bb blob, INDEX USING BTREE (i))<br> mysql> INSERT INTO test1 (i, v) VALUES (1, 'x9byod')<br> mysql> SELECT * FROM test1;

这样我们就可以在 Gluster 分布式文件系统上运行 MySQL 了。后面我们将在这个系统上进行高并发和高故障率的测试,以验证Gluster+MySQL的稳定性。

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie optimiert man die MySQL-Abfrageleistung in PHP? Wie optimiert man die MySQL-Abfrageleistung in PHP? Jun 03, 2024 pm 08:11 PM

Die MySQL-Abfrageleistung kann durch die Erstellung von Indizes optimiert werden, die die Suchzeit von linearer Komplexität auf logarithmische Komplexität reduzieren. Verwenden Sie PreparedStatements, um SQL-Injection zu verhindern und die Abfrageleistung zu verbessern. Begrenzen Sie die Abfrageergebnisse und reduzieren Sie die vom Server verarbeitete Datenmenge. Optimieren Sie Join-Abfragen, einschließlich der Verwendung geeigneter Join-Typen, der Erstellung von Indizes und der Berücksichtigung der Verwendung von Unterabfragen. Analysieren Sie Abfragen, um Engpässe zu identifizieren. Verwenden Sie Caching, um die Datenbanklast zu reduzieren. Optimieren Sie den PHP-Code, um den Overhead zu minimieren.

Wie verwende ich MySQL-Backup und -Wiederherstellung in PHP? Wie verwende ich MySQL-Backup und -Wiederherstellung in PHP? Jun 03, 2024 pm 12:19 PM

Das Sichern und Wiederherstellen einer MySQL-Datenbank in PHP kann durch Befolgen dieser Schritte erreicht werden: Sichern Sie die Datenbank: Verwenden Sie den Befehl mysqldump, um die Datenbank in eine SQL-Datei zu sichern. Datenbank wiederherstellen: Verwenden Sie den Befehl mysql, um die Datenbank aus SQL-Dateien wiederherzustellen.

Wie füge ich mit PHP Daten in eine MySQL-Tabelle ein? Wie füge ich mit PHP Daten in eine MySQL-Tabelle ein? Jun 02, 2024 pm 02:26 PM

Wie füge ich Daten in eine MySQL-Tabelle ein? Mit der Datenbank verbinden: Stellen Sie mit mysqli eine Verbindung zur Datenbank her. Bereiten Sie die SQL-Abfrage vor: Schreiben Sie eine INSERT-Anweisung, um die einzufügenden Spalten und Werte anzugeben. Abfrage ausführen: Verwenden Sie die Methode query(), um die Einfügungsabfrage auszuführen. Bei Erfolg wird eine Bestätigungsmeldung ausgegeben.

So beheben Sie den Fehler „mysql_native_password nicht geladen' unter MySQL 8.4 So beheben Sie den Fehler „mysql_native_password nicht geladen' unter MySQL 8.4 Dec 09, 2024 am 11:42 AM

Eine der wichtigsten Änderungen, die in MySQL 8.4 (der neuesten LTS-Version von 2024) eingeführt wurden, besteht darin, dass das Plugin „MySQL Native Password“ nicht mehr standardmäßig aktiviert ist. Darüber hinaus entfernt MySQL 9.0 dieses Plugin vollständig. Diese Änderung betrifft PHP und andere Apps

Wie verwende ich gespeicherte MySQL-Prozeduren in PHP? Wie verwende ich gespeicherte MySQL-Prozeduren in PHP? Jun 02, 2024 pm 02:13 PM

So verwenden Sie gespeicherte MySQL-Prozeduren in PHP: Verwenden Sie PDO oder die MySQLi-Erweiterung, um eine Verbindung zu einer MySQL-Datenbank herzustellen. Bereiten Sie die Anweisung zum Aufrufen der gespeicherten Prozedur vor. Führen Sie die gespeicherte Prozedur aus. Verarbeiten Sie die Ergebnismenge (wenn die gespeicherte Prozedur Ergebnisse zurückgibt). Schließen Sie die Datenbankverbindung.

Wie erstelle ich eine MySQL-Tabelle mit PHP? Wie erstelle ich eine MySQL-Tabelle mit PHP? Jun 04, 2024 pm 01:57 PM

Das Erstellen einer MySQL-Tabelle mit PHP erfordert die folgenden Schritte: Stellen Sie eine Verbindung zur Datenbank her. Erstellen Sie die Datenbank, falls sie nicht vorhanden ist. Wählen Sie eine Datenbank aus. Tabelle erstellen. Führen Sie die Abfrage aus. Schließen Sie die Verbindung.

Ausführliches Tutorial zum Herstellen einer Datenbankverbindung mit MySQLi in PHP Ausführliches Tutorial zum Herstellen einer Datenbankverbindung mit MySQLi in PHP Jun 04, 2024 pm 01:42 PM

So verwenden Sie MySQLi zum Herstellen einer Datenbankverbindung in PHP: MySQLi-Erweiterung einbinden (require_once) Verbindungsfunktion erstellen (functionconnect_to_db) Verbindungsfunktion aufrufen ($conn=connect_to_db()) Abfrage ausführen ($result=$conn->query()) Schließen Verbindung ( $conn->close())

iOS 18 fügt eine neue Albumfunktion „Wiederhergestellt' hinzu, um verlorene oder beschädigte Fotos wiederherzustellen iOS 18 fügt eine neue Albumfunktion „Wiederhergestellt' hinzu, um verlorene oder beschädigte Fotos wiederherzustellen Jul 18, 2024 am 05:48 AM

Apples neueste Versionen der iOS18-, iPadOS18- und macOS Sequoia-Systeme haben der Fotoanwendung eine wichtige Funktion hinzugefügt, die Benutzern dabei helfen soll, aus verschiedenen Gründen verlorene oder beschädigte Fotos und Videos einfach wiederherzustellen. Mit der neuen Funktion wird im Abschnitt „Extras“ der Fotos-App ein Album mit dem Namen „Wiederhergestellt“ eingeführt, das automatisch angezeigt wird, wenn ein Benutzer Bilder oder Videos auf seinem Gerät hat, die nicht Teil seiner Fotobibliothek sind. Das Aufkommen des Albums „Wiederhergestellt“ bietet eine Lösung für Fotos und Videos, die aufgrund einer Datenbankbeschädigung verloren gehen, die Kameraanwendung nicht korrekt in der Fotobibliothek speichert oder eine Drittanbieteranwendung die Fotobibliothek verwaltet. Benutzer benötigen nur wenige einfache Schritte

See all articles