1. 程式人生 > >keepalived+lvs+mysql cluster架構實現負載均衡

keepalived+lvs+mysql cluster架構實現負載均衡

一、環境

用途 ip os memory
排程器 172.16.48.204 CentOS 5.5 64bit 32G
sql節點1 172.16.48.206 CentOS 5.5 64bit 32G
sql節點2 172.16.48.207 CentOS 5.5 64bit 32G
sql節點3 172.16.48.208 CentOS 5.5 64bit 32G
sql節點4 172.16.48.211 CentOS 5.5 64bit 32G

VIP設定為:172.100.100.251 (注:不能和排程器、sql節點在一個網段上)

在排程器172.16.48.204電腦上,用route add default dev eth1
命令新增路由,使得

172.16.48.204節點有對100網段的訪問許可權。

二、架構圖

這裡排程器只用了一個節點,沒有設定Backup

三、軟體下載

lvs:    http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz

keepalived:     http://www.keepalived.org/download.html

四、軟體安裝

編輯lvs的時候需要作業系統的核心,不然會報錯

configure: error: 
!!! OpenSSL is not properly installed on your system. !!!
!!! Can not include OpenSSL headers files. !!!

解決方法:yum install openssl*

可能 還會報錯:libipvs.c:253: 錯誤:提領指向不完全型別的指標

解決方法:yum -y install kernel-devel    可參考:http://692344.blog.51cto.com/blog/682344/804278

如果還是不行,可能是由於lvs keepalived的版本過高

1.在排程器172.16.48.204上安裝lvs

ln -s /usr/src/kernels/2.6.18-164.el5-i686/ /usr/src/linux
tar zxvf ipvsadm-1.24.tar.gz
cd ipvsadm-1.24
make && make install

2.在排程器172.16.48.204上安裝keepalived

tar zxvf keepalived-1.1.19.tar.gz
cd keepalived-1.1.19
./configure --prefix=/usr/local/keepalived
make 
make install
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
mkdir /etc/keepalived

3.配置keepalived.conf

vi /etc/keepalived/keepalived.conf
新增如下內容:

  1. global_defs {  
  2.     router_id HaMySQL_1  
  3. }  
  4. vrrp_sync_group VGM {  
  5.     group {  
  6.         VI_MYSQL  
  7.     }  
  8. }  
  9. vrrp_instance VI_MYSQL {  
  10.     state MASTER  
  11.     interface eth1  
  12.     virtual_router_id 100  
  13.     priority 100  
  14.     advert_int 1  
  15.     authentication {  
  16.         auth_type PASS  
  17.         auth_pass 1111  
  18.     }  
  19.     virtual_ipaddress {  
  20.         172.100.100.251/24  etho label eth0:1  
  21.     }  
  22. }  
  23. virtual_server 172.100.100.251 3306 {  
  24.     delay_loop 6  
  25.     lb_algo rr  
  26.     lb_kind DR  
  27.     # nat_mask 255.255.0.0  
  28. #persistence_timeout 50  
  29.     protocol TCP  
  30.     real_server 172.16.48.206 3306 {  
  31.         weight 3  
  32.         TCP_CHECK {  
  33.         connect_timeout 3  
  34.         nb_get_retry 3  
  35.         delay_before_retry 3  
  36.         connect_port 3306  
  37.         }  
  38.     }  
  39.     real_server 172.16.48.207 3306 {  
  40.         weight 3  
  41.         TCP_CHECK {  
  42.         connect_timeout 3  
  43.         nb_get_retry 3  
  44.         delay_before_retry 3  
  45.         connect_port 3306  
  46.         }  
  47.     }  
  48.     real_server 172.16.48.208 3306 {  
  49.         weight 3  
  50.         TCP_CHECK {  
  51.         connect_timeout 3  
  52.         nb_get_retry 3  
  53.         delay_before_retry 3  
  54.  connect_port 3306  
  55.         }  
  56.     }  
  57.     real_server 172.16.48.211 3306 {  
  58.         weight 3  
  59.         TCP_CHECK {  
  60.         connect_timeout 3  
  61.         nb_get_retry 3  
  62.         delay_before_retry 3  
  63.         connect_port 3306  
  64.         }  
  65.     }  
  66. }  


4.sql服務節點的配置

