Centos7 keepalived +nginx

官網下載:
keepalived-2.0.12.tar
nginx-1.14.2.tar

主機A:192.168.0.110/24
主機B:192.168.0.120/24

VRRP:192.168.0.200/24

用winscp把文件上傳到 /usr/local/
cd /usr/local/
安裝keepalived:
(2)# cd /usr/local/
(3)# tar -zxvf keepalived-2.0.12.tar.gz
(4)# cd keepalived-2.0.12
(5)# ./configure --prefix=/usr/local/keepalived
(6)# make && make install

[root@localhost local]# tar -zxvf keepalived-2.0.12.tar.gz 

安裝路徑:/usr/local/keepalived

[root@localhost keepalived-2.0.12]# ./configure --prefix=/usr/local/keepalived
[root@localhost keepalived-2.0.12]# make && make install

如果是新的系統安裝是需要安裝依賴包,可以掛載光盤用本地yum安裝。

[root@localhost keepalived-2.0.12]# mkdir /mnt/cdrom
[root@localhost keepalived-2.0.12]# mount /dev/cdrom /mnt/cdrom/
mount: /dev/sr0 is write-protected, mounting read-only
 cd /etc/yum.repos.d/
 cp CentOS-Base.repo CentOS-Base.repo.bak
  vi CentOS-Base.repo

Centos7 keepalived +nginx
保存

[root@localhost yum.repos.d]# yum repolist

Centos7 keepalived +nginx

報錯1:
Centos7 keepalived +nginx
一次解決依賴包問題

[root@localhost yum.repos.d]# yum -y install openssl-devel gcc libnl-devel
[root@localhost keepalived-2.0.12]# yum -y install gcc   解決 

報錯2:
Centos7 keepalived +nginx

[root@localhost keepalived-2.0.12]# yum -y install openssl-devel  解決

報錯3:
Centos7 keepalived +nginx

[root@localhost keepalived-2.0.12]# yum -y install libnl-devel  解決

再次執行

./configure --prefix=/usr/local/keepalived  && make && make install    安裝成爲

沒有任何錯誤出現
Centos7 keepalived +nginx

將keepalived添加到系統服務中

# 拷貝執行文件
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
# 將初始化腳本拷貝到系統初始化目錄下
cp /usr/local/keepalived-2.0.10/keepalived/etc/init.d/keepalived /etc/init.d/
# 將keepalived配置文件拷貝到etc下
cp /usr/local/keepalived-2.0.10/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
# 創建keepalived文件夾
mkdir /etc/keepalived/
# 將keepalived配置文件拷貝到etc下
cp /usr/local/keepalived-2.0.10/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
# 添加可執行權限
chmod +x /etc/init.d/keepalived
# 添加keepalived到開機啓動
chkconfig --add keepalived
chkconfig keepalived on

此時已加入系統服務 可使用services 啓動

#啓動
service keepalived start
#停止
service keepalived stop
#重啓
service keepalived restart
#查看啓動情況
ps -aux |grep keepalived

修改剛添加到系統的配置文件:vi /etc/keepalived/keepalived.conf
找到虛擬路由節點 vrrp_instance(Virtual Router Redundancy Protocol)

