一、架構:
一主一備一從
二、環境和版本:
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