Keepalived(双机热备--笔记)

Keepalived(双机热备)
------------------------------------------------------keepalived配置--------------------------------------------------
1.准备工作

	vip : 192.168.0.1
	master1: 192.168.0.2
	master2: 192.168.0.3

2.安装lnmp:https://lnmp.org/install.html
3. 要给你的机器设置一个虚拟ip

	# ifconfig eth0:0 192.168.0.1 netmask 255.255.255.248 up

4.安装keepalived

	# cd /usr/local/src 
	# wget http://www.keepalived.org/software/keepalived-1.2.2.tar.gz
	# tar zxvf keepalived-1.2.2.tar.gz
	# cd keepalived-1.2.2  
	# ./configure --prefix=/usr/local/keepalived
	# make && make install

5.修改keepalived.conf配置文件(192.168.0.2机器上的keepalived.conf)

	# vim /etc/keepalived/keepalived.conf
	#ConfigurationFile for keepalived  
		global_defs {  
			notification_email {                       
		  		[email protected] ######定义接受邮件的邮箱  
	        }  
		  notification_email_from [email protected]    ######定义发送邮件的邮箱  
		  smtp_server [email protected]
		  smtp_connect_timeout 10  
		}  
		######定义vrrptest实例  
		vrrp_instance VI_1 {                
	        state BACKUP              ######服务器状态  
		    interface eth0                      ######使用的接口  
	        virtual_router_id 51                ######虚拟路由的标志,一组lvs的虚拟路由标识必须相同,这样才能切换  
	        priority 150                        ######服务启动优先级,值越大,优先级越高,BACKUP 不能大于MASTER  
	        advert_int 1                        ######服务器之间的存活检查时间  
			authentication {  
		        auth_type PASS                      ######认证类型  
		        auth_pass 111111       ######认证密码,一组lvs 服务器的认证密码必须一致  
			}  
		virtual_ipaddress {                        
	       192.168.0.1/24 ######虚拟IP地址  
		}  
	}  

6.修改keepalived.conf配置文件(192.168.0.3机器上的keepalived.conf)

	# vim /etc/keepalived/keepalived.conf
	#ConfigurationFile for keepalived  
		global_defs {  
			notification_email {                       
		  		[email protected] ######定义接受邮件的邮箱  
	        }  
		  notification_email_from [email protected]    ######定义发送邮件的邮箱  
		  smtp_server [email protected]
		  smtp_connect_timeout 10  
		}  
		######定义vrrptest实例  
		vrrp_instance VI_1 {                
	        state BACKUP              ######服务器状态  
		    interface eth0                      ######使用的接口  
	        virtual_router_id 51                ######虚拟路由的标志,一组lvs的虚拟路由标识必须相同,这样才能切换  
	        priority 100                        ######服务启动优先级,值越大,优先级越高,BACKUP 不能大于MASTER  
	        advert_int 1                        ######服务器之间的存活检查时间  
			authentication {  
		        auth_type PASS                      ######认证类型  
		        auth_pass 111111       ######认证密码,一组lvs 服务器的认证密码必须一致  
			}  
		virtual_ipaddress {                        
	       192.168.0.1/24 ######虚拟IP地址  
		}  
	}  

7.配置防火墙

	# vim /eth/sysconfig/iptables

添加:

		-A INPUT -d 192.168.0.1/32 -j ACCEPT #放出自己的vip
		-A INPUT -d 224.0.0.18 -j ACCEPT #添加VRRP通讯支持

重启防火墙

		# service iptables restart

8.启动keepalived(master1和master2)服务:

	# service keepalived start 或者 /etc/init.d/keepalived start

分别执行 ip addr 可以看到master1里多出一句 inet 192.168.0.2/32 scope global eth0
如果关闭master1的keep服务,则master2中也会出现上面那一句话
9.找一台同网段的机器上访问(比如192.168.0.1)

	>> mysql -u root -p123456 -h 192.168.0.1 -port 3306
	>> use test
	>> select * from member;

10.在两台机器上分别装有一个脚本
checksql.sh

export LD_LIBRARY_PATH=/usr/local/mysql
while true; do
    #启动一个循环,定时检查进程是否存在
    server=`ps aux | grep mysql | grep -v grep`
    if [ ! "$server" ]; then
        #如果不存在就重新启动
            /etc/init.d/keepalived stop && /etc/init.d/mysql start && /etc/init.d/keepalived start
        #启动后沉睡10s
        sleep 10
    fi
    #每次循环沉睡10s
    sleep 5
done

10.给checksql.sh 权限

	chmod 755 checksql.sh
  1. nohup checksql.sh &

--------------------------------------------热备----------------------------------------------
-- mysql 双机热备实现方案(A,B) --

A: ip 192.198.0.30
B: ip 192.198.20.30

