部署mysql高可用、读写分离集群

架构图:

部署集群:

    注意:

##Atlas要求mysql版本必须是5.1以上,这里建议安装mysql5.6##mysql5.6软件下载地址: http://pan.baidu.com/s/1bnrzpZh

    主master和备master安装DRBD:

        

    主master和备master安装heartbeat和mysql:

        

    slave1和slave2安装mysql:

##mysql5.6采用cmake安装yum -y install make gcc gcc-c++ cmake bison-devel  ncurses-devel kernel-devel readline-devel openssl-devel openssl zlib zlib-devel pcre-devel perl perl-devel   #安装依赖包cd /usr/local/src/tar -zxf mysql-5.6.22.tar.gzcd mysql-5.6.22mkdir -p /data/mysql/data        #数据目录cmake  -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/data/mysql/data -DSYSCONFDIR=/usr/local/mysql -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1  -DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock  -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci  -DEXTRA_CHARSETS:STRING=utf8,gbk  -DWITH_DEBUG=0make              ##时间会很久make install
groupadd mysqluseradd -s /sbin/nologin -g mysql mysql/usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/data/mysql/data --defaults-file=/usr/local/mysql/my.cnf --user=mysqlchown -R mysql.mysql /data/mysql
##修改配置文件:mv /usr/local/mysql/my.cnf /usr/local/mysql/my.cnf.oldvi /usr/local/mysql/my.cnf[mysqld]basedir = /usr/local/mysqldatadir = /data/mysql/dataport = 3306socket = /var/lib/mysql/mysql.sockpid-file = /var/lib/mysql/mysql.piddefault_storage_engine = InnoDBexpire_logs_days = 14max_binlog_size = 1Gbinlog_cache_size = 10Mmax_binlog_cache_size = 20Mslow_query_loglong_query_time = 2slow_query_log_file = /data/mysql/logs/slowquery.logopen_files_limit = 65535innodb = FORCEinnodb_buffer_pool_size = 4Ginnodb_log_file_size = 1Gquery_cache_size = 0thread_cache_size = 64table_definition_cache = 512table_open_cache = 512max_connections = 1000sort_buffer_size = 10Mmax_allowed_packet = 6Msql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES[mysqld_safe]log-error = /data/mysql/logs/error.log  [client]socket = /var/lib/mysql/mysql.sockport = 3306 ##innodb_buffer_pool_size:    主要作用是缓存innodb表的索引,数据,插入数据时的缓冲;    默认值:128M;    专用mysql服务器设置此值的大小: 系统内存的70%-80%最佳。    如果你的系统内存不大,查看这个参数,把它的值设置小一点吧(若值设置大了,启动会报错)
##启动mysql:cp -a /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqldchkconfig --add mysqldchkconfig mysqld on/etc/init.d/mysqld startnetstat -tlnp | grep mysql     ##查看是否启动 vi /etc/profile         ##修改path路径##在最后添加:export PATH=$PATH:/usr/local/mysql/binsource /etc/profile
##创建mysql密码:mysqladmin -u root password "123456"

    slave1和slave2配置主从复制:

##首先先确认哪台master的drbd是primary状态##
##主master:[root@dbm138 ~]# cat /proc/drbd | grep roversion: 8.3.16 (api:88/proto:86-97) 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----##138是primary
##备master:[root@dbm139 ~]# cat /proc/drbd | grep roversion: 8.3.16 (api:88/proto:86-97) 0: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r-----##139是secondary
##由上确认:主master138的drbd目前是primary##
##主master:##开启二进制文件:vi /usr/local/mysql/my.cnf在[mysqld]下添加:log-bin = /data/mysql/binlog/mysql-binlog      ##二进制文件最好单独放在一个目录下 mkdir /data/mysql/binlog/                   ##创建日志目录chown -R mysql.mysql /data/mysql/etc/init.d/mysqld  restart        ##reload好像不可行
##slave1:vi /usr/local/mysql/my.cnf在[mysqld]下添加:server-id = 2 /etc/init.d/mysqld  restart        ##必须是restart
##slave2:vi /usr/local/mysql/my.cnf在[mysqld]下添加:server-id = 3 /etc/init.d/mysqld  restart        ##必须是restar
##主master:##给每台从库创建一个数据库账号(授权)mysql -uroot -p123456grant replication slave on *.* to 'slave'@'192.168.247.140' identified by '123456';grant replication slave on *.* to 'slave'@'192.168.247.141' identified by '123456';flush privileges;
##主master:##备份数据:mysql -uroot -p123456flush tables with read lock;         #锁表,只读show master status;                  #查看此时的binlog位置和pos值,这个要记录下来+---------------------+----------+--------------+------------------+-------------------+| File                | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |+---------------------+----------+--------------+------------------+-------------------+| mysql-binlog.000010 |      625 |              |                  |                   |+---------------------+----------+--------------+------------------+-------------------+1 row in set (0.03 sec)##打开另外一个终端:mysqldump -u root -p123456 --all-databases > /tmp/mysqldump.sql##回到之前终端:unlock tables;         #解表
##主master:##拷贝数据到所有从库:scp /tmp/mysqldump.sql 192.168.247.140:/tmp/scp /tmp/mysqldump.sql 192.168.247.141:/tmp/
##salve1和slave2:##导入数据:mysql -uroot -p123456 < /tmp/mysqldump.sql ##开始同步:mysql -uroot -p123456 ##注意:这里指定的ip是master端的vip 201##change master to master_host='192.168.247.201',master_user='slave',master_password='123456',master_log_file='mysql-binlog.000010',master_log_pos=625,master_port=3306;start slave;            ##启动slaveshow slave status\G;            ##查看状态,两个YES则正常*************************** 1. row ***************************               Slave_IO_State: Waiting for master to send event                  Master_Host: 192.168.247.201                  Master_User: slave                  Master_Port: 3306                Connect_Retry: 60              Master_Log_File: mysql-binlog.000010          Read_Master_Log_Pos: 625               Relay_Log_File: mysql-relay-bin.000002                Relay_Log_Pos: 286        Relay_Master_Log_File: mysql-binlog.000010             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: 625              Relay_Log_Space: 459              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: 0Master_SSL_Verify_Server_Cert: No                Last_IO_Errno: 0                Last_IO_Error:                Last_SQL_Errno: 0               Last_SQL_Error:   Replicate_Ignore_Server_Ids:              Master_Server_Id: 1                  Master_UUID: 95e83a45-668a-11e5-aa2d-000c299d90cb             Master_Info_File: /data/mysql/data/master.info                    SQL_Delay: 0          SQL_Remaining_Delay: NULL      Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it           Master_Retry_Count: 86400                  Master_Bind:       Last_IO_Error_Timestamp:      Last_SQL_Error_Timestamp:                Master_SSL_Crl:            Master_SSL_Crlpath:            Retrieved_Gtid_Set:             Executed_Gtid_Set:                 Auto_Position: 01 row in set (0.00 sec)ERROR: No query specified

    主从复制测试:

        测试一:master端切换drbd状态(主备切换),查看slave端是否仍正常访问

