linux下安裝haproxy作為端口轉發服務器,以及安裝keepalived作為haproxy高可用方案


一、安裝haproxy作為端口轉發服務器(主服務器:172.28.5.4,備服務器:172.28.5.8,浮點IP為:172.28.5.6)

1、安裝依賴包

yum -y install wget  gcc gcc-c++

1、下載

cd /usr/local/src

wget https://github.com/haproxy/haproxy/archive/v1.5-dev20.tar.gz

2、解壓 

tar - zvxf v1.5-dev20.tar.gz

cd haproxy-1.5-dev20

3、編譯

查看內核版本
[root@localhost haproxy-1.5-dev20]# uname -a Linux localhost.localdomain 3.10.0-862.el7.x86_64 #1 SMP Fri Apr 20 16:44:24 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
make TARGET=linux310 ARCH=x86_64 PREFIX=/usr/local/haproxy
make install PREFIX=/usr/local/haproxy

4、配置文件

mkdir /etc/haproxy
touch /etc/haproxy/haproxy.conf
vim /etc/haproxy/haproxy.conf

 

global
log 127.0.0.1 local2 ###[err warning info debug]
chroot /usr/local/haproxy
pidfile /var/run/haproxy.pid ###haproxy的pid存放路徑,啟動進程的用戶必須有權限訪問此文件
maxconn 65535 ###最大連接數,默認4000
daemon

defaults
mode tcp
log global
timeout connect 20s
timeout server 60s
timeout client 60s
retries 3

listen stats
mode http
bind 0.0.0.0:8888 #監聽端口
stats refresh 10s #統計頁面自動刷新時間
stats uri /stats #統計頁面url
stats realm Haproxy Manager #統計頁面密碼框上提示文本
stats auth admin:hl95smsjh #統計頁面用戶名和密碼設置
stats hide-version #隱藏統計頁面上HAProxy的版本信息

listen cmppv2
bind :7890 #監聽端口
server s1 xxx.xxx.xxx.xxx:7890 #轉發IP+端口


listen cmppv22
bind :7891 #監聽端口
server s2 xxx.xxx.xxx.xxx:7891 #轉發IP+端口

  5、啟動haproxy

ln -s /usr/local/haproxy/sbin/haproxy /usr/local/bin/
haproxy -f /etc/haproxy/haproxy.conf

6、查看啟動結果

ps -ef|grep ha

 

  

啟動成功

 7、添加統計端口8888和我們測試用端口7890和7891到防火牆

firewall-cmd --zone=public --add-port=7890/tcp --permanent
firewall-cmd --zone=public --add-port=7891/tcp --permanent
firewall-cmd --zone=public --add-port=8888/tcp --permanent
firewall-cmd --reload

 瀏覽器打開ip:8888/stats

目前兩個端口的當前連接數都是0,找一台機器telnet測試

[root@zabbix_server src]# telnet 172.28.18.104 7890
Trying 172.28.18.104...
Connected to 172.28.18.104.
Escape character is '^]'.

此時,7890端口對應的當前連接數為1

telnet 7891

[root@zabbix_server src]# telnet 172.28.18.104 7891
Trying 172.28.18.104...
Connected to 172.28.18.104.
Escape character is '^]'.

  此時7891對應的連接為1。

同樣的在172.28.5.8的備份服務器上也安裝haproxy。

至此haproxy轉發服務器配置完畢

 

二、安裝keepalived做haproxy主備服務器高可用

在兩台服務器上分別安裝keepalived

1、安裝依賴包

yum -y install wget  pcre*  openssl-devel  zlib

2、下載

cd /usr/local/src
wget http://www.keepalived.org/software/keepalived-1.3.4.tar.gz

3、解壓

tar -zxvf keepalived-1.3.4.tar.gz
cd  keepalived-1.3.4

4、編譯

./configure --prefix=/usr/local/keepalived-1.3.4
make && make install

5、配置文件

mkdir /etc/keepalived
touch /etc/keepalived/keepalived.conf
vim /etc/keepalived/keepalived.conf
 
         