A->B的过程:
1.创建一个用于备份的用户B:

 >> grant replication slave on *.* to 'usera'@'192.168.0.3' identified by 'usera';
  1. vim /etc/my.cnf (这个是lnmp一键安装下mysql的配置文件)
    在mysqld 模块下 有
    	log-bin=mysql-bin
    	binlog_format=mixed
    	server-id=1
    	read-only=0
    	#binlog-do-db=test #只关注这个一个库的记录到binlog日志里
    	#binlog-ignore-db = mysql #忽略这个数据库,不记录到binlog中
    	auto-increment-increment=10 #
    	auto-increment-offset=1 

3.获取服务器状态和同步数据(1,2,4如果有历史数据,则需要导出表保存,如果是新表,则忽略)
1)锁定表

		>> FLUSH TABLES WITH READ LOCK;
2)导出数据库
		>> mysqldump -uroot -p -d dbname > db.sql
3)查看A的binlog日志
		>> show master status\G
	记录file名称以及position位置
	File:mysql-bin.00004
	Position:1700
4)解除表
		>> UNLOCK TABLES;
5)重启服务器
		service mysql restart

4.设置B服务器
1)打开B的数据库配置文件
vim /etc/my.cnf

		[mysqld]
		log-bin=mysql-bin
    	binlog_format=mixed
		server-id = 2 #保证每台mysql服务器的id不同
		#replication-do-db = test #需要关注的数据库并记录到binlog中
		repliation-ignore-db = mysql #不需要关注也不记录到binlog中
		relay-log=mysqld-relay-bin # 中继日志的名字
		log-slave-updates = ON # 双主热备打开,要是主从的话则需要关闭

2)进入B的mysql命令行

		>> CHANGE MASTER TO MASTER_HOST='192.168.0.3',MASTER_USER='usera',MASTER_PASSWORD='usera',MASTER_LOG_FILE='mysql-bin.000033',MASTER_LOG_POS=107;
		如果抛出异常ERROR 1201 (HY000): Could not initialize master info structure; more error messages can be found in the MySQL error log
		>> stop slave;
		>> reset slave;
		>> 
  1. 查看slave线程
		>> show slave status\G

关注

		Slave_IO_Running:YES
		Slave_SQL_Running:YES
	说明开启成功
	如果其中有出现NO,则说明开启失败
	进入/usr/local/mysql/var/
	删除 机器名-relay-bin.0000001 机器名-relay-bin.index 和 relay-log.info 或者 预设的名称-relay-bin.00001,预设的名称-relay-bin.index 和 relay-log.info 并且重启MYSQL服务;
	命令:
		rm -rf 机器名-relay-bin.*  relay-log.info
		或者
		rm -rf 预设的名称-relay-bin.*  relay-log.info

B->A的过程
1.创建一个用于备份的用户A:

 >> grant replication slave on *.* to 'userb'@'192.168.0.1' identified by '123';  
  1. B的mysql配置my.cnf
    vim /etc/my.cnf
    在mysqld 模块下 有
	    	log-bin=mysql-bin
	    	binlog_format=mixed
	    	server-id=2
	    	read-only=0
	    	#binlog-do-db=test #只关注这个一个库的记录到binlog日志里
	    	#binlog-ignore-db = mysql #忽略这个数据库,不记录到binlog中
	    	auto-increment-increment=10 #
	    	auto-increment-offset=2

3.获取服务器状态和同步数据
1)查看B的binlog日志

		>> show master status\G
	记录file名称以及position位置
		File:mysql-bin.00004
		Position:1700

4.设置A服务器
1)打开A的数据库配置 开启中继服务
vim /etc/my.cnf
更改

			server-id = 1 #保证每台mysql服务器的id不同
			#replication-do-db = test #需要关注的数据库并记录到binlog中
			repliation-ignore-db = mysql #不需要关注也不记录到binlog中
			relay-log=mysqld-relay-bin # 中继日志的名字
			log-slave-updates = ON 

2)进入A的mysql命令行

		>> CHANGE MASTER TO MASTER_HOST='192.168.0.1',MASTER_USER='userb',MASTER_PASSWORD='123',MASTER_LOG_FILE='mysql-bin.000014',MASTER_LOG_POS=7803;
		如果抛出异常ERROR 1201 (HY000): Could not initialize master info structure; more error messages can be found in the MySQL error log
		>> stop slave;
		>> reset slave;
		>> CHANGE MASTER TO MASTER_HOST='A服务器ip',MASTER_USER='usera',MASTER_PASSWORD='123',MASTER_LOG_FILE='mysql-bin.000033',MASTER_LOG_POS=107;
  1. 重启mysql
		service mysql restart
  1. 查看slave线程
    >> show slave status\G
    关注Slave_IO_Running:YES
    Slave_SQL_Running:YES
    说明开启成功
    如果其中有出现NO,则说明开启失败
    进入/usr/local/mysql/var/
    删除 机器名-relay-bin.0000001 机器名-relay-bin.index 和 relay-log.info 并且重启MYSQL服务;

猜你喜欢

转载自blog.csdn.net/qq_35012243/article/details/82769398