■LVS在企業應用中抗負載能力很強,但存在不足
■Haproxy是一款可提供高可用性、負載均衡、及基於TCP和HTTP應用代理的軟體
■ Haproxy支援多種排程演演算法,最常用的有三種
RR (Round Robin)
◆ RR演演算法是最簡單最常用的一種演演算法,即輪詢排程
理解舉例
◆ 有三個節點A、B、C
◆ 第一個使用者存取會被指派到節點A
◆ 第二個使用者存取會被指派到節點B
◆ 第三個使用者存取會被指派到節點C
◆ 第四個使用者存取繼續指派到節點A,輪詢分配存取請求實現負載均衡效果
■ LC (Least Connections)
■ 理解舉例
■ SH(Source Hashing)
■理解舉例
########### 使用Haproxy搭建Web群集 #######
場景介紹:
主機 作業系統 IP地址 主要軟體
Haproxy伺服器 CentoS7.6 192.168.100.21 haproxy-1.5.19.tar.gz
Nginx伺服器1 CentoS7.6 192.168.100.22 Nginx-1.12.2.tar.gz
Nginx伺服器2 CentoS7.6 192.168.100.23 Nginx-1.12.2.tar.gz
儲存伺服器 CentoS7.6 192.168.100.24 nfs-utils rpcbind
######偵錯儲存伺服器 192.168.100.24 #####
[root@localhost ~]#rpm -q nfs-utils ###如果沒裝,yum -y install nfs-utils
[root@localhost ~]#rpm -q rpcbind ###如果沒裝,yum -y install rpcbind
[root@localhost ~]# mkdir /opt/51xit /opt/52xit ###建立51和52目錄
[root@localhost ~]# echo "this is www.51xit.com" >/opt/51xit/index.html ###建一個51xit首頁並寫入東西
[root@localhost ~]# echo "this is www.52xit.com" >/opt/52xit/index.html ###建一個52xit首頁並寫入東西
[root@localhost ~]# vi /etc/exports ###釋出出去
/opt/51xit 192.168.100.0/24 (rw,sync)
/opt/52xit 192.168.100.0/24 (rw,sync)
[root@localhost ~]# systemctl start rpcbind ###啟動rpcbind 先啟動rpcbind在啟動nfs
[root@localhost ~]# systemctl start nfs
[root@localhost ~]# systemctl enable nfs
[root@localhost ~]# systemctl enable rpcbind
######編譯安裝Nginx伺服器1 192.168.100.22 ######
1、編譯安裝 Nginx
Nginx 安裝檔案可以從官方網站 http://www.nginx.org/下載。
下面以穩定版 Nginx 1.12.2為例 上傳至/opt下
[root@localhost ~]#yum -y install pcre-devel zlib-devel gcc-c++ ### 依賴環境裝一下
[root@localhost ~]# useradd -M -s /sbin/nologin nginx #### 建立賬戶
[root@localhost ~]# cd /opt
[root@localhost ~]# tar zxvf nginx-1.12.2.tar.gz
[root@localhost ~]# cd nginx-1.12.2
[root@localhost nginx-1.12.2]#
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx
[root@localhost nginx-1.12.2]# make && make install ###編譯安裝
[root@localhost nginx-1.12.2]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
[root@localhost nginx-1.12.2]# nginx ### 啟動nginx
[root@localhost nginx-1.12.2]# netstat -anutp |grep nginx ### 檢視啟動情況
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 21135/nginx: master
■啟動、 停止 Nginx
[root@localhost nginx-1.12.2]# killall -3 nginx ###停止服務 -1是安全重新啟動
如果出現: -bash: killall: command not found
[root@localhost nginx-1.12.2]# yum -y install psmisc ###如果出現上面報錯就代表沒有安裝killall功能,yum安裝一下
[root@localhost nginx-1.12.2]# killall -3 nginx ###然後停止nginx服務
[root@localhost nginx-1.12.2]# nginx -t ###對組態檔檢查一下
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
■新增 Nginx 系統服務
[root@localhost ~]# vim /lib/systemd/system/nginx.service ###注意目錄別進錯了
[Unit]
Description=nginx ####描述
After=network.target ####描述服務類別
[Service]
Type=forking ####後臺執行形式
PIDFile=/usr/local/nginx/logs/nginx.pid ####PID 檔案位置
ExecStart=/usr/local/nginx/sbin/nginx ####啟動服務
ExecReload=/usr/bin/kill -s HUP $MAINPID ####根據 PID 過載設定
ExecStop=/usr/bin/kill -s QUIT $MAINPID ####根據 PID 終止程序
PrivateTmp=true
[Install]
WantedBy=multi-user.target
################下面是刷的#############
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/bin/kill -s HUP $MAINPID
ExecStop=/usr/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
[root@localhost nginx-1.12.2]# systemctl start nginx ### 啟動nginx
[root@localhost nginx-1.12.2]# systemctl enable nginx ### 開機自啟nginx
[root@localhost nginx-1.12.2]# chmod 754 /lib/systemd/system/nginx.service ### 許可權也要給一下
[root@localhost nginx-1.12.2]# yum -y install nfs-utils ### 把nfs裝一下,有的已經裝了的就不用裝了
[root@localhost nginx-1.12.2]# showmount -e 192.168.100.24 ###測試一下
[root@localhost ~]# mount 192.168.100.24:/opt/51xit /usr/local/nginx/html/ ###臨時掛載,可以直接永久掛載
[root@localhost ~]# vi /etc/fstab ###編輯永久掛載
192.168.100.24:/opt/51xit/ /usr/local/nginx/html/ nfs defaults,_netdev 0 0 ###開機自動掛載,注意格式對齊
[root@localhost nginx-1.12.2]# init6 ###重新啟動伺服器
[root@localhost nginx-1.12.2]# systemctl restart nginx ###重新啟動nginx
######編譯安裝Nginx伺服器2 192.168.100.23 ######
1、編譯安裝 Nginx
Nginx 安裝檔案可以從官方網站 http://www.nginx.org/下載。
下面以穩定版 Nginx 1.12.2為例 上傳至/opt下
[root@localhost ~]#yum -y install pcre-devel zlib-devel gcc-c++ ### 依賴環境裝一下
[root@localhost ~]# useradd -M -s /sbin/nologin nginx #### 建立賬戶
[root@localhost ~]# cd /opt
[root@localhost ~]# tar zxvf nginx-1.12.2.tar.gz
[root@localhost ~]# cd nginx-1.12.2
[root@localhost nginx-1.12.2]#
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx
[root@localhost nginx-1.12.2]# make && make install ###編譯安裝
[root@localhost nginx-1.12.2]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
[root@localhost nginx-1.12.2]# nginx ### 啟動nginx
[root@localhost nginx-1.12.2]# netstat -anutp |grep nginx ### 檢視啟動情況
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 21135/nginx: master
■啟動、 停止 Nginx
[root@localhost nginx-1.12.2]# killall -3 nginx ###停止服務 -1是安全重新啟動
如果出現: -bash: killall: command not found
[root@localhost nginx-1.12.2]# yum -y install psmisc ###如果出現上面報錯就代表沒有安裝killall功能,yum安裝一下
[root@localhost nginx-1.12.2]# killall -3 nginx ###然後停止nginx服務
[root@localhost nginx-1.12.2]# nginx -t ###對組態檔檢查一下
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
■新增 Nginx 系統服務
[root@localhost ~]# vim /lib/systemd/system/nginx.service ###注意目錄別進錯了
[Unit]
Description=nginx ####描述
After=network.target ####描述服務類別
[Service]
Type=forking ####後臺執行形式
PIDFile=/usr/local/nginx/logs/nginx.pid ####PID 檔案位置
ExecStart=/usr/local/nginx/sbin/nginx ####啟動服務
ExecReload=/usr/bin/kill -s HUP $MAINPID ####根據 PID 過載設定
ExecStop=/usr/bin/kill -s QUIT $MAINPID ####根據 PID 終止程序
PrivateTmp=true
[Install]
WantedBy=multi-user.target
################下面是刷的#############
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/bin/kill -s HUP $MAINPID
ExecStop=/usr/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
[root@localhost nginx-1.12.2]# systemctl start nginx ### 啟動nginx
[root@localhost nginx-1.12.2]# systemctl enable nginx ### 開機自啟nginx
[root@localhost nginx-1.12.2]# chmod 754 /lib/systemd/system/nginx.service ### 許可權也要給一下
[root@localhost nginx-1.12.2]# yum -y install nfs-utils ### 把nfs裝一下,有的已經裝了的就不用裝了
[root@localhost nginx-1.12.2]# showmount -e 192.168.100.24 ###測試一下
[root@localhost ~]# mount 192.168.100.24:/opt/51xit /usr/local/nginx/html/ ###臨時掛載,可以直接永久掛載
[root@localhost ~]# vi /etc/fstab ###編輯永久掛載
192.168.100.24:/opt/52xit/ /usr/local/nginx/html/ nfs defaults,_netdev 0 0 ###開機自動掛載,注意格式對齊
[root@localhost nginx-1.12.2]# init 6 ###重新啟動伺服器
[root@localhost nginx-1.12.2]# systemctl restart nginx ###重新啟動nginx
#####設定Haproxy 伺服器 192.168.100.21 #####
1、編譯安裝 Haproxy
上傳 haproxy-1.4.24.tar.gz 到/opt目錄下
[root@localhost ~]# yum -y install pcre-devel bzip2-devel gcc gcc-c++
[root@localhost ~]# cd /opt
[root@localhost opt]# tar xzvf haproxy-1.4.24.tar.gz
[root@localhost opt]# cd haproxy-1.4.24/
[root@localhost haproxy-1.4.24]# make TARGET=linux26
[root@localhost haproxy-1.4.24]# make install
2、設定Haproxy 服務
[root@localhost haproxy-1.4.24]# mkdir /etc/haproxy
[root@localhost haproxy-1.4.24]# cp examples/haproxy.cfg /etc/haproxy/
[root@localhost haproxy-1.4.24]# vi /etc/haproxy/haproxy.cfg
global
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
#log loghost local0 info
maxconn 4096
#chroot /usr/share/haproxy
uid 99
gid 99
daemon
#debug
#quiet
defaults
log global
mode http
option httplog
option dontlognull
retries 3
#redispatch
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000
listen webcluster 0.0.0.0:80
option httpchk GET /index.html
balance roundrobin
server inst1 192.168.100.22:80 check inter 2000 fall 3
server inst2 192.168.100.23:80 check inter 2000 fall 3
[root@localhost haproxy-1.4.24]# cp examples/haproxy.init /etc/init.d/haproxy ###拷貝一下
[root@localhost haproxy-1.4.24]# chmod 755 /etc/init.d/haproxy ###給許可權
[root@localhost haproxy-1.4.24]# chkconfig --add haproxy ###把這個服務加到系統裡
[root@localhost haproxy-1.4.24]# ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy ###建立軟連線
[root@localhost haproxy-1.4.24]# service haproxy start ###啟動一下
[root@localhost haproxy-1.4.24]# systemctl stop haproxy.service ###另一種啟動方法 先關閉
[root@localhost haproxy-1.4.24]# systemctl start haproxy.service ###另一種啟動方法 在啟動
##########測試網站#######
瀏覽器輸入192.168.100.21 重新整理會發現來回切換兩個網站頁面,說明已經實現了負載均衡
注意:不要用7.4版本的做儲存伺服器,會出現bug不能共用!!!