global_defs {
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
#vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}

 
         


vrrp_script chk_haproxy { #調用外部的輔助腳本進行資源監控,並根據監控的結果狀態能實現優先動態調整
script "/usr/local/keepalived-1.3.4/check_haproxy.sh"

timeout 10  #腳本執行超時設置為10秒,默認為2秒,采用默認值可能導致腳本還沒有執行完就已經超時了,所以設置超時時間為10秒

interval 2 #每2秒檢查執行一次
weight 2
fall 2 #如果連續兩次檢測為錯誤狀態則認為服務部可用
rise 1 #檢測一次成功就認為服務正常
}

 
         

vrrp_instance VI_1 { #配置虛擬路由實例
state MASTER #定義該節點為MASTER節點
interface em1 #定義VIP綁定的物理網卡
virtual_router_id 51 #設置虛路由擬路由id,同一集群的節點群必須相同
priority 150 #設定優先級
advert_int 1 #設定master與backup之間vrrp通告的時間間隔,單位是秒
#nopreempt #設定keepalived的切換模式,默認是搶占failover,這里是非搶占,沒有啟用
authentication { #定義驗證方式與密碼
auth_type PASS
auth_pass xxxxxx
}
#unicast_src_ip 172.28.18.104 #自己ip
#unicast_peer { ##單播模式
# 172.28.18.69 ##另一個ip
#}
virtual_ipaddress {
172.28.18.8
}
track_script { #用於追蹤腳本執行狀態,定義在vrrp_instance段中
chk_haproxy
}
}

 

將路徑為/usr/local/keepalived-1.3.4/sbin/keepalived拷貝到/usr/sbin/下

[root@localhost sbin]# cp /usr/local/keepalived-1.3.4/sbin/keepalived /usr/sbin/

將路徑為/usr/local/src/keepalived-1.3.4/keepalived/etc/init.d的文件keepalived拷貝到/etc/init.d下

cp /usr/local/src/keepalived-1.3.4/keepalived/etc/init.d/keepalived /etc/init.d/

將路徑為/usr/local/keepalived-1.3.4/etc/sysconfig/keepalived的文件拷貝到 /etc/sysconfig/keepalived

cp /usr/local/keepalived-1.3.4/etc/sysconfig/keepalived  /etc/sysconfig/
/usr/local/keepalived-1.3.4/check_haproxy.sh用於檢測haproxy進程是否存在,不存在的話,嘗試啟動haproxy,如果啟動沒有成功,則關閉自己服務器的keepalived服務文件內容如下
#!/bin/bash
COUNT=$(ps -C haproxy --no-header |wc -l)
echo $COUNT

if [ $COUNT -eq 0 ]
then
        haproxy -f /etc/haproxy/haproxy.conf 2>/dev/null
        #echo "重啟haproxy"
        sleep 3
        COUNT=$(ps -C haproxy --no-header |wc -l)
        if [ $COUNT -eq 0 ]
        then
                #echo "停止keepalived"
                killall keepalived 2>/dev/null
fi fi

6、添加執行權限

chmod +x /etc/init.d/keepalived
chmod +x /usr/local/keepalived-1.3.4/check_haproxy.sh

 

7、添加keepalived到系統服務

chkconfig --add keepalived

8、啟動

service keepalived start

9、查看

service keepalived  status

啟動成功

10、查看網卡的浮點IP設置

ip a

 

設置成功

同樣在備份服務器172.28.5.8上也安裝keppalived服務,唯一不同的是keepalived配置文件

! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}


vrrp_script chk_haproxy {  #調用外部的輔助腳本進行資源監控,並根據監控的結果狀態能實現優先動態調整
   script "/usr/local/keepalived-1.3.4/check_haproxy.sh"
timeout 10 #腳本執行超時設置為10秒,默認為2秒,采用默認值可能導致腳本還沒有執行完就已經超時了,所以設置超時時間為10秒 interval 2 #每2秒檢查執行一次 weight 2 fall 2 #如果連續兩次檢測為錯誤狀態則認為服務部可用 rise 1 #檢測一次成功就認為服務正常 } vrrp_instance VI_1 { #配置虛擬路由實例 state BACKUP #定義該節點為BACKUP節點 interface em1 #定義VIP綁定的物理網卡 virtual_router_id 51 #設置虛路由擬路由id,同一集群的節點群必須相同 priority 95 #設定優先級 advert_int 1 #設定master與backup之間vrrp通告的時間間隔,單位是秒 #nopreempt #設定keepalived的切換模式,默認是搶占failover,這里是非搶占,沒有啟用 authentication { #定義驗證方式與密碼 auth_type PASS auth_type PASS auth_pass hl951234 } virtual_ipaddress { 172.28.5.6 } track_script { #用於追蹤腳本執行狀態,定義在vrrp_instance段中 chk_haproxy } }
state BACKUP     #定義該節點為BACKUP節點
priority 95      #設定優先級,備份服務器優先級低一些。主服務器設置的是100
啟動備份服務器keepalived服務

啟動成功,但是從節點會搶占VIP,說明keepalived節點之間通信失敗,此時注意兩個問題

1、Keepalived使用vrrp組播,默認地址是224.0.0.18,因此要配置防火牆允許通行vrrp協議,具體操作

iptables:

 vim /etc/sysconfig/iptables
添加
-A INPUT -d 224.0.0.18 -j ACCEPT
service iptables restart

firewalld:

firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --in-interface em1 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
firewall-cmd --direct --permanent --add-rule ipv4 filter OUTPUT 0 --in-interface em1 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
firewall-cmd --reload

2、第一種方法添加了還是不行,則可能是上聯交換機禁用了組播方式,可以修改keepalivd配置文件,在virtual_ipaddress上添加如下內容改為單播方式

unicast_src_ip 172.28.5.4 #自己ip
unicast_peer { ##單播模式
172.28.5.8 ##另一個ip
}

 

  重啟keppalived主從節點服務,此時從節點不會再搶占vip了。

 

三、測試高可用

1、關閉主服務器172.28.5.4的keepalived服務

service keepalived stop

 

2、查看IP

ip a

 此時浮點IP已經解綁

再關閉172.28.5.4haproxy服務

kill -9 37655

此時telnet 172.28.5.4 7890,已經不能連接

但是 telnet 172.28.5.6 7890 ,依然可以連接,說明172.28.5.6IP已經漂移到172.28.5.8的備份服務器上

3、恢復主服務器haproxy以及keepalived服務

service keepliaved start

keepliaved會自動監測haproxy服務,並重啟

 

 

 查看ip

ip a

此時VIP已經成功漂移回主節點服務器,測試 telnet 172.28.5.6 7890成功連接。

在從節點服務器運行

ip a

此時VIP已經解綁。

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM