基于 GlusterFS 的高可用 MySQL 数据库系统测试
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的稳定性。

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











MySQL은 오픈 소스 관계형 데이터베이스 관리 시스템으로, 주로 데이터를 신속하고 안정적으로 저장하고 검색하는 데 사용됩니다. 작업 원칙에는 클라이언트 요청, 쿼리 해상도, 쿼리 실행 및 반환 결과가 포함됩니다. 사용의 예로는 테이블 작성, 데이터 삽입 및 쿼리 및 조인 작업과 같은 고급 기능이 포함됩니다. 일반적인 오류에는 SQL 구문, 데이터 유형 및 권한이 포함되며 최적화 제안에는 인덱스 사용, 최적화 된 쿼리 및 테이블 분할이 포함됩니다.

데이터베이스 및 프로그래밍에서 MySQL의 위치는 매우 중요합니다. 다양한 응용 프로그램 시나리오에서 널리 사용되는 오픈 소스 관계형 데이터베이스 관리 시스템입니다. 1) MySQL은 웹, 모바일 및 엔터프라이즈 레벨 시스템을 지원하는 효율적인 데이터 저장, 조직 및 검색 기능을 제공합니다. 2) 클라이언트 서버 아키텍처를 사용하고 여러 스토리지 엔진 및 인덱스 최적화를 지원합니다. 3) 기본 사용에는 테이블 작성 및 데이터 삽입이 포함되며 고급 사용에는 다중 테이블 조인 및 복잡한 쿼리가 포함됩니다. 4) SQL 구문 오류 및 성능 문제와 같은 자주 묻는 질문은 설명 명령 및 느린 쿼리 로그를 통해 디버깅 할 수 있습니다. 5) 성능 최적화 방법에는 인덱스의 합리적인 사용, 최적화 된 쿼리 및 캐시 사용이 포함됩니다. 모범 사례에는 거래 사용 및 준비된 체계가 포함됩니다

MySQL은 성능, 신뢰성, 사용 편의성 및 커뮤니티 지원을 위해 선택됩니다. 1.MYSQL은 효율적인 데이터 저장 및 검색 기능을 제공하여 여러 데이터 유형 및 고급 쿼리 작업을 지원합니다. 2. 고객-서버 아키텍처 및 다중 스토리지 엔진을 채택하여 트랜잭션 및 쿼리 최적화를 지원합니다. 3. 사용하기 쉽고 다양한 운영 체제 및 프로그래밍 언어를 지원합니다. 4. 강력한 지역 사회 지원을 받고 풍부한 자원과 솔루션을 제공합니다.

Apache는 데이터베이스에 연결하여 다음 단계가 필요합니다. 데이터베이스 드라이버 설치. 연결 풀을 만들려면 Web.xml 파일을 구성하십시오. JDBC 데이터 소스를 작성하고 연결 설정을 지정하십시오. JDBC API를 사용하여 Connections, 명세서 작성, 매개 변수 바인딩, 쿼리 또는 업데이트 실행 및 처리를 포함하여 Java 코드의 데이터베이스에 액세스하십시오.

Docker에서 MySQL을 시작하는 프로세스는 다음 단계로 구성됩니다. MySQL 이미지를 가져와 컨테이너를 작성하고 시작하고 루트 사용자 암호를 설정하고 포트 확인 연결을 매핑하고 데이터베이스를 작성하고 사용자는 데이터베이스에 모든 권한을 부여합니다.

Centos에 MySQL을 설치하려면 다음 단계가 필요합니다. 적절한 MySQL Yum 소스 추가. mysql 서버를 설치하려면 yum install mysql-server 명령을 실행하십시오. mysql_secure_installation 명령을 사용하여 루트 사용자 비밀번호 설정과 같은 보안 설정을 작성하십시오. 필요에 따라 MySQL 구성 파일을 사용자 정의하십시오. MySQL 매개 변수를 조정하고 성능을 위해 데이터베이스를 최적화하십시오.

MySQL을 우아하게 설치하는 열쇠는 공식 MySQL 저장소를 추가하는 것입니다. 특정 단계는 다음과 같습니다. 피싱 공격을 방지하기 위해 MySQL 공식 GPG 키를 다운로드하십시오. MySQL 리포지토리 파일 추가 : rpm -uvh https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm yum repository cache : yum 업데이트 설치 mysql : yum 설치 mysql-server startup startup mysql 서비스 : systemctl start mysqlctl start mysqlctl.

웹 응용 프로그램에서 MySQL의 주요 역할은 데이터를 저장하고 관리하는 것입니다. 1. MySQL은 사용자 정보, 제품 카탈로그, 트랜잭션 레코드 및 기타 데이터를 효율적으로 처리합니다. 2. SQL 쿼리를 통해 개발자는 데이터베이스에서 정보를 추출하여 동적 컨텐츠를 생성 할 수 있습니다. 3.mysql은 클라이언트-서버 모델을 기반으로 작동하여 허용 가능한 쿼리 속도를 보장합니다.