##此时主master是primary##主master:[root@dbm138 ~]# /etc/init.d/heartbeat restart   ##进行了主备切换
##slave1:[root@localhost ~]# mysql -h 192.168.247.201 -u slave -p123456Warning: Using a password on the command line interface can be insecure.Welcome to the MySQL monitor.  Commands end with ; or \g.Your MySQL connection id is 4Server version: 5.6.22-log Source distributionCopyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql>           ##仍可访问

        测试二:master端进行写操作,查看能否同步到slave端

##此时备master是primary##备master:[root@dbm139 ~]# mysql -p123456Warning: Using a password on the command line interface can be insecure.Welcome to the MySQL monitor.  Commands end with ; or \g.Your MySQL connection id is 5Server version: 5.6.22-log Source distributionCopyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> create database ku1;             ##创建ku1Query OK, 1 row affected (0.05 sec)mysql> show databases;+--------------------+| Database           |+--------------------+| information_schema || ku1                || mysql              || performance_schema || test               |+--------------------+5 rows in set (0.07 sec)
##slave1:mysql -p123456mysql> show databases;+--------------------+| Database           |+--------------------+| information_schema || ku1                || mysql              || performance_schema || test               |+--------------------+5 rows in set (0.06 sec)
##slave2:mysql -p123456mysql> show databases;+--------------------+| Database           |+--------------------+| information_schema || ku1                || mysql              || performance_schema || test               |+--------------------+5 rows in set (0.06 sec)
##正常##

        测试三:master端主备切换后再写入

##此时备master是primary##备master:/etc/init.d/heartbeat  restart                ##主备切换
##此时主master是primary##主master:root@dbm138 ~]# mysql -p123456Warning: Using a password on the command line interface can be insecure.Welcome to the MySQL monitor.  Commands end with ; or \g.Your MySQL connection id is 3Server version: 5.6.22-log Source distributionCopyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> show databases;        ##查看ku1是否存在+--------------------+| Database           |+--------------------+| information_schema || ku1                || mysql              || performance_schema || test               |+--------------------+5 rows in set (0.09 sec)mysql> create database ku2;              ##创建ku2Query OK, 1 row affected (0.06 sec)mysql> show databases;+--------------------+| Database           |+--------------------+| information_schema || ku1                || ku2                || mysql              || performance_schema || test               |+--------------------+6 rows in set (0.00 sec)
##slave1:mysql> show databases;+--------------------+| Database           |+--------------------+| information_schema || ku1                || ku2                || mysql              || performance_schema || test               |+--------------------+6 rows in set (0.00 sec)
##slave2:mysql> show databases;+--------------------+| Database           |+--------------------+| information_schema || ku1                || ku2                || mysql              || performance_schema || test               |+--------------------+6 rows in set (0.00 sec)
##切换后仍可访问,且数据也同步了

    安装Atlas:

        参考:

Atlas是由 Qihoo 360,  Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。    它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基础上,修改了大量bug,添加了很多功能特性。    目前该项目在360公司内部得到了广泛应用,很多MySQL业务已经接入了Atlas平台,每天承载的读写请求数达几十亿条。    主要功能:        a.读写分离        b.从库负载均衡        c.IP过滤        d.SQL语句黑白名单        e.自动分表        f.自动摘除宕机的DB

        首先:所有库服务器对Atlas端创建数据库账号(授权)

            Atlas可以通过这个账号和密码去连接所有的数据库服务器

##此时主master是primary##主master:mysql> GRANT ALL PRIVILEGES ON *.* TO 'Atlas'@'192.168.247.132' identified by 'mysql';Query OK, 0 rows affected (0.00 sec)mysql> GRANT ALL PRIVILEGES ON *.* TO 'Atlas'@'192.168.247.133' identified by 'mysql';Query OK, 0 rows affected (0.00 sec)mysql> GRANT ALL PRIVILEGES ON *.* TO 'Atlas'@'192.168.247.200' identified by 'mysql';Query OK, 0 rows affected (0.00 sec)##正常只对vip 247.200授权就可以了,不过为了可能出现的问题,这里对Atlas的真实ip也授权了
##slave1:mysql> GRANT ALL PRIVILEGES ON *.* TO 'Atlas'@'192.168.247.132' identified by 'mysql';Query OK, 0 rows affected (0.00 sec)mysql> GRANT ALL PRIVILEGES ON *.* TO 'Atlas'@'192.168.247.133' identified by 'mysql';Query OK, 0 rows affected (0.00 sec)mysql> GRANT ALL PRIVILEGES ON *.* TO 'Atlas'@'192.168.247.200' identified by 'mysql';Query OK, 0 rows affected (0.00 sec)
##slave2:mysql> GRANT ALL PRIVILEGES ON *.* TO 'Atlas'@'192.168.247.132' identified by 'mysql';Query OK, 0 rows affected (0.00 sec)mysql> GRANT ALL PRIVILEGES ON *.* TO 'Atlas'@'192.168.247.133' identified by 'mysql';Query OK, 0 rows affected (0.00 sec)mysql> GRANT ALL PRIVILEGES ON *.* TO 'Atlas'@'192.168.247.200' identified by 'mysql';Query OK, 0 rows affected (0.00 sec)

        安装Atlas:(Atlas主,Atlas备)

            软件下载地址:

