MySQL集群搭建


一、架構:

一主一備一從

二、環境和版本:

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM