SDN 期末作业验收

前言

  • SDN 期末作业验收我们是采用的参考场景一,我们在此场景的基础上来做负载均衡,下面是我们搭建的拓扑图
    885895-20180125160701615-985090526.png

演示视频

https://pan.baidu.com/s/1htkKLPM

负载均衡程序

相关的关键代码

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Base64;

import net.sf.json.*;
public class Main {
    public static JSONObject jsonObject = null;
    public static JSONObject[] jsonArray = new  JSONObject[100];
    static String url24= "http://172.17.172.244:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:2/flow-node-inventory:table/0/flow/0";
    static String url14= "http://172.17.172.244:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/flow-node-inventory:table/0/flow/1";
    static String url21= "http://172.17.172.244:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:2/flow-node-inventory:table/0/flow/0";
    static String url12= "http://172.17.172.244:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/flow-node-inventory:table/0/flow/1";

    public static JSONObject httpRequest(String requestUrl, String requestMethod,int index) {
        StringBuffer buffer = new StringBuffer();
        try {

            URL url = new URL(requestUrl);
            // http协议传输
            HttpURLConnection httpUrlConn = (HttpURLConnection) url.openConnection();
            httpUrlConn.setDoOutput(true);
            httpUrlConn.setDoInput(true);
            httpUrlConn.setUseCaches(false);
            
            String userPassword = "admin" + ":" + "admin";
            String encoding =  Base64.getEncoder().encodeToString((userPassword).getBytes());
            httpUrlConn.setRequestProperty("Authorization", "Basic " + encoding); 
            
            httpUrlConn.setRequestProperty("Connection", "Keep-Alive"); // 设置维持长连接
            httpUrlConn.setRequestProperty("Charset", "UTF-8");// 设置文件字符集:
            
            
            // 设置请求方式(GET/POST)
            httpUrlConn.setRequestMethod(requestMethod);

            if ("GET".equalsIgnoreCase(requestMethod))
            {
                httpUrlConn.connect();
                // 将返回的输入流转换成字符串
                InputStream inputStream = httpUrlConn.getInputStream();
                InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");
                BufferedReader bufferedReader = new BufferedReader(inputStreamReader);

                String str = null;
                while ((str = bufferedReader.readLine()) != null) {
                    buffer.append(str);
                }
                
                bufferedReader.close();
                inputStreamReader.close();
                // 释放资源
                inputStream.close();
                inputStream = null;
                httpUrlConn.disconnect();
                jsonObject = JSONObject.fromObject(buffer.toString());
              //  System.out.println(buffer.toString());
                
            }else if("PUT".equalsIgnoreCase(requestMethod)){
                byte[] data = (jsonArray[index].toString()).getBytes();//转换为字节数组
                httpUrlConn.setRequestProperty("Content-Length", String.valueOf(data.length));// 设置文件长度
                httpUrlConn.setRequestProperty("Content-Type", "application/json;charset=utf-8");
             // 开始连接请求
                httpUrlConn.connect();
                OutputStream  out = httpUrlConn.getOutputStream();   
             // 写入请求的字符串
                out.write((jsonArray[index].toString()).getBytes());
                out.flush();
                out.close();
                if (httpUrlConn.getResponseCode() == 200) {  
                    System.out.println("发送成功");
                }
                
            }else if("DELETE".equalsIgnoreCase(requestMethod)){
                
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return jsonObject;
    }
    public static void init() throws IOException{
        String s = null;
        int i = 0;
        try {
            BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("DATA.txt"),"UTF-8"));
            while((s = br.readLine())!=null){
                jsonArray[i] = JSONObject.fromObject(s);
                i++;
            }
            String url31= "http://172.17.172.244:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:3/flow-node-inventory:table/0/flow/0";
            String url32= "http://172.17.172.244:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:3/flow-node-inventory:table/0/flow/1";
            String url11= "http://172.17.172.244:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/flow-node-inventory:table/0/flow/0";
            String url22= "http://172.17.172.244:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:2/flow-node-inventory:table/0/flow/1";
            String url13= "http://172.17.172.244:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/flow-node-inventory:table/0/flow/2";
            String url23= "http://172.17.172.244:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:2/flow-node-inventory:table/0/flow/2";
            String url33= "http://172.17.172.244:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:3/flow-node-inventory:table/0/flow/2";
            httpRequest(url31,"PUT",0);
            httpRequest(url32,"PUT",1);
            httpRequest(url21,"PUT",2);
            httpRequest(url11,"PUT",3);
            httpRequest(url12,"PUT",4);
            httpRequest(url22,"PUT",5);
            httpRequest(url13,"PUT",6);
            httpRequest(url23,"PUT",7);
            httpRequest(url33,"PUT",10);
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    public static int getReceived(String url2){
         jsonObject =  httpRequest(url2,"GET",0);
            JSONArray j1 = (JSONArray) jsonObject.get("node-connector");
            JSONObject j2 = (JSONObject) j1.get(0);
            JSONObject j3 =  (JSONObject) j2.get("opendaylight-port-statistics:flow-capable-node-connector-statistics");
            JSONObject j4 =  (JSONObject)j3.get("bytes");
            int received = (int) j4.get("received");
            return received;
    }
    public static void main(String[] args) {
        System.out.println("-------------------------------------------------");
        try {
            init();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        String s = "";
        String url = "http://172.17.172.244:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:3/flow-node-inventory:table/0/flow/1";
        String url1= "http://172.17.172.244:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:2/flow-node-inventory:table/0/flow/0";
        String url2 = "http://172.17.172.244:8181/restconf/operational/opendaylight-inventory:nodes/node/openflow:2/node-connector/openflow:2:2";
//       jsonObject =  httpRequest(url2,"GET",0);
//      System.out.println(jsonObject.toString());
        int received ;
        int temp = 0;
        while(true){
            received = getReceived(url2);
            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } 
            System.out.println(received-temp);
                                //这里我们去判断S2交换机通过包的增长数量来选择路径,实现负载均衡
            if(received-temp<10000){
                //下负载均衡流表
                httpRequest(url24,"PUT",8);
                httpRequest(url14,"PUT",9);
            }else if(received-temp>10000 ){
                httpRequest(url21,"PUT",2);
                httpRequest(url12,"PUT",4);
            }
            temp = received;
        }
        
//      jsonObject =  httpRequest(url1,"PUT");
        
        
        
    }
}

期末分工

  • 我在本次期末作业中,主要是搭建场景,以及设计负载均衡,和最后的视频录制,关于代码实现这部分我参与的比较少。

    课程总结

  • 虽然在本次课程前我是有接触过一些SDN的相关知识,但在一些课程中也有我之前从未接触过的知识,比例ODL的使用以及开发。也同时在课程中重新复习了SDN的知识,也得到了新的知识。这次的负载均衡也是之前理论上知道,但实际并未去实现。通过这次的SDN课程可以说的是收获很多了。

转载于:https://www.cnblogs.com/deepYY/p/8351831.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值