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高可用實踐