Linux集羣-負載均衡lvs-dr實現mysql

上一篇關於負載均衡lvs介紹的文章中已經講解了lvs-dr的原理,這篇文章主要介紹其在mysql應用上的實現過程:

測試環境:4臺虛擬機都是centos6的操作系統,使用系統自帶的mysql包安裝測試:

wKioL1YY3QbTEdf8AAFbNDovCbk650.jpg

如上圖所示,vip和rip在同一網段中的情況下使用lvs-dr模型來實現mysql集羣服務

director

#!/bin/bash

#!/bin/bash
# auto install lvm-dr
# date 2015-10-10

#close selinux and iptables
sed -i "s/SELINUX=.*/SELINUX=permissive/" /etc/sysconfig/selinux      //關閉selinux
chkconfig iptables off            
service iptables stop &> /dev/null        //停止iptables服務

# ip_forward=1
sed -i "[email protected]_forward = [email protected]_forward = 1@" /etc/sysctl.conf && sysctl -p &>/dev/null           //開啓轉發功能

# install ipvsadm 
rpm -q ipvsadm &> /dev/null                 //安裝ipvsadm命令行工具
if [ $? -eq 1 ]; then
    yum install -y ipvsadm &> /dev/null
fi


# define variable
IPVSADM=`which ipvsadm`
VIP=172.16.16.2
RS1=172.16.16.3
RS2=172.16.16.4

#ifconfig eth0:0 vip
ifconfig eth0:0 $VIP/32 broadcast $VIP up

# define lvs-dr
$IPVSADM -C            //清空規則
$IPVSADM -A -t $VIP:3306 -s lblc          //定義mysql集羣服務
$IPVSADM -a -t $VIP:3306 -r $RS1:3306 -g      //將node加入mysql集羣服務的dr模型中
$IPVSADM -a -t $VIP:3306 -r $RS2:3306 -g

$IPVSADM -L -n


node1

#!/bin/bash
# lvs-nat node define
# 

# define hostname
name=node1                   //定義主機名
hostname $name
sed -i "s/HOSTNAME=localhost/HOSTNAME=$name/" /etc/sysconfig/network

# define ip 
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
vip=172.16.16.2
ifconfig lo:0 $vip/32 broadcast $vip up          //定義vip
route add -host $vip dev lo:0

# yum install mysql-server                  
rpm -q mysql-server &> /dev/null             //安裝mysql   
if [ $? -eq 1 ];then
    yum install -y mysql-server &> /dev/null
fi

chkconfig mysqld on
service mysqld start &> /dev/null && ss -tanl | grep 3306 &> /dev/null    //啓動mysql服務
if [ $? -eq 0 ]; then
   echo -e "mysqld start \033[32m[OK]\033[0m" 
else
   echo -e "mysqld start \033[31m[fail]\033[0m"
   exit 2
fi
mysql> create database node1;          //創建node1數據庫
mysql> grant all on *.* to root@'172.16.%.%' identified by '123456';  //授權遠程登錄用戶
mysql> flush privileges;


node2

#!/bin/bash
# lvs-nat node define
# 

# define hostname
name=node2                  //定義主機名
hostname $name
sed -i "s/HOSTNAME=localhost/HOSTNAME=$name/" /etc/sysconfig/network

# define ip 
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore   
echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
vip=172.16.16.2
ifconfig lo:0 $vip/32 broadcast $vip up          //定義vip
route add -host $vip dev lo:0

# yum install mysql-server             
rpm -q mysql-server &> /dev/null              //安裝mysql   
if [ $? -eq 1 ];then
    yum install -y mysql-server &> /dev/null
fi

chkconfig mysqld on
service mysqld start &> /dev/null && ss -tanl | grep 3306 &> /dev/null  //啓動mysql服務
if [ $? -eq 0 ]; then
   echo -e "mysqld start \033[32m[OK]\033[0m" 
else
   echo -e "mysqld start \033[31m[fail]\033[0m"
   exit 2
fi
mysql> create database node2;      //創建node2數據庫
mysql> grant all on *.* to root@'172.16.%.%' identified by '123456';  //授權遠程登錄用戶
mysql> flush privileges;


lvs在dr模式下需要修改arp:arp_announce和arp_ignore的值  用來屏蔽arp請求  

arp_ignore

定義對目標地址爲本地IP的ARP詢問不同的應答模式0 

0 、(默認值): 迴應任何網絡接口上對任何本地IP地址的arp查詢請求 

1 、 只回答目標IP地址是來訪網絡接口本地地址的ARP查詢請求 

2 、只回答目標IP地址是來訪網絡接口本地地址的ARP查詢請求,且來訪IP必須在該網絡接口的子網段內 

3 、 不迴應該網絡接口的arp請求,而只對設置的唯一和連接地址做出迴應 

4-7 、保留未使用 

8 、不迴應所有(本地地址)的arp查詢

arp_ignore 設置爲1,當別人的arp請求過來的時候,如果接收的設備上面沒有這個ip,就不響應,默認是0,只要這臺機器上面任何一個設備上面有這個ip,就響應arp請求,併發送mac地址應答。   


arp_announce

對網絡接口上,本地IP地址的發出的,ARP迴應,作出相應級別的限制: 確定不同程度的限制,宣佈對來自本地源IP地址發出Arp請求的接口 

0 、 (默認) 在任意網絡接口(eth0,eth1,lo)上的任何本地地址 

1 、儘量避免不在該網絡接口子網段的本地地址做出arp迴應. 當發起ARP請求的源IP地址是被設置應該經由路由達到此網絡接口的時候很有用.此時會檢查來訪IP是否爲所有接口上的子網段內ip之一.如果該來訪IP不屬於各個網絡接口上的子網段內,那麼將採用級別2的方式來進行處理. 

2 、 對查詢目標使用最適當的本地地址.在此模式下將忽略這個IP數據包的源地址並嘗試選擇與能與該地址通信的本地地址.首要是選擇所有的網絡接口的子網中外出訪問子網中包含該目標IP地址的本地地址. 如果沒有合適的地址被發現,將選擇當前的發送網絡接口或其他的有可能接受到該ARP迴應的網絡接口來進行發送.


測試

[root@localhost ~]# mysql -uroot -h172.16.16.2 -p123456      
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.1.73 Source distribution

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| node2              |
| test               |
+--------------------+
4 rows in set (0.00 sec)

[root@localhost ~]# mysql -uroot -h172.16.16.2 -p123456   //再測試一次
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| node2              |
| test               |
+--------------------+
4 rows in set (0.00 sec)

wKioL1YZG5iDoufGAAEZu0M7444628.jpg

測試完成!!!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章