vi /etc/rc.d/init.d/realserver.sh 新增如下配置:

  1. #!/bin/bash  
  2. # description: Config realserver lo and apply noarp  
  3. SNS_VIP=172.100.100.251  
  4. /etc/rc.d/init.d/functions  
  5. case "$1" in  
  6. start)  
  7.        ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP  
  8.        /sbin/route add -host $SNS_VIP dev lo:0  
  9.        echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore  
  10.        echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce  
  11.        echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore  
  12.        echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce  
  13.        sysctl -p >/dev/null 2>&1  
  14.        echo "RealServer Start OK"  
  15.        ;;  
  16. stop)  
  17.        ifconfig lo:0 down  
  18.        route del $SNS_VIP >/dev/null 2>&1  
  19.        echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore  
  20.        echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce  
  21.        echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore  
  22.        echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce  
  23.        echo "RealServer Stoped"  
  24.        ;;  
  25. *)  
  26.        echo "Usage: $0 {start|stop}"  
  27.        exit 1  
  28. esac  
  29. exit 0  

新增加可執行的許可權
chmod +x /etc/rc.d/init.d/realserver.sh

注:四臺sql節點都要進行此步操作

五、啟動LVS節點(mysql cluster中的sql節點)

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

六、啟動排程器(keepalived的伺服器端啟動)
/etc/rc.d/init.d/keepalived start

啟動後可以用命令 tail -f /var/log/messages 進行檢視

若看到如下提示,則表示配置成功。

  1. [[email protected] mysql-cluster]# tail -f /var/log/messages  
  2. May 29 17:21:01 sg204 Keepalived_vrrp: Opening file '/etc/keepalived/keepalived.conf'.   
  3. May 29 17:21:01 sg204 Keepalived_vrrp: Configuration is using : 63921 Bytes  
  4. May 29 17:21:01 sg204 Keepalived_healthcheckers: Using LinkWatch kernel netlink reflector...  
  5. May 29 17:21:01 sg204 Keepalived_vrrp: Using LinkWatch kernel netlink reflector...  
  6. May 29 17:21:01 sg204 Keepalived_healthcheckers: Activating healtchecker for service [172.16.48.206:3306]  
  7. May 29 17:21:01 sg204 Keepalived_healthcheckers: Activating healtchecker for service [172.16.48.207:3306]  
  8. May 29 17:21:01 sg204 Keepalived_healthcheckers: Activating healtchecker for service [172.16.48.208:3306]  
  9. May 29 17:21:01 sg204 Keepalived_healthcheckers: Activating healtchecker for service [172.16.48.211:3306]  
  10. May 29 17:21:01 sg204 Keepalived_vrrp: VRRP sockpool: [ifindex(3), proto(112), fd(10,11)]  
  11. May 29 17:21:02 sg204 Keepalived_vrrp: VRRP_Instance(VI_MYSQL) Transition to MASTER STATE  
  12. May 29 17:21:03 sg204 Keepalived_vrrp: VRRP_Instance(VI_MYSQL) Entering MASTER STATE  
  13. May 29 17:21:03 sg204 Keepalived_vrrp: VRRP_Instance(VI_MYSQL) setting protocol VIPs.  
  14. May 29 17:21:03 sg204 Keepalived_healthcheckers: Netlink reflector reports IP 172.100.100.251 added  
  15. May 29 17:21:03 sg204 Keepalived_vrrp: VRRP_Instance(VI_MYSQL) Sending gratuitous ARPs on eth1 for 172.100.100.251  
  16. May 29 17:21:03 sg204 Keepalived_vrrp: VRRP_Group(VGM) Syncing instances to MASTER state  
  17. May 29 17:21:03 sg204 avahi-daemon[4768]: Registering new address record for 172.100.100.251 on eth1.  
  18. May 29 17:21:03 sg204 Keepalived_vrrp: Netlink reflector reports IP 172.100.100.251 added  
  19. May 29 17:21:08 sg204 Keepalived_vrrp: VRRP_Instance(VI_MYSQL) Sending gratuitous ARPs on eth1 for 172.100.100.251  


在排程器上用ipvsadm命令檢視,可以看到如下資訊

  1. [[email protected] mysql-cluster]# ipvsadm  
  2. IP Virtual Server version 1.2.1 (size=4096)  
  3. Prot LocalAddress:Port Scheduler Flags  
  4.   -> RemoteAddress:Port           Forward Weight ActiveConn InActConn  
  5. TCP  172.100.100.251:mysql rr  
  6.   -> 172.16.48.211:mysql          Route   3      0          0           
  7.   -> 172.16.48.208:mysql          Route   3      0          0           
  8.   -> 172.16.48.207:mysql          Route   3      0          0           
  9.   -> 172.16.48.206:mysql          Route   3      0          0   


七、遠端應用通過vip訪問mysql資料庫

要遠端應用程式訪問mysql資料庫,還需要一個遠端訪問的賬號和密碼,在mysql剛建立後,mysql是沒有遠端訪問賬號的,

在sql節點上增加遠端認證客戶:

grant 許可權1,許可權2,…許可權n on 資料庫名稱.表名稱 to 使用者名稱@使用者地址 identified by ‘連線口令’

  1. Mysql>:select user,host,password from mysql.user;    
  2. Mysql>: grant all privileges on *.* to [email protected]"%"  identified by '111111' with grant option;  


八、測試

在其他 節點上(排程器和sql節點之外的電腦),ping 172.100.100.251發現可以ping通

這裡選用的是172.16.48.201節點:

  1. [[email protected] ~]# ping 172.100.100.251  
  2. PING 172.100.100.251 (172.100.100.251) 56(84) bytes of data.  
  3. 64 bytes from 172.100.100.251: icmp_seq=1 ttl=64 time=0.093 ms  
  4. 64 bytes from 172.100.100.251: icmp_seq=2 ttl=64 time=0.164 ms  
  5. 64 bytes from 172.100.100.251: icmp_seq=3 ttl=64 time=0.162 ms  


在172.16.48.201上安裝mysql客戶端後,用命令 mysql -u admin -p -h 172.100.100.251測試發現可以 連線資料庫,

將172.16.48.208上的mysql服務停掉後,這時在高度器上tail -f var/log/messages會看到排程器自動將無效sql節點移除lvs了

  1. May 30 11:04:11 sg204 Keepalived_healthcheckers: TCP connection to [172.16.48.208:3306] failed !!!  
  2. May 30 11:04:11 sg204 Keepalived_healthcheckers: Removing service [172.16.48.208:3306] from VS [172.100.100.251:3306]  


再將172.16.48.208上的mysql服務啟動起來,這時

  1. May 30 11:06:53 sg204 Keepalived_healthcheckers: TCP connection to [172.16.48.208:3306] success.  
  2. May 30 11:06:53 sg204 Keepalived_healthcheckers: Adding service [172.16.48.208:3306] to VS [172.100.100.251:3306]  


哈哈!成功搞定

相關推薦

keepalived+lvs+mysql cluster架構實現負載均衡

一、環境 用途 ip os memory 排程器 172.16.48.204 CentOS 5.5 64bit 32G sql節點1 172.16.48.206 CentOS 5.5 64bit 32G sql節點2 172.16.48.207 CentOS 5.5 64bit 32G sql節點3 1

Linux學習總結(五十四)keepalived+lvs 雙機熱備負載均衡架構

