美文网首页
mysql高可用部署

mysql高可用部署

作者: yinkp001 | 来源:发表于2019-08-15 19:05 被阅读0次

    实现原理mysql replication 实现主主复制,再加上keepalived实现共用虚拟IP。从而实现自动切换IP。

     mysql主主配置

    1.前提条件

    版本一致

    配置一致

    2.修改服务器master

     #vi /etc/my.cnf

     [mysqld]

     log-bin=/data/mysql/mysql-bin   #启用二进制日志 注意:日志的目录需要先建立,并将所有者该为mysql

     binlog-do-db=osyunweidb  #需要记录二进制日志的数据库,如果有多个数据库,逗号分隔或重复设置此参数,每个数据库一行

     binlog-ignore-db=mysql   #不需要记录二进制日志的数据库,如果有多个数据库,逗号分隔或重复设置此参数,每个数据库一行

     #注:不加binlog-do-db和binlog_ignore_db,那就表示全部数据库都记录二进制日志。

      expire_logs_days=30 #超过30天的binlog删除

      server-id=222      #服务器唯一ID,默认是1,一般取IP最后一段

      log-slave-updates #配置从库上的更新操作是否写入二进制文件,如果这台从库,还要做其他从库的主库,那么就需要打这个参数,以便从库的从库能够进行日志同步

      sync_binlog=1

      relay_log = /home/relaylog/mysql-relay-bin #中继日志文件

      replicate-do-db=osyunweidb   #需要复制的数据库名,如果有多个数据库,逗号分隔或重复设置此参数,每个数据库一行

    replicate-ignore-db=mysql   #不需要复制的数据库,如果有多个数据库,逗号分隔或重复设置此参数,每个数据库一行

    3.修改服务器slave

       #vi /etc/my.cnf

       [mysqld]  

       relay_log = /home/relaylog/mysql-relay-bin #复制日志文件

       replicate-do-db=osyunweidb   #需要复制的数据库名,如果有多个数据库,逗号分隔或重复设置此参数,每个数据库一行

     replicate-ignore-db=mysql   #不需要复制的数据库,如果有多个数据库,逗号分隔或重复设置此参数,每个数据库一行

    expire_logs_days=30 #超过30天的binlog删除

     server-id=226      #服务器唯一ID,默认是1,一般取IP最后一段

     log-slave-updates #配置从库上的更新操作是否写入二进制文件,如果这台从库,还要做其他从库的主库,那么就需要打这个参数,以便从库的从库能够进行日志同步

     sync_binlog=1

    log-bin=/data/mysql/mysql-bin   #启用二进制日志 注意:日志的目录需要先建立,并将所有者该为mysql

    binlog-do-db=osyunweidb  #需要记录二进制日志的数据库,如果有多个数据库,逗号分隔或重复设置此参数,每个数据库一行

     binlog-ignore-db=mysql   #不需要记录二进制日志的数据库,如果有多个数据库,逗号分隔或重复设置此参数,每个数据库一行

    #注:不加binlog-do-db和binlog_ignore_db,那就表示全部数据库都记录二进制日志。

    4.重启两台服务器的mysql

       service mysqld restart

    5.在两台服务器上建立复制账号并赋权限

       #mysql -uroot -proot@123   

    服务器master:

       mysql>GRANT REPLICATION SLAVE ON osyunweidb.* to 'mysync'@'slave' identified by 'q123456'; #一般不用root帐号

     mysql>flush privileges;

    服务器slave:

     mysql>GRANT REPLICATION SLAVE ON osyunweidb.* to 'mysync'@'master' identified by 'q123456'; #一般不用root帐号

     mysql>flush privileges;

    6.同步业务数据库并查看master的状态

    a)、master服务器的业务数据库导出mysqldump:

    flush tables with read lock;    #数据库只读锁定命令,防止导出数据库的时候有数据写入,这时不要退出mysql命令行,因为退出命令行后,全局表锁就失效,新开一个窗口继续执行以下命令

    mysqldump -uroot -proot@123 业务库 >业务库.sql

    show master status;

    注意:这里记住File的值:mysql-bin.000011和Position的值:107,Binlog_Do_DB的值:业务库,后面会用到。

    unlock tables;   #解除锁定

    b)、数据库导入到slave服务器:

    mysql -uroot -proot@123 < 业务库.sql

    c)、查看slave服务器的master状态:

    flush tables with read lock;

    show master status;

    注意:这里记住File的值:mysql-bin.000022和Position的值:207,Binlog_Do_DB的值:业务库,后面会用到。

    unlock tables;

    7.配置slave服务器

     mysql>stop slave;

     mysql>change master to master_host='master',master_user='mysync',master_password='q123456',

       master_log_file='mysql-bin.000011',master_log_pos=107;   #注意不要断开,107数字前后无单引号。

       mysql>start slave;    #启动slave服务器复制功能

    8.配置master服务器

      mysql>stop slave;

      mysql>change master to master_host='slave',master_user='mysync',master_password='q123456',

             master_log_file='mysql-bin.000022',master_log_pos=207;   #注意不要断开,207数字前后无单引号。

        mysql>start slave;    #启动master服务器复制功能

    9.检查master和slave服务器复制功能状态

    mysql> show slave status\G

     *************************** 1. row ***************************

                  Slave_IO_State: Waiting for master to send event

                  Master_Host: 192.168.2.222  #主服务器地址

                  Master_User: mysync   #授权帐户名,尽量避免使用root

                  Master_Port: 3306    #数据库端口,部分版本没有此行

                  Connect_Retry: 60

                  Master_Log_File: mysql-bin.000004

                  Read_Master_Log_Pos: 600     #同步读取二进制日志的位置,大于等于Exec_Master_Log_Pos

                  Relay_Log_File: ddte-relay-bin.000003

                  Relay_Log_Pos: 251

                  Relay_Master_Log_File: mysql-bin.000004

                  Slave_IO_Running: Yes    #此状态必须YES

                  Slave_SQL_Running: Yes     #此状态必须YES

                        ......

    注:Slave_IO及Slave_SQL进程必须正常运行,即YES状态,否则都是错误的状态(如:其中一个NO均属错误)。

    10.主主同步状态验证

    安装和配置keepalived

    范围:两台mysql主机

    1.安装keepalived

    yum install keepalived

    2.配置master的keepalive.conf

    vi /etc/keepalived/keepalive.conf

    ! Configuration File for keepalived

    global_defs {

       notification_email {

         root@huangmingming.cn

         741616710@qq.com

       }

       notification_email_from keepalived@localhost  

       smtp_server 127.0.0.1

       smtp_connect_timeout 30

       router_id LVS_DEVEL

    }

    vrrp_instance HA_1 {

        state BACKUP         #master和slave都配置为BACKUP

        interface eth0         #指定HA检测的网络接口

        virtual_router_id 80     #虚拟路由标识,主备相同

        priority 100         #定义优先级,slave设置90

        advert_int 1         #设定master和slave之间同步检查的时间间隔

        nopreempt           #不抢占模式。只在优先级高的机器上设置即可

        authentication {

            auth_type PASS

            auth_pass 1111

        }

        virtual_ipaddress {      #设置虚拟IP,可以设置多个,每行一个

            192.168.1.208/24 dev eth0 #MySQL对外服务的IP,即VIP

        }

    }

    virtual_server 192.168.1.208 3306 {

        delay_loop 2          #每隔2秒查询real server状态

        lb_algo wrr           #lvs 算法

        lb_kinf DR           #LVS模式(Direct Route)

        persistence_timeout 50

        protocol TCP

        real_server 192.168.1.210 3306 {    #监听本机的IP

            weight 1

            notify_down /usr/local/keepalived/bin/mysql.sh

            TCP_CHECK {

            connect_timeout 10       #10秒无响应超时

            bingto 192.168.1.208

            nb_get_retry 3

            delay_before_retry 3

            connect_port 3306

            }

        }

    }

    3.配置slave的keepalived.conf

    vi /etc/keepalived/keepalive.conf

    ! Configuration File for keepalived

    global_defs {

       notification_email {

         root@huangmingming.cn

         741616710@qq.com

       }

       notification_email_from keepalived@localhost

       smtp_server 127.0.0.1

       smtp_connect_timeout 30

       router_id LVS_DEVEL

    }

    vrrp_instance HA_1 {

        state BACKUP           #master和slave都配置为BACKUP

        interface eth0          #指定HA检测的网络接口

        virtual_router_id 80       #虚拟路由标识,主备相同

        priority 90            #定义优先级,slave设置90

        advert_int 1           #设定master和slave之间同步检查的时间间隔

        authentication {

            auth_type PASS

            auth_pass 1111

        }

        virtual_ipaddress {      #设置虚拟IP,可以设置多个,每行一个

            192.168.1.208/24 dev eth0   #MySQL对外服务的IP,即VIP

        }

    }

    virtual_server 192.168.1.208 3306 {

        delay_loop 2

        lb_algo wrr

        lb_kinf DR

        persistence_timeout 50

        protocol TCP

        real_server 192.168.1.211 3306 {    #监听本机的IP

            weight 1

            notify_down /usr/local/mysql/bin/mysql.sh

            TCP_CHECK {

            connect_timeout 10

            bingto 192.168.1.208            

            nb_get_retry 3

            delay_before_retry 3

            connect_port 3306

            }

        }

    }


     mysql高可用验证

    1.停掉VIP对应主机上的mysql

    service mysqld stop

    2.通过VIP连接mysql

    mysql –hVIP  –uroot   –proot@123

    mysql>show variables like ‘%hostname%’

    查看是否为另一台主机名

    相关文章

      网友评论

          本文标题:mysql高可用部署

          本文链接:https://www.haomeiwen.com/subject/vfjtsctx.html