標籤:lvs https lvs-dr mysql
上一篇關於負載平衡lvs介紹的文章中已經講解了lvs-dr的原理,這篇文章主要介紹其在mysql應用上的實現過程:
測試環境:4台虛擬機器都是centos6的作業系統,使用系統內建的mysql包安裝測試:
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/74/4E/wKioL1YY3QbTEdf8AAFbNDovCbk650.jpg" title="QQ20151010173656.png" alt="wKioL1YY3QbTEdf8AAFbNDovCbk650.jpg" />
如所示,vip和rip在同一網段中的情況下使用lvs-dr模型來實現mysql叢集服務
director
#!/bin/bash#!/bin/bash# auto install lvm-dr# date 2015-10-10#close selinux and iptablessed -i "s/SELINUX=.*/SELINUX=permissive/" /etc/sysconfig/selinux //關閉selinuxchkconfig iptables off service iptables stop &> /dev/null //停止iptables服務# ip_forward=1sed -i "[email protected]_forward = [email protected]_forward = [email protected]" /etc/sysctl.conf && sysctl -p &>/dev/null //開啟轉寄功能# install ipvsadm rpm -q ipvsadm &> /dev/null //安裝ipvsadm命令列工具if [ $? -eq 1 ]; then yum install -y ipvsadm &> /dev/nullfi# define variableIPVSADM=`which ipvsadm`VIP=172.16.16.2RS1=172.16.16.3RS2=172.16.16.4#ifconfig eth0:0 vipifconfig 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 hostnamename=node1 //定義主機名稱hostname $namesed -i "s/HOSTNAME=localhost/HOSTNAME=$name/" /etc/sysconfig/network# define ip echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignoreecho 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignoreecho 1 > /proc/sys/net/ipv4/conf/lo/arp_ignoreecho 2 > /proc/sys/net/ipv4/conf/all/arp_announceecho 2 > /proc/sys/net/ipv4/conf/eth0/arp_announceecho 2 > /proc/sys/net/ipv4/conf/lo/arp_announcevip=172.16.16.2ifconfig lo:0 $vip/32 broadcast $vip up //定義viproute 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/nullfichkconfig mysqld onservice 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 2fi
mysql> create database node1; //建立node1資料庫mysql> grant all on *.* to [email protected]‘172.16.%.%‘ identified by ‘123456‘; //授權遠程登入使用者mysql> flush privileges;
node2
#!/bin/bash# lvs-nat node define# # define hostnamename=node2 //定義主機名稱hostname $namesed -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_ignoreecho 1 > /proc/sys/net/ipv4/conf/lo/arp_ignoreecho 2 > /proc/sys/net/ipv4/conf/all/arp_announceecho 2 > /proc/sys/net/ipv4/conf/eth0/arp_announceecho 2 > /proc/sys/net/ipv4/conf/lo/arp_announcevip=172.16.16.2ifconfig lo:0 $vip/32 broadcast $vip up //定義viproute 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/nullfichkconfig mysqld onservice 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 2fi
mysql> create database node2; //建立node2資料庫mysql> grant all on *.* to [email protected]‘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回應的網路介面來進行發送.
測試
[[email protected] ~]# mysql -uroot -h172.16.16.2 -p123456 Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 4Server version: 5.1.73 Source distributionCopyright (c) 2000, 2013, 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;+--------------------+| Database |+--------------------+| information_schema || mysql || node2 || test |+--------------------+4 rows in set (0.00 sec)[[email protected] ~]# mysql -uroot -h172.16.16.2 -p123456 //再測試一次mysql> show databases;+--------------------+| Database |+--------------------+| information_schema || mysql || node2 || test |+--------------------+4 rows in set (0.00 sec)
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/74/50/wKioL1YZG5iDoufGAAEZu0M7444628.jpg" title="QQ20151010220649.png" alt="wKioL1YZG5iDoufGAAEZu0M7444628.jpg" />
測試完成!!!
本文出自 “bengbengtu” 部落格,請務必保留此出處http://bengbengtu.blog.51cto.com/9505633/1701745
Linux叢集-負載平衡lvs-dr實現mysql