cd /usr/local/src/rpm -ivh Atlas-2.2.1.el6.x86_64.rpm[root@localhost src]# rpm -ql Atlas | grep conf/usr/local/mysql-proxy/conf/test.cnf/usr/local/mysql-proxy/lib/mysql-proxy/lua/proxy/auto-config.lua##Atlas的配置文件:/usr/local/mysql-proxy/conf/test.cnf
##对Atlas的密码mysql进行加密(上面所有库的授权用户)/usr/local/mysql-proxy/bin/encrypt mysqlTWbz0dlu35U=            ##加密后的密码##修改配置文件:mv /usr/local/mysql-proxy/conf/test.cnf /usr/local/mysql-proxy/conf/test.cnf.oldvi /usr/local/mysql-proxy/conf/test.cnf[mysql-proxy]plugins = admin,proxy    #默认插件不用修改admin-username=admin     #Atlas管理员用户admin-password=admin     #Atlas管理员密码admin-lua-script = /usr/local/mysql-proxy/lib/mysql-proxy/lua/admin.luaproxy-backend-addresses = 192.168.247.201:3306    #主库的IP及端口,这里是vip 201proxy-read-only-backend-addresses = 192.168.247.140:3306,192.168.247.141:3306   #从库的IP及端口#proxy-read-only-backend-addresses = 192.168.247.140:3306@1,192.168.247.141:3306@2   ##权重为1和2pwds = Atlas:TWbz0dlu35U=, root:08xYdWX+7MBR/g==    #Atlas用户与其对应的加密过的密码,逗号分隔多个daemon = true     #设置Atlas的运行方式,线上运行时设为truekeepalive = true#设置Atlas的运行方式,设为true时Atlas会启动两个进程,一个为monitor,一个为worker,monitor在worker意外退出后会自动将其重启,设为false时只有worker,没有monitor,一般开发调试时设为false,线上运行时设为trueevent-threads = 4   #工作线程数,对Atlas的性能有很大影响,系统的CPU核数的2至4倍log-level = message   #日志级别,分为message、warning、critical、error、debug五个级别log-path = /usr/local/mysql-proxy/log   #日志路径instance = test   #实例的名称proxy-address = 0.0.0.0:3306   #Atlas监听的工作接口IP和端口,客户端连接端口admin-address = 0.0.0.0:2345   #Atlas监听的管理接口IP和端口charset = utf8   #默认字符集##注意:Atlas配置文件中不要出现汉字注释,否则启动会有问题##[mysql-proxy]plugins = admin,proxyadmin-username=adminadmin-password=adminadmin-lua-script = /usr/local/mysql-proxy/lib/mysql-proxy/lua/admin.luaproxy-backend-addresses = 192.168.247.201:3306proxy-read-only-backend-addresses = 192.168.247.140:3306,192.168.247.141:3306pwds = Atlas:TWbz0dlu35U=daemon = truekeepalive = trueevent-threads = 4log-level = messagelog-path = /usr/local/mysql-proxy/loginstance = testproxy-address = 0.0.0.0:3306admin-address = 0.0.0.0:2345charset = utf8

        启动Atlas:(Atlas主,Atlas备)

[root@localhost src]# /usr/local/mysql-proxy/bin/mysql-proxyd test startOK: MySQL-Proxy of test is started[root@localhost src]# netstat -tlnp | grep 3306tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      1594/mysql-proxy    [root@localhost src]# netstat -tlnp | grep 2345tcp        0      0 0.0.0.0:2345                0.0.0.0:*                   LISTEN      1594/mysql-proxy ##关闭Atlas:/usr/local/mysql-proxy/bin/mysql-proxyd test stop##重启:/usr/local/mysql-proxy/bin/mysql-proxyd test restart
##创建启动脚本:vi /etc/init.d/atlas#!/bin/sh##atlas:    Atlas Daemon## chkconfig:    - 90 25# description:  Atlas Daemon## Source function library.start(){        echo -n $"Starting atlas: "        /usr/local/mysql-proxy/bin/mysql-proxyd test start        echo}stop(){        echo -n $"Shutting down atlas: "        /usr/local/mysql-proxy/bin/mysql-proxyd test stop        echo}ATLAS="/usr/local/mysql-proxy/bin/mysql-proxyd"[ -f $ATLAS ] || exit 1# See how we were called.case "$1" in        start)                start                ;;        stop)                stop                ;;        restart)                stop                sleep 3                start                ;;        *)                echo $"Usage: $0 {start|stop|restart}"                exit 1esacexit 0chmod +x /etc/init.d/atlaschkconfig atlas on

        管理Atlas:(Atlas主)

##随便选择一台Atlas,这里选择Atlas主##
##随便找一台数据库服务器,如:slave1##slave1:mysql -h192.168.247.132 -P2345 -uadmin -padmin           ##登录Atlas主的管理界面##Atlas主的ip 132,管理端口2345,账号admin mysql> select * from help;         ##查看帮助+----------------------------+---------------------------------------------------------+| command                    | description                                             |+----------------------------+---------------------------------------------------------+| SELECT * FROM help         | shows this help                                         || SELECT * FROM backends     | lists the backends and their state                      || SET OFFLINE $backend_id    | offline backend server, $backend_id is backend_ndx's id || SET ONLINE $backend_id     | online backend server, ...                              || ADD MASTER $backend        | example: "add master 127.0.0.1:3306", ...               || ADD SLAVE $backend         | example: "add slave 127.0.0.1:3306", ...                || REMOVE BACKEND $backend_id | example: "remove backend 1", ...                        || SELECT * FROM clients      | lists the clients                                       || ADD CLIENT $client         | example: "add client 192.168.1.2", ...                  || REMOVE CLIENT $client      | example: "remove client 192.168.1.2", ...               || SELECT * FROM pwds         | lists the pwds                                          || ADD PWD $pwd               | example: "add pwd user:raw_password", ...               || ADD ENPWD $pwd             | example: "add enpwd user:encrypted_password", ...       || REMOVE PWD $pwd            | example: "remove pwd user", ...                         || SAVE CONFIG                | save the backends to config file                        || SELECT VERSION             | display the version of Atlas                            |+----------------------------+---------------------------------------------------------+16 rows in set (0.00 sec)mysql> SELECT * FROM backends;       ##查看读写数据库ip,端口+-------------+----------------------+-------+------+| backend_ndx | address              | state | type |+-------------+----------------------+-------+------+|           1 | 192.168.247.201:3306 | up    | rw   ||           2 | 192.168.247.140:3306 | up    | ro   ||           3 | 192.168.247.141:3306 | up    | ro   |+-------------+----------------------+-------+------+

        通过Atlas作为代理真正去管理所有的数据库:

