程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> linux keepalived+LVS 實現mysql 從庫負載均衡,keepalivedlvs

linux keepalived+LVS 實現mysql 從庫負載均衡,keepalivedlvs

編輯:MySQL綜合教程

linux keepalived+LVS 實現mysql 從庫負載均衡,keepalivedlvs


前情提要:

參考鏈接:

http://www.osyunwei.com/archives/7464.html

ps:以上為本次操作的主要參考資料,非常感謝此文作者的貢獻,我的隨筆的主要目的是

說明在使用以上資料參考部署的過程中,遇到的一些問題以及補充。

目的:

  1、解決web讀寫分離功能缺陷,實現數據庫從庫負載均衡與高可用

  2、簡化web與主要功能模塊的配置,使用vip接管

實驗環境:

  操作系統:redhat6.4 64位   #目前主流的版本應該在6.4以上,主要是硬件要求

       DB版本:mysql5.6           #這個沒什麼可說的,選擇版本主要看應用需求

       lvs主機:192.168.1.180   #部署lvs+keepalived,用於管理VIP,並分發數據庫讀寫請求

     從庫IP:192.168.20.182、192.168.20.183   #mysql_slave 一主兩從

        測試機:192.168.20.181   #用於測試整套架構的功能

            VIP:192.168.20.253   #虛擬IP,用於請求的分發

一、環境安裝配置  

數據庫mysql5.6安裝(20.182、20.183)

rpm -ivh

MySQL-server-5.6.16-1.el6.x86_64.rpm

MySQL-devel-5.6.16-1.el6.x86_64.rpm

MySQL-shared-5.6.16-1.el6.x86_64.rpm

MySQL-client-5.6.16-1.el6.x86_64.rpm

MySQL-shared-compat-5.6.16-1.el6.x86_64.rpm

 

mysql5.6的安全性有所提高,安裝完成後會有如下提示:

You will find that password in '/root/.mysql_secret'

cat /root/.mysql_secret

# The random password set for the root user at Mon Aug 31 08:28:44 2015 (local time): 06tIwUud

通過密碼進入mysql之後:通過:SET PASSWORD = password('xxxxxx'); 重置密碼即可。 其他跟正常的mysql安裝相同。

 

數據庫主從搭建(略)

  恩......不是我偷懶,主要是網上這塊的內容太多了,一抓一大把,沒有什麼可寫的價值,之後如果有興趣可能單開一個隨筆,這就不寫了。

      大家隨意的搜一下。

 

網絡環境配置(所有機器)

  由於我的生產環境有單獨的思科防火牆,所以我所有的服務器的系統防火牆都是關閉的,包括selinux,不然太麻煩。

有些莫名其妙的報錯可能都是iptable和selinux引起的,為了方便一般默認關閉

1、關閉selinux:

   修改/etc/selinux/config文件中的SELINUX="" 為 disabled ,然後重啟。
   如果不想重啟系統,使用命令setenforce 0

2、關閉iptables:

  service iptables stop   chkconfig iptables off  

二、LVS+keepalive主機搭建(192.168.1.180)

為了簡化步驟,這裡不做管理機器的高可用配置,  

 1、安裝LVS

yum install ipvsadm  #當前版本的linux內核已經集成lvs,此為管理模塊 modprobe ip_vs  #加載模塊 執行ipvsadm 測試是否安裝成功  

2、安裝keepalived

yum install  gcc gcc-c++ make openssl-devel kernel-devel ncurses-devel

下載keeplived:http://www.keepalived.org/download.html

cd /usr/local/src

wget http://www.keepalived.org/software/keepalived-1.2.19.tar.gz

ps:由於安裝時間的不同,我新的生產環境是centos6.5  而測試環境是redhat6.4,並且我的生產之前一直都是redhat系列,一直使用的都是手動rpm以及編譯安裝,雖然很苦逼,但是著實鍛煉動手能力以及一些說不清道不明的對系統的理解能力,並且yum本身並不是非常的安全,沒有手動安裝那麼放心(俺的感受),我的建議是如果非用不可的話,安裝可以用yum,但是卸載需要手動,這是我的底線。

 

tar -zxvf keepalived-1.2.19.tar.gz

cd keepalived-1.2.19

./configure  #配置,必須看到以下提示,說明配置正確,才能繼續安裝

Use IPVS Framework : Yes

IPVS sync daemon support : Yes

Use VRRP Framework       : Yes

make #編輯

make install  #安裝

cp /usr/local/etc/sysconfig/keepalived  /etc/sysconfig/

mkdir /etc/keepalived

cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/

cp /usr/local/sbin/keepalived /usr/sbin/

cp /usr/local/etc/rc.d/init.d/keepalived  /etc/rc.d/init.d/

chmod +x /etc/rc.d/init.d/keepalived  #添加執行權限

chkconfig keepalived on  #設置開機啟動

service keepalived start #啟動

service keepalived stop  #關閉

service keepalived restart  #重啟

 ps:以上直接輔助的原作者的命令,主要是沒什麼可寫的,按照命令操作即可。

 ps2:參考資料在這會安裝perl的相關環境,因為他的從庫狀態監測腳本需要用到,但是我並沒有在這添加,主要考慮到如下的情況

  1、我有單獨的數據庫從庫狀態監測告警腳本(見上兩篇原創隨筆)

      2、keeplived本身有對3306端口的檢測,如果數據庫出現異常可以發現並處理。

      3、我希望即便從庫同步出現問題,也能夠繼續提供服務,因為線上環境需要的是服務暢通,短暫不同步的代價我是能夠接受的。

