1. 程式人生 > >nginx高可用實踐

nginx高可用實踐

SM etc 利用 分享 VR color hand tool httpd

利用keepalived實現nginx調度器高可用;

1.在兩臺主機IP地址分別為(172.16.0.152 172.16.0.151)上分別配置keepalived

1.1同步時間,在一號服務器/etc/ntp.conf添加如下幾行,以此服務器提供ntp服務(172.16.0.151)

restrict 172.16.0.0/16
server ntp.sjtu.edu.cn ibust
server 127.127.1.0 ibust

使用另一臺主機172.16.0.152使用ntpdate 172.16.0.151同步時間

1.2在一號服務器安裝keepalived,並配置文件/etc/keepalived/keepalived.conf

global_defs {
   notification_email {
        root@localhost     
}
   notification_email_from keepalived@localhost
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id drct1
}
vrrp_script check_httpd {
   script "killall -0 nginx && exit 0 || exit 1"
   interval 1
   weight -20
}
vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass MTUwPBjd
    }
    virtual_ipaddress {
        172.16.0.200
    }
track_script {
                        check_httpd
    }
}

1.3同樣配置二號服務器的keepalived

global_defs {
   notification_email {
        root@localhost
}
   notification_email_from keepalived@localhost
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id drct2
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass MTUwPBjd
    }
    virtual_ipaddress {
        172.16.0.200
    }
}

1.4上述操作,是讓兩臺主機能夠實現動態ip地址浮動,當主服務器和附屬服務器都開啟時,虛擬ip地址會在主服務器上配置,當主服務器優先級降低時,附屬服務器會變成MASTER,虛擬ip地址會在跳轉到另一個服務器上

主服務器
Jun 15 17:05:04 bogon Keepalived_vrrp[8524]: VRRP_Instance(VI_1) forcing a new MASTER election
Jun 15 17:05:04 bogon Keepalived_vrrp[8524]: VRRP_Instance(VI_1) forcing a new MASTER election
Jun 15 17:05:05 bogon Keepalived_vrrp[8524]: VRRP_Instance(VI_1) Transition to MASTER STATE
Jun 15 17:05:06 bogon Keepalived_vrrp[8524]: VRRP_Instance(VI_1) Entering MASTER STATE
Jun 15 17:05:06 bogon Keepalived_vrrp[8524]: VRRP_Instance(VI_1) setting protocol VIPs.
Jun 15 17:05:06 bogon Keepalived_vrrp[8524]: VRRP_Instance(VI_1) Sending gratuitous ARPs on ens33 for 172.16.0.200
Jun 15 17:05:06 bogon Keepalived_healthcheckers[8523]: Netlink reflector reports IP 172.16.0.200 added
Jun 15 17:05:11 bogon Keepalived_vrrp[8524]: VRRP_Instance(VI_1) Sending gratuitous ARPs on ens33 for 172.16.0.200

2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:62:eb:24 brd ff:ff:ff:ff:ff:ff
    inet 172.16.0.151/16 brd 172.16.255.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet 172.16.0.200/32 scope global ens33
       valid_lft forever preferred_lft forever
附屬服務器       
Jun 15 16:45:10 bogon Keepalived_vrrp[8991]: VRRP_Instance(VI_1) Sending gratuitous ARPs on ens33 for 172.16.0.200
Jun 15 16:45:10 bogon Keepalived_healthcheckers[8990]: Netlink reflector reports IP 172.16.0.200 added
Jun 15 16:45:15 bogon Keepalived_vrrp[8991]: VRRP_Instance(VI_1) Sending gratuitous ARPs on ens33 for 172.16.0.200
Jun 15 16:56:12 bogon Keepalived_vrrp[8991]: Netlink reflector reports IP 192.168.1.117 added
Jun 15 16:56:12 bogon Keepalived_healthcheckers[8990]: Netlink reflector reports IP 192.168.1.117 added
Jun 15 17:05:04 bogon Keepalived_vrrp[8991]: VRRP_Instance(VI_1) Received higher prio advert
Jun 15 17:05:04 bogon Keepalived_vrrp[8991]: VRRP_Instance(VI_1) Entering BACKUP STATE
Jun 15 17:05:04 bogon Keepalived_vrrp[8991]: VRRP_Instance(VI_1) removing protocol VIPs.
Jun 15 17:05:04 bogon Keepalived_healthcheckers[8990]: Netlink reflector reports IP 172.16.0.200 removed

6: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:0f:b3:9b brd ff:ff:ff:ff:ff:ff
    inet 172.16.0.152/16 brd 172.16.255.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::857b:a8be:2221:44af/64 scope link 
       valid_lft forever preferred_lft forever
當down掉主服務器的nginx時,主服務器優先級會降低,此時附屬服務器
Jun 15 17:05:04 bogon Keepalived_healthcheckers[8990]: Netlink reflector reports IP 172.16.0.200 removed
Jun 15 17:07:56 bogon Keepalived_vrrp[8991]: VRRP_Instance(VI_1) forcing a new MASTER election
Jun 15 17:07:56 bogon Keepalived_vrrp[8991]: VRRP_Instance(VI_1) forcing a new MASTER election
Jun 15 17:07:57 bogon Keepalived_vrrp[8991]: VRRP_Instance(VI_1) Transition to MASTER STATE
Jun 15 17:07:58 bogon Keepalived_vrrp[8991]: VRRP_Instance(VI_1) Entering MASTER STATE
Jun 15 17:07:58 bogon Keepalived_vrrp[8991]: VRRP_Instance(VI_1) setting protocol VIPs.
Jun 15 17:07:58 bogon Keepalived_vrrp[8991]: VRRP_Instance(VI_1) Sending gratuitous ARPs on ens33 for 172.16.0.200
Jun 15 17:07:59 bogon Keepalived_healthcheckers[8990]: Netlink reflector reports IP 172.16.0.200 added


6: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:0f:b3:9b brd ff:ff:ff:ff:ff:ff
    inet 172.16.0.152/16 brd 172.16.255.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet 172.16.0.200/32 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::857b:a8be:2221:44af/64 scope link 
       valid_lft forever preferred_lft forever

2.構建LNAMMP架構:
1) Nginx既是前端調度器,又是反向代理緩存服務器;在①的基礎上,在每個服務器上安裝nginx並編輯/etc/nginx/nginx.conf,倆臺服務器配置一樣

    upstream kiyomi {    寫在http上下文中,用於定義後端服務器組
        server 172.16.0.154:80 weight=1;
        server 172.16.0.155:80 weight=1;
}
           location / {   寫在server上下文中,用於實現報文轉發
                proxy_pass http://kiyomi;
        }


2) 將php的session緩存於memcached中;在緩存服務器172.16.0.150上安裝memcached ,後端真實服務器172.16.0.154, 172.1.6.0.155上分別安裝php-fpm,php-pecl-memcache

然後在後面真實服務器上分別部署LAMP,並修改/etc/php-fpm.d/www.conf,添加

php_value[session.save_handler] = memcache
php_value[session.save_path] = "tcp://172.16.0.150:11211?persistent=1&weight=1&timeout=1&retry_interval=15"

分別在兩臺服務器上做session測試

技術分享圖片技術分享圖片

3) 使用php-fpm上部署Discuz論壇程序;

將discuz放到各後端服務器的上即可,因為是nginx是做代理轉發的,因此不需要持久連接

技術分享圖片



nginx高可用實踐