Heim > Datenbank > MySQL-Tutorial > MySQL之双向主从加keepalived高可用

MySQL之双向主从加keepalived高可用

WBOY
Freigeben: 2016-06-07 14:56:04
Original
1095 Leute haben es durchsucht

最近在做MySQL数据库的双向主从,了解到keepalived能够自动判断并切换到可用数据库,自己试了一下,整理出文档来。 先声明一下环境 iptables开启3306端口或者关掉,关闭selinux MySQL-01:192.168.204.138 MySQL-02:192.168.204.139 VIP:192.168.204.200#w

        最近在做MySQL数据库的双向主从,了解到keepalived能够自动判断并切换到可用数据库,自己试了一下,整理出文档来。

        先声明一下环境

        iptables开启3306端口或者关掉,关闭selinux

        MySQL-01:192.168.204.138

        MySQL-02:192.168.204.139

        VIP:192.168.204.200             #web服务器连接的ip,自己可以使用工具连接试一下。

        MySQL的安装过程就略过了,根据个人情况自己安装即可。


1.修改数据库的配置文件/etc/my.cnf:

        1.1修改MySQL-01的数据库文件,在[mysql]下添加如下内容

server_id = 1
log_bin = mysql-bin
Nach dem Login kopieren

1.2修改MySQL-02的数据库文件,在[mysql]下添加如下内容

server_id = 2
log_bin = mysql-bin
Nach dem Login kopieren

2.搭建单向主从

2.1在MySQL-01上

2.1.1操作授权

mysql -u root -p            #输入密码
mysql> grant replication slave on *.* to 'slave'@'192.168.204.139' identified by '123456';
mysql> flush privileges;
Nach dem Login kopieren

2.1.2数据传递给MySQL-02

mysql -u root -p            #输入密码
flush tables with read lock;        #锁表操作
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000012 |      120 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
mysqldump -u root -p --all-databases > mysqldump.sql
mysql -u root -p
mysql> unlock tables;
mysql> quit
    
scp myqsldump.sql 192.168.204.139:/root/
Nach dem Login kopieren

2.2在MySQL-02上操作

2.2.1恢复数据库数据

mysql -u root -p < mysqldump.sql
Nach dem Login kopieren

2.2.2建立主从同步

mysql -u root -p
mysql> change master to master_host='192.168.204.138',master_user='slave',master_password='123456',master_log_file='mysql-bin.000012',master_log_pos=120,master_port=3306;
start slave;
Nach dem Login kopieren

检查是否成功

show slave status\G;
Nach dem Login kopieren
Nach dem Login kopieren
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Nach dem Login kopieren
Nach dem Login kopieren

都为Yes表示同步成功。

注:master_port=3306,默认时不需要加,但是修改过端口的则需要该选项

3.搭建互为主从

3.1在MySQl-01上操作

3.1.1用户授权

mysql -u root -p123456
mysql> grant replication slave on *.* to 'slave'@'192.168.204.138' identified by '123456'; //建立权限
mysql> flush privileges;
Nach dem Login kopieren

注:因为做的是所有库的主从,所以在MySQL-01上的操作会同步到MySQL-02上

注2:假如你是线上环境,主库在不断的写数据,建议锁一下表,最好找个夜深人静的时候做吧

3.2在MySQL-02上的操作

mysql -u root -p
mysql> show master status\G;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000009 |      120 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
Nach dem Login kopieren

3.1.2在MySQL-01上操作授权

mysql> change master to master_host='192.168.204.138',master_user='slave',master_password='123456',master_log_file='mysql-bin.000009',master_log_pos=120;
mysql> start slave;
Nach dem Login kopieren

检查是否成功

show slave status\G;
Nach dem Login kopieren
Nach dem Login kopieren


Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Nach dem Login kopieren
Nach dem Login kopieren

表示成功。

此,mysql的双向主从同步已完成

4.keepalived的搭建

4.1在两台服务器依次做以下操作

a.安装keepalived