3、配置keepalived

cp /etc/keepalived/keepalived.conf  /etc/keepalived/keepalived.conf-bak

>/etc/keepalived/keepalived.conf   #清空配置文件

vi /etc/keepalived/keepalived.conf  #以下內容直接全部粘貼即可

 

====================================== ! Configuration File for keepalived   global_defs {         router_id LVS_DEVEL }   vrrp_instance VI_1 {           state MASTER         interface eth0         virtual_router_id 51         priority 100         advert_int 1         authentication {         auth_type PASS         auth_pass 1111         }           virtual_ipaddress {                 192.168.20.253         } }   virtual_server 192.168.20.253 3306 {                   delay_loop 6                 lb_algo wlc                 lb_kind DR                 #persistence_timeout 120                 protocol TCP           real_server 192.168.20.182 3306 {                   weight 1                 TCP_CHECK {                         connect_timeout 3                          nb_get_retry 3                          delay_before_retry 3                          connect_port 3306                 }         }           real_server 192.168.20.183 3306 {                   weight 1                 TCP_CHECK {                         connect_timeout 3                         nb_get_retry 3                         delay_before_retry 3                         connect_port 3306         } } } ============================================== #wp    #保存退出 注:最好在使用以上內容前,復制到編輯器,檢查括號是否齊全與匹配,這很重要。  

三、數據庫從庫配置(192.168.20.182、183)

1、綁定LVS虛擬服務器(VIP):192.168.20.253到lo:0

 #編輯增加如下代碼:

vi  /etc/rc.d/init.d/realserver ================================================== #!/bin/sh # chkconfig: - 80 90 # description:realserver # mysql_vip start realserver mysql_vip=192.168.20.253  . /etc/rc.d/init.d/functions case "$1" in start) ifconfig lo:0 $mysql_vip netmask 255.255.255.255 broadcast $mysql_vip /sbin/route add -host $mysql_vip dev lo:0 echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce sysctl -p >/dev/null 2>&1 echo "RealServer Start OK" ;; stop) ifconfig lo:0 down route del $mysql_vip >/dev/null 2>&1 echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce echo "RealServer Stoped" ;; *) echo "Usage: $0 {start|stop}" exit 1 esac exit 0 ==========================================================

chmod +x /etc/rc.d/init.d/realserver  #添加腳本執行權限

chkconfig realserver on                    #添加開機啟動

/etc/rc.d/init.d/realserver start         #開啟,參數stop為關閉

 

 2、配置允許ARP轉發

  vi /etc/sysctl.conf ============================ net.ipv4.ip_forward = 1   #修改原有配置 # MYSQL-VIP-NewAdd    #此為新增配置 net.ipv4.conf.lo.arp_ignore= 1 net.ipv4.conf.lo.arp_announce= 2
net.ipv4.conf.all.arp_ignore= 1
net.ipv4.conf.all.arp_announce= 2 ============================ /sbin/sysctl -p  #使配置及時生效

 

四、負載均衡功能測試

 1、LVS主機(20.180)執行:

service keepalived start  #啟動keepalived

ipvsadm -Ln  #檢查lvs運行狀態

2、數據庫從庫(20.182、20.183)

/etc/rc.d/init.d/realserver start  

VIP已經綁定到lo:0

 

3、負載均衡功能測試

20.182:執行service mysql stop

在20.180(LVS主機)上執行

ipvsadm -Ln  #檢查lvs運行狀態

可以看到20.182服務器已經被去掉。同理再次啟動之後此服務器會被再次加入服務。

 

4、VIP數據庫功能測試

在測試服務器(1.181)上執行數據庫連接命令

mysql -uroot -pXXXXXX -h192.168.20.253

 或者使用telnet 192.168.20.253 3306 命令去嘗試連接,如果提示輸入密碼,說明連接正常。

 

FAQ:

  1、能夠ping通,但是telnet不通,不知道是為什麼?

        答:網上看到很多人,包括我自己,都遇到了這個問題,VIP能夠ping通,但是telnet以及mysql連接命令不通,怎麼著也找不到問題。

          這個問題困擾了我很長時間,中間試驗停止了兩個月,因為實在找不到原因,但是後來實在是啼笑皆非,原因竟然是:沒有使用測試機,

          我所有的測試命令都是在LVS主機上執行的,而LVS主機上綁定了VIP,並且沒有mysql服務,肯定能ping通,但是在沒有轉發請求的

          情況下,肯定服務不通。

 

  2、原資料中的一些命令的困擾?

    答:比如ipvsadm -L   在我的服務器上是不顯示具體IP的,只顯示localhost,一度讓我以為服務不通跟這個有聯系,但實際上執行ipvsadm -Ln就ok了。

 

  3、數據庫從庫狀態檢測腳本是否使用?

   答:我覺得這個應該根據具體的業務系統的需求去考慮,我的系統要求的是能夠持續提供服務,對數據一致性的要求沒有那麼高,所以我只需要對同步狀態進行

         告警,並保證能及時處理即可,並不需要停止服務這麼嚴苛。另外腳本使用perl或者shell實際上應該沒有什麼不同。

ok!整個方案就這樣了,中間省略了一些步驟,比如數據庫主從服務的搭建,LVS高可用的搭建,這兩個服務我在很久之前就搭建了無數次,實在是懶得再寫,並且這種單獨的服務在網上已經有了無數個攻略,寫的價值不是很大,大家各種研究下吧。

  另外水平有限,如果有所遺漏和錯誤請大家指出,我及時修改,如果有更完善的方案,大家能分享就更好了。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved