搭建MYSQL-MHA环境

  • 准备工作

    1. 4台机器(可以是虚拟机)

    一台安装centos6.X(管理机192.168.2.5),其余三台安装centos7.X(一台主master192.168.2.6,一台主备backup192.168.2.7,一台从slave192.168.2.8

    2. 配置epel源(配置该源时检测是否可连接):

    [root@localhost ~]# rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
    

    3. 建立ssh无密码登录环境(4台机器均需要)

    [root@localhost ~]# ssh-keygen -t rsa
    [root@localhost ~]# ssh-copy-id -i .ssh/id_rsa.pub root@192.168.2.5
    [root@localhost ~]# ssh-copy-id -i .ssh/id_rsa.pub root@192.168.2.6
    [root@localhost ~]# ssh-copy-id -i .ssh/id_rsa.pub root@192.168.2.7
    [root@localhost ~]# ssh-copy-id -i .ssh/id_rsa.pub root@192.168.2.8
    
  • 安装mysql

    1. 安装mysql(除了管理机)

    这里安装的是MariaDB
    

    2. 修改mysql配置

    • master机器

    [root@localhost ~]# vi /etc/my.cnf.d/server.cnf
    [mysqld]
    server_id = 1
    character-set-server = utf8
    lower_case_table_names = 1
    log-bin = binlog
    log-slave-updates
    [root@localhost ~]# service mysqld restart
    
    • backup机器

    [root@localhost ~]# vi /etc/my.cnf.d/server.cnf
    [mysqld]
    server_id = 2
    character-set-server = utf8
    lower_case_table_names = 1
    log-bin = binlog
    log-slave-updates
    [root@localhost ~]# service mysqld restart
    
    • slave机器

    [root@localhost ~]# vi /etc/my.cnf.d/server.cnf
    [mysqld]
    server_id = 3
    character-set-server = utf8
    lower_case_table_names = 1
    log-bin = binlog
    log-slave-updates
    read_only = 1
    [root@localhost ~]# service mysqld restart
    

    3. 登陆mysql

    • master机器

    [root@localhost ~]# mysql -uroot -p123456
    MariaDB [mysql]> CREATE USER 'weimo'@'%' IDENTIFIED BY 'weimo';
    MariaDB [mysql]> grant all privileges  ON *.* TO 'weimo'@'%' identified by "weimo";
    MariaDB [mysql]> flush privileges;
    [root@localhost ~]# mysqldump -uroot -p123456 -A -x > /tmp/full.sql
    [root@localhost ~]# scp /tmp/full.sql root@192.168.2.7:/tmp/
    [root@localhost ~]# scp /tmp/full.sql root@192.168.2.8:/tmp/
    MariaDB [mysql]> show master status;
    
    • backup机器、slave机器

    [root@localhost ~]# mysql -uroot -p123456
    MariaDB [mysql]> change master to master_host='192.168.2.6',master_port=3306,master_user='weimo',master_password='weimo',master_log_file='binlog.000003',master_log_pos=995;
    MariaDB [mysql]> start slave;
    MariaDB [mysql]> show slave status \G
    只要看到Slave_IO_Running Slave_SQL_Running都为yes就可以了。
    

    4. 赋权

    • 三台机器

    MariaDB [mysql]> grant all privileges  ON *.* TO 'weimo'@'%' identified by "weimo";
    MariaDB [mysql]> FLUSH PRIVILEGES;
    
  • 安装mha

    backup机器、slave机器

    [root@localhost ~]# yum install perl-DBD-MySQL
    [root@localhost ~]# rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm 
    (需要把安装包传上去,如安装时有报错依赖,则需要对应进行yum把依赖装上)
    

    master机器

    [root@localhost ~]# yum -y install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager
    [root@localhost ~]# rpm -ivh mha4mysql-manager-0.56-0.el6.noarch.rpm 
    (需要把安装包传上去,如安装时有报错依赖,则需要对应进行yum把依赖装上)
    
    新建配置文件
    [root@localhost ~]# vi /etc/mha/mha.conf
    [server default]
    user=weimo
    password=weimo
    ssh_user=root
    manager_log=/usr/local/mha/manager.log
    # working directory on the manager
    manager_workdir=/usr/local/mha
    # working directory on MySQL servers
    remote_workdir=/usr/local/mha
    repl_user=weimo
    repl_password=weimo
    
    [server1]
    hostname=192.168.2.6
    
    [server2]
    hostname=192.168.2.7
    candidate_master=1
    
    [server3]
    hostname=192.168.2.8
    no_master=1
    
    检查下SSH公钥免密码登录,结果都OK就行
    [root@localhost ~]# masterha_check_ssh --conf=/etc/mha/mha.conf
    
    再检查下MySQL复制,最后提示MySQL Replication Health is OK.就行
    masterha_check_repl --conf=/etc/mha/mha.conf
    
    后台开启HA进程
    nohup masterha_manager --conf=/etc/mha/mha.conf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/mha/manager.log 2>&1 &
    
  • 配置keepalived

    1. 通过yum安装

    [root@localhost ~]# yum -y install keepalived
    

    2. 修改配置文件

    • master机器

    [root@localhost ~]# vi /etc/keepalived/keepalived.conf
    global_defs {
       notification_email {
         acassen@firewall.loc
         failover@firewall.loc
         sysadmin@firewall.loc
       }
       notification_email_from Alexandre.Cassen@firewall.loc
       smtp_server 192.168.200.1
       smtp_connect_timeout 30
       router_id LVS_DEVEL
    }
    
    vrrp_instance VI_1 {
        state BACKUP
        nopreempt
        interface eno16780032
        virtual_router_id 51
        priority 100
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            192.168.2.10
        }
    }
    
    • backup机器

    [root@localhost ~]# vi /etc/keepalived/keepalived.conf
    global_defs {
       notification_email {
         acassen@firewall.loc
         failover@firewall.loc
         sysadmin@firewall.loc
       }
       notification_email_from Alexandre.Cassen@firewall.loc
       smtp_server 192.168.200.1
       smtp_connect_timeout 30
       router_id LVS_DEVEL
    }
    
    vrrp_instance VI_1 {
        state BACKUP
        nopreempt
        interface eno16780032
        virtual_router_id 51
        priority 90
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            192.168.2.10
        }
    }
    
    • 区别与注释

    区别:priority(优先级)不同
    注释:
        state:
            状态用的都是BACKUP,取值还有MASTER,区别在于重新连上后,MASTER会抢占vip,而BACKUP不会,直到别的VIP宕机后才会变成VIP
        interface:
            网卡名称
        virtual_router_id:
            这个id需要两个keepalived保持一致,并且同一个局域网内,id不能相同。
        virtual_ipaddress:
            这个就是虚拟ip,可以配置多个,需要保持一致
    

    3. 启动keepalived

    [root@localhost ~]# service keepalived start
    注意:需要在master机器上启动成功后,再去backup机器上启动。否则会造成操作的不是master数据库,从而导致集群无法保证正常工作,数据不一致,主从同步失败。
    
  • 参考文档

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,670评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,928评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,926评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,238评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,112评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,138评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,545评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,232评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,496评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,596评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,369评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,226评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,600评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,906评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,185评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,516评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,721评论 2 335

推荐阅读更多精彩内容