##这里仍以Atlas主和slave1作为测试####slave1:mysql -h192.168.247.132 -P3306 -uAtlas -pmysql         ##Atlas主的ip 132,代理端口3306,账号Atlasmysql> SHOW VARIABLES LIKE 'server_id';+---------------+-------+| Variable_name | Value |+---------------+-------+| server_id     | 3     |+---------------+-------+1 row in set (0.01 sec)mysql> SHOW VARIABLES LIKE 'server_id';+---------------+-------+| Variable_name | Value |+---------------+-------+| server_id     | 2     |+---------------+-------+1 row in set (0.01 sec)mysql> SHOW VARIABLES LIKE 'server_id';+---------------+-------+| Variable_name | Value |+---------------+-------+| server_id     | 3     |+---------------+-------+1 row in set (0.00 sec)mysql> SHOW VARIABLES LIKE 'server_id';+---------------+-------+| Variable_name | Value |+---------------+-------+| server_id     | 2     |+---------------+-------+1 row in set (0.00 sec)##SHOW VARIABLES LIKE 'server_id';    会轮训获取每台读数据库的server-idmysql> create database ku3;Query OK, 1 row affected (0.01 sec)mysql> show databases;+--------------------+| Database           |+--------------------+| information_schema || ku1                || ku2                || ku3                || mysql              || performance_schema || test               |+--------------------+7 rows in set (0.00 sec)##写操作也正常

    安装keepalived实现Atlas高可用:

        参考:

             

        (Atlas主,Atlas备)

##安装依赖包:yum -y install make gcc gcc-c++ bison-devel  ncurses-devel kernel-devel readline-devel pcre-devel openssl-devel openssl zlib zlib-devel pcre-devel perl perl-devel##安装keepalived:cd /usr/local/src/wget http://www.keepalived.org/software/keepalived-1.2.15.tar.gztar -zxf keepalived-1.2.15.tar.gzcd keepalived-1.2.15./configure --prefix=/usr/local/keepalivedmakemake install ##拷贝文件:cp -a /usr/local/keepalived/etc/rc.d/init.d/keepalived  /etc/init.d/cp -a /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/mkdir /etc/keepalived/cp -a /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/cp -a /usr/local/keepalived/sbin/keepalived /usr/sbin/ ##注意: /etc/sysconfig/keepalived 和 /etc/keepalived/keepalived.conf 的路径一定要正确,##因为在执行/etc/init.d/keepalived这个启动脚本时,会读取/etc/sysconfig/keepalived 和 /etc/keepalived/keepalived.conf 这两个文件

        (Atlas主)

##修改配置:mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.oldvi /etc/keepalived/keepalived.conf! Configuration File for keepalivedglobal_defs {    notification_email {      732233048@qq.com    }    notification_email_from root@localhost    smtp_server 127.0.0.1    smtp_connect_timeout 30    router_id Atlas_ha} vrrp_instance VI_1 {    state master    interface eth0    virtual_router_id 51    priority 150    advert_int 1    nopreempt     authentication {        auth_type PASS        auth_pass 1111    }    virtual_ipaddress {        192.168.247.200    }} virtual_server 192.168.247.200 3306 {    delay_loop 6    #lb_algo wrr    #lb_kind DR    #persistence_timeout 50    protocol TCP    real_server 192.168.247.132 3306 {        #weight 3        notify_down /etc/keepalived/keepalived_monitor.sh        TCP_CHECK {            connect_timeout 10            nb_get_retry 3            delay_before_retry 3            connect_port 3306        }    }}

        (Atlas备)

##修改配置:mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.oldvi /etc/keepalived/keepalived.conf! Configuration File for keepalivedglobal_defs {    notification_email {      732233048@qq.com    }    notification_email_from root@localhost    smtp_server 127.0.0.1    smtp_connect_timeout 30    router_id Atlas_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.247.200    }} virtual_server 192.168.247.200 3306 {    delay_loop 6    #lb_algo wrr    #lb_kind DR    #persistence_timeout 50    protocol TCP    real_server 192.168.247.133 3306 {        #weight 3        notify_down /etc/keepalived/keepalived_monitor.sh        TCP_CHECK {            connect_timeout 10            nb_get_retry 3            delay_before_retry 3            connect_port 3306        }    }}

        (Atlas主,Atlas备)

##创建/etc/keepalived/keepalived_monitor.sh脚本:vi /etc/keepalived/keepalived_monitor.sh#!/bin/bash# check Atlas server statusAtlas_status=`netstat -tlnp  | grep 0.0.0.0:3306 | grep LISTEN | wc -l`if [ $Atlas_status -eq 0 ];then  /etc/init.d/atlas start  sleep 1  Atlas_status=`netstat -tlnp  | grep 0.0.0.0:3306 | grep LISTEN | wc -l`  if [ $Atlas_status -eq 0 ];then    /etc/init.d/keepalived stop  fifi
chmod 755 /etc/keepalived/keepalived_monitor.sh

        (Atlas主,Atlas备)

##修改keepalived的日志文件##       参考:http://chenwenming.blog.51cto.com/327092/745316       说明:       centos6.3之后的syslog改名叫rsyslog了,默认在 /etc/rsyslog.conf
##修改/etc/sysconfig/keepalived:vi /etc/sysconfig/keepalived# Options for keepalived. See `keepalived --help' output and keepalived(8) and# keepalived.conf(5) man pages for a list of all options. Here are the most# common ones :## --vrrp               -P    Only run with VRRP subsystem.# --check              -C    Only run with Health-checker subsystem.# --dont-release-vrrp  -V    Dont remove VRRP VIPs & VROUTEs on daemon stop.# --dont-release-ipvs  -I    Dont remove IPVS topology on daemon stop.# --dump-conf          -d    Dump the configuration data.# --log-detail         -D    Detailed log messages.# --log-facility       -S    0-7 Set local syslog facility (default=LOG_DAEMON)# #KEEPALIVED_OPTIONS="-D"KEEPALIVED_OPTIONS="-D -d -S 0"               ##在最后添加此行 ##修改/etc/rsyslog.conf:vi /etc/rsyslog.conf##在最后添加此行:local0.*                                                /var/log/keepalived.log ## /etc/init.d/rsyslog restartShutting down system logger:                               [  OK  ]Starting system logger:                                    [  OK  ]

        (Atlas主)

##启动keepalived:/etc/init.d/keepalived start
Sep 29 10:58:12 localhost Keepalived[3544]: Starting Keepalived v1.2.15 (09/29,2015)Sep 29 10:58:12 localhost Keepalived[3545]: Starting Healthcheck child process, pid=3547Sep 29 10:58:12 localhost Keepalived[3545]: Starting VRRP child process, pid=3548Sep 29 10:58:12 localhost Keepalived_vrrp[3548]: Netlink reflector reports IP 192.168.247.132 addedSep 29 10:58:12 localhost Keepalived_healthcheckers[3547]: Initializing ipvs 2.6Sep 29 10:58:12 localhost Keepalived_vrrp[3548]: Netlink reflector reports IP fe80::20c:29ff:fe5c:722c addedSep 29 10:58:12 localhost Keepalived_vrrp[3548]: Registering Kernel netlink reflectorSep 29 10:58:12 localhost Keepalived_vrrp[3548]: Registering Kernel netlink command channelSep 29 10:58:12 localhost Keepalived_vrrp[3548]: Registering gratuitous ARP shared channelSep 29 10:58:12 localhost Keepalived_vrrp[3548]: Opening file '/etc/keepalived/keepalived.conf'.Sep 29 10:58:12 localhost Keepalived_vrrp[3548]: Configuration is using : 63286 BytesSep 29 10:58:12 localhost Keepalived_vrrp[3548]: ------< Global definitions >------Sep 29 10:58:12 localhost Keepalived_vrrp[3548]:  Router ID = Atlas_haSep 29 10:58:12 localhost Keepalived_vrrp[3548]:  Smtp server = 127.0.0.1Sep 29 10:58:12 localhost Keepalived_vrrp[3548]:  Smtp server connection timeout = 30Sep 29 10:58:12 localhost Keepalived_vrrp[3548]:  Email notification from = root@localhostSep 29 10:58:12 localhost Keepalived_vrrp[3548]:  Email notification = 732233048@qq.comSep 29 10:58:12 localhost Keepalived_vrrp[3548]:  VRRP IPv4 mcast group = 224.0.0.18Sep 29 10:58:12 localhost Keepalived_vrrp[3548]:  VRRP IPv6 mcast group = 224.0.0.18Sep 29 10:58:12 localhost Keepalived_vrrp[3548]: ------< VRRP Topology >------Sep 29 10:58:12 localhost Keepalived_vrrp[3548]:  VRRP Instance = VI_1Sep 29 10:58:12 localhost Keepalived_vrrp[3548]:    Want State = BACKUPSep 29 10:58:12 localhost Keepalived_vrrp[3548]:    Runing on device = eth0Sep 29 10:58:12 localhost Keepalived_vrrp[3548]:    Gratuitous ARP repeat = 5Sep 29 10:58:12 localhost Keepalived_vrrp[3548]:    Gratuitous ARP refresh repeat = 1Sep 29 10:58:12 localhost Keepalived_vrrp[3548]:    Virtual Router ID = 51Sep 29 10:58:12 localhost Keepalived_vrrp[3548]:    Priority = 150Sep 29 10:58:12 localhost Keepalived_vrrp[3548]:    Advert interval = 1secSep 29 10:58:12 localhost Keepalived_vrrp[3548]:    Preempt disabledSep 29 10:58:12 localhost Keepalived_vrrp[3548]:    Authentication type = SIMPLE_PASSWORDSep 29 10:58:12 localhost Keepalived_vrrp[3548]:    Password = 1111Sep 29 10:58:12 localhost Keepalived_vrrp[3548]:    Virtual IP = 1Sep 29 10:58:12 localhost Keepalived_vrrp[3548]:      192.168.247.200/32 dev eth0 scope globalSep 29 10:58:12 localhost Keepalived_vrrp[3548]: Using LinkWatch kernel netlink reflector...Sep 29 10:58:12 localhost Keepalived_vrrp[3548]: VRRP_Instance(VI_1) Entering BACKUP STATESep 29 10:58:12 localhost Keepalived_vrrp[3548]: VRRP sockpool: [ifindex(2), proto(112), unicast(0), fd(10,11)]Sep 29 10:58:12 localhost Keepalived_healthcheckers[3547]: Netlink reflector reports IP 192.168.247.132 addedSep 29 10:58:12 localhost Keepalived_healthcheckers[3547]: Netlink reflector reports IP fe80::20c:29ff:fe5c:722c addedSep 29 10:58:12 localhost Keepalived_healthcheckers[3547]: Registering Kernel netlink reflectorSep 29 10:58:12 localhost Keepalived_healthcheckers[3547]: Registering Kernel netlink command channelSep 29 10:58:12 localhost Keepalived_healthcheckers[3547]: Opening file '/etc/keepalived/keepalived.conf'.Sep 29 10:58:12 localhost Keepalived_healthcheckers[3547]: Configuration is using : 11723 BytesSep 29 10:58:12 localhost Keepalived_healthcheckers[3547]: IPVS: Scheduler or persistence engine not foundSep 29 10:58:12 localhost Keepalived_healthcheckers[3547]: IPVS: No such processSep 29 10:58:12 localhost Keepalived_healthcheckers[3547]: ------< Global definitions >------Sep 29 10:58:12 localhost Keepalived_healthcheckers[3547]:  Router ID = Atlas_haSep 29 10:58:12 localhost Keepalived_healthcheckers[3547]:  Smtp server = 127.0.0.1Sep 29 10:58:12 localhost Keepalived_healthcheckers[3547]:  Smtp server connection timeout = 30Sep 29 10:58:12 localhost Keepalived_healthcheckers[3547]:  Email notification from = root@localhostSep 29 10:58:12 localhost Keepalived_healthcheckers[3547]:  Email notification = 732233048@qq.comSep 29 10:58:12 localhost Keepalived_healthcheckers[3547]:  VRRP IPv4 mcast group = 224.0.0.18Sep 29 10:58:12 localhost Keepalived_healthcheckers[3547]:  VRRP IPv6 mcast group = 224.0.0.18Sep 29 10:58:12 localhost Keepalived_healthcheckers[3547]: ------< SSL definitions >------Sep 29 10:58:12 localhost Keepalived_healthcheckers[3547]:  Using autogen SSL contextSep 29 10:58:12 localhost Keepalived_healthcheckers[3547]: ------< LVS Topology >------Sep 29 10:58:12 localhost Keepalived_healthcheckers[3547]:  System is compiled with LVS v1.2.1Sep 29 10:58:12 localhost Keepalived_healthcheckers[3547]:  VIP = 192.168.247.200, VPORT = 3306Sep 29 10:58:12 localhost Keepalived_healthcheckers[3547]:    delay_loop = 6, lb_algo = Sep 29 10:58:12 localhost Keepalived_healthcheckers[3547]:    protocol = TCPSep 29 10:58:12 localhost Keepalived_healthcheckers[3547]:    alpha is OFF, omega is OFFSep 29 10:58:12 localhost Keepalived_healthcheckers[3547]:    quorum = 1, hysteresis = 0Sep 29 10:58:12 localhost Keepalived_healthcheckers[3547]:    lb_kind = NATSep 29 10:58:12 localhost Keepalived_healthcheckers[3547]:    RIP = 192.168.247.132, RPORT = 3306, WEIGHT = 1Sep 29 10:58:12 localhost Keepalived_healthcheckers[3547]:      -> Notify script DOWN = /etc/keepalived/keepalived_monitor.shSep 29 10:58:12 localhost Keepalived_healthcheckers[3547]: ------< Health checkers >------Sep 29 10:58:12 localhost Keepalived_healthcheckers[3547]:  [192.168.247.132]:3306Sep 29 10:58:12 localhost Keepalived_healthcheckers[3547]:    Keepalive method = TCP_CHECKSep 29 10:58:12 localhost Keepalived_healthcheckers[3547]:    Connection dest = [192.168.247.132]:3306Sep 29 10:58:12 localhost Keepalived_healthcheckers[3547]:    Connection timeout = 10Sep 29 10:58:12 localhost Keepalived_healthcheckers[3547]: Using LinkWatch kernel netlink reflector...Sep 29 10:58:12 localhost Keepalived_healthcheckers[3547]: Activating healthchecker for service [192.168.247.132]:3306Sep 29 10:58:15 localhost Keepalived_vrrp[3548]: VRRP_Instance(VI_1) Transition to MASTER STATESep 29 10:58:16 localhost Keepalived_vrrp[3548]: VRRP_Instance(VI_1) Entering MASTER STATESep 29 10:58:16 localhost Keepalived_vrrp[3548]: VRRP_Instance(VI_1) setting protocol VIPs.Sep 29 10:58:16 localhost Keepalived_vrrp[3548]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.247.200Sep 29 10:58:16 localhost Keepalived_healthcheckers[3547]: Netlink reflector reports IP 192.168.247.200 addedSep 29 10:58:21 localhost Keepalived_vrrp[3548]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.247.200##进入master状态##绑定vip 200##检测ip 132##设置开机自动启动chkconfig keepalived on

        (Atlas备)

