hb_sz 发表于 2018-11-12 07:39:27

nginx+keepalived完善

  nginx+keepalived 双机互备的文章,写那篇文章的时候没有想过如果apache或者nginx 挂了,而 keepalived 或者 机器没有死,那么主辅是不会切换的,今天就研究了一下该如何监控 nginx进程呢,看官方站看到了。vrrp_script 功能,但是用他的方法实在形不通,可能是我的方法不对,或者是个BUG。所以后来我自己写了个小脚本来完成工作。
?xml:namespace>  很明显的看出 server 2 已经接管了,已经变为 MASTER 了
  可以看出keepalived 的进程已经停到
  这时候看server 2的日志,看是否已经接管
  Apr 20 18:41:23 varnish Keepalived_vrrp: VRRP_Instance(VI_1) Transition to MASTER STATE
  Apr 20 18:41:24 varnish Keepalived_vrrp: VRRP_Instance(VI_1) Entering MASTER STATE
  Apr 20 18:41:24 varnish Keepalived_vrrp: Netlink: skipping nl_cmd msg...
  这时候看server 1的日志
  Apr 20 18:41:26 nginx Keepalived_healthcheckers: Terminating Healthchecker child process on signal
  Apr 20 18:41:26 nginx Keepalived_vrrp: Terminating VRRP child process on signal
  看日志可以看出,两台服务器的 MASTRE 和 BACUKUP 已经都正常了
  现在我们在 server 1 把 nginx 服务器停到
  Server 1 $> killall nginx
  监控 server 2的日志
  Apr2018:38:23 varnish Keepalived_healthcheckers: Opening file '/etc/keepalived/keepalived.conf'.
  Apr 20 18:38:23 varnish Keepalived_healthcheckers: Configuration is using : 3405 Bytes
  Apr 20 18:38:23 varnish Keepalived_vrrp: Using MII-BMSR NIC polling thread...
  Apr 20 18:38:23 varnish Keepalived_vrrp: Registering Kernel netlink reflector
  Apr 20 18:38:23 varnish Keepalived_vrrp: Registering Kernel netlink command channel
  Apr 20 18:38:23 varnish Keepalived_vrrp: Registering gratutious ARP shared channel
  Apr 20 18:38:23 varnish Keepalived_vrrp: Opening file '/etc/keepalived/keepalived.conf'.
  Apr 20 18:38:23 varnish Keepalived_vrrp: Configuration is using : 35486 Bytes
  Apr 20 18:38:23 varnish Keepalived_vrrp: VRRP_Instance(VI_1) Entering BACKUP STATE
  Apr 20 18:38:25 varnish Keepalived_vrrp: VRRP_Script(chk_http_port) succeeded
  监控 server 1 的日志
  Apr 20 18:37:39 nginx Keepalived_vrrp: Registering Kernel netlink command channel
  Apr 20 18:37:39 nginx Keepalived_vrrp: Registering gratutious ARP shared channel
  Apr 20 18:37:39 nginx Keepalived_vrrp: Opening file '/etc/keepalived/keepalived.conf'.
  Apr 20 18:37:39 nginx Keepalived_healthcheckers: Opening file '/etc/keepalived/keepalived.conf'.
  Apr 20 18:37:39 nginx Keepalived_healthcheckers: Configuration is using : 3401 Bytes
  Apr 20 18:37:39 nginx Keepalived_vrrp: Configuration is using : 35476 Bytes
  Apr 20 18:37:40 nginx Keepalived_vrrp: VRRP_Instance(VI_1) Transition to MASTER STATE
  Apr 20 18:37:41 nginx Keepalived_vrrp: VRRP_Instance(VI_1) Entering MASTER STATE
  Apr 20 18:37:41 nginx Keepalived_vrrp: Netlink: skipping nl_cmd msg...
  Apr 20 18:37:41 nginx Keepalived_vrrp: VRRP_Script(chk_http_port) succeeded
  8、测试,分别在两个服务器 启动 nginx 和 keepalived
  /usr/local/nginx/sbin/nginx
  /etc/init.d/keepalived start
  7.编写监控nginx监控脚本
  vim /opt/nginx_pid.sh
  #!/bin/bash
  # varsion 0.0.2
  # 根据一网友说这样做不科学,如果nginx服务起来了,但是我把keepalived 杀掉了,我的理由是,如果nginx死掉了,我觉得就很难在起来,再有就是nagios 当然要给你报警了啊。不过这位同学说的有道理,所以就稍加改了一下脚本
  A=`ps -C nginx --no-header |wc -l`                ## 查看是否有 nginx进程 把值赋给变量A
  if [ $A -eq 0 ];then                                       ## 如果没有进程值得为 零
  /usr/local/nginx/sbin/nginx
  sleep 3
  if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
  killall keepalived                        ## 则结束 keepalived 进程
  fi
  fi
  6.在 server 2 服务器 keepalived 配置
  vrrp_script chk_http_port {
  script "/opt/nginx_pid.sh"
  interval 2
  weight 2
  }
  vrrp_instance VI_1 {
  state BACKUP                              ### 设置为 辅机
  interface eth0
  virtual_router_id 51                        ### 与 MASTRE 设置 值一样
  priority 100                                     ### 比 MASTRE权重值 低
  authentication {
  auth_type PASS
  auth_pass eric                  ### 密码 与 MASTRE 一样
  }
  track_script {
  chk_http_port
  }
  virtual_ipaddress {
  192.168.6.7
  }
  }
  5.在server 1服务器编写配置文件
  vrrp_script chk_http_port {
  script "/opt/nginx_pid.sh"         ###监控脚本
  interval 2                           ###监控时间
  weight 2                              ###目前搞不清楚
  }
  vrrp_instance VI_1 {
  state MASTER                            ### 设置为 主
  interface eth0                           ### 监控网卡
  virtual_router_id 51                  ### 这个两台服务器必须一样
  priority 101                                 ### 权重值 MASTRE 一定要高于 BAUCKUP
  authentication {
  auth_type PASS             ### 加密
  auth_pass eric                ### 加密的密码,两台服务器一定要一样,不然会出错
  }
  track_script {
  chk_http_port                     ### 执行监控的服务
  }
  virtual_ipaddress {
  192.168.6.7                            ###    VIP 地址
  }
  }
  4.安装 keepalived
