zoukankan      html  css  js  c++  java
  • 设置配置高可用的Mysql双机热备(Mysql_HA)

    这几周个人几篇文章介绍了改设置配置的文章. 关联文章的地址

        

    1.KeepAlived+Mysql

        应用KeepAlived实现高可用的MYSQL_HA集群环境中,MYSQL为(Master/Master)主/主同步复制关系,保障MYSQL服务器数据的一致性,用KeepAlived供给虚拟IP,通过KeepAlived来停止故障监控,实现Mysql故障时自动切换。

        布署环境拓朴如下:

     Mysql VIP :192.168.187.61

        Master1:192.168.187.129

        Master:192.168.187.132

        OS 环境:Cent OS 5.9

        Mysql版本:Mysql5.5.31

        设置和配置

        设置和配置

        

    2.安装mysql

        

    2.1.Mysql升级安装

        因为CentOS的Mysql还是停留在5.0.19,而我们做Mysql之间的同步复制,Mysql版本最少要在Mysql5.1以上,所以要对其停止升级安装。

        >>应用 yum安装, yum 可以帮你处理依赖于冲突

        

    # rpm –Uvh  http://repo.webtatic.com/yum/centos/5/latest.rpm  //安装最新的mysqlyum

    # yum –y install Mysql55 MySQL55-* --enablerepo=webtatic  //安装Mysql--enablerepo参数是用来指定源

         

        >>开启mysql服务

        

    # service mysqld start  //开启mysql服务

         

        >>刚安装密码为空,设置root密码

        

    # mysqladmin –u root password ‘1234’  //设置root密码     

        >>变动mysql配置文件

        

    # cp /usr/share/mysql/my-medium.cnf  /etc/my.cnf //etc目录下建立mysql的配置文件my.cnf

    # service mysqld restart//重启mysql服务

         

        >>登岸Mysql

        

    # mysql –u root –p 1234    //设置root密码

    Mysql>     //登岸进了mysql

        

    2.2.Mysql主/主配置

        

    2.2.1 设置配置文件

        Mysql是通过日志停止同步复制的,先建立日志文件

        

    #touch /var/log/mysql/mysql-bin.log   //建立日志文件

    #chown mysql.mysql /var/log/mysql/mysql-bin.log  //将日志文件的所属用户和用户组变动成mysql

        在两台要停止备份的mysql服务器上的my.cnf文件停止配置如下(将上面的配置分别参加相关服务器的my.cnf):

        

    Master1(192.168.187.129)

    Master(192.168.187.132)

    #主标服务标识号,必需唯一

    server-id = 1

    #因为MYSQL是基于二进制的日志来做同步的,每个日志文件大小为 1G

    log-bin=/var/log/mysql/mysql-bin.log

    #要同步的库名

    binlog-do-db = test

    #不记录日志的库,即不需要同步的库

    binlog-ignore-db=mysql

    #用从属服务器上的日志功能

    log-slave-updates

    #经过1日志写操作就把日志文件写入硬盘一次(对日志信息停止一次同步)n=1是最安全的做法,但效率最低。默认设置是n=0

    sync_binlog=1

    # auto_increment控制自增列AUTO_INCREMENT的行为

    用于MASTER-MASTER之间的复制,避免涌现重复值,

    auto_increment_increment=n有多少台服务器,n就设置为多少,

    auto_increment_offset1设置步长,这里设置为1,这样Masterauto_increment字段发生的数值是:1, 3, 5, 7, …等奇数ID

    auto_increment_offset=1

    auto_increment_increment=2

    #停止镜像处理的数据库

    replicate-do-db = test

    #不停止镜像处理的数据库

    replicate-ignore-db= mysql

    #主标服务标识号,必需唯一

    server-id = 2

    #因为MYSQL是基于二进制的日志来做同步的,每个日志文件大小为 1G

    log-bin=/var/log/mysql/mysql-bin.log

    #要同步的库名

    binlog-do-db = test

    #不记录日志的库,即不需要同步的库

    binlog-ignore-db=mysql

    #用从属服务器上的日志功能

    log-slave-updates

    #经过1日志写操作就把日志文件写入硬盘一次(对日志信息停止一次同步)n=1是最安全的做法,但效率最低。默认设置是n=0

    sync_binlog=1

    # auto_increment控制自增列AUTO_INCREMENT的行为

    用于MASTER-MASTER之间的复制,避免涌现重复值,

    auto_increment_increment=n有多少台服务器,n就设置为多少,

    auto_increment_offset2设置步长,这里设置为2,这样Masterauto_increment字段发生的数值是:2, 4, 6, 8, …等奇数ID

    auto_increment_offset=2

    auto_increment_increment=2

    #停止镜像处理的数据库

    replicate-do-db = test

    #不停止镜像处理的数据库

    replicate-ignore-db= mysql

        

    2.2.2查看配置情况

        按上面的配置将两台服务器配置好以后,重新启动mysql服务,用showmaster status查看一下两台服务器的Master配置情况,可以看出已配置成功,如下:

        NO1:Master1(192.168.187.129)的情况

        

    # mysql –u root –p 1234

    mysql> show master status;

    +------------------+----------+--------------+------------------+

    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |

    +------------------+----------+--------------+------------------+

    | mysql-bin.000001|      107 | test         | mysql            |

    +------------------+----------+--------------+------------------+

        NO2:Master1(192.168.187.132)的情况

        

    # mysql –u root –p 1234

    mysql> show master status;

    +------------------+----------+--------------+------------------+

    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |

    +------------------+----------+--------------+------------------+

    | mysql-bin.000001|      107 | test         | mysql            |

    +------------------+----------+--------------+------------------+

        每日一道理
    风,渐渐吹起,吹乱了我的发丝,也让我的长裙有些飘动。绿叶仿佛在风中起舞,离开了树,投向了大地,却不知这样会枯萎,我弯下腰,轻轻拾起一片树叶,那非常有序的茎脉,是一种美的点缀。我有些哀叹:绿叶啊,绿叶,你这般美丽地从树上轻轻飘下,随风起舞,却不知已被人称之为落叶!

        

    2.2.3建立权限帐户,实现同步

        a.创立账户并授予REPLICATION SLAVE权限

        

    mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '1234';   //建立一个用户名为slave的帐户

    mysql> FLUSH PRIVILEGES;   //刷新相关权限表

        因为停止双向复制,两边服务器都需要建立一个用于复制的的用户。两边可以复用上面的语句,用户名和密码可以自行停止修改。

        b.同步设置

        Master1(192.168.187.129)上操作如下:

        

    mysql> stop slave;  //停止slave

    mysql>change master to master_host='192.168.187.132', master_user='slave', master_password='1234', master_log_file='mysql-bin.000001', master_log_pos=107;  //修改以后的Master的值,因为是互为备份,所以Master1(192.168.187.129)的master为Master2(192.168.187.132),Master2设置复制的用户名为slave,密码是1234,上面通过 show master status我们得悉,log_file是mysql-bin.000001,postion是107。

    mysql>start slave;    //开始salve,开始同步

    mysql>show slave status;   //检测slave状态,如果Slave_IO_Running: Yes    Slave_SQL_Running: Yes    Seconds_Behind_Master: 0就OK了

         

        Master2(192.168.187.132)上面操作如下:

        

    mysql> stop slave;  //停止slave

    mysql>change master to master_host='192.168.187.129', master_user='slave', master_password='1234', master_log_file='mysql-bin.000001', master_log_pos=107;  //修改以后的Master的值,因为是互为备份,所以Master2(192.168.187.132)的master为Master2(192.168.187.129),Master1设置复制的用户名为slave,密码是1234,上面通过 show master status我们得悉,log_file是mysql-bin.000001,postion是107。

    mysql>start slave;    //开始salve,开始同步

    mysql>show slave status;  //检测slave状态,如果Slave_IO_Running: Yes    Slave_SQL_Running: Yes    Seconds_Behind_Master: 0就OK了

        c.测试情况:

        Step1:建一个测试表Test,两个字段,id与name字段,id字段为自增,两个服务器上面都是一样的结构,如下图:

        设置和配置

        Step2:我在Master1(192.168.187.129)表上执行一个insert语句,并停止查询,如下图:

        设置和配置

        Step3:在Master2(192.168.187.132)中查询,可以发现数据已同步过来了,如下图:

     设置和配置

        

    3KeepAlived安装配置

        

    3.1 KeepAlived的安装方法

     可参照“高可用的负载均衡配置方法(Haproxy+KeepAlived)5.1 中KeepAlived的安装方法

        

    3.2将keepalived参加服务

        可参照“高可用的负载均衡配置方法(Haproxy+KeepAlived)5.2  中将keepalived参加服务

        

    3.3 KeepAlived的配置

        安装好以后,对其停止配置如下:

        有两台机器(MASTER1)所在的192.168.187.129与(Master2)192.168.187.132,用(VIP)192.168.187.61做虚拟IP。

        在两台服各器中的/etc/keepalived文件夹中的keepalived.conf下停止配置:

        Master1的设置 

        192.168.187.129

        global_defs {

       router_id Mysql_HA #以后节点名

        }

        vrrp_instance VI_1{

        state BACKUP       #两台配置节点均为BACKUP

        interface eth0       #绑定虚拟IP的网络接口

        virtual_router_id 51 #VRRP组名,两个节点的设置必须一样,以指明各个节点属于同一VRRP

        priority 100        #节点的优先级,另一台优先级改低一点

        acvert_int 1         #组播信息发送距离,两个节点设置必须一样

        nopreempt      #不抢占,只在优先级高的机器上设置即可,优先级低的机器不设置

        authentication{      #设置验证信息,两个节点必须一致

        auth_type  PASS

        auth_pass  1111

        }

        Virtual_ipaddress{   #指定虚拟IP,两个节点设置必须一样

        192.168.187.61

         }

       }

        virtual_server 192.168.187.61 3306 {   #linux虚拟服务器(LVS)配置

        delay_loop 2     #每个2秒检查一次real_server状态

        lb_algo wrr      #LVS调度算法,rr|wrr|lc|wlc|lblc|sh|dh

        lb_kind DR      #LVS集群模式 ,NAT|DR|TUN

        persistence_timeout 60    #会话保持时间

        protocol TCP    #应用的协议是TCP还是UDP

        real_server 192.168.187.129 3306 {

        weight 3   #权重

        notify_down  /usr/local/bin/mysql.sh    #检测到服务down后执行的脚本

        TCP_CHECK {

        connect_timeout 10   #连接超时时间

        nb_get_retry 3      #重连次数

        delay_before_retry 3 #重连距离时间

        connect_port 3306    #健康检查端口

        }

        }

        Master2的设置 

        192.168.187.132

        global_defs {

       router_id Mysql_HA #以后节点名

        }

        vrrp_instance VI_1{

        state BACKUP       #两台配置节点均为BACKUP

        interface eth0       #绑定虚拟IP的网络接口

        virtual_router_id 51 #VRRP组名,两个节点的设置必须一样,以指明各个节点属于同一VRRP

        priority 90        #节点的优先级,另一台优先级改低一点

        acvert_int 1         #组播信息发送距离,两个节点设置必须一样

        authentication{      #设置验证信息,两个节点必须一致

        auth_type  PASS

        auth_pass  1111

        }

        Virtual_ipaddress{   #指定虚拟IP,两个节点设置必须一样

        192.168.187.61

         }

       }

        virtual_server 192.168.187.61 3306 {   #linux虚拟服务器(LVS)配置

        delay_loop 2     #每个2秒检查一次real_server状态

        lb_algo wrr      #LVS调度算法,rr|wrr|lc|wlc|lblc|sh|dh

        lb_kind DR      #LVS集群模式 ,NAT|DR|TUN

        persistence_timeout 60    #会话保持时间

        protocol TCP    #应用的协议是TCP还是UDP

        real_server 192.168.187.132 3306 {

        weight 3   #权重

        notify_down   /usr/local/bin/mysql.sh    #检测到服务down后执行的脚本

        TCP_CHECK {

        connect_timeout 10   #连接超时时间

        nb_get_retry 3      #重连次数

        delay_before_retry 3 #重连距离时间

        connect_port 3306    #健康检查端口

        }

        }

        脚本/usr/local/bin/mysql.sh

        

    #vi  /usr/local/bin/mysql.sh

    #!/bin/sh

    killall keepalived

        

    3.4 KeepAlived测试

        可参照“高可用的负载均衡配置方法(Haproxy+KeepAlived)5.4 中KeepAlived测试

        

    4.Mysql测试

        Step1:打开三个服务器停止查看,刚开始三个都为空

        设置和配置

        设置和配置

        Step2:在VIP(192.168.187.61)服务器中插入一条数据

        设置和配置

        设置和配置

        Step3:再查看三个服务器中的数据都已同步过来了

        设置和配置

        设置和配置

        当关掉做为主机的192.168.187.129做为宕机处理,一样也不会出问题,虚拟IP由192.168.187.129漂移

        到192.168.187.132上面。

        

    5.安装时涌现的问题及处理方法

        NO1: Slave将无法链接到 Master情况

        错误:Slave将无法链接到 Master  

        原因bind-address默认是127.0.0.1你必须变动它

        处理办法:修改my.cnf,加上如下图红框所示的配置!

        设置和配置设置和配置

        NO2: mysql error 1129 错误

        错误:mysql 1129错误!如下图:

         设置和配置设置和配置

        原因:是因为mysql将ip连接阻塞了。

        处理办法登录到mysql数据库服务器端,应用命令:

        

    # mysqladmin -u root -p  flush-hosts;  

    Enter password:

         

    文章结束给大家分享下程序员的一些笑话语录: 乔布斯:怎么样还是咱安全吧!黑客:你的浏览器支持国内网银吗?苹果可以玩国内的网游吗乔布斯:......不可以黑客:那我研究你的漏洞干嘛,我也需要买奶粉!

  • 相关阅读:
    lsmod命令详解
    init命令详解
    runlevel 命令详解
    nohup命令详解
    nice和renice命令详解
    pstree命令详解
    ps命令详解
    crontab命令详解
    pkill命令详解
    killall命令详解
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3086162.html
Copyright © 2011-2022 走看看