##启动:/etc/init.d/keepalived start
Sep 29 11:01:55 localhost Keepalived[3274]: Starting Keepalived v1.2.15 (09/29,2015)Sep 29 11:01:55 localhost Keepalived[3275]: Starting Healthcheck child process, pid=3277Sep 29 11:01:55 localhost Keepalived[3275]: Starting VRRP child process, pid=3278Sep 29 11:01:55 localhost Keepalived_healthcheckers[3277]: Initializing ipvs 2.6Sep 29 11:01:55 localhost Keepalived_vrrp[3278]: Netlink reflector reports IP 192.168.247.133 addedSep 29 11:01:55 localhost Keepalived_vrrp[3278]: Netlink reflector reports IP fe80::20c:29ff:fe01:3824 addedSep 29 11:01:55 localhost Keepalived_healthcheckers[3277]: Netlink reflector reports IP 192.168.247.133 addedSep 29 11:01:55 localhost Keepalived_vrrp[3278]: Registering Kernel netlink reflectorSep 29 11:01:55 localhost Keepalived_vrrp[3278]: Registering Kernel netlink command channelSep 29 11:01:55 localhost Keepalived_vrrp[3278]: Registering gratuitous ARP shared channelSep 29 11:01:55 localhost Keepalived_vrrp[3278]: Opening file '/etc/keepalived/keepalived.conf'.Sep 29 11:01:55 localhost Keepalived_healthcheckers[3277]: Netlink reflector reports IP fe80::20c:29ff:fe01:3824 addedSep 29 11:01:55 localhost Keepalived_healthcheckers[3277]: Registering Kernel netlink reflectorSep 29 11:01:55 localhost Keepalived_healthcheckers[3277]: Registering Kernel netlink command channelSep 29 11:01:55 localhost Keepalived_healthcheckers[3277]: Opening file '/etc/keepalived/keepalived.conf'.Sep 29 11:01:55 localhost Keepalived_vrrp[3278]: Configuration is using : 63266 BytesSep 29 11:01:55 localhost Keepalived_vrrp[3278]: ------< Global definitions >------Sep 29 11:01:55 localhost Keepalived_vrrp[3278]:  Router ID = Atlas_haSep 29 11:01:55 localhost Keepalived_vrrp[3278]:  Smtp server = 127.0.0.1Sep 29 11:01:55 localhost Keepalived_vrrp[3278]:  Smtp server connection timeout = 30Sep 29 11:01:55 localhost Keepalived_vrrp[3278]:  Email notification from = root@localhostSep 29 11:01:55 localhost Keepalived_vrrp[3278]:  Email notification = 732233048@qq.comSep 29 11:01:55 localhost Keepalived_vrrp[3278]:  VRRP IPv4 mcast group = 224.0.0.18Sep 29 11:01:55 localhost Keepalived_vrrp[3278]:  VRRP IPv6 mcast group = 224.0.0.18Sep 29 11:01:55 localhost Keepalived_vrrp[3278]: ------< VRRP Topology >------Sep 29 11:01:55 localhost Keepalived_vrrp[3278]:  VRRP Instance = VI_1Sep 29 11:01:55 localhost Keepalived_vrrp[3278]:    Want State = BACKUPSep 29 11:01:55 localhost Keepalived_vrrp[3278]:    Runing on device = eth0Sep 29 11:01:55 localhost Keepalived_vrrp[3278]:    Gratuitous ARP repeat = 5Sep 29 11:01:55 localhost Keepalived_vrrp[3278]:    Gratuitous ARP refresh repeat = 1Sep 29 11:01:55 localhost Keepalived_vrrp[3278]:    Virtual Router ID = 51Sep 29 11:01:55 localhost Keepalived_vrrp[3278]:    Priority = 100Sep 29 11:01:55 localhost Keepalived_vrrp[3278]:    Advert interval = 1secSep 29 11:01:55 localhost Keepalived_vrrp[3278]:    Authentication type = SIMPLE_PASSWORDSep 29 11:01:55 localhost Keepalived_vrrp[3278]:    Password = 1111Sep 29 11:01:55 localhost Keepalived_vrrp[3278]:    Virtual IP = 1Sep 29 11:01:55 localhost Keepalived_vrrp[3278]:      192.168.247.200/32 dev eth0 scope globalSep 29 11:01:55 localhost Keepalived_vrrp[3278]: Using LinkWatch kernel netlink reflector...Sep 29 11:01:55 localhost Keepalived_healthcheckers[3277]: Configuration is using : 11703 BytesSep 29 11:01:55 localhost Keepalived_vrrp[3278]: VRRP_Instance(VI_1) Entering BACKUP STATESep 29 11:01:55 localhost Keepalived_vrrp[3278]: VRRP sockpool: [ifindex(2), proto(112), unicast(0), fd(10,11)]Sep 29 11:01:55 localhost Keepalived_healthcheckers[3277]: IPVS: Scheduler or persistence engine not foundSep 29 11:01:55 localhost Keepalived_healthcheckers[3277]: IPVS: No such processSep 29 11:01:55 localhost Keepalived_healthcheckers[3277]: ------< Global definitions >------Sep 29 11:01:55 localhost Keepalived_healthcheckers[3277]:  Router ID = Atlas_haSep 29 11:01:55 localhost Keepalived_healthcheckers[3277]:  Smtp server = 127.0.0.1Sep 29 11:01:55 localhost Keepalived_healthcheckers[3277]:  Smtp server connection timeout = 30Sep 29 11:01:55 localhost Keepalived_healthcheckers[3277]:  Email notification from = root@localhostSep 29 11:01:55 localhost Keepalived_healthcheckers[3277]:  Email notification = 732233048@qq.comSep 29 11:01:55 localhost Keepalived_healthcheckers[3277]:  VRRP IPv4 mcast group = 224.0.0.18Sep 29 11:01:55 localhost Keepalived_healthcheckers[3277]:  VRRP IPv6 mcast group = 224.0.0.18Sep 29 11:01:55 localhost Keepalived_healthcheckers[3277]: ------< SSL definitions >------Sep 29 11:01:55 localhost Keepalived_healthcheckers[3277]:  Using autogen SSL contextSep 29 11:01:55 localhost Keepalived_healthcheckers[3277]: ------< LVS Topology >------Sep 29 11:01:55 localhost Keepalived_healthcheckers[3277]:  System is compiled with LVS v1.2.1Sep 29 11:01:55 localhost Keepalived_healthcheckers[3277]:  VIP = 192.168.247.200, VPORT = 3306Sep 29 11:01:55 localhost Keepalived_healthcheckers[3277]:    delay_loop = 6, lb_algo = Sep 29 11:01:55 localhost Keepalived_healthcheckers[3277]:    protocol = TCPSep 29 11:01:55 localhost Keepalived_healthcheckers[3277]:    alpha is OFF, omega is OFFSep 29 11:01:55 localhost Keepalived_healthcheckers[3277]:    quorum = 1, hysteresis = 0Sep 29 11:01:55 localhost Keepalived_healthcheckers[3277]:    lb_kind = NATSep 29 11:01:55 localhost Keepalived_healthcheckers[3277]:    RIP = 192.168.247.133, RPORT = 3306, WEIGHT = 1Sep 29 11:01:55 localhost Keepalived_healthcheckers[3277]:      -> Notify script DOWN = /etc/keepalived/keepalived_monitor.shSep 29 11:01:55 localhost Keepalived_healthcheckers[3277]: ------< Health checkers >------Sep 29 11:01:55 localhost Keepalived_healthcheckers[3277]:  [192.168.247.133]:3306Sep 29 11:01:55 localhost Keepalived_healthcheckers[3277]:    Keepalive method = TCP_CHECKSep 29 11:01:55 localhost Keepalived_healthcheckers[3277]:    Connection dest = [192.168.247.133]:3306Sep 29 11:01:55 localhost Keepalived_healthcheckers[3277]:    Connection timeout = 10Sep 29 11:01:55 localhost Keepalived_healthcheckers[3277]: Using LinkWatch kernel netlink reflector...Sep 29 11:01:55 localhost Keepalived_healthcheckers[3277]: Activating healthchecker for service [192.168.247.133]:3306##进入backup状态##检测ip 133

        查看vip绑定在哪台机器上:

            (Atlas主)