wget http://www.keepalived.org/software/keepalived-1.2.15.tar.gz
tar zxvf keepalived-1.2.15.tar.gz
cd keepalived-1.2.15
./configure --prefix=/usr/local/keepalived
make && make install
Nach dem Login kopieren

假如编译过程出现错误,请安装 gcc,openssl,openssl-devel

b.复制相关文件

cp /usr/local/keepalived/etc/rc.d/init.d/keepalived  /etc/init.d/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
mkdir /etc/keepalived/
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
Nach dem Login kopieren

4.2修改配置文件

请先将/etc/keepalived/keepalived.conf文件清空

4.2.1在MySQL-01上操作

将一下内容复制进去

! Configuration File for keepalived  
global_defs {  
    notification_email {  
    sunyuansheng7@gmail.com  
    }  
    notification_email_from sunyuansheng7@gmail.com  
    smtp_server 127.0.0.1  
    smtp_connect_timeout 30  
    router_id MySQL-ha  
}

vrrp_instance VI_1 {
    state master      
    interface eth0
    virtual_router_id 51
    priority 100       
    advert_int 1
    nopreempt         
        
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.204.222
    }
}

virtual_server 192.168.204.222 3306 {
    delay_loop 6
    lb_algo wrr
    lb_kind DR
    persistence_timeout 50        
    protocol TCP
    real_server 192.168.204.138 3306 {
        weight 3
        notify_down /var/lib/mysql/killkeepalived.sh  
        TCP_CHECK {
            connect_timeout 10        
            nb_get_retry 3           
            delay_before_retry 3      
            connect_port 3306        
        }
    }
}
Nach dem Login kopieren

4.2.2在MySQL-02上操作

vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived  
global_defs {  
    notification_email {  
    sunyuansheng7@gmail.com  
    }  
    notification_email_from sunyuansheng7@gmail.com  
    smtp_server 127.0.0.1  
    smtp_connect_timeout 30  
    router_id MySQL-ha  
}

vrrp_instance VI_1 {
    state backup      
    interface eth0
    virtual_router_id 51
    priority 100       
    advert_int 1
    nopreempt         
        
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.204.222
    }
}

virtual_server 192.168.204.222 3306 {
    delay_loop 6
    lb_algo wrr
    lb_kind DR
    persistence_timeout 50        
    protocol TCP
    real_server 192.168.204.139 3306 {
        weight 3
        notify_down /var/lib/mysql/killkeepalived.sh  
        TCP_CHECK {
            connect_timeout 10        
            nb_get_retry 3           
            delay_before_retry 3      
            connect_port 3306        
        }
    }
}
Nach dem Login kopieren

4.3在两台服务器做以下操作

vim /var/lib/mysql/killkeepalived.sh
     
#!/bin/sh  
pkill keepalived
     
chmod +x /var/lib/mysql/killkeepalived.sh
Nach dem Login kopieren

4.4此时先不要启动keepalived,因为我们要观察日志


5.测试是否可用

创建一个新的用户

mysql> grant all privileges on *.* to 'test'@'%' identified by '123456';
mysql> flush privileges;
Nach dem Login kopieren

  5.1在MySQL-01上多开一个终端,tailf /var/log/messages,然后再另一个终端启动keepalived服务service keepalived start。日志信息如下

wKiom1Va82yQAiAkAAYgchBcbco747.jpg

    5.2在MySQL-02同样打开一个新的终端查看日志信息,然后启动keepalived

wKiom1Va9kWjSchKAAhnGfPuAJE019.jpg

5.3在MySQL-01上手动停掉MySQL服务。同时得到日志信息

wKiom1Va99ThHQytAALtbXucftM408.jpg   连接3306端口失败,准备移除虚拟ip,然后停掉keepalived服务。最后虚拟ip地址移除。

   MySQL-02日志信息没啥变化!话说两边启动keepalived的日志信息差不多是一样的。

   此时可以使用连接MySQL的工具测试一下,虚拟ip地址还是可用的。

5.4假设MySQL-01恢复此时还应该启动keepalived服务。


Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage