• 【Linux】【Database】【MySQL】使用percona搭建高可用的MySQL数据库


    1. 简介

    1.1. 官方文档:

    数据库架构:https://docs.openstack.org/ha-guide/shared-database.html

    1.2. 本次使用的的是Percona XtraDB Cluster,5.7版本

    https://www.percona.com/doc/percona-xtradb-cluster/5.7/index.html

    1.3. 安装文件下载:

    https://www.percona.com/downloads/Percona-XtraDB-Cluster-57/LATEST/

    或者使用yum安装,本文中使用yum安装

    https://www.percona.com/doc/percona-repo-config/yum-repo.html

    这还有Docker的安装说明,等以后Docker文档中再详细说明

    https://www.percona.com/doc/percona-xtradb-cluster/5.7/install/docker.html

    2. 安装

    功能与组件 机器名 服务IP 管理IP Processor Cores RAM Storage 备注
    Mysql PXC HCTJOSMYSQL01 10.30.2.25 172.16.0.25        
    Mysql PXC HCTJOSMYSQL02 10.30.2.26 172.16.0.26        
    Mysql PXC HCTJOSMYSQL03 10.30.2.27 172.16.0.27        
    HAPROXY HCTJOSDR01 10.30.2.48 172.16.0.48        
    HAPROXY HCTJOSDR02 10.30.2.49 172.16.0.49        
    Ansible HCTJOSADM01 10.30.2.99 172.16.0.99        
    DNS/NTP HCTJOSINFRA01 10.30.2.81 172.16.0.81        
    DNS/NTP HCTJOSINFRA02 10.30.2.82 172.16.0.82        

    2.1. 在HCTJOSMYSQL01/02/03上安装MySQL

    安装yum源

    yum install http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm

    在RHEL7.4上虽然已经配置了EPEL源,但是仍然会出现找不到libev.so.4()的错误,请使用下面地址直接安装

    https://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/l/libev-4.15-3.el7.x86_64.rpm

    安装软件吧

    yum install Percona-XtraDB-Cluster-57

    先别着急启动,配置一个独立的分区用来存储数据库文件

    vgcreate vg_mysql /dev/sdb
    lvcreate -n lv_mysql -l +100%FREE vg_mysql
    mkfs.xfs /dev/mapper/vg_mysql-lv_mysql

    写进/etc/fstab

    #Disk for mysql data
    /dev/mapper/vg_mysql-lv_mysql    /data_mysql        xfs    defaults    0 0

    重新挂载,在分区内建立两个文件夹,mysql和backup

    mkdir -pv /data_mysql
    mount -a
    mkdir -pv /data_mysql/{mysql,backup}

    修改/etc/percona-xtradb-cluster.conf.d/mysqld.cnf

    datadir=/data_mysql/mysql

    起来试试吧

    systemctl start mysql

    看看密码是个啥

    grep 'temporary password' /var/log/mysqld.log

    连接数据库并输出刚才看见的密码

    mysql -u root -p

    为了将来管理方便,添加了远程的访问权限

    mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'mysql';
    Query OK, 0 rows affected (0.01 sec)
    
    mysql> GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY "mysql";
    Query OK, 0 rows affected, 1 warning (0.01 sec)
    
    mysql> flush privileges;
    Query OK, 0 rows affected (0.01 sec)

    SST用户也要添加,否则其他结点无法正常连入主节点

    mysql> CREATE USER 'sstuser'@'localhost' IDENTIFIED BY 'mysql';
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO 'sstuser'@'localhost';
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> FLUSH PRIVILEGES;
    Query OK, 0 rows affected (0.01 sec)

    服务停掉,准备配置集群吧

    systemctl stop mysql

    集群的配置文档在这:https://www.percona.com/doc/percona-xtradb-cluster/5.7/configure.html#configure

     首先修改/etc/percona-xtradb-cluster.conf.d/wsrep.cnf

    [mysqld]
    # Path to Galera library
    wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
    
    # Cluster connection URL contains IPs of nodes
    #If no IP is found, this implies that a new cluster needs to be created,
    #in order to do that you need to bootstrap this node
    #这里可以写域名或者IP地址 wsrep_cluster_address=gcomm://hctjosmysql01.hccos.cn,hctjosmysql02.hccos.cn,hctjosmysql03.hccos.cn # In order for Galera to work correctly binlog format should be ROW binlog_format=ROW # MyISAM storage engine has only experimental support default_storage_engine=InnoDB # Slave thread to use wsrep_slave_threads= 8 wsrep_log_conflicts # This changes how InnoDB autoincrement locks are managed and is a requirement for Galera innodb_autoinc_lock_mode=2 # Node IP address
    # 这个可以写可以不写 wsrep_node_address=hctjoscontroller01.homecredit.cn # Cluster name wsrep_cluster_name=pxc-cluster-hcc #If wsrep_node_name is not specified, then system hostname will be used wsrep_node_name=hctjosmysql01.hccos.cn #pxc_strict_mode allowed values: DISABLED,PERMISSIVE,ENFORCING,MASTER pxc_strict_mode=ENFORCING # SST method wsrep_sst_method=xtrabackup-v2
    #这项一定要写 #Authentication for SST method wsrep_sst_auth="sstuser:mysql"

    启动主节点

    systemctl start mysql@bootstrap.service

    在其他节点上修改/etc/percona-xtradb-cluster.conf.d/wsrep.cnf

    wsrep_cluster_address=gcomm://hctjosmysql01.hccos.cn,hctjosmysql02.hccos.cn,hctjosmysql03.hccos.cn
    wsrep_node_name=hctjosmysql02.hccos.cn
    wsrep_node_address=hctjosmysql02.hccos.cn
    wsrep_cluster_address=gcomm://hctjosmysql01.hccos.cn,hctjosmysql02.hccos.cn,hctjosmysql03.hccos.cn
    wsrep_node_name=hctjosmysql03.hccos.cn
    wsrep_node_address=hctjosmysql03.hccos.cn

     在其他结点上修改/etc/percona-xtradb-cluster.conf.d/mysqld.cnf

    [mysqld]
    server-id=2
    [mysqld]
    server-id=3

    在其他上启动mysql

    systemctl start mysql

    随便找一个节点验证

    mysql> show status like 'wsrep_cluster_size';
    +--------------------+-------+
    | Variable_name      | Value |
    +--------------------+-------+
    | wsrep_cluster_size | 3     |
    +--------------------+-------+
    1 row in set (0.00 sec)

     注意:如果cluster已经启动,主节点down机想重新加入这个集群,直接启动mysql即可

    systemctl start mysql

    如果这个集群中最后的节点也down机了,在任何一个节点都可以启动集群,重新启动集群需要执行

    systemctl start mysql@bootstrap.service

    3. 利用Haproxy实现高可用,在HCTJOSDR01/02上

    安装文档在这,http://www.cnblogs.com/demonzk/p/8404085.html 已经装好了,只需要在/etc/haproxy/haproxy.cfg下面添加就好

    #---------------------------------------------------------------------
    # mysql
    #---------------------------------------------------------------------
    listen percona_cluster
        bind *:3306
        balance  roundrobin
        option  mysql-check
        mode  tcp
        server hctjosmysql01 172.16.0.25:3306 weight 1 maxconn 100000 check inter 10s
        server hctjosmysql02 172.16.0.26:3306 weight 1 maxconn 100000 check inter 10s
        server hctjosmysql03 172.16.0.27:3306 weight 1 maxconn 100000 check inter 10s

    4. 在HCTJOSINFRA01上添加A记录,/var/named/hccos.cn.zone

    ;vip
    mysql                   IN      A       172.16.0.148
    mysql                   IN      A       172.16.0.149
  • 相关阅读:
    Vuex 在state中存取数据 modules分模块 (2018/11/28)
    计数器(2018/11/29)
    03$router和$route的区别 (2018/11/28)
    02导航守卫 (2018/11/28)
    01模拟用户的登录 (2018/11/27)
    路由传参(2018/11/26)
    CSS制作红桃心
    css制作三角形
    css内容超出显示省略号
    css制作旋转风车(transform 篇)
  • 原文地址:https://www.cnblogs.com/demonzk/p/8444450.html
Copyright © 2020-2023  润新知