centos7 yum安裝nginx源地址:rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpmhtml
如下內容爲阿銘老師提供的master——keepalived.conf 配置模板linux
global_defs { notification_email { aming@aminglinux.com } notification_email_from root@aminglinux.com smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS_DEVEL } vrrp_script chk_nginx { script "/usr/local/sbin/check_ng.sh" 這裏定義了一個檢測腳本,須要稍後寫一個腳本 interval 3 } vrrp_instance VI_1 { state MASTER 角色,master interface ens33 定義網卡名字,要跟本身網卡名字同樣 virtual_router_id 51 定義路由器的ID,主從同樣。 priority 100 權重,主從的權重是不同的。 advert_int 1 authentication { auth_type PASS 認證模式爲 password auth_pass aminglinux>com 密碼 } virtual_ipaddress { 192.168.188.100 定義vip, 主從都要定義相同的IP,一個主從都能解析到的IP } track_script { chk_nginx 前面定義了檢查腳本,這裏要加載 } }
配置文件定義完以後,下面定義檢測腳本,檢查nginx是否正常的一個腳本。nginx
#!/bin/bash #時間變量,用於記錄日誌 d=`date --date today +%Y%m%d_%H:%M:%S` #計算nginx進程數量 n=`ps -C nginx --no-heading|wc -l` #若是進程爲0,則啓動nginx,而且再次檢測nginx進程數量, #若是還爲0,說明nginx沒法啓動,此時須要關閉keepalived if [ $n -eq "0" ]; then /etc/init.d/nginx start n2=`ps -C nginx --no-heading|wc -l` if [ $n2 -eq "0" ]; then echo "$d nginx down,keepalived will stop" >> /var/log/check_ng.log systemctl stop keepalived fi fi
配置完腳本,要給腳本改爲755權限。apache
[root@localhost ~]# chmod 755 /usr/local/sbin/check_ng.sh
[root@localhost ~]# systemctl start keepalived
[root@localhost ~]# ps aux |grep nginx root 2556 0.0 0.2 120796 2092 ? Ss 09:55 0:00 nginx: master process /usr/sbin/nginx nginx 2557 0.0 0.3 121260 3132 ? S 09:55 0:00 nginx: worker process root 2646 0.0 0.0 112724 976 pts/0 R+ 10:01 0:00 grep --color=auto nginx [root@localhost ~]# /etc/init.d/nginx stop /etc/init.d/nginx:行1: kconfig:: 未找到命令 Stopping nginx (via systemctl): [ 肯定 ] [root@localhost ~]# ps aux |grep nginx root 2750 0.0 0.2 120796 2092 ? Ss 10:02 0:00 nginx: master process /usr/sbin/nginx nginx 2751 0.0 0.3 121260 3132 ? S 10:02 0:00 nginx: worker process root 2762 0.0 0.0 112724 972 pts/0 R+ 10:02 0:00 grep --color=auto nginx
日誌在這裏: /var/log/messagesvim
ip add 能夠查看到vip後端
[root@localhost ~]# iptables -F [root@localhost ~]# iptables -nvL Chain INPUT (policy ACCEPT 10 packets, 724 bytes) pkts bytes target prot opt in out source destination Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 9 packets, 800 bytes) pkts bytes target prot opt in out source destination [root@localhost ~]#
[root@localhost ~]# getenforce Disabled
[root@aming2 ~]# systemctl stop firewalld
編輯:/etc/keepalived/keepalived.confcentos
bal_defs { notification_email { aming@aminglinux.com } notification_email_from root@aminglinux.com smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS_DEVEL } vrrp_script chk_nginx { script "/usr/local/sbin/check_ng.sh" interval 3 } vrrp_instance VI_1 { state BACKUP 這裏master改爲backup interface ens33 virtual_router_id 51 priority 90 這裏權重是90,要比從少一些 advert_int 1 authentication { auth_type PASS auth_pass aminglinux>com } virtual_ipaddress { 192.168.159.254 虛擬ip保持一致 } track_script { chk_nginx } }
而後配置監測腳本:vim /usr/local/sbin/check_ng.shbash
#!/bin/bash #時間變量,用於記錄日誌 d=`date --date today +%Y%m%d_%H:%M:%S` #計算nginx進程數量 n=`ps -C nginx --no-heading|wc -l` #若是進程爲0,則啓動nginx,而且再次檢測nginx進程數量, #若是還爲0,說明nginx沒法啓動,此時須要關閉keepalived if [ $n -eq "0" ]; then /etc/init.d/nginx start ------這個地方注意:若是是yum安裝的nginx須要改爲這條命令: systemctl start nginx n2=`ps -C nginx --no-heading|wc -l` if [ $n2 -eq "0" ]; then echo "$d nginx down,keepalived will stop" >> /var/log/check_ng.log systemctl stop keepalived fi fi
權限 chmod 755 !$服務器
啓動keepalived網絡
[root@aming2 ~]# systemctl start keepalived [root@aming2 ~]# ps aux |grep keep root 2088 0.0 0.1 118572 1376 ? Ss 11:36 0:00 /usr/sbin/keepalived -D root 2089 0.0 0.3 127436 3288 ? S 11:36 0:00 /usr/sbin/keepalived -D root 2090 0.0 0.2 127376 2840 ? S 11:36 0:00 /usr/sbin/keepalived -D root 2134 0.0 0.0 112664 972 pts/0 R+ 11:37 0:00 grep --color=auto keep [root@aming2 ~]#
檢測主從兩個站點是否能夠訪問,yum 安裝的nginx 王爺目錄在這裏,/usr/share/nginx/html/index.html
更改index.html 內容,讓主從內容不同,易區分。
這時候訪問vip的地址,是訪問到了主的頁面,跟從沒有關係。
停掉主的keepalived以後,在訪問vip的地址發現,訪問頁面變成了,從的頁面。
恢復主的服務後,vip訪問的地址又變回了主的頁面。
主流開源軟件LVS、keepalived、haproxy、nginx等
其中LVS屬於4層(網絡OSI 7層模型),nginx屬於7層,haproxy既能夠認爲是4層,也能夠當作7層使用
keepalived的負載均衡功能其實就是lvs
lvs這種4層的負載均衡是能夠分發除80外的其餘端口通訊的,好比MySQL的,而nginx僅僅支持http,https,mail,haproxy也支持MySQL這種
相比較來講,LVS這種4層的更穩定,能承受更多的請求,而nginx這種7層的更加靈活,能實現更多的個性化需求
LVS是由國人章文嵩開發 流行度不亞於apache的httpd,基於TCP/IP作的路由和轉發,穩定性和效率很高
LVS最新版本基於Linux內核2.6,有好多年不更新了
LVS有三種常見的模式:NAT、DR、IP Tunnel
LVS架構中有一個核心角色叫作分發器(Load balance),它用來分發用戶的請求,還有諸多處理用戶請求的服務器(Real Server,簡稱rs)
這種模式藉助iptables的nat表來實現
用戶的請求到分發器後,經過預設的iptables規則,把請求的數據包轉發到後端的rs上去
rs須要設定網關爲分發器的內網ip
用戶請求的數據包和返回給用戶的數據包所有通過分發器,因此分發器成爲瓶頸
在nat模式中,只須要分發器有公網ip便可,因此比較節省公網ip資源
這種模式,須要有一個公共的IP配置在分發器和全部rs上,咱們把它叫作vip
客戶端請求的目標IP爲vip,分發器接收到請求數據包後,會對數據包作一個加工,會把目標IP改成rs的IP,這樣數據包就到了rs上
rs接收數據包後,會還原原始數據包,這樣目標IP爲vip,由於全部rs上配置了這個vip,因此它會認爲是它本身
這種模式,也須要有一個公共的IP配置在分發器和全部rs上,也就是vip
和IP Tunnel不一樣的是,它會把數據包的MAC地址修改成rs的MAC地址
rs接收數據包後,會還原原始數據包,這樣目標IP爲vip,由於全部rs上配置了這個vip,因此它會認爲是它本身