http://deidara.blog.51cto.com/images/editer/InBlock.gifapt-get install keepalived
  3.分别在两台机器创建测试文件
  echo "192.168.6.162" > /var/www/index.html
  echo "192.168.6.188" > /var/www/index.html
  2.分别在两台服务器编写配置文件
  vim /usr/local/nginx/conf/nginx.conf
  user    www www;
  worker_processes    1;
  error_log    logs/error.log    notice;
  pid                logs/nginx.pid;
  events {
  worker_connections    1024;
  }
  http {
  include             mime.types;
  default_type    application/octet-stream;
  sendfile                on;
  tcp_nopush         on;
  keepalive_timeout    65;
  gzip    on;
  server {
  listen             80;
  server_name    localhost;
  index   index.html index.htm;
  root      /var/www;
  error_page   500 502 503 504    /50x.html;
  location = /50x.html {
  root   html;
  }
  }
  }
  环境
  Server 1:ubuntu-server 8.04.4          192.168.6.162
  
  Server 2:userver-server 8.04.4          192.168.6.188
  软件
  Keepalived 1.1.15
  
  nginx-0.8.35
  
  pcre-8.02
  
  1.分别在两台服务器上安装nginx
  tar jxvf pcre-8.02.tar.bz2
  cd pcre-8.02
  ./configure --prefix=/usr --enable-utf8 --enable-pcregrep-libbz2 --enable-pcregrep-libz
  make
  make install
  tar zxvf nginx-0.8.35.tar.gz
  cd nginx-0.8.35
  --prefix=/usr/local/nginx --with-pcre --user=www --group=www --with-file-aio --with-http_ssl_module --with-http_flv_module --with-http_gzip_static_module --with-http_stub_status_module --with-cc-opt=' -O3'
  make
  make install
  .LVS 基础知识汇总
  LVS的算法介绍               http://www.linuxtone.org/viewthread.php?tid=69
  学习LVS的三种转发模式       http://www.linuxtone.org/viewthread.php?tid=77
  LVS中的IP负载均衡技术       http://www.linuxtone.org/viewthread.php?tid=68

页: [1]
查看完整版本: nginx+keepalived完善