DR LVS keepalived+lvs 一 LVS IP tunnel 模式介紹 IP隧道(IP tunneling)是將一個IP報文封裝在另一個IP報文的技術,這可以使得目標為一個IP地址的數據報文能被封裝和轉發到另一個IP地址。IP隧道技術亦稱為IP封裝技術(IP encapsulatio

Docker compose(多容器架構實現負載均衡

一、基本知識 Docker Compose 將所管理的容器分為三層,工程(project),服務(service)以及容器(contaienr)。Docker Compose 執行的目錄下的所有檔案(docker-compose.yml, extends 檔案或環境變數檔案等)組成一

MySQL Cluster SQL節點負載均衡、讀寫分離驗證

龍年完成的Amoeba環境初步搭建工作,蛇年開始進行讀寫分離和負載均衡的驗證工作。先祝大家蛇年一切順利。上回的工作我們只是完成Amoeba框架的引入,但是並不滿足讀寫分離場景的要求,因為最基本的,SQL節點只有一個。 所以,我們首先需要新增

LVS-DR簡單模型實現負載均衡

LVS-DR模型:基於直接路由的web服務 基本的原理:Director和RealServer必須在物理上有一個網絡卡通過區域網相連(高速交換機或者HUB),Director只負責排程請求,響應報文則由RealServer直接返回給Client。使用者的IP為

lvs+keepalived實現負載均衡

keepalive 裝載 announce log loopback -s scheduler sad apr LVS簡介: lvs是負載均衡較常用的軟件之一,lvs官方提供了一個命名的約定: vip:虛擬ip地址,縮寫是vip,vip是負載均衡器對外提供服務的ip。 ri

LVS(DR) + Keepalived 實現負載均衡

lvs keepalived apacheLVS(DR) + Keepalived 實現負載均衡高可用一、為什麽要使 用負載均衡技術?1、 系統高可用性2、 系統可擴展性3、 負載均衡能力 LVS+keepalived能很好的實現以上的要求,LVS提 供負載均衡,keepalived提供健康檢查,

Keepalived + LVS 實現負載均衡

chmod 成功 keepalive 健康檢查 ipaddr 高可用 得到 sse cap 一、Keepalived 與 LVS 簡單工作原理了解 1、Keepalived 管理LVS負載均衡軟件,Keepalived 可以通過讀取自身的配置文件,實現通過更底層的接口直接管

Keepalived結合LVS-DR實現負載均衡高可用集群

table 開啟 strong 部署 toc ifconf cal 指向 protocol 簡介 Keepalived期初是專門針對LVS設計的一款強大的輔助工具,主要用來提供故障切換和健康檢查功能—判斷LVS負載調度器、節點服務器的可用性,及時隔離並替換新的服務器,當故障

lvs負載均衡的四種模式原理,LVS之DR模型,LVS+keeaplived實現負載均衡keepalived實現高可用

一,LVS的簡介: Linux virtual system,是由目前阿里著名工程師章文嵩開發的一寬開源的軟體。LVS工作在一臺server上提供Directory(負載均衡器)的功能,它本身並不提供任何服務,只是把特定的請求轉發給對應的realserver(

LVS+keepalived 實現負載均衡

一、資源規劃     在開始搭建之前,我們首先需要準備和規劃好搭建所需的資源。因為效能等方面的考慮,我們使用當前比較流行的DR模式。 搭建前我們需要了解,搭建環境的機器必須在同一網段內,此次環境搭建需要1個VIP和四臺機器(我這裡使用四臺VM) 具體清單如下: 伺服

Nginx+keepalived做雙機熱備,實現負載均衡(主主模式)

nginx keepalive Keepalived: 簡介:Keepalived的作用是檢測服務器的狀態,如果有一臺web服務器宕機,或工作出現故障,Keepalived將檢測到,並將有故障的服務器從系統中剔除,同時使用其他服務器代替該服務器的工作,當服務器工作正常後Keepali

Haproxy+keepalived實現負載均衡

keepalived haproxy Haproxy簡介: Haproxy是一個開源的高性能的反向代理或者說是負載均衡服務軟件之一,它支持雙機熱備、虛擬主機、基於TCP和HTTP應用代理等功能。其配置簡單,而且擁有很好的對服務器節點的健康檢查功能(相當於keepalived健康檢查)。

haproxy+keepalived實現負載均衡及高可用

keepalived+haproxy HAProxy是一個使用C語言編寫的自由及開放源代碼軟件,其提供高性能性、負載均衡,以及基於TCP和HTTP的應用程序代理。相較與 Nginx,HAProxy 更專註與反向代理,因此它可以支持更多的選項,更精細的控制,更多的健康狀態檢測機制和負載均衡算法。 H

Keepalived + Haproxy實現負載均衡高可用

liunx haproxy 高可用基於LVS實現Keepalived的高可用見:http://amelie.blog.51cto.com/12850951/1979636負載均衡為將用戶並發請求轉發到後臺若幹服務器,以分流方式均衡負載。均衡負載借用的軟件,我們這裏是Haproxy。而負責轉發的服務器,我們稱之

LVS實現負載均衡

lvs實現負載均衡一、 LVS簡介LVS是Linux Virtual Server的簡稱,也就是Linux虛擬服務器, 是一個由章文嵩博士發起的自由軟件項目,它的官方站點是www.linuxvirtualserver.org。現在LVS已經是 Linux標準內核的一部分,在Linux2.4內核以前,使用LVS

項目實戰02:LVS 實現負載均衡

請求報文 directory shared _for ipvsadm 路由轉發 更多 1-1 targe 目錄 實現基於LVS負載均衡集群的電商網站架構 實戰一:LVS的NAT模式實現負載均衡 實戰二:LVS的DR 模式實現負載均衡 實戰三:實現80、443

Keepalived+Nginx實現負載均衡高可用

技術 狀態 實現負載均衡 一定的 方式 mark 提供服務 priority usr 一、負載均衡高可用 Nginx作為負載均衡器,所有請求都到了Nginx,可見Nginx處於非常重點的位置,如果Nginx服務器宕機後端web服務將無法提供服務,影響嚴重。

使用LVS實現負載均衡原理及安裝配置詳解

配置 png 負載均衡 iptables .cn 詳解 文章 配置詳解 logs LVS是一個開源軟件,由章文嵩博士於1998年5月創立,可以實現Linux平臺下的簡單負載均衡。LVS是Linux Virtual Server的簡寫,是一個虛擬的服務器集群系統。LVS是基於

LVS-NAT與LVS-DR類型的負載均衡實現原理

限制 ann 所有 來講 默認 51cto 沖突 lvs-dr 配置 lvs-dr類型工作原理:①:client端向目標IP(VIP)發送請求,經由路由器和交換機設備和後,此時的請求數據包頭文件的目標MAC值為調度器的MAC,源MAC值為client的MAC,目標IP為VI