# ip addr1: lo: 
 mtu 16436 qdisc noqueue state UNKNOWN     link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00    inet 127.0.0.1/8 scope host lo    inet6 ::1/128 scope host        valid_lft forever preferred_lft forever2: eth0: 
 mtu 1500 qdisc pfifo_fast state UP qlen 1000    link/ether 00:0c:29:5c:72:2c brd ff:ff:ff:ff:ff:ff    inet 192.168.247.132/24 brd 192.168.247.255 scope global eth0    inet 192.168.247.200/32 scope global eth0    inet6 fe80::20c:29ff:fe5c:722c/64 scope link        valid_lft forever preferred_lft forever       ##vip 200绑定在Atlas主##设置开机自动启动chkconfig keepalived on

            (Atlas备)

# ip addr1: lo: 
 mtu 16436 qdisc noqueue state UNKNOWN     link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00    inet 127.0.0.1/8 scope host lo    inet6 ::1/128 scope host        valid_lft forever preferred_lft forever2: eth0: 
 mtu 1500 qdisc pfifo_fast state UP qlen 1000    link/ether 00:0c:29:01:38:24 brd ff:ff:ff:ff:ff:ff    inet 192.168.247.133/24 brd 192.168.247.255 scope global eth0    inet6 fe80::20c:29ff:fe01:3824/64 scope link        valid_lft forever preferred_lft forever

        Atlas主备之间测试:

            测试一:把Atlas主的Atlas服务stop掉

