高可用linux 服务器搭建

最原始的服务部署,为单点部署,即直接把服务部署在一个服务器上。如果服务器出现故障,或者服务因为某个异常而挂掉,则服务就会发生中断。单点部署出现故障的概率最高。

后来,出现了网关,比如 nginx kong 等。如下图所示:

这样,所有客户请求都会经过网关,再由网关转发到各个服务。如果由服务出现故障,则网关会自动跳过故障服务,把请求分发到可用服务。因为网关只是起到服务转发的功能,所以网关出现故障的概率比应用出现故障的概率低很多。

 http
 {
   upstream myserver {
     server   192.168.12.181:80 weight=3 max_fails=3 fail_timeout=20s;
     server   192.168.12.182:80 weight=1 max_fails=3 fail_timeout=20s;
     server   192.168.12.183:80 weight=4 max_fails=3 fail_timeout=20s;
   }
   server
   {
     listen       80;
     server_name  www.domain.com 192.168.12.189;
     index index.htm index.html;
     root  /ixdba/web/wwwroot;
 location / {
     proxy_pass http://myserver;
     proxy_next_upstream http_500 http_502 http_503 error timeout invalid_header;
     include    /opt/nginx/conf/proxy.conf;
     }
   }
 }

但是,网关并非会永远不宕机,如果遭遇入侵,或者机房断电。网关服务出现故障,则不管下面的应用服务部署了多少个都没用。

于是就出现了第三种集群。如下图所示,借助keeplived部署2个以上的nginx 网关。这样网关出现故障导致服务中断的机率将大大降低。

这里主从nginx服务的配置是一样的。
3.keepalive的配置:/etc/keepalived/keepalivec.conf
主节点(Master节点配置)

 (1)修改/etc/keepalived/keepalivec.conf 配置文件
        global_defs {
        	 notification_email {
        		 acassen@firewall.loc
        		 failover@firewall.loc
        		 sysadmin@firewall.loc
        	 }
        	 notification_email_from Alexandre.Cassen@firewall.loc
             #当前主机ip
        	 smtp_server 192.168.17.129
        	 smtp_connect_timeout 30
        	 # 重点1:通过它,可以访问到主机,在hosts文件中,要做映射关系,类似于 127.0.0.1 LVS_DEVEL,host文件路径:/etc/hosts
        	 router_id LVS_DEVEL  
        }
        
        #重点2:检测脚本,目的是定时执行,检测nginx的状态,如果挂了尝试重启,如果启动失败,则停止该节点的nginx和keepaive
        vrrp_script chk_http_port {
        	 script "/usr/local/src/nginx_check.sh"	 # 执行脚本所在的位置,自定义脚本后面会提及
        	 interval 2 	#检测脚本执行的间隔,单位秒,每个2秒执行一次脚本
        	 weight 2       #脚本执行满足,权重加2,这里其实没搞明白..
        }

        #重点3:主备节点的区别配置	
        vrrp_instance VI_1 {
        	 state MASTER	 # 备份服务器上将 MASTER 改为 BACKUP
        	 interface ens33	 # 绑定的网卡,通过ipconfig查看
        	 virtual_router_id 51	 # 主、备机的 virtual_router_id 必须相同
        	 priority 100 	# 主、备机取不同的优先级,主机值较大,备份机值较小(比如主机100,备机90)
        	 advert_int 1 	#每隔一秒发送一次心跳,确保从服务器(keepalive)是否还活着
        	 authentication {		# 心跳检测需要的密码
        		 auth_type PASS
        		 auth_pass 1111
         	}
        	 virtual_ipaddress {
            	 192.168.17.50 	# VRRP H 虚拟地址(重点:虚拟ip配置,客户端通过该ip进行访问,主节点和备用节点谁占有这个ip,谁提供反向代理服务)
        	 }
        }
   (2)在/usr/local/src 添加检测脚本nginx_check.sh,检查Nginx是否还活着
            #!/bin/bash
            #查看ningx的进程号,并统计数量
            A=`ps -C nginx –no-header |wc -l`
            #等于0时,即nginx挂了,尝试重启
            if [ $A -eq 0 ];then
             /usr/local/nginx/sbin/nginx 	#Nginx启动命令的位置
             sleep 2
             #启动失败,杀掉keepalive
             if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
             killall keepalived
             fi
            fi
posted @ 2022-10-18 20:33  CHN_CODER  阅读(215)  评论(0编辑  收藏  举报