利用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是做代理转发的,因此不需要持久连接