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

  • 相关阅读:
    MOSS中的User的Title, LoginName, DisplayName, SID之间的关系
    如何在Network Monitor中高亮间隔时间过长的帧?
    SharePoint服务器如果需要安装杀毒软件, 需要注意什么?
    如何查看SQL Profiler? 如何查看SQL死锁?
    什么是Telnet
    The name or security ID (SID) of the domain specified is inconsistent with the trust information for that domain.
    Windows SharePoint Service 3.0的某个Web Application无搜索结果
    网络连接不上, 有TCP错误, 如果操作系统是Windows Server 2003, 请尝试一下这里
    在WinDBG中查看内存的命令
    The virtual machine could not be started because the hypervisor is not running
  • 原文地址:https://www.cnblogs.com/linbs/p/12606339.html
Copyright © 2011-2022 走看看