ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

MySQL集群搭建

2020-03-31 17:08:08  阅读:306  来源: 互联网

标签:drbd MySQL Master master mysql 集群 服务器 rpm 搭建


一、架构:

一主一备一从

二、环境和版本:

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

标签:drbd,MySQL,Master,master,mysql,集群,服务器,rpm,搭建
来源: https://www.cnblogs.com/linbs/p/12606339.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有