MySQL集群搭建

一、架构:

一主一备一从

二、环境和版本:

Linux环境:CentOS 7.6

MySQL版本:mysql 5.6

DRBD版本:DRBD 84

三、搭建步骤:

1、安装DRBD(在主、备两台服务器上分别安装)

(1)修改/etc/hosts文件,主、备服务器的/etc/hosts这个文件必须包含所有主、备的主机名和主机IP。如下所示:

 MySQL集群搭建

(2)修改/etc/hostname文件,主服务器主机名取名为db-master,备服务器主机名取名为db-backup。如下所示:

 MySQL集群搭建

 

 MySQL集群搭建

 

(3)磁盘分区

查看磁盘空间

# fdisk -l

 MySQL集群搭建

增加分区

# fdisk /dev/vdb

具体操作见下图

 MySQL集群搭建

 

(4)安装drbd

查看内核,要大于等于2.6.32-642.11.1.el6.x86_64版本,否则要升级

# cat /proc/version

 MySQL集群搭建

 

安装与drbd相关的yum源

# rpm -Uvh https://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm

 

查看yum源

# ls /etc/yum.repos.d/

 MySQL集群搭建

 

安装drbd

# yum -y install drbd84-utils kmod-drbd84

 

加载drbd模块

# modprobe drbd

 

查看安装的drbd

# lsmod |grep -i drbd

 MySQL集群搭建

 

在/etc/drbd.d下创建db.res文件,内容如下

 MySQL集群搭建

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

MySQL集群搭建

 

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

 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

 

 

具体请参照服务器上的现有配置,如下

 MySQL集群搭建

 

 MySQL集群搭建

 

 

(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

上一篇:ArcGis汇总篇


下一篇:linux – 纠正与drbd相关的ext3文件系统中的超级块的正确方法