利用lvs+keepalived构建高可用MySQL-HA

    技术2022-05-20  70

    mysql-vip:192.168.15.170 mysql-master1:192.168.15.168 mysql-master2:192.168.15.169

    OS版本:CentOS 5.5 mysql版本:mysql-5.1.53.tar.gz keepalived版本:keepalived-1.2.1.tar.gz ipvsadm版本:ipvsadm-1.24.tar.gz

    在两台机器上分别安装ipvsadm keepalived mysql 安装ipvsadm # uname -r 2.6.18-194.el5 # ln -sv /usr/src/kernels/2.6.18-194.el5-i686/ /usr/src/linux # tar zxvf ipvsadm-1.24.tar.gz # cd ipvsadm-1.24 # make && make install # ipvsadm IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags   -> RemoteAddress:Port           Forward Weight ActiveConn InActConn 检查当前加载的内核模块,是否存在ip_vs模块 # lsmod | grep ip_vs ip_vs                  78081  0

    安装mysql useradd mysql -s /sbin/nologin tar zxvf mysql-5.1.53.tar.gz cd mysql-5.1.53 ./configure --prefix=/usr/local/mysql --localstatedir=/opt/data --with-extra-charsets=utf8,gb2312,gbk --with-pthread --

    enable-thread-safe-client make && make install cp support-files/my-large.cnf /etc/my.cnf cp support-files/mysql.server /etc/rc.d/init.d/mysqld chmod 755 /etc/rc.d/init.d/mysqld chkconfig --add mysqld chkconfig mysqld on cd /usr/local/mysql/ chgrp -R mysql . mkdir /opt/data chown -R mysql:mysql /opt/data /usr/local/mysql/bin/mysql_install_db --user=mysql 修改配置文件 vi /etc/my.cnf 不同的地方就是server-id,主服务器配置文件不用修改,从服务器的配置文件server-id=10.其他的内容基本相同. /usr/local/mysql/bin/mysqld_safe --user=mysql& 设置root 密码 /usr/local/mysql/bin/mysqladmin -u root password "123456"

    将192.168.15.168设为 192.168.15.169的主服务器,在192.168.15.168新建授权用户 #/usr/local/mysql/bin/mysql -uroot -p mysql> grant replication slave on *.* to 'replication'@'%' identified by 'replication'; 得到binlog日志文件名和偏移量 mysql> show master status; +------------------+----------+--------------+------------------+ | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000003 |      244 |              |                  | +------------------+----------+--------------+------------------+ 1 row in set (0.00 sec)

    在192.168.15.169上将192.168.15.168设置为自己的主服务器 #/usr/local/mysql/bin/mysql -uroot –p mysql> change master to

    master_host='192.168.15.168',master_user='replication',master_password='replication',master_log_file=' mysql-bin.000003',master_log_pos=244;

    将192.168.15.169设为 192.168.15.168的主服务器,在192.168.15.168新建授权用户 #/usr/local/mysql/bin/mysql -uroot –p mysql> grant replication slave on *.* to 'replication'@'%' identified by 'replication'; 得到binlog日志文件名和偏移量 mysql> show master status; +------------------+----------+--------------+------------------+ | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000003 |      244 |              |                  | +------------------+----------+--------------+------------------+ 1 row in set (0.00 sec)

    在192.168.15.168上将192.168.15.169设置为自己的主服务器 #/usr/local/mysql/bin/mysql -uroot –p mysql> change master to

    master_host='192.168.15.169',master_user='replication',master_password='replication',master_log_file=' mysql-bin.000003',master_log_pos=244; 启用复制功能(两台机器) mysql> start slave; mysql> show slave status/G *************************** 1. row ***************************                Slave_IO_State: Waiting for master to send event                   Master_Host: 192.168.15.168                   Master_User: replication                   Master_Port: 3306                 Connect_Retry: 60               Master_Log_File: mysql-bin.000003           Read_Master_Log_Pos: 398                Relay_Log_File: mysql2-relay-bin.000002                 Relay_Log_Pos: 405         Relay_Master_Log_File: mysql-bin.000003              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: 398               Relay_Log_Space: 561               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)

    同步测试 在168上的test数据库中创建user表 mysql> use test; mysql> create table user(id int); 在169中查看user表 mysql> use test; mysql> show tables; +----------------+ | Tables_in_test | +----------------+ | user           | +----------------+ 1 row in set (0.00 sec)

    在169上test数据库中常见job表 mysql> create table job(id int); 在168中查看user表 mysql> show tables; +----------------+ | Tables_in_test | +----------------+ | job            | | user           | +----------------+ 2 rows in set (0.00 sec)

    安装keepalived # tar zxvf keepalived-1.2.1.tar.gz # cd keepalived-1.2.1 # ./configure --prefix=/usr/local/keepalived --with-kernel-dir=/usr/src/kernels/2.6.18 -194.el5-i686/ # make && make install

    192.168.15.168上配置keepalived # mkdir /etc/keepalived # vi /etc/keepalived/keepalived.conf ! Configuration File for keepalived  global_defs {        notification_email {        157704487@qq.com       }        notification_email_from 157704487@qq.com        smtp_server 127.0.0.1        smtp_connect_timeout 30        router_id MySQL-ha        }  vrrp_instance VI_1 {        state BACKUP   #两台配置此处均是BACKUP        interface eth0        virtual_router_id 51        priority 100   #优先级,另一台改为90        advert_int 1        nopreempt  #不抢占,只在优先级高的机器上设置即可,优先级低的机器不设置        authentication {        auth_type PASS        auth_pass 1111        }        virtual_ipaddress {        192.168.15.170        }        }  virtual_server 192.168.15.170 3306 {        delay_loop 2   #每个2秒检查一次real_server状态        lb_algo wrr   #LVS算法        lb_kind DR    #LVS模式        persistence_timeout 60   #会话保持时间        protocol TCP        real_server 192.168.15.168 3306 {        weight 3        notify_down /usr/local/MySQL/bin/MySQL.sh  #检测到服务down后执行的脚本        TCP_CHECK {        connect_timeout 10    #连接超时时间        nb_get_retry 3       #重连次数        delay_before_retry 3   #重连间隔时间        connect_port 3306   #健康检查端口        }        } 编写检测服务down后所要执行的脚本 #vi /usr/local/MySQL/bin/MySQL.sh  #!/bin/sh  pkill keepalived  #chmod +x /usr/local/MySQL/bin/MySQL.sh 启动keepalived #/usr/local/keepalived/sbin/keepalived –D #ps -aux | grep keepalived

    192.168.15.169上配置keepalived # mkdir /etc/keepalived # vi /etc/keepalived/keepalived.conf ! Configuration File for keepalived  global_defs {        notification_email {        157704487@qq.com       }        notification_email_from 157704487@qq.com        smtp_server 127.0.0.1        smtp_connect_timeout 30        router_id MySQL-ha        }  vrrp_instance VI_1 {        state BACKUP   #两台配置此处均是BACKUP        interface eth0        virtual_router_id 51        priority 90   #优先级       advert_int 1         authentication {        auth_type PASS        auth_pass 1111        }        virtual_ipaddress {        192.168.15.170        }        }  virtual_server 192.168.15.170 3306 {        delay_loop 2   #每个2秒检查一次real_server状态        lb_algo wrr   #LVS算法        lb_kind DR    #LVS模式        persistence_timeout 60   #会话保持时间        protocol TCP        real_server 192.168.15.169 3306 {        weight 3        notify_down /usr/local/MySQL/bin/MySQL.sh  #检测到服务down后执行的脚本        TCP_CHECK {        connect_timeout 10    #连接超时时间        nb_get_retry 3       #重连次数        delay_before_retry 3   #重连间隔时间        connect_port 3306   #健康检查端口        }        } 编写检测服务down后所要执行的脚本 #vi /usr/local/MySQL/bin/MySQL.sh  #!/bin/sh  pkill keepalived  #chmod +x /usr/local/MySQL/bin/MySQL.sh 启动keepalived #/usr/local/keepalived/sbin/keepalived –D #ps -aux | grep keepalived

    keepalived故障转移测试 在windows 客户端一直ping 192.168.15.170 然后分别关闭192.168.15.168 192.168.15.169 上的keepalived 看是否自动切换 168上tail -n 100 /var/log/messages Feb 24 16:50:30 tomcat2 Keepalived_vrrp: VRRP_Instance(VI_1) Transition to MASTER STATE 169上tail -n 100 /var/log/messages Feb 24 16:32:07 mysql2 Keepalived_vrrp: VRRP_Instance(VI_1) Entering BACKUP STATE

    关闭168上的keepalived pkill keepalived 169上tail -n 100 /var/log/messages Feb 24 16:41:36 mysql2 Keepalived_vrrp: VRRP_Instance(VI_1) Transition to MASTER STATE Feb 24 16:41:37 mysql2 Keepalived_vrrp: VRRP_Instance(VI_1) Entering MASTER STATE

    开启168上的keepalived /usr/local/keepalived/sbin/keepalived -D 168上tail -n 100 /var/log/messages Feb 24 17:02:08 tomcat2 Keepalived_vrrp: VRRP_Instance(VI_1) Entering BACKUP STATE

    关闭169上的keepalived /usr/local/keepalived/sbin/keepalived -D 168上tail -n 100 /var/log/messages Feb 25 10:11:20 tomcat2 Keepalived_vrrp: VRRP_Instance(VI_1) Transition to MASTER STATE Feb 25 10:11:21 tomcat2 Keepalived_vrrp: VRRP_Instance(VI_1) Entering MASTER STATE

    开启169上的keepalived /usr/local/keepalived/sbin/keepalived -D 169上tail -n 100 /var/log/messages Feb 25 10:14:13 mysql2 Keepalived_vrrp: VRRP_Instance(VI_1) Entering BACKUP STATE

    MySQL故障转移测试 在168上关闭mysql服务 /etc/init.d/mysqld stop 168上tail -n 100 /var/log/messages Feb 25 10:15:26 tomcat2 Keepalived_healthcheckers: TCP connection to [192.168.15.168:3306] failed !!! Feb 25 10:15:26 tomcat2 Keepalived_healthcheckers: Removing service [192.168.15.168:3306] from VS [192.168.15.170:3306] 在168上开启mysqlfuw /etc/init.d/mysqld start tail -n 100 /var/log/messages Feb 25 10:18:16 tomcat2 Keepalived_healthcheckers: TCP connection to [192.168.15.168:3306] success. Feb 25 10:18:16 tomcat2 Keepalived_healthcheckers: Adding service [192.168.15.168:3306] to VS [192.168.15.170:3306]

    在169上测试也一样 /etc/init.d/mysqld stop Feb 25 10:20:05 mysql2 Keepalived_healthcheckers: TCP connection to [192.168.15.169:3306] failed !!! Feb 25 10:20:05 mysql2 Keepalived_healthcheckers: Removing service [192.168.15.169:3306] from VS [192.168.15.170:3306] /etc/init.d/mysqld start Feb 25 10:20:37 mysql2 Keepalived_healthcheckers: TCP connection to [192.168.15.169:3306] success. Feb 25 10:20:37 mysql2 Keepalived_healthcheckers: Adding service [192.168.15.169:3306] to VS [192.168.15.170:3306]

    mysql 远程登录测试 在两台服务器上分别执行,授予远程登录

       1. MySQL> grant all privileges on *.* to 'root'@'%' identified by '123456';     2. Query OK, 0 rows affected (0.00 sec)     3.     4. MySQL> flush privileges;     5. Query OK, 0 rows affected (0.00 sec)

    查看远程连接的实际服务是那个

    168上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.15.170:3306 wrr persistent 60   -> 192.168.15.168:3306          Local   3      1          0      

    169上ipvsadm –ln 

    [root@mysql2 ~]# 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.15.170:3306 wrr persistent 60   -> 192.168.15.169:3306          Local   3     0          0        

    相关链接 http://database.51cto.com/art/201012/237204.htm


    最新回复(0)