Mysql + LVS + KeepAlived 主主同步

1、IP地址规划

     msyql-1   192.168.1.219     vip 192.168.1.230

     mysql-2    192.168.1.220    vip 192.168.1.230

2、安装mysql

3、配置mysql的主主同步

     建立mysql同步账户

     # mysql -uroot -pmysqlpassword

     mysql> GRANT ALL privileges ON *.* TO syncsql@'192.168.1.220' IDENTIFIED BY '123456';        mysql-1上执行

     mysql> GRANT ALL privileges ON *.* TO syncsql@'192.168.1.219' IDENTIFIED BY '123456';        mysql-2上执行

     配置my.cnf

     # vi /etc/my.cnf 

     log-bin=mysql-bin

    server-id       = 2   mysql-2上更改,不能和mysql-1重复

    在mysql-2同步mysql-1

    mysql> show master status;       在mysql-1上执行
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
|
mysql-bin.000013 |      106|              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

      

mysql> change master to        在mysql-2上执行
    -> master_host='192.168.1.219',
    -> master_user='syncsql',
    -> master_password='123456',
    -> master_log_file='mysql-bin.000013',
    -> master_log_pos=106;

mysql> start slave;  

mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.1.219
                  Master_User: syncsql
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000013
          Read_Master_Log_Pos: 106
               Relay_Log_File: mysqld-relay-bin.000147
                Relay_Log_Pos: 251
        Relay_Master_Log_File: mysql-bin.000013
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 106
              Relay_Log_Space: 552
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
1 row in set (0.00 sec)


mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000006 |      106 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)


同样在mysql-1上执行同步

mysql> change master to        在mysql-2上执行
    -> master_host='192.168.1.219',
    -> master_user='syncsql',
    -> master_password='123456',
    -> master_log_file='mysql-bin.000006',
    -> master_log_pos=106;

mysql> start slave;  

mysql> show slave status\G

*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.1.220
                  Master_User: syncsql
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000006
          Read_Master_Log_Pos: 106
               Relay_Log_File: mysqld-relay-bin.000160
                Relay_Log_Pos: 251
        Relay_Master_Log_File: mysql-bin.000006
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 106
              Relay_Log_Space: 552
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
1 row in set (0.00 sec)

可以分别在mysql-1和msyql-2上添加一些数据做测试主主是否同步

mysql> grant all privileges on *.* to 'root'@'%' identified by 'mysqlpassword' with grant option;   开启root的远程登录,不然vip地址无法用客户端连接

mysql> flush privileges;

4、安装lvs          mysql-1、mysql-2都需要安装

# yum install kernel-devel

# ln -s /usr/src/kernels/2.6.32-504.23.4.el6.x86_64/ /usr/src/linux

# yum install libnl* libpopt* popt-static

# wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz

# tar zxvf ipvsadm-1.26.tar.gz

# cd ipvsadm-1.26

# make

# make install

5、安装keepalived   mysql-1、mysql-2都需要安装

# wget http://www.keepalived.org/software/keepalived-1.2.19.tar.gz

# tar zxvf keepalived-1.2.19.tar.gz

# cd keepalived-1.2.19

# ./configure --prefix=/usr/local/keepalived

# make

# make install

# cp /usr/local/keepalived/sbin/keepalived /usr/sbin/

# cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/

# cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/

# mkdir /etc/keepalived


6、配置keepalived

# vim /etc/keepalived/keepalived.conf               mysql-1配置

! Configuration File for keepalived


global_defs {
   notification_email {
                 keepalive@163.com
   }
   notification_email_from  keepalived@mysql-1.com
   smtp_server localhost
   smtp_connect_timeout 30
   router_id LVS1
}


vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 180
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.230
    }
}


virtual_server 192.168.1.230 3306 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 20
protocol TCP


    sorry_server 192.168.1.220 3306


    real_server 192.168.1.219 3306 {
        weight 3
        TCP_CHECK {
           connect_timeout 3
           nb_get_retry 3
           delay_before_retry 3
           connect_port 3306
                  }
       }
}                                                           



# vim /etc/keepalived/keepalived.conf    mysql-2  keepalived.conf配置

global_defs {
   notification_email {
   keepalived@163.com
   }
   notification_email_from root@localhost.com
   smtp_server  localhost
   smtp_connect_timeout 30
   router_id LVS1
}


vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 150
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.230
    }
}


virtual_server 192.168.1.230 3306 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 20
    protocol TCP


    sorry_server 192.168.1.220 3306


    real_server 192.168.1.219 3306 {
        weight 3
        TCP_CHECK {
        connect_timeout 3
        nb_get_retry 3
        delay_before_retry 3
        connect_port 3306


        }
    }
}


8、配置realserver     mysql-1 mysql-2都做

# vim /etc/rc.d/init.d/realserver.sh 


#!/bin/bash
# description: Config realserver lo and apply noarp


SNS_VIP=192.168.1.230
/etc/rc.d/init.d/functions
case "$1" in


start)
       ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP
       /sbin/route add -host $SNS_VIP dev lo:0
       echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
       echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
       echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
       echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
       sysctl -p >/dev/null 2>&1
       echo "RealServer Start OK"
       ;;


stop)
       ifconfig lo:0 down
       route del $SNS_VIP >/dev/null 2>&1
       echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
       echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
       echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
       echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
       echo "RealServer Stoped"
       ;;
       *)
       echo "Usage: $0 {start|stop}"
       exit 1
       esac

# chmod 755 /etc/rc.d/init.d/realserver.sh 
# chmod 755 /etc/rc.d/init.d/functions 

9、启动keepalived  和realserver        mysql-1  和mysql-2都做

 # /etc/init.d/keepalived start

# /etc/init.d/realserver.sh start

# chkconfig --add keepalived
# chkconfig keepalived on

# echo "/etc/init.d/realserver.sh start" >>/etc/rc.d/rc.local 

10、验证

# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.1.230:3306 rr persistent 20
  -> 192.168.1.219:3306           Local   3      2          0      


停掉mysql-1上的mysql

# service mysqld stop

# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.1.230:3306 rr persistent 20
  -> 192.168.1.220:3306           Route   1      1          0        

# tail -f /var/log/messages     mysql-1日志
Jul 27 09:48:20 scentos Keepalived_healthcheckers[2472]: TCP connection to [192.168.1.219]:3306 failed !!!
Jul 27 09:48:20 scentos Keepalived_healthcheckers[2472]: Removing service [192.168.1.219]:3306 from VS [192.168.1.230]:3306
Jul 27 09:48:20 scentos Keepalived_healthcheckers[2472]: Lost quorum 1-0=1 > 0 for VS [192.168.1.230]:3306
Jul 27 09:48:20 scentos Keepalived_healthcheckers[2472]: Adding sorry server [192.168.1.220]:3306 to VS [192.168.1.230]:3306
Jul 27 09:48:20 scentos Keepalived_healthcheckers[2472]: Removing alive servers from the pool for VS [192.168.1.230]:3306
Jul 27 09:48:20 scentos Keepalived_healthcheckers[2472]: Remote SMTP server [0.0.0.0]:25 connected.
Jul 27 09:48:40 scentos Keepalived_healthcheckers[2472]: SMTP alert successfully sent.

# tail -f /var/log/messages     mysql-2日志

Jul 27 09:48:31 localhost Keepalived_healthcheckers[2453]: TCP connection to [192.168.1.219]:3306 failed !!!
Jul 27 09:48:31 localhost Keepalived_healthcheckers[2453]: Removing service [192.168.1.219]:3306 from VS [192.168.1.230]:3306
Jul 27 09:48:31 localhost Keepalived_healthcheckers[2453]: Lost quorum 1-0=1 > 0 for VS [192.168.1.230]:3306
Jul 27 09:48:31 localhost Keepalived_healthcheckers[2453]: Adding sorry server [192.168.1.220]:3306 to VS [192.168.1.230]:3306
Jul 27 09:48:31 localhost Keepalived_healthcheckers[2453]: Removing alive servers from the pool for VS [192.168.1.230]:3306
Jul 27 09:48:31 localhost Keepalived_healthcheckers[2453]: Remote SMTP server [0.0.0.0]:25 connected.
Jul 27 09:48:31 localhost Keepalived_healthcheckers[2453]: SMTP alert successfully sent.


# mysql -uroot -p -h 192.168.1.230   连接vip230看是否可以操作数据库









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值