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服務;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章