mysql keepalived主从+myslq 为什么主从上都有vip的ip

目标:配置一个keepalived双机热备架构,并配置主从复制规划:master1 & & zlm177 & & 192.168.17.177master2 & & zlm188 & & 192.168.17.188vip & & & & & & & & & & & & & & 192.168.17.166环境: Red Hat Enterprise Linux 6.4& & & & & & Percona Server 5.6.15一、软件安装可以去官网http://www.keepalived.org/software/下载最新版本的keepalived,目前最新的是1.2.13版,如下:keepalived-1.2.13.tarcp keepalived-1.2.13.tar /usr/local/srccd /usr/local/srctar zxvf keepalived-1.2.13.tar -C /opt/cd /opt/keepalived-1.2.13./configure --prefix=/usr/local/keepalivedmakeinstall 或 make && makeinstall注意,在编译过程中会提示缺少gcc和openssl包,用yum install装一下就可以了RHEL6.4也可以配置CentOS的yum,具体方法这里就不讲了yum install gccyum install openssl openssl-devel还会提示xxx依赖包也需要安装,一并装上,用yum的好处就是安装方便,让系统自动判断需要哪些包,自动下载并安装,完成编译以后,软件安装就结束了二、配置软件参数(VRRP)装完软件后,默认会配置文件的路径为:/usr/local/keepalived/etc/keepalived/keepalived.conf在主端打开该配置文件,把原有内容清空,再添加以下内容:! Configuration File for keepalivedglobal_defs { --全局配置& &notification_email {& & &aaron8219@xxx.xxx --接收通知的邮箱& &}& &router_id aaron8219 --可以用字母,也可以使数字,可以一致,也可以不一致,只是一个标识}vrrp_instance my_177 {& & state BACKUP --BACKUP从端模式& & interface eth0& & virtual_router_id 88 --默认为51,取值范围在1~255的整数,主从两端必须一致,才表示是同一个组& & priority 90& & advert_int 1 --检查间隔,默认1s& & nopreempt --设置非抢占模式,& & authentication {& & & & auth_type PASS& & & & auth_pass 1234& & }& & virtual_ipaddress { --指定vip,& & & & 192.168.17.166& & }}##关于vip的说明:vip随着state的变化而增加删除,当state为master的时候就添加,当state为backup的时候删除,主要是由优先级来决定的,和state设置的值没有多大关系(state相同的情况下),至于vip到底在主端还是从端,还和nopreempt有关,这里vip可以设置多个IP地址##关于nopreempt的说明:只能设置在state为backup的节点上,且这个节点的优先级必须比另外的高virtual_server 192.168.17.166 3306 { --虚拟服务器ip和端口& & delay_loop 2& & lb_algo wrr --带有权重的轮询& & lb_kind DR& & persistence_timeout 60& & protocol TCP& & real_server 192.168.17.177 3306 { --真实服务器ip和端口& & & & weight 3 --权重为3& & & & notify_down /opt/mysql/mysql.sh &--指定自杀脚本的路径& & & & TCP_CHECK {& & & & & & connect_timeout 10& & & & & & nb_get_retry 3& & & & & & delay_before_retry 3& & & & & & connect_port 3306& & & & }& & }}从端的配置文件大同小异,只要把IP和实例名改成自己的就可以了,并且设置从端的priority为90,而主端为100有一点要注意的是,主从两端的state,都配置成了backup,因为使用了nopreempt,即非抢占模式举个例子,当主端先启动mysql实例和keepalived后,如果此时从端也启动了mysql实例和keepalived,那么vip不会跳到从端上去,即使它的优先级为100,要大于主端的90而如果不设置nopreempt,那么这个时候,又分2种情况:1.state相同,即都是master或都是backup优先级高的,会占有vip,和角色无关2.state不同,即master-&backup或backup-&master优先级高的,会占有vip,和角色无关前提不同,结果都是一样的,即优先级是主导,谁的优先级高,vip就漂到谁那里创建一个自杀脚本来判断mysql进程是否启动touch /opt/mysql/mysql.sh添加以下内容:#!/bin.shpkill keepalived &--表示kill掉keepalived进程三、运行测试/usr/local/keepalived/sbin/keepalived -f /usr/local/keepalived/etc/keepalived/keepalived.conf -D-f 指定keepalived的参数文件-D 表示在操作系统日志里显示详细记录判断keepalived进程是否正常启动,只要查看/var/log/messages里的日志就可以了tail -30f /var/log/message注意,如果没有启动mysql而先启动了keepalived,那么之前notify_down参数中指定的脚本就会被执行,表示没有找到mysql进程,把keeplied自己的进程给kill掉。Jul 25 02:51:22 zlm188 Keepalived[3440]: Starting Keepalived v1.2.13 (07/22,2014)Jul 25 02:51:22 zlm188 Keepalived[3441]: Starting Healthcheck child process, pid=3442Jul 25 02:51:22 zlm188 Keepalived[3441]: Starting VRRP child process, pid=3443Jul 25 02:51:22 zlm188 Keepalived_vrrp[3443]: Netlink reflector reports IP 192.168.17.188 addedJul 25 02:51:22 zlm188 Keepalived_healthcheckers[3442]: Netlink reflector reports IP 192.168.17.188 addedJul 25 02:51:22 zlm188 Keepalived_healthcheckers[3442]: Netlink reflector reports IP fe80::a00:27ff:fe71:6b7b addedJul 25 02:51:22 zlm188 Keepalived_healthcheckers[3442]: Registering Kernel netlink reflectorJul 25 02:51:22 zlm188 Keepalived_vrrp[3443]: Netlink reflector reports IP fe80::a00:27ff:fe71:6b7b addedJul 25 02:51:22 zlm188 Keepalived_healthcheckers[3442]: Registering Kernel netlink command channelJul 25 02:51:22 zlm188 Keepalived_vrrp[3443]: Registering Kernel netlink reflectorJul 25 02:51:22 zlm188 Keepalived_vrrp[3443]: Registering Kernel netlink command channelJul 25 02:51:22 zlm188 Keepalived_vrrp[3443]: Registering gratuitous ARP shared channelJul 25 02:51:22 zlm188 Keepalived_vrrp[3443]: Opening file '/usr/local/keepalived/etc/keepalived/keepalived.conf'.Jul 25 02:51:22 zlm188 Keepalived_healthcheckers[3442]: Opening file '/usr/local/keepalived/etc/keepalived/keepalived.conf'.Jul 25 02:51:22 zlm188 Keepalived_healthcheckers[3442]: Configuration is using : 11566 BytesJul 25 02:51:22 zlm188 Keepalived_vrrp[3443]: Configuration is using : 62964 BytesJul 25 02:51:22 zlm188 Keepalived_vrrp[3443]: Using LinkWatch kernel netlink reflector...Jul 25 02:51:22 zlm188 Keepalived_vrrp[3443]: VRRP_Instance(my_178) Entering BACKUP STATEJul 25 02:51:22 zlm188 Keepalived_vrrp[3443]: VRRP sockpool: [ifindex(2), proto(112), unicast(0), fd(10,11)]Jul 25 02:51:22 zlm188 Keepalived_healthcheckers[3442]: Using LinkWatch kernel netlink reflector...Jul 25 02:51:22 zlm188 Keepalived_healthcheckers[3442]: Activating healthchecker for service [192.168.17.188]:3306Jul 25 02:51:25 zlm188 Keepalived_healthcheckers[3442]: TCP connection to [192.168.17.188]:3306 failed !!!Jul 25 02:51:25 zlm188 Keepalived_healthcheckers[3442]: Removing service [192.168.17.188]:3306 from VS [192.168.17.166]:3306Jul 25 02:51:25 zlm188 Keepalived_healthcheckers[3442]: Executing [/opt/mysql/mysql.sh] for service [192.168.17.188]:3306 in VS [192.168.17.166]:3306Jul 25 02:51:25 zlm188 Keepalived_healthcheckers[3442]: Lost quorum 1-0=1 & 0 for VS [192.168.17.166]:3306Jul 25 02:51:25 zlm188 Keepalived[3441]: Stopping Keepalived v1.2.13 (07/22,2014)在从端启动keepalived,跟踪日志文件可以发现,跑了一遍以后自动stopping了,这也说明,之前的配置是ok的了,否则就要检查一下,哪里配置有误,尤其要注意virtual_route_id必须保持一致,而route_id则不强行要求一致,实例名也不要重复1.检验vip的情况#ip address show或ip a show2.用vip登录mysql数据库(前提是已开启了mysqld和keepalived进程)#mysql -h192.168.17.166 -uaaron8219 -pzlm3.关闭某一端网卡后,测试vip的去向,以及是否能通过vip正常登陆#ifdown eth0#ip a show#mysql -h192.168.17.166 -uaaron8219 -pzlm4.重启某一端(主机模拟主机故障),测试vip的去向,以及是否能通过vip正常登陆#init 6#ip a show#mysql -h192.168.17.166 -uaaron8219 -pzlm5.直接kill掉keepalived进程,测试vip的去向,以及是否能通过vip正常登陆#pkill keepalived#ip a show#mysql -h192.168.17.166 -uaaron8219 -pzlm四、配置数据库同步安装完keepalived,只是保证了mysql数据库的高可用性,但是要真正做到互为主从,还需要配置MySQL主从复制模式,使数据库可以达到一致性状态1.两端配置同步所需参数确保server-id与slave不一致,通常server-id的格式可以设置成ip末尾2-3位+端口号比如我的环境master的ip是192.168.17.177,端口是3306那么server-id可以设置成1773306,相应地,slave就设置成1883306以下参数都是在/f文件中配置server-id=1773306log-bin=percona-bin --启用binlogset-variable=binlog-ignore-db=mysql --不记录数据库mysql的更新日志,避免了Master上的权限设置等被同步到Slave上2.两端添加复制用户mysql& grant repliecation slave on *.* to 'rep'@'192.168.17.%' identified by 'rep';如果想要在Slave上有权限执行 &LOAD TABLE FROM MASTER& 或 &LOAD DATA FROM MASTER& 语句的话,必须授予全局的 FILE 和 Select 权限:mysql& GRANT FILE,Select,REPLICATION SLAVE ON *.* TO 'rep'@'%' IDENTIFIED BY 'rep';3.设置同步如果是新库,两边直接重置master的binlogmysql&(否则,需要把master的库用mysqldump导出(或直接打包压缩),再复制到从库主机,大致步骤如下:①mysql& flush t②mysql& mysqldump -uroot -p --all-databases -l -F &full_db.sqlscp full_db.sql root@192.168.17.188:/data/mysql/percona_3306/data或②cd /data/mysql/percona_3306tar zcvf data.tar.gz ./datascp data.tar.gz root@192.168.17.188③mysql&从库导入主库的数据库mysql& mysql -uroot -p &/data/mysql/percona_3306/data/full_db.sql或mysql& source /data/mysql/percona_3306/data/full_db.sql)4.主库查询日志状态mysql& show master status/G5.从库根据主库的binlog位置和position来执行同步mysql& change master to master_host='192.168.17.177',master_user='rep',master_password='rep',master_log_file='percona-bin.000001',master_log_pos='120';6.启动slavemysql&启动后报错Slave I/O: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work. Error_code: 1593因为从库是直接通过虚拟机拷贝镜像的方式创建的,所以UUID重复了,UUID是存放在/data/mysql/percona_3306/f文件中的可以把这个文件直接删除,或者编辑该文件,修改里面的UUID和主库不同即可,正常以后,应该是以下的状态:(testing)root@localhost [(none)]& show slave status/G*************************** 1. row ***************************& & & & & & & &Slave_IO_State: Waiting for master to send event& & & & & & & & & Master_Host: 192.168.17.177& & & & & & & & & Master_User: repl& & & & & & & & & Master_Port: 3306& & & & & & & & Connect_Retry: 60& & & & & & & Master_Log_File: percona-bin.000011& & & & & Read_Master_Log_Pos: 540& & & & & & & &Relay_Log_File: node78-relay-bin.000018& & & & & & & & Relay_Log_Pos: 285& & & & Relay_Master_Log_File: percona-bin.000011& & & & & & &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: 540& & & & & & & 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: 773306& & & & & & & & & Master_UUID: 917ecbfc-10dc-11e4-b624-& & & & & & &Master_Info_File: /data/mysql/percona_3306/& & & & & & & & & & SQL_Delay: 0& & & & & SQL_Remaining_Delay: NULL& & & Slave_SQL_Running_State: Slave ha 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: 07.测试主库测试数据库zlm的tb_zlm表中执行插入一行数据:(testing)root@localhost [(none)]& select * from zlm.tb_+------+-----------+| id & | name & & &|+------+-----------+| & &1 | aaron8219 || & &2 | zlm & & & || & &3 | abc & & & |+------+-----------+3 rows in set (0.00 sec)(testing)root@localhost [(none)]& insert into zlm.tb_zlm values(4,'def');Query OK, 1 row affected (0.03 sec)从库查询zlm.tb_zlm表:(testing)root@localhost [(none)]& select * from zlm.tb_+------+-----------+| id & | name & & &|+------+-----------+| & &1 | aaron8219 || & &2 | zlm & & & || & &3 | abc & & & || & &4 | def & & & |+------+-----------+4 rows in set (0.00 sec)从库上也进行同样的配置,即可完成互为主从,只要从相应的master的binlog的pos位置开始change maseter就可以了结论:只要配置的VRRP组里面有一台机器开启了mysqld和keepalived进程,任何通过vip实现的数据库连接访问,都是正常的,这样无论是哪个节点down掉了,都不会影响mysql数据库的可用性,是一个最简单的mysql高可用架构。自此,通过keepalived来实现互为主从的双机热备架构就完成了,如果再复杂一点,安装lvpsadm来实现虚拟服务器的配置,那么就是一个经典的keepalived+lvs架构keepalived mysql 主从能负载均衡么_百度知道jeff_1 的BLOG
用户名:jeff_1
文章数:63
评论数:30
访问量:27812
注册日期:
阅读量:5863
阅读量:12276
阅读量:337185
阅读量:1040768
51CTO推荐博文
Mysql双向复制+KeepAlived:配置mysql的高可用说明:& &此文章是借鉴好朋友的文档&完成的& &主从同步的原理:环境:& &mysql的版本:mysql-5.6.22& &系统:centos6.4& &master:192.168.186.132& &slave:192.168.186.133& &vip:&192.168.186.140 & & & & &#虚拟ip,web服务器连接的ip& &防火墙和selinux关闭&步骤:& &配置mysql的单向复制:& &注意:mysql的安装步骤省略& &master: & & & & #开启二进制日志文件& &vi /usr/local/f& &在[mysqld]下添加:& &server-id = 1& &log-bin = /opt/mysql/binlog/mysql-binlog & & & & &#二进制日志文件路径随便设置,最好单独放在一个目录下& &/etc/init.d/mysqld &restart & & & & & & & & & & & #服务必须要重启restart,二进制日志才会生效& &slave:& &vi /usr/local/f& &在[mysqld]下添加:& &server-id = 2& &/etc/init.d/mysqld &restart & & & & & & & & & & & #必须要用restart,用reload不生效& &master: & & & & &#对slave授权& &mysql -uroot -p123456& &grant replication slave on *.* to 'slave'@'192.168.186.133' identified by '123456';& && &master: & & & & #备份数据& &mysql -uroot -p123456& &flush t & & & & #锁表,只读& & & & & & & & & & &#查看此时的binlog位置和pos值,这个要记录下来+---------------------+----------+--------------+------------------+-------------------+| File & & & & & & & &| Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |+---------------------+----------+--------------+------------------+-------------------+| mysql-binlog.000044 | & & &412 | & & & & & & &| & & & & & & & & &| & & & & & & & & & |+---------------------+----------+--------------+------------------+-------------------+& &打开另外一个终端:mysqldump -u root -p123456 --all-databases & /tmp/mysqldump.sql& &回到之前终端: & & & & #解表& &注意:锁表--查看--备份--解表 顺序要注意& &scp /tmp/mysqldump.sql 192.168.186.133:/tmp/ & & & &#把备份数据拷到slave& &slave: & & & #导入数据& &mysql -uroot -p123456 & /tmp/mysqldump.sql& && &slave: & & & #开始同步& &mysql -uroot -p123456&& &change master to master_host='192.168.186.132',master_user='slave',master_password='123456',master_log_file='mysql-binlog.000044',master_log_pos=412,master_port=3306;& && &show slave status\G; & & & & #查看是否成功,如下:出现两个Yes则成功*************************** 1. row ***************************& & & & & & & &Slave_IO_State: Waiting for master to send event& & & & & & & & & Master_Host: 192.168.186.132& & & & & & & & & Master_User: slave& & & & & & & & & Master_Port: 3306& & & & & & & & Connect_Retry: 60& & & & & & & Master_Log_File: mysql-binlog.000044& & & & & Read_Master_Log_Pos: 412& & & & & & & &Relay_Log_File: scj-relay-bin.000002& & & & & & & & Relay_Log_Pos: 286& & & & Relay_Master_Log_File: mysql-binlog.000044& & & & & & &Slave_IO_Running: Yes& & & & & & Slave_SQL_Running: Yes& & 注意:& & & & &第一个Yes:与连接相关(若为no,查看防火墙,selinux,是否授权grant等等)& & & & &第二个Yes:与数据相关(若为no,查看数据是否拷过去,配置文件是否配置server-id参数)& & & & &单向主从同步:不能在从机进行任何写操作,所有写操作都是在主机进行(注意:经过不断测试:在从库执行写操作,主从同步并不会断掉,只是从库数据不会同步到主库而已,且主从同步仍可正常工作)& & & & &若从机出现问题(如:突然关机),恢复正常后会继续同步主库数据,一般不会出现主从断掉的情况& & & & &如下图:& & & & &如上图:如果我们没有执行图中的这几步,而是跳过直接在slave上执行change master to,从库会从000044这个文件里的412开始同步主库上的数据,这样的话:主从同步仍可建立,只是主库与从库上的数据不一致,从库只有pos值为412之后的数据&& &&& &配置mysql的双向复制:(注意:在单向复制的基础上进行)& &slave: & & & & & #开启二进制日志文件& &vi /usr/local/f& &在[mysqld]下添加:& &log-bin = /opt/mysql/binlog/mysql-binlog & & & &#保证两台主机上的这个文件名字一致& &/etc/init.d/mysqld &restart& &master: & & & & &#授权& &grant replication slave on *.* to 'slave'@'192.168.186.132' identified by '123456'; & &#在master上执行授权语句,会同步到slave上的(实质:slave给master授权)& && &slave: & & & & &#查看二进制日志和pos信号值,记录下来& &&+---------------------+----------+--------------+------------------+| File & & & & & & & &| Position | Binlog_Do_DB | Binlog_Ignore_DB |+---------------------+----------+--------------+------------------+| mysql-binlog.000001 | & & &106 | & & & & & & &| & & & & & & & & &|+---------------------+----------+--------------+------------------+& && &master: & & & & #开始同步& &change master to master_host='192.168.186.133',master_user='slave',master_password='123456',master_log_file='mysql-binlog.000001',master_log_pos=106;& && &show slave status\G;*************************** 1. row ***************************& & & & & & & &Slave_IO_State: Waiting for master to send event& & & & & & & & & Master_Host: 192.168.186.133& & & & & & & & & Master_User: slave& & & & & & & & & Master_Port: 3306& & & & & & & & Connect_Retry: 60& & & & & & & Master_Log_File: mysql-binlog.000001& & & & & Read_Master_Log_Pos: 106& & & & & & & &Relay_Log_File: mysqld-relay-bin.000002& & & & & & & & Relay_Log_Pos: 254& & & & Relay_Master_Log_File: mysql-binlog.000001& & & & & & &Slave_IO_Running: Yes& & & & & & Slave_SQL_Running: Yes& &注意:& & & &双向主从:当主库(主1)出现问题,则由从库(主2)接过任务继续对外提供服务,等到主库恢复正常后会去同步从库上的数据,达到主从数据一致,且主从同步仍正常使用& &搭建keepalived实现主从自动切换:& &原理:& & & &keepalived用来解决单点故障,提供vrrp(虚拟路由冗余协议)以及healthcheck功能,提供一个vip虚拟ip;keepalived的作用是检测服务器的状态,当其中一台服务器出现问题,则将它从组中剔除,恢复后再将它加进来& & & 参考文档:& & & & & & & && & & & & & & && &注意:以下步骤在两台mysql服务器上都要操作& &安装keepalived:& &&cd /usr/local/src/& &&wget http://www.keepalived.org/software/keepalived-1.2.15.tar.gz& &&tar -zxf keepalived-1.2.15.tar.gz& &&cd keepalived-1.2.15& &&./configure --prefix=/usr/local/keepalived& & make& & make 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 这两个文件& & 修改配置文件:& & master: & & & & & & & &#修改master配置文件& &&mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.old& &&vi /etc/keepalived/keepalived.conf!&Configuration&File&for&keepalived
global_defs&{
&&&&notification_email&{
&&&&notification_email_from&root@localhost
&&&&smtp_server&127.0.0.1
&&&&smtp_connect_timeout&30
&&&&router_id&mysql
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.186.140
virtual_server&192.168.186.140&3306&{
&&&&delay_loop&6
&&&&lb_algo&wrr
&&&&lb_kind&DR
&&&&persistence_timeout&50
&&&&protocol&TCP
&&&&real_server&192.168.186.132&3306&{
&&&&&&&&weight&3
&&&&&&&&notify_down&/etc/keepalived/killkeepalived.sh
&&&&&&&&TCP_CHECK&{
&&&&&&&&&&&&connect_timeout&10
&&&&&&&&&&&&nb_get_retry&3
&&&&&&&&&&&&delay_before_retry&3
&&&&&&&&&&&&connect_port&3306
}& & slave: & & & & & & & &#修改slave配置文件& &&mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.old& &&vi /etc/keepalived/keepalived.conf!&Configuration&File&for&keepalived
global_defs&{&&
&&&&notification_email&{&&
&&&&notification_email_from&root@localhost&&
&&&&smtp_server&127.0.0.1&&
&&&&smtp_connect_timeout&30&&
&&&&router_id&mysql&&
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.186.140
virtual_server&192.168.186.140&3306&{
&&&&delay_loop&6
&&&&lb_algo&wrr
&&&&lb_kind&DR
&&&&persistence_timeout&50&&&&&&&&
&&&&protocol&TCP
&&&&real_server&192.168.186.133&3306&{
&&&&&&&&weight&3
&&&&&&&&notify_down&/etc/keepalived/killkeepalived.sh&&
&&&&&&&&TCP_CHECK&{
&&&&&&&&&&&&connect_timeout&10&&&&&&&&
&&&&&&&&&&&&nb_get_retry&3&&&&&&&&&&&
&&&&&&&&&&&&delay_before_retry&3&&&&&&
&&&&&&&&&&&&connect_port&3306&&&&&&&&
}& & vi&/etc/keepalived/killkeepalived.sh & & & & &#创建脚本&&#!/bin/sh&&
&&pkill&keepalived& & 注意:此脚本的作用:& & & & & keepalived子进程会时刻监控本机的mysql服务,若mysql服务出现问题(如:stop),则会去执行此脚本,把keepalived进程杀掉(正常情况master会时刻发送vrrp通信给backup,当master出现问题(如:keepalived进程停掉),backup一段时间内接受不到master发来的vrrp信息,则slave会转变为master,接管任务继续对外提供服务)& & & & & 千万不要把killkeepalived.sh这个脚本放到/var/run/mysqld/这个目录下,否则每次开机都会把这个脚本删掉& & chmod 755 /etc/keepalived/killkeepalived.sh & & & & & &#加执行权限& &&chkconfig keepalived on & & & & & & & & & & & &#设置开机自动启动& &&查看是否绑定vip:& & master: & & & & #查看master日志文件& &&/etc/init.d/keepalived start& &&tail -f /var/log/messagesMay &8 17:08:01 localhost Keepalived[10191]: Starting Keepalived v1.2.15 (05/07,2015)May &8 17:08:01 localhost Keepalived[10192]: Starting Healthcheck child process, pid=10194May &8 17:08:01 localhost Keepalived[10192]: Starting VRRP child process, pid=10195May &8 17:08:01 localhost Keepalived_vrrp[10195]: Netlink reflector reports IP 192.168.186.132 addedMay &8 17:08:01 localhost Keepalived_vrrp[10195]: Netlink reflector reports IP fe80::20c:29ff:fec7:fd75 addedMay &8 17:08:01 localhost Keepalived_vrrp[10195]: Registering Kernel netlink reflectorMay &8 17:08:01 localhost Keepalived_vrrp[10195]: Registering Kernel netlink command channelMay &8 17:08:01 localhost Keepalived_vrrp[10195]: Registering gratuitous ARP shared channelMay &8 17:08:01 localhost Keepalived_healthcheckers[10194]: Netlink reflector reports IP 192.168.186.132 addedMay &8 17:08:01 localhost Keepalived_healthcheckers[10194]: Netlink reflector reports IP fe80::20c:29ff:fec7:fd75 addedMay &8 17:08:01 localhost Keepalived_healthcheckers[10194]: Registering Kernel netlink reflectorMay &8 17:08:01 localhost Keepalived_healthcheckers[10194]: Registering Kernel netlink command channelMay &8 17:08:01 localhost Keepalived_healthcheckers[10194]: Opening file '/etc/keepalived/keepalived.conf'.May &8 17:08:01 localhost Keepalived_healthcheckers[10194]: Configuration is using : 11034 BytesMay &8 17:08:01 localhost Keepalived_healthcheckers[10194]: Using LinkWatch kernel netlink reflector...May &8 17:08:01 localhost Keepalived_healthcheckers[10194]: Activating healthchecker for service [192.168.186.132]:3306May &8 17:08:03 localhost Keepalived_vrrp[10195]: Opening file '/etc/keepalived/keepalived.conf'.May &8 17:08:03 localhost Keepalived_vrrp[10195]: Configuration is using : 37169 BytesMay &8 17:08:03 localhost Keepalived_vrrp[10195]: Using LinkWatch kernel netlink reflector...May &8 17:08:03 localhost Keepalived_vrrp[10195]: VRRP_Instance(VI_1) Entering BACKUP STATEMay &8 17:08:03 localhost Keepalived_vrrp[10195]: VRRP sockpool: [ifindex(2), proto(112), unicast(0), fd(10,11)]May &8 17:08:07 localhost Keepalived_vrrp[10195]: VRRP_Instance(VI_1) Transition to MASTER STATEMay &8 17:08:08 localhost Keepalived_vrrp[10195]: VRRP_Instance(VI_1) Entering MASTER STATEMay &8 17:08:08 localhost Keepalived_vrrp[10195]: VRRP_Instance(VI_1) setting protocol VIPs.May &8 17:08:08 localhost Keepalived_vrrp[10195]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.186.140May &8 17:08:08 localhost Keepalived_healthcheckers[10194]: Netlink reflector reports IP 192.168.186.140 addedMay &8 17:08:13 localhost Keepalived_vrrp[10195]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.186.140& &&& & slave: & & &#查看slave日志& & /etc/init.d/keepalived start& & tail -f /var/log/messages..........................May &8 17:11:42 localhost Keepalived_healthcheckers[10724]: Using LinkWatch kernel netlink reflector...May &8 17:11:42 localhost Keepalived_healthcheckers[10724]: Activating healthchecker for service [192.168.186.133]:3306May &8 17:11:42 localhost Keepalived_vrrp[10725]: VRRP_Instance(VI_1) Entering BACKUP STATEMay &8 17:11:42 localhost Keepalived_vrrp[10725]: VRRP sockpool: [ifindex(2), proto(112), unicast(0), fd(10,11)]& & 测试:& & master: & & & & #停掉mysql服务,查看日志& &&/etc/init.d/mysqld stop& &&tail -f /var/log/messagesMay &8 17:13:32 localhost Keepalived_healthcheckers[10194]: TCP connection to [192.168.186.132]:3306 failed !!!May &8 17:13:32 localhost Keepalived_healthcheckers[10194]: Removing service [192.168.186.132]:3306 from VS [192.168.186.140]:3306May &8 17:13:32 localhost Keepalived_healthcheckers[10194]: Executing [/var/run/mysqld/killkeepalived.sh] for service [192.168.186.132]:3306 in VS [192.168.186.140]:3306May &8 17:13:32 localhost Keepalived_healthcheckers[10194]: Lost quorum 1-0=1 & 0 for VS [192.168.186.140]:3306May &8 17:13:32 localhost Keepalived_healthcheckers[10194]: Remote SMTP server [0.0.0.0]:25 connected.May &8 17:13:33 localhost Keepalived_vrrp[10195]: VRRP_Instance(VI_1) sending 0 priorityMay &8 17:13:33 localhost Keepalived_vrrp[10195]: VRRP_Instance(VI_1) removing protocol VIPs.May &8 17:13:33 localhost Keepalived[10192]: Stopping Keepalived v1.2.15 (05/07,2015)May &8 17:13:37 localhost Keepalived_healthcheckers[10194]: Netlink reflector reports IP 192.168.186.140 removed& & &slave: & & & &#master端停掉mysql服务后查看slave日志& & &tail -f /var/log/messagesMay &8 17:14:02 localhost Keepalived_vrrp[10725]: VRRP_Instance(VI_1) Transition to MASTER STATEMay &8 17:14:03 localhost Keepalived_vrrp[10725]: VRRP_Instance(VI_1) Entering MASTER STATEMay &8 17:14:03 localhost Keepalived_vrrp[10725]: VRRP_Instance(VI_1) setting protocol VIPs.May &8 17:14:03 localhost Keepalived_vrrp[10725]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.186.140May &8 17:14:03 localhost Keepalived_healthcheckers[10724]: Netlink reflector reports IP 192.168.186.140 addedMay &8 17:14:08 localhost Keepalived_vrrp[10725]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.186.140&& &注意:& &&若有一台服务器出现问题,恢复后记得:& & & 不仅把mysql启动起来,还要把keepalived启动起来本文出自 “” 博客,请务必保留此出处
了这篇文章
类别:┆阅读(0)┆评论(0)

我要回帖

更多关于 keepalived 主从切换 的文章

 

随机推荐