##Atlas主:/etc/init.d/atlas stop##查看日志:Sep 29 11:06:42 localhost Keepalived_healthcheckers[3547]: TCP connection to [192.168.247.132]:3306 failed !!!Sep 29 11:06:42 localhost Keepalived_healthcheckers[3547]: Removing service [192.168.247.132]:3306 from VS [192.168.247.200]:3306Sep 29 11:06:42 localhost Keepalived_healthcheckers[3547]: IPVS: Service not definedSep 29 11:06:42 localhost Keepalived_healthcheckers[3547]: Executing [/etc/keepalived/keepalived_monitor.sh] for service [192.168.247.132]:3306 in VS [192.168.247.200]:3306Sep 29 11:06:42 localhost Keepalived_healthcheckers[3547]: Lost quorum 1-0=1 > 0 for VS [192.168.247.200]:3306Sep 29 11:06:42 localhost Keepalived_healthcheckers[3547]: Remote SMTP server [127.0.0.1]:25 connected.Sep 29 11:06:43 localhost Keepalived_healthcheckers[3547]: SMTP alert successfully sent.Sep 29 11:06:48 localhost Keepalived_healthcheckers[3547]: TCP connection to [192.168.247.132]:3306 success.Sep 29 11:06:48 localhost Keepalived_healthcheckers[3547]: Adding service [192.168.247.132]:3306 to VS [192.168.247.200]:3306Sep 29 11:06:48 localhost Keepalived_healthcheckers[3547]: IPVS: Service not definedSep 29 11:06:48 localhost Keepalived_healthcheckers[3547]: Gained quorum 1+0=1 <= 1 for VS [192.168.247.200]:3306Sep 29 11:06:48 localhost Keepalived_healthcheckers[3547]: Remote SMTP server [127.0.0.1]:25 connected.Sep 29 11:06:48 localhost Keepalived_healthcheckers[3547]: SMTP alert successfully sent.##Atlas服务stop后,keepalived把它从集群中移除,然后又把它启动起来,加入集群

            测试二:把Atlas备的Atlas服务stop掉

##Atlas服务stop后,keepalived把它从集群中移除,然后又把它启动起来,加入集群

            测试三:把Atlas主的keepalived服务stop掉

##Atlas主:/etc/init.d/keepalived stop##查看日志:Sep 29 11:10:34 localhost Keepalived[3545]: Stopping Keepalived v1.2.15 (09/29,2015)Sep 29 11:10:34 localhost Keepalived_vrrp[3548]: VRRP_Instance(VI_1) sending 0 prioritySep 29 11:10:34 localhost Keepalived_vrrp[3548]: VRRP_Instance(VI_1) removing protocol VIPs.Sep 29 11:10:34 localhost Keepalived_healthcheckers[3547]: Netlink reflector reports IP 192.168.247.200 removedSep 29 11:10:34 localhost Keepalived_healthcheckers[3547]: Removing service [192.168.247.132]:3306 from VS [192.168.247.200]:3306Sep 29 11:10:34 localhost Keepalived_healthcheckers[3547]: IPVS: Service not definedSep 29 11:10:34 localhost Keepalived_healthcheckers[3547]: IPVS: No such service##移除虚拟ip
##Atlas备查看日志:Sep 29 11:10:35 localhost Keepalived_vrrp[3278]: VRRP_Instance(VI_1) Transition to MASTER STATESep 29 11:10:36 localhost Keepalived_vrrp[3278]: VRRP_Instance(VI_1) Entering MASTER STATESep 29 11:10:36 localhost Keepalived_vrrp[3278]: VRRP_Instance(VI_1) setting protocol VIPs.Sep 29 11:10:36 localhost Keepalived_healthcheckers[3277]: Netlink reflector reports IP 192.168.247.200 addedSep 29 11:10:36 localhost Keepalived_vrrp[3278]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.247.200Sep 29 11:10:41 localhost Keepalived_vrrp[3278]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.247.200##变为master状态##绑定vip 200

            测试四:Atlas主的keepalived重新启动

/etc/init.d/keepalived start##结果:Atlas主并没有变为master,而是作为了backup,因为在配置文件中,我们使用了nopreempt参数,不抢占(注:只能在优先级高的一端才能配这个参数)

            测试五:把Atlas备的keepalived服务stop掉

##前提是Atlas备此时对外服务##正常切换

            测试六:把Atlas主的Atlas服务stop掉,并不再让其成功启动

##Atlas主的keepalived被stop掉,正常主备切换

    测试访问vip 200,来管理数据库

##此时的两台Atlas,一台对外服务,一台处于空闲状态##
##随便选择一台数据库,如slave2:这里只是选择用来登录,随便一台数据库都可以##也可以用windows下的navicat来登录,ip是200,端口是3306,账号是Atlas##slave2:mysql -h192.168.247.200 -P3306 -uAtlas -pmysql          ##这里必须是vip 200,端口3306,账号Atlasmysql> show databases;         ##查看数据库+--------------------+| Database           |+--------------------+| information_schema || ku1                || ku2                || ku3                || ku4                || mysql              || performance_schema || test               |+--------------------+8 rows in set (0.01 sec)mysql> SHOW VARIABLES LIKE 'server_id';   ##轮训获取读数据库的server-id,读负载均衡正常+---------------+-------+| Variable_name | Value |+---------------+-------+| server_id     | 2     |+---------------+-------+1 row in set (0.01 sec)mysql> SHOW VARIABLES LIKE 'server_id';+---------------+-------+| Variable_name | Value |+---------------+-------+| server_id     | 3     |+---------------+-------+1 row in set (0.01 sec)mysql> SHOW VARIABLES LIKE 'server_id';+---------------+-------+| Variable_name | Value |+---------------+-------+| server_id     | 2     |+---------------+-------+1 row in set (0.01 sec)mysql> SHOW VARIABLES LIKE 'server_id';+---------------+-------+| Variable_name | Value |+---------------+-------+| server_id     | 3     |+---------------+-------+1 row in set (0.00 sec)mysql> create database ku5;        ##创建ku5Query OK, 1 row affected (0.01 sec)mysql> show databases;+--------------------+| Database           |+--------------------+| information_schema || ku1                || ku2                || ku3                || ku4                || ku5                || mysql              || performance_schema || test               |+--------------------+9 rows in set (0.00 sec##到其它任何一台数据库查看是否数据同步##如:slave1:mysql -p123456mysql> show databases;       ##数据同步正常+--------------------+| Database           |+--------------------+| information_schema || ku1                || ku2                || ku3                || ku4                || ku5                || mysql              || performance_schema || test               |+--------------------+9 rows in set (0.01 sec)
##测试:将Atlas进行主备切换,查看访问200是否仍正常##