mysql高可用部署

2019-08-15  本文已影响0人  yinkp001

实现原理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%’

查看是否为另一台主机名

上一篇下一篇

猜你喜欢

热点阅读