global_defs {
   notification_email {
     [email protected]
     [email protected]
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL01    //router_id   不能想同
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state MASTER          //MASTER主節點,備用節點上設置爲state BACKUP
    interface ens32        //綁定虛擬機IP的網卡  兩個節點設置一樣 根據 ipaddr換成對應的網卡地址
    virtual_router_id 51  //VRRP組名,主副節點設置必須一樣,指名各個節點屬於同一個VRRP組,同一個組的節點互相搶IP
    priority 100         //優先級(1~254之間),備用節點必須比主節點優先級低
    advert_int 1         //組播信息發送間隔,兩個節點設置必須一樣
    authentication {    //設置驗證信息, 兩個節點設置必須一樣,用於節點間信息轉發時的加密
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {  // 虛擬IP兩個節點設置必須一樣,兩節點同時搶一個io
        192.168.0.200/24  // 如果兩個nginx的ip分別是192.168.0.110,.120,則此處的虛擬ip跟它倆同一個網段即可 24代表3個255的子網掩碼
    }
}

如果要 ping 192.168.0.200 還需要註釋掉配置文件中的# vrrp_strict

-----*****---
主備都搶到了虛擬ip
Centos7 keepalived +nginx
掛載了光盤可以直接安裝 tcpdump

 yum -y install tcpdump

採用 tcpdump 抓包定位問題,以下是在192.168.0.110 主節點的抓包結果
tcpdump -i ens32 vrrp -n
Centos7 keepalived +nginx

由上圖可以看到,192.168.93.140和192.168.93.141兩個IP在輪流發送組播信號。而正常的應該是由MASTER服務器發送組播,如果BACKUP收不到MASTER的組播信號了,那麼判定MASTER宕機了,BACKUP就會接手VIP

問題就是出現在了防火牆這裏,防火牆阻止了vrrp組包發送

如果是Firewalld防火牆 則主、備都運行下面的命令

[root@localhost etc]# firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --in-interface ens32 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
success
或者
[root@localhost etc]# firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --in-interface  ens32 --protocol vrrp -j ACCEPT
success
[root@localhost etc]# firewall-cmd --reload
success
[root@localhost etc]# 

如果添加了沒有正常重啓下服務器
Centos7 keepalived +nginx
重啓後正常.
服務器A:
Centos7 keepalived +nginx
服務器B:
Centos7 keepalived +nginx
至此Keepalived 安裝完成。


安裝 Nginx
安裝所需環境
Nginx 是 C語言 開發,建議在 Linux 上運行,當然,也可以安裝 Windows 版本,本篇則使用 CentOS 7 作爲安裝環境。

一. gcc 安裝
安裝 nginx 需要先將官網下載的源碼進行編譯,編譯依賴 gcc 環境,如果沒有 gcc 環境,則需要安裝:

yum install gcc-c++
二. PCRE pcre-devel 安裝
PCRE(Perl Compatible Regular Expressions) 是一個Perl庫,包括 perl 兼容的正則表達式庫。nginx 的 http 模塊使用 pcre 來解析正則表達式,所以需要在 linux 上安裝 pcre 庫,pcre-devel 是使用 pcre 開發的一個二次開發庫。nginx也需要此庫。命令:

yum install -y pcre pcre-devel
三. zlib 安裝
zlib 庫提供了很多種壓縮和解壓縮的方式, nginx 使用 zlib 對 http 包的內容進行 gzip ,所以需要在 Centos 上安裝 zlib 庫。

yum install -y zlib zlib-devel
四. OpenSSL 安裝
OpenSSL 是一個強大的安全套接字層密碼庫,囊括主要的密碼算法、常用的密鑰和證書封裝管理功能及 SSL 協議,並提供豐富的應用程序供測試或其它目的使用。
nginx 不僅支持 http 協議,還支持 https(即在ssl協議上傳輸http),所以需要在 Centos 安裝 OpenSSL 庫。

yum install -y openssl openssl-devel

不過在安裝keepalived 時都安裝 了這些依賴包了,下面直接安裝 就 行了.

[root@localhost ~]# cd /usr/local/
[root@localhost local]# tar -zxvf nginx-1.14.2.tar.gz 
[root@localhost local]# cd nginx-1.14.2
[root@localhost nginx-1.14.2]# ./configure --prefix=/usr/local/nginx

出現這個就 沒問題了
Centos7 keepalived +nginx

[root@localhost nginx-1.14.2]# make && nake install

Centos7 keepalived +nginx
如果 沒有生成Nginx 文件夾 就分開執行 1. make 2. make install

nginx 命令

5.啓動

$ /usr/local/nginx/sbin/nginx
檢查是否啓動成功:

打開瀏覽器訪問此機器的 IP,如果瀏覽器出現 Welcome to nginx! 則表示 Nginx 已經安裝並運行成功。

部分命令如下:
重啓:
$ /usr/local/nginx/sbin/nginx –s reload
停止:
$ /usr/local/nginx/sbin/nginx –s stop
測試配置文件是否正常:
 $ /usr/local/nginx/sbin/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
強制關閉:
$ pkill nginx

經過編譯安裝以及解決問題,Nginx 已經運行正常,但是此時 Nginx 並沒有添加進系統服務。接下來會將 Nginx 添加進系統服務並且設置開機啓動。
在 /usr/lib/systemd/system 目錄中添加 nginx.service 內容如下

[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

添加完成後再來看下
Centos7 keepalived +nginx
輸入 systemctl start nginx 啓動
Centos7 keepalived +nginx
然後輸入 systemctl enable nginx 設置開機啓動
Centos7 keepalived +nginx
Nginx 安裝成功.

下面來測試下 主備 nginx

[root@localhost ~]# cd /usr/local/nginx/html/

修改 主 機 index.html
添加 <h1>MASTTER:192.168.0.110</h1>
修改 備 機 index.html
添加 <h1>BACKUP:192.168.0.120</h1>
記得修改完要重啓nginx

[root@localhost html]# systemctl restart nginx

如果訪問不了 WEB 就在隔火牆上 添加

[root@localhost html]# firewall-cmd --zone=public --permanent --add-port=80/tcp
success
[root@localhost html]# firewall-cmd --reload
success

這是 正常情況下訪問:
Centos7 keepalived +nginx
下 面是關閉服務器 A 訪問的頁面
Centos7 keepalived +nginx
Centos7 keepalived +nginx
再把服務器A打 開訪問網頁

Centos7 keepalived +nginx
Centos7 keepalived +nginx

接着添加 一nginx 腳本 :新建 chk_nginx.sh

[root@localhost ~]# cd /etc/keepalived
[root@localhost keepalived]# touch chk_nginx.sh

內容如下
Centos7 keepalived +nginx

[root@localhost keepalived]# chmod +x chk_nginx.sh    添加執行權限

修改keepalived.conf
Centos7 keepalived +nginx

[root@localhost keepalived]# systemctl restart keepalived

ok 測試 腳本先 執行

[root@localhost keepalived]# systemctl stop nginx

再訪問 網頁,發現轉到備機上了
Centos7 keepalived +nginx
實驗完成。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章