一、架构:
一主一备一从
二、环境和版本:
Linux环境:CentOS 7.6
MySQL版本:mysql 5.6
DRBD版本:DRBD 84
三、搭建步骤:
1、安装DRBD(在主、备两台服务器上分别安装)
(1)修改/etc/hosts文件,主、备服务器的/etc/hosts这个文件必须包含所有主、备的主机名和主机IP。如下所示:
(2)修改/etc/hostname文件,主服务器主机名取名为db-master,备服务器主机名取名为db-backup。如下所示:
(3)磁盘分区
查看磁盘空间
# fdisk -l
增加分区
# fdisk /dev/vdb
具体操作见下图
(4)安装drbd
查看内核,要大于等于2.6.32-642.11.1.el6.x86_64版本,否则要升级
# cat /proc/version
安装与drbd相关的yum源
# rpm -Uvh https://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
查看yum源
# ls /etc/yum.repos.d/
安装drbd
# yum -y install drbd84-utils kmod-drbd84
加载drbd模块
# modprobe drbd
查看安装的drbd
# lsmod |grep -i drbd
在/etc/drbd.d下创建db.res文件,内容如下
resource r0{ # r0为资源名,我们在初始化磁盘的时候就可以使用资源名来初始化。
protocol C; #使用 C 协议。
startup { wfc-timeout 0; degr-wfc-timeout 120;}
disk { on-io-error detach;}
net{
timeout 60;
connect-int 10;
ping-int 10;
max-buffers 2048;
max-epoch-size 2048;
}
syncer { rate 200M;}
on db-master{ #每个主机名的说明以on开头,后面是hostname(必须在/etc/hosts可解析)
device /dev/drbd0; # 这里/dev/drbd0是用户挂载时的设备名字,由DRBD进程创建
disk /dev/vdb1; # 使用这个磁盘作为drbd的磁盘/dev/drbd0。
address 172.18.183.6:7788; #设置DRBD的监听ip和端口,用于与另一台主机通信
meta-disk internal;# drbd的元数据存放方式
}
on db-backup{
device /dev/drbd0;
disk /dev/vdb1;
address 172.18.183.7:7788;
meta-disk internal;
}
}
重启电脑
# reboot
在/dev/vdb1分区上创建DRBD元数据库信息,也称元数据。
# drbdadm create-md r0
启动drbd
# service drbd start
查看状态
# service drbd status
(5)在主服务器上操作
把当前服务器设置为primary状态(主节点),如果这一步执行不成功,那么执行这个命令“drbdadm -- --overwrite-data-of-peer primary all”
# drbdadm primary all
格式化磁盘
# mkfs.ext4 /dev/drbd0
创建/store目录
# mkdir /store
挂载
# mount /dev/drbd0 /store/
查看是否挂载成功
# df -h
2、安装MySQL(在主、备、从三台服务器上分别安装)
(1)检查系统中是否已安装MySQL
# rpm -qa | grep mysql
返回空值的话,就说明没有安装 MySQL
注意:在新版本的CentOS7中,默认的数据库已更新为了Mariadb,而非 MySQL,所以执行 yum install mysql 命令只是更新Mariadb数据库,并不会安装 MySQL 。
(2)查看已安装的 Mariadb 数据库版本。
# rpm -qa|grep -i mariadb
(3)卸载已安装的 Mariadb 数据库。
# rpm -qa|grep mariadb|xargs rpm -e --nodeps
(4)再次查看已安装的 Mariadb 数据库版本,确认是否卸载完成。
# rpm -qa|grep -i mariadb
(5)创建下载目录,下载安装包文件。
# cd /opt
# mkdir software
# cd sortware/
# wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
(6)安装mysql-community-release-el7-5.noarch.rpm包
# rpm -ivh mysql-community-release-el7-5.noarch.rpm
安装完成之后,会在 /etc/yum.repos.d/ 目录下新增 mysql-community.repo 、mysql-community-source.repo 两个 yum 源文件。
执行 yum repolist all | grep mysql 命令查看可用的 mysql 安装文件。
(7)安装mysql。
# yum install mysql-server
(8)检查mysql是否安装成功。
# rpm -qa | grep mysql
(9)修改/etc/my.cnf,修改数据目录为drbd挂载的目录,修改编码
设置编码
# vi /etc/my.cnf
datadir=/store/mysql
如下(少补):
复制代码
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
performance_schema_max_table_instances=400
table_definition_cache=400
table_open_cache=256
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
lower_case_table_names=1
wait_timeout=2880000
interactive_timeout = 2880000
max_allowed_packet = 10M
# 修改
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
[mysql]
default-character-set = utf8
[mysql.server]
default-character-set = utf8
[mysqld_safe]
default-character-set = utf8
[client]
default-character-set = utf8
具体请参照服务器上的现有配置,如下
(10)在主服务器上操作
启动mysql
# service mysqld start
设置root密码
# mysql_secure_installation
登陆root账号
# mysql -uroot -p
建立远程root用户
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '你设置的密码' WITH GRANT OPTION;
mysql> flush privileges;
3、MySQL主从复制架构配置
配置master
(1)修改配置文件
vi /etc/my.cnf
log-bin=mysql-bin #启用二进制日志,mysql-bin为自己取名字
server-id=6 #服务器ID,唯一性,一般是IP地址最后一段
binlog_format=mixed #日志存储格式
(2)创建备份专用账户
mysql> GRANT REPLICATION SLAVE ON *.* TO 'backup'@'%' IDENTIFIED BY '123456';
mysql> FLUSH PRIVILEGES;
(3)查看master主机状态
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000005 | 1233 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
注:File 和Position 值待会儿要用到
(5)关闭防火墙或者开放相关端口
# systemctl stop firewalld
配置slave
(1)修改配置文件
vim /etc/my.cnf
log-bin=mysql-bin #[可选] 启用二进制日志
relay-log=relay-log #启用中继日志
server-id=4 #配置服务器ID
(2)配置主从复制
mysql> change master to
master_host='172.18.183.6',master_user='backup',master_password='123456',master_log_file='mysql-bin.000005', master_log_pos=1233;
注:
master_host=主服务器IP
master_user=在主服务器上创建的备份用户名
master_password=备份用户密码
master_log_file=查询master(主服务器)的状态得到的File列的值
master_log_pos=Position列的值
(3)启动从服务器
mysql> start slave;
(4)检查从服务器复制功能状态
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 172.18.183.6
Master_User: backup
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000005
Read_Master_Log_Pos: 1233
Relay_Log_File: relay-log.000002
Relay_Log_Pos: 1117
Relay_Master_Log_File: mysql-bin.000005
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
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: 1233
Relay_Log_Space: 1284
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: 46
Master_UUID: 43f1d513-6a8b-11ea-9ef2-00163e08aa81
Master_Info_File: /var/lib/mysql/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
1 row in set (0.00 sec)
主要查看以下两项:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Slave_IO及Slave_SQL进程必须正常运行,即YES状态,否则都是错误的状态(如:其中一个NO均属错误)。
以上操作过程,主从服务器配置完成。
四、参考资料:
磁盘分区参考
https://blog.csdn.net/qq_26963433/article/details/79467959
主节点和备节点DRBD的搭建参考
https://www.cnblogs.com/liaojiafa/p/6118425.html
数据库安装参考
https://blog.csdn.net/pengjunlee/article/details/81212250
https://www.cnblogs.com/007sx/p/7083143.html
主从复制架构配置参考
https://blog.51cto.com/437549/2113793