zoukankan      html  css  js  c++  java
  • 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 statusG

    *************************** 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

  • 相关阅读:
    redis 笔记
    经验:什么影响了数据库查询速度、什么影响了MySQL性能 (转)
    对于线程安全的一些理解
    重要的接口需要做哪些检查(转)
    数据库分库分表思路
    代码优化:Java编码技巧之高效代码50例
    java new一个对象的过程中发生了什么
    java如何防止反编译(转)
    运用加密技术保护Java源代码(转)
    redis 工具包
  • 原文地址:https://www.cnblogs.com/linbs/p/12606339.html
Copyright © 2011-2022 走看看