Authored by qinchao

docker nginx

... ... @@ -83,4 +83,9 @@ public class QcloudConstant {
* 将一台或多台云服务器从负载均衡实例上解绑
*/
public static final String QCLOUD_API_DeregisterInstancesFromLoadBalancer = "DeregisterInstancesFromLoadBalancer";
/**
* 获取负载均后台绑定的实例列表(应用型)
*/
public static final String QCLOUD_API_Describe_Forward_Load_BalancerBackends = "DescribeForwardLBBackends";
}
\ No newline at end of file
... ...
... ... @@ -19,5 +19,7 @@ public class QcloudCLBModel {
String lanIp;
String instanceName;
int weight;
}
}
... ...
package com.yoho.ops.cmdb.qcloud.model;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
/**
* Created by craig.qin on 2018/4/7.
*/
@Data
public class QcloudForwardLbModel {
List<QcloudForwardLbModelData> data = new ArrayList<>();
}
... ...
package com.yoho.ops.cmdb.qcloud.model;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
@Data
public class QcloudForwardLbModelData {
private String protocolType;
List<QcloudForwardLbModelDataRule> rules=new ArrayList<>();
}
... ...
package com.yoho.ops.cmdb.qcloud.model;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
@Data
public class QcloudForwardLbModelDataRule {
private String domain;
List<QcloudForwardLbModelDataRule.Backend> backends = new ArrayList<>();
@Data
public static class Backend {
String unInstanceId;
String instanceId;
String lanIp;
String instanceName;
int weight;
}
}
... ...
... ... @@ -8,10 +8,7 @@ import com.qcloud.QcloudApiModuleCenter;
import com.yoho.ops.cmdb.models.DataCenter;
import com.yoho.ops.cmdb.models.Host;
import com.yoho.ops.cmdb.qcloud.constant.QcloudConstant;
import com.yoho.ops.cmdb.qcloud.model.QcloudAutoScalingGroup;
import com.yoho.ops.cmdb.qcloud.model.QcloudCLBModel;
import com.yoho.ops.cmdb.qcloud.model.QcloudInstanceSet;
import com.yoho.ops.cmdb.qcloud.model.QcloudScalingInstancesSet;
import com.yoho.ops.cmdb.qcloud.model.*;
import org.apache.commons.lang3.StringUtils;
import org.codehaus.jackson.map.DeserializationConfig;
import org.codehaus.jackson.map.ObjectMapper;
... ... @@ -548,6 +545,28 @@ public class QcloudSdkUtil {
return successFlag;
}
/*******************************************************************
*************************** 2-2 负载均衡器 (应用) ************************
******************************************************************/
public static QcloudForwardLbModel describeForwardLBBackends(String loadBalancerId){
if(StringUtils.isBlank(loadBalancerId)){
return null;
}
try{
TreeMap<String, Object> params = new TreeMap<>();
params.put("loadBalancerId", loadBalancerId);
String rootJson = QcloudSdkUtil.getCommonData(new Lb(), "GET", QcloudConstant.QCLOUD_API_Describe_Forward_Load_BalancerBackends, params, true);
if(StringUtils.isBlank(rootJson)){
return null;
}
QcloudForwardLbModel qcloudForwardLbModel = OBJECT_MAPPER.readValue(rootJson, QcloudForwardLbModel.class);
return qcloudForwardLbModel;
}catch (Exception e){
logger.error(" - QcloudSdkUtil - describeLoadBalancerBackends- error", e);
}
return null;
}
/*******************************************************************
*************************** 3 专线宽带查询 ************************
... ... @@ -585,10 +604,10 @@ public class QcloudSdkUtil {
List<Double> dd2=getMonitorData("intraffic",startTime);
System.out.println(dd2);*/
String[] ips={"10.66.1.105","10.66.1.127","10.66.103.13","10.66.103.14","10.66.70.234","10.66.70.174"};
List<Host> ll=getInstancesByPrivateIpAddress(Arrays.asList(ips));
//String[] ips={"10.66.1.105","10.66.1.127","10.66.103.13","10.66.103.14","10.66.70.234","10.66.70.174"};
//QcloudForwardLbModel clb=describeForwardLBBackends("lb-7cowsd61");
System.out.println(ll);
//System.out.println(clb);
}
}
\ No newline at end of file
... ...
package com.monitor.switchs;
import com.monitor.model.response.BaseResponse;
import com.yoho.ops.cmdb.qcloud.model.QcloudCLBModel;
import com.yoho.ops.cmdb.qcloud.model.QcloudForwardLbModel;
import com.yoho.ops.cmdb.qcloud.model.QcloudForwardLbModelData;
import com.yoho.ops.cmdb.qcloud.model.QcloudForwardLbModelDataRule;
import com.yoho.ops.cmdb.qcloud.util.QcloudSdkUtil;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.*;
/**
* @author craig.qin
* pch5切换 -- 现在已经迁移到docker
* 所以nginx的切换启用新的
*/
@Controller
@RequestMapping("/pch5DockerSwitch")
public class Pch5DockerSwitchCtrl {
private final static Logger logger = LoggerFactory.getLogger("switchLogger");
//pch5 blk负载均衡,传统型
private final String ELB_BLK_ID="lb-2wfrxx7p";
//pch5 pc\wap负载均衡,应用型
private final String ELB_PCH5_ID="lb-7cowsd61";
//pc node 对于域名
private final List<String> elb_pch5_pc_domain=Arrays.asList("*.yohobuy.com","activity.yoho.cn");
private final List<String> elb_pch5_wap_domain=Arrays.asList("m.yohobuy.com","*.m.yohobuy.com");
//当前环境
@Value("${system.envi}")
private String env;
@RequestMapping(value = "/getDockerElbStatus")
@ResponseBody
public BaseResponse getDockerElbStatus() {
BaseResponse response = new BaseResponse();
QcloudCLBModel clb=QcloudSdkUtil.describeLoadBalancerBackends(ELB_BLK_ID);
QcloudForwardLbModel forwardlb= QcloudSdkUtil.describeForwardLBBackends(ELB_PCH5_ID);
Set<String> az1IPs_blk=new HashSet<>();
Set<String> az2IPs_blk=new HashSet<>();
boolean inGray_blk=false;
for(QcloudCLBModel.Backend beckend:clb.getBackendSet()){
String insName_lower=beckend.getInstanceName().toLowerCase();
if(insName_lower.contains("az1")){
az1IPs_blk.add(beckend.getLanIp());
}else if(insName_lower.contains("az2")){
az2IPs_blk.add(beckend.getLanIp());
if(beckend.getWeight()<=0){
inGray_blk = true;
}
if(inGray_blk&&beckend.getWeight()>0){
response.setCode(201);
response.setMessage(beckend.getInstanceName()+"命名不规范,az2 nginx权重不一致:lanIp="+beckend.getLanIp());
return response;
}
}else{
response.setCode(201);
response.setMessage(beckend.getInstanceName()+"命名不规范,需指定az1或者az2:lanIp="+beckend.getLanIp());
return response;
}
}
Set<String> az1IPs_pc=new HashSet<>();
Set<String> az2IPs_pc=new HashSet<>();
boolean inGray_pc=false;
Set<String> az1IPs_wap=new HashSet<>();
Set<String> az2IPs_wap=new HashSet<>();
boolean inGray_wap=false;
for(QcloudForwardLbModelData forwardLbModelData:forwardlb.getData()){
for(QcloudForwardLbModelDataRule rule:forwardLbModelData.getRules()){
String domain=rule.getDomain();
if(!elb_pch5_pc_domain.contains(domain)&&!elb_pch5_wap_domain.contains(domain)){
continue;//排除别的域名,比如shops
}
boolean inPcDomain=true;
if(elb_pch5_wap_domain.contains(domain)){
inPcDomain = false;
}
for(QcloudForwardLbModelDataRule.Backend forwardBackend:rule.getBackends()){
String insName_lower=forwardBackend.getInstanceName().toLowerCase();
if(insName_lower.contains("az1")){
if(inPcDomain){
az1IPs_pc.add(forwardBackend.getLanIp());
}else{
az1IPs_wap.add(forwardBackend.getLanIp());
}
}else if(insName_lower.contains("az2")){
if(inPcDomain){
az2IPs_pc.add(forwardBackend.getLanIp());
if(forwardBackend.getWeight()<=0){
inGray_pc = true;
}
if(inGray_pc&&forwardBackend.getWeight()>0){
response.setCode(201);
response.setMessage(forwardBackend.getInstanceName()+"命名不规范,az2 nginx权重不一致:lanIp="+forwardBackend.getLanIp());
return response;
}
}else{
az2IPs_wap.add(forwardBackend.getLanIp());
if(forwardBackend.getWeight()<=0){
inGray_wap = true;
}
if(inGray_wap&&forwardBackend.getWeight()>0){
response.setCode(201);
response.setMessage(forwardBackend.getInstanceName()+"命名不规范,az2 nginx权重不一致:lanIp="+forwardBackend.getLanIp());
return response;
}
}
}else{
response.setCode(201);
response.setMessage(forwardBackend.getInstanceName()+"命名不规范,需指定az1或者az2:lanIp="+forwardBackend.getLanIp());
return response;
}
}
}
}
Map<String,Object> ipsUnderElbMap=new LinkedHashMap<>();
Set<String> az1Ips=new HashSet<>();
az1Ips.addAll(az1IPs_blk);
az1Ips.addAll(az1IPs_pc);
az1Ips.addAll(az1IPs_wap);
Set<String> az2Ips=new HashSet<>();
az2Ips.addAll(az2IPs_blk);
az2Ips.addAll(az2IPs_pc);
az2Ips.addAll(az2IPs_wap);
ipsUnderElbMap.put("az1Ips",az1Ips);
ipsUnderElbMap.put("az2Ips",az2Ips);
ipsUnderElbMap.put("inAz1_blk", StringUtils.join(az1IPs_blk,","));
ipsUnderElbMap.put("inAz1_pc",StringUtils.join(az1IPs_pc,","));
ipsUnderElbMap.put("inAz1_wap", StringUtils.join(az1IPs_wap,","));
ipsUnderElbMap.put("inAz2_blk", StringUtils.join(az2IPs_blk,","));
ipsUnderElbMap.put("inAz2_pc", StringUtils.join(az2IPs_pc,","));
ipsUnderElbMap.put("inAz2_wap", StringUtils.join(az2IPs_wap,","));
ipsUnderElbMap.put("inGray_blk",inGray_blk);
ipsUnderElbMap.put("inGray_pc",inGray_pc);
ipsUnderElbMap.put("inGray_wap",inGray_wap);
response.setData(ipsUnderElbMap);
return response;
}
}
... ...
... ... @@ -28,6 +28,10 @@ import java.util.stream.Collectors;
/**
* @author craig.qin
* pch5切换
*
* modify by craig.qin 2018-04-07
* node项目迁移到docker,整个类已废弃,
* 新切换参考pch5DockerSwitch
*/
@Controller
@RequestMapping("/pch5Switch")
... ...