Seesaw v2 is a Linux Virtual Server (LVS) based load balancing platform.

Related tags

seesaw
Overview

Seesaw v2

GoDoc

Note: This is not an official Google product.

About

Seesaw v2 is a Linux Virtual Server (LVS) based load balancing platform.

It is capable of providing basic load balancing for servers that are on the same network, through to advanced load balancing functionality such as anycast, Direct Server Return (DSR), support for multiple VLANs and centralised configuration.

Above all, it is designed to be reliable and easy to maintain.

Requirements

A Seesaw v2 load balancing cluster requires two Seesaw nodes - these can be physical machines or virtual instances. Each node must have two network interfaces - one for the host itself and the other for the cluster VIP. All four interfaces should be connected to the same layer 2 network.

Building

Seesaw v2 is developed in Go and depends on several Go packages:

Additionally, there is a compile and runtime dependency on libnl

On a Debian/Ubuntu style system, you should be able to prepare for building by running:

apt-get install golang
apt-get install libnl-3-dev libnl-genl-3-dev

If your distro has a go version before 1.5, you may need to fetch a newer release from https://golang.org/dl/.

If you are running go version 1.11 and above, you can use go modules to avoid installing go packages manually. By go 1.12, GO111MODULE defaults to auto, so remember to enable go module by export GO111MODULE=on.

If you are running before go version 1.11 or you don't want to enable GO111MODULE, after setting GOPATH to an appropriate location (for example ~/go):

go get -u golang.org/x/crypto/ssh
go get -u github.com/dlintw/goconf
go get -u github.com/golang/glog
go get -u github.com/miekg/dns
go get -u github.com/kylelemons/godebug/pretty
go get -u github.com/golang/protobuf/proto

Ensure that ${GOPATH}/bin is in your ${PATH} and in the seesaw directory:

make test
make install

If you wish to regenerate the protobuf code, the protobuf compiler is needed:

apt-get install protobuf-compiler

The protobuf code can then be regenerated with:

make proto

Installing

After make install has run successfully, there should be a number of binaries in ${GOPATH}/bin with a seesaw_ prefix. Install these to the appropriate locations:

SEESAW_BIN="/usr/local/seesaw"
SEESAW_ETC="/etc/seesaw"
SEESAW_LOG="/var/log/seesaw"

INIT=`ps -p 1 -o comm=`

install -d "${SEESAW_BIN}" "${SEESAW_ETC}" "${SEESAW_LOG}"

install "${GOPATH}/bin/seesaw_cli" /usr/bin/seesaw

for component in {ecu,engine,ha,healthcheck,ncc,watchdog}; do
  install "${GOPATH}/bin/seesaw_${component}" "${SEESAW_BIN}"
done

if [ $INIT = "init" ]; then
  install "etc/init/seesaw_watchdog.conf" "/etc/init"
elif [ $INIT = "systemd" ]; then
  install "etc/systemd/system/seesaw_watchdog.service" "/etc/systemd/system"
  systemctl --system daemon-reload
fi
install "etc/seesaw/watchdog.cfg" "${SEESAW_ETC}"

# Enable CAP_NET_RAW for seesaw binaries that require raw sockets.
/sbin/setcap cap_net_raw+ep "${SEESAW_BIN}/seesaw_ha"
/sbin/setcap cap_net_raw+ep "${SEESAW_BIN}/seesaw_healthcheck"

The setcap binary can be found in the libcap2-bin package on Debian/Ubuntu.

Configuring

Each node needs a /etc/seesaw/seesaw.cfg configuration file, which provides information about the node and who its peer is. Additionally, each load balancing cluster needs a cluster configuration, which is in the form of a text-based protobuf - this is stored in /etc/seesaw/cluster.pb.

An example seesaw.cfg file can be found in etc/seesaw/seesaw.cfg.example - a minimal seesaw.cfg provides the following:

  • anycast_enabled - True if anycast should be enabled for this cluster.
  • name - The short name of this cluster.
  • node_ipv4 - The IPv4 address of this Seesaw node.
  • peer_ipv4 - The IPv4 address of our peer Seesaw node.
  • vip_ipv4 - The IPv4 address for this cluster VIP.

The VIP floats between the Seesaw nodes and is only active on the current master. This address needs to be allocated within the same netblock as both the node IP address and peer IP address.

An example cluster.pb file can be found in etc/seesaw/cluster.pb.example - a minimal cluster.pb contains a seesaw_vip entry and two node entries. For each service that you want to load balance, a separate vserver entry is needed, with one or more vserver_entry sections (one per port/proto pair), one or more backends and one or more healthchecks. Further information is available in the protobuf definition - see pb/config/config.proto.

On an upstart based system, running restart seesaw_watchdog will start (or restart) the watchdog process, which will in turn start the other components.

Anycast

Seesaw v2 provides full support for anycast VIPs - that is, it will advertise an anycast VIP when it becomes available and will withdraw the anycast VIP if it becomes unavailable. For this to work the Quagga BGP daemon needs to be installed and configured, with the BGP peers accepting host-specific routes that are advertised from the Seesaw nodes within the anycast range (currently hardcoded as 192.168.255.0/24).

Command Line

Once initial configuration has been performed and the Seesaw components are running, the state of the Seesaw can be viewed and controlled via the Seesaw command line interface. Running seesaw (assuming /usr/bin is in your path) will give you an interactive prompt - type ? for a list of top level commands. A quick summary:

  • config reload - reload the cluster.pb from the current config source.
  • failover - failover between the Seesaw nodes.
  • show vservers - list all vservers configured on this cluster.
  • show vserver <name> - show the current state for the named vserver.

Troubleshooting

A Seesaw should have five components that are running under the watchdog - the process table should show processes for:

  • seesaw_ecu
  • seesaw_engine
  • seesaw_ha
  • seesaw_healthcheck
  • seesaw_ncc
  • seesaw_watchdog

All Seesaw v2 components have their own logs, in addition to the logging provided by the watchdog. If any of the processes are not running, check the corresponding logs in /var/log/seesaw (e.g. seesaw_engine.{log,INFO}).

Issues
  • config_server is limited to use with google.com domain

    config_server is limited to use with google.com domain

    Hi,

    I think config_server is limited to use with google.com domain.

    • engine/config/config.go
    configServerRE = regexp.MustCompile(`^[\w-\.]+\.google\.com\.?$`)
    
    • engine/config/fetcher.go
                    if !configServerRE.MatchString(server) {
                            log.Errorf("Invalid config server name: %q", server)
                            continue
                    }
    

    Does config_server feature is not supported yet?

    Best regards,

    opened by kunitake 12
  • Introduce build inside the docker

    Introduce build inside the docker

    This should simplify adoption by the community, and may save couple of hours for new users who would like to just try the tool without additional efforts.

    opened by onorua 8
  • Unable to start SeeSaw

    Unable to start SeeSaw

    I have SeeSaw compiled and installed on Centos 7. The Watchdog service starts and kicks off the other 5 components but the Engine fails to start (see log below).

    The log file doesn't really give me any clues as to what its not happy about. Any pointers on where I should be looking ?

    [[email protected] bin]# ./seesaw_engine F0306 19:55:43.201250 60397 core.go:250] Failed to connect to NCC: Failed to establish connection: dial unix /var/run/seesaw/nc c/ncc.sock: connect: no such file or directory goroutine 1 [running]: github.com/golang/glog.stacks(0xc420117500, 0xc4201d2000, 0xb0, 0x1c6)

    [[email protected] seesaw]# more seesaw_engine.INFO Log file created at: 2018/03/06 19:46:52 Running on machine: seesaw-1 Binary: Built with gc go1.9.2 for linux/amd64 Log line format: [IWEF]mmdd hh:mm:ss.uuuuuu threadid file:line] msg I0306 19:46:52.217240 60124 core.go:121] Seesaw Engine starting for seesaw F0306 19:46:53.724640 60124 core.go:250] Failed to connect to NCC: Failed to establish connection: dial unix /var/run/seesaw/ncc/ncc.sock: connect: no such file or directory goroutine 1 [running]: github.com/golang/glog.stacks(0xc42000e001, 0xc4202ce000, 0x3ba, 0x2710)

    opened by ralphdt 8
  • use single connection in ncc_client

    use single connection in ncc_client

    ncc_client was dialing and closing in a circle that caused failure when large amounts of vservers were all calling ncc_client.

    This commit will only connect ncc server once and reuse the same single connection for all ipc calls from engine. Tests show that it's able to handle 1000 vservers.

    Fixed #48

    opened by liuyuan10 7
  • UDP Round Robin Only going to single server

    UDP Round Robin Only going to single server

    Dear All,

    I am trying to setup UDP round robin load balancing for a SIEM application.

    I have seesaw installed and working, I can see packets (using tcpdump on both vm's) going from the vip of 172.16.4.165 to the second server dl-clust-02.

    Expected Behaviour Each udp packet send to the VServer vip (172.16.4.165) from my logging endpoint would be sent to each server in turn i.e dl-clust-01 then dl-clust-02 then back to dl-clust-01 and so on.

    Actual Behaviour UDP packets are only sent to the dl-clust-02.

    seesaw.cfg

    `[cluster] anycast_enabled = false name = defencelogic-lb node_ipv4 = 172.16.4.163 peer_ipv4 = 172.16.4.164 vip_ipv4 = 172.16.4.160

    [config_server] primary = lb1. secondary = lb2.

    [interface] node = ens192 lb = ens160`

    cluster.pb `seesaw_vip: < fqdn: "logger.." ipv4: "172.16.4.160/24" status: PRODUCTION

    node: < fqdn: "lb1.." ipv4: "172.16.4.163/24" status: PRODUCTION

    node: < fqdn: "lb2.." ipv4: "172.16.4.164/24" status: PRODUCTION

    vserver: < name: "logsvr." entry_address: < fqdn: "logsvr.." ipv4: "172.16.4.165/24" status: PRODUCTION

    rp: "[email protected]" vserver_entry: < protocol: UDP port: 12201 scheduler: RR server_low_watermark: 0.3 healthcheck: < type: ICMP_PING interval: 5 timeout: 3 retries: 1 >

    backend: < host: < fqdn: "dl-clust-01.." ipv4: "172.16.4.61/24" status: PRODUCTION > weight: 1

    backend: < host: < fqdn: "dl-clust-02.." ipv4: "172.16.4.62/24" status: PRODUCTION > weight: 1

    `

    Any helps appreciated.

    opened by DefenceLogic 7
  • Question: no neighbor statement issued to quagga?

    Question: no neighbor statement issued to quagga?

    Hi,

    Trying (and failing) to get seesaw to advertise through quagga I don't seem to find any neighbor statement being sent to quagga.

    What I see by parsing the code is something like this being sent:

    router bgp 64512
    address-family ipv4 unicast
    network a.b.c.d/32
    

    Manually toying with quagga with our network guys, I can't only get it to work by adding a neighbor like:

    router bgp 65500
    address-family ipv4 unicast
    network a.b.c.d/32
    neighbor e.f.g.h remote-as 65500
    

    I have the following in my cluster.pb:

    bgp_remote_asn: 65500
    bgp_local_asn: 65500
    bgp_peer: <
      fqdn: "name.of.my.router."
      ipv4: "e.f.g.h/28"
    >
    

    but as I see it, this peer is not used in any of the vty.Command calls? Am I missing something?

    Best regards, Lasse

    opened by lasse-aagren 7
  • README improvements

    README improvements

    Added Godoc badge/link for easy access to the documentation

    Minor grammatical improvement

    Fixed broken markdown link to libnl

    opened by mmattioli 4
  • Using go based netlink instead of libnl

    Using go based netlink instead of libnl

    Hi All,

    Is there a plan to use a go based netlink library instead of libnl in the future? Or Has it been considered already? This is a go based netlink implementation but im not sure if it already supports VS based messages yet.

    We are planning to use seesaw for a larger project like kubernetes to support IPVS and it would be great to know its roadmap.

    CC: @baptr

    Thanks in Advance, Dhilip

    opened by dhilipkumars 4
  • Add Maglev hashing to scheduler options in config.proto

    Add Maglev hashing to scheduler options in config.proto

    Maglev hashing became available since v4.18 kernel. This change adds the support to make it a choice with Seesaw.

    opened by unicell 4
  • Export stats struct/publisher interface for monitoring

    Export stats struct/publisher interface for monitoring

    Currently, exporting monitoring metrics would require patching the ecu package to add the necessary functionality. Exporting the types allows an implementation to provide a statistics publisher via the ECU config. This PR also makes a few changes to how ecu/stats.go operates.

    opened by DrJosh9000 4
  • read: connection reset by peer

    read: connection reset by peer

    Hi, i am trying to put my docker private regsitry service behind VIP so i can pull docker images from it. It looks like seesaw -> haproxy in a contaienr -> registry conatiner

    10.162.11.103 is the VIP. It works for normal curl for web page or pulling small images. However, if i pull big image, i will see errors from time to time.

    logs for docker clicent pulling image.

    14 11:42:47 xxxxxx dockerd[605]: time="2021-06-14T11:42:47.197009668+08:00" level=error msg="Download failed, retrying: read tcp 10.160.8.47:51772->10.162.11.103:443: read: connection reset by peer"
    

    I used ss to monitor the ports, so my client tries to use 51772 port to pull from my vip.

    [email protected]:~# ss -tiepm | grep docker
    ESTAB  3995947    0               10.160.8.47:51772       10.162.11.103:https    users:(("dockerd",pid=605,fd=24)) timer:(keepalive,2.128ms,0) ino:23494 sk:25 <->
    ESTAB  3257168    0               10.160.8.47:51770       10.162.11.103:https    users:(("dockerd",pid=605,fd=22)) timer:(keepalive,29sec,0) ino:23493 sk:26 <->
    

    However, on my seesaw nodes, i do not see the ports from my client ip for that port. ( i made ipvsadm timeout 2 hour so i expect all connections should be there. but i do not see the port 51772 )

    [email protected]:/usr/local/seesaw# ipvsadm -lcn  | grep '.47:'
    TCP 110:32 FIN_WAIT    10.160.8.47:51624  10.162.11.103:443  10.162.11.113:443
    TCP 110:41 FIN_WAIT    10.160.8.47:51644  10.162.11.103:443  10.162.11.113:443
    TCP 110:46 FIN_WAIT    10.160.8.47:51658  10.162.11.103:443  10.162.11.113:443
    TCP 110:31 FIN_WAIT    10.160.8.47:51614  10.162.11.103:443  10.162.11.113:443
    TCP 110:41 FIN_WAIT    10.160.8.47:51636  10.162.11.103:443  10.162.11.113:443
    TCP 110:41 FIN_WAIT    10.160.8.47:51648  10.162.11.103:443  10.162.11.113:443
    TCP 114:43 ESTABLISHED 10.160.8.47:51660  10.162.11.103:443  10.162.11.113:443
    TCP 110:32 FIN_WAIT    10.160.8.47:51618  10.162.11.103:443  10.162.11.113:443
    TCP 110:46 FIN_WAIT    10.160.8.47:51656  10.162.11.103:443  10.162.11.113:443
    TCP 110:32 FIN_WAIT    10.160.8.47:51632  10.162.11.103:443  10.162.11.113:443
    TCP 110:48 FIN_WAIT    10.160.8.47:51650  10.162.11.103:443  10.162.11.113:443
    TCP 109:43 FIN_WAIT    10.160.8.47:51612  10.162.11.103:443  10.162.11.113:443
    TCP 110:41 FIN_WAIT    10.160.8.47:51646  10.162.11.103:443  10.162.11.113:443
    TCP 110:32 FIN_WAIT    10.160.8.47:51634  10.162.11.103:443  10.162.11.113:443
    TCP 110:57 FIN_WAIT    10.160.8.47:51652  10.162.11.103:443  10.162.11.113:443
    TCP 114:43 ESTABLISHED 10.160.8.47:51662  10.162.11.103:443  10.162.11.113:443
    TCP 110:32 FIN_WAIT    10.160.8.47:51626  10.162.11.103:443  10.162.11.113:443
    TCP 110:57 FIN_WAIT    10.160.8.47:51664  10.162.11.103:443  10.162.11.113:443
    TCP 110:23 FIN_WAIT    10.160.8.47:51610  10.162.11.103:443  10.162.11.113:443
    TCP 110:45 FIN_WAIT    10.160.8.47:51638  10.162.11.103:443  10.162.11.113:443
    TCP 110:32 FIN_WAIT    10.160.8.47:51628  10.162.11.103:443  10.162.11.113:443
    TCP 110:42 FIN_WAIT    10.160.8.47:51640  10.162.11.103:443  10.162.11.113:443
    TCP 110:45 FIN_WAIT    10.160.8.47:51654  10.162.11.103:443  10.162.11.113:443
    TCP 110:31 FIN_WAIT    10.160.8.47:51616  10.162.11.103:443  10.162.11.113:443
    TCP 110:32 FIN_WAIT    10.160.8.47:51630  10.162.11.103:443  10.162.11.113:443
    TCP 110:32 FIN_WAIT    10.160.8.47:51620  10.162.11.103:443  10.162.11.113:443
    TCP 110:33 FIN_WAIT    10.160.8.47:51622  10.162.11.103:443  10.162.11.113:443
    TCP 110:41 FIN_WAIT    10.160.8.47:51642  10.162.11.103:443  10.162.11.113:443
    

    My seesaw is running on ubuntu18, uname 4.19.57. I use DR, but i tried other schedulers like NAT/TUN. All of them have this issue.

    I tried these settings on seesaw, but not helpful

    sysctl -qw net.ipv4.vs.sloppy_tcp=1
    sysctl -qw net.ipv4.vs.expire_nodest_conn=0
    sysctl -qw net.ipv4.vs.expire_quiescent_template=0
    sysctl -qw net.ipv4.vs.pmtu_disc=0
    ipvsadm --set 7200 7000 300
    echo "0" >/proc/sys/net/ipv4/ip_forward
    

    other info on the seesaw node

    [email protected]:/usr/local/seesaw# ip a
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host
           valid_lft forever preferred_lft forever
    2: ens18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
        link/ether 72:d4:e7:1f:cc:58 brd ff:ff:ff:ff:ff:ff
        inet 10.162.11.90/23 brd 10.162.11.255 scope global dynamic ens18
           valid_lft 477900sec preferred_lft 477900sec
        inet6 fe80::70d4:e7ff:fe1f:cc58/64 scope link
           valid_lft forever preferred_lft forever
    3: ens19: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
        link/ether 00:00:xx:00:??:80 brd ff:ff:ff:ff:ff:ff
        inet 10.162.11.101/23 brd 10.162.11.255 scope global ens19
           valid_lft forever preferred_lft forever
        inet 10.162.11.103/23 brd 10.162.11.255 scope global secondary ens19
           valid_lft forever preferred_lft forever
        inet6 fe80::200:5eff:fe00:180/64 scope link
           valid_lft forever preferred_lft forever
    4: dummy0: <BROADCAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
        link/ether 5a:9b:78:8b:bc:2a brd ff:ff:ff:ff:ff:ff
        inet6 fe80::589b:78ff:fe8b:bc2a/64 scope link
           valid_lft forever preferred_lft forever
    5: ip+net: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN group default qlen 1000
        link/ether da:2a:8c:e5:d9:96 brd ff:ff:ff:ff:ff:ff
    [email protected]:/usr/local/seesaw# lsmod | grep nf_con
    nf_conntrack          143360  5 nf_nat,nf_nat_ipv4,xt_nat,xt_CT,ip_vs
    nf_defrag_ipv6         20480  2 nf_conntrack,ip_vs
    nf_defrag_ipv4         16384  1 nf_conntrack
    libcrc32c              16384  3 nf_conntrack,nf_nat,ip_vs
    [email protected]:/usr/local/seesaw#
    

    Really appreciate your help 🙏

    opened by salamanderrex 1
  • Come up with a monitoring strategy

    Come up with a monitoring strategy

    We should come up with at least a high level strategy for monitoring seesaw nodes. Some possibilities:

    • OpenTelemetry
    • Prometheus
    • ???

    In any case, we should make it easy for alternative implementations to exist, should users need to plug in their own.

    enhancement 
    opened by hazaelsan 0
  • Consider switching to bazel instead of make

    Consider switching to bazel instead of make

    We should switch to https://bazel.build/ instead of make for building.

    enhancement 
    opened by hazaelsan 0
  • centos7.9 Failed to initialise LB interface: Failed to get network interface: route ip+net: no such network interface

    centos7.9 Failed to initialise LB interface: Failed to get network interface: route ip+net: no such network interface

    How to solve the problem after starting seesaw_watchdog.service on centos and reporting Failed to get network interface: route ip+net: no such network interface

    Deployment steps: yum install epel-release -y yum -y erase git yum -y install https://repo.ius.io/ius-release-el7.rpm yum -y install git222 ipvsadm golang protobuf-compiler libnl3-devel echo ip_vs > /etc/modules-load.d/ipvs.conf echo ip_vs_wrr>/etc/modules-load.d/ipvs.conf echo nf_conntrack_ipv4 > /etc/modules-load.d/nf_conntrack.conf modprobe dummy numdummies=1 echo "options dummy numdummies=1" > /etc/modprobe.d/dummy.conf systemctl restart systemd-modules-load.service ip link add ip+net type dummy

    cd /root && mkdir go && export GOPATH=/root/go go get -u golang.org/x/crypto/ssh go get -u github.com/dlintw/goconf go get -u github.com/golang/glog go get -u github.com/miekg/dns go get -u github.com/kylelemons/godebug/pretty go get -u github.com/golang/protobuf/proto export PATH=$PATH:${GOPATH}/bin go get -u github.com/google/seesaw

    cd /root/go/src/github.com/google/seesaw/ make test make install cp -r /root/go/src/github.com/google/seesaw/etc /root/go/bin/

    cd /root/go/bin && vi /root/go/bin/install.sh SEESAW_BIN="/usr/local/seesaw" SEESAW_ETC="/etc/seesaw" SEESAW_LOG="/var/log/seesaw"

    INIT=ps -p 1 -o comm=

    install -d "${SEESAW_BIN}" "${SEESAW_ETC}" "${SEESAW_LOG}"

    install "${GOPATH}/bin/seesaw_cli" /usr/bin/seesaw

    for component in {ecu,engine,ha,healthcheck,ncc,watchdog}; do install "${GOPATH}/bin/seesaw_${component}" "${SEESAW_BIN}" done

    if [ $INIT = "init" ]; then install "etc/init/seesaw_watchdog.conf" "/etc/init" elif [ $INIT = "systemd" ]; then install "etc/systemd/system/seesaw_watchdog.service" "/etc/systemd/system" systemctl --system daemon-reload fi install "etc/seesaw/watchdog.cfg" "${SEESAW_ETC}"

    Enable CAP_NET_RAW for seesaw binaries that require raw sockets.

    /sbin/setcap cap_net_raw+ep "${SEESAW_BIN}/seesaw_ha" /sbin/setcap cap_net_raw+ep "${SEESAW_BIN}/seesaw_healthcheck"

    chmod +x install.sh ./install.sh systemctl status seesaw_watchdog systemctl enable seesaw_watchdog cd /root/go/bin/etc/seesaw cp cluster.pb.example seesaw.cfg.example /etc/seesaw cd /etc/seesaw mv cluster.pb.example cluster.pb mv seesaw.cfg.example seesaw.cfg systemctl --system daemon-reload systemctl --now enable seesaw_watchdog.service

    opened by luo964973791 10
  • engine.sock no such file or directory

    engine.sock no such file or directory

    I installed seesaw on linux but when i start seesaw_cli i get error: Dial failed: dial unix /var/run/seesaw/engine/engine.sock: connect: no such file or directory.

    Also when i start seesaw_engine i get error: Dial failed: dial unix /var/run/seesaw/ncc/ncc.sock: connect: no such file or directory.

    What are this .sock files?

    opened by mephistophell 1
  • Unable to install seesaw on docker container CentOS Linux release 7.7.1908 (Core).

    Unable to install seesaw on docker container CentOS Linux release 7.7.1908 (Core).

    I'm running a docker container of CentOS Linux release 7.7.1908 (Core).

    ### Installing Go I can't install libnl-3-dev or libnl-genl-3-dev. I get the results of "no package available" I can install libnl successfully. Unsure if that gives me the prerequirements for this or not.

    The other packages I'm able to install successfully: curl, git, gcc, make, libcap2-bin, protobuf-compiler, golang.

    go env

    GO111MODULE="" GOARCH="amd64" GOBIN="" GOCACHE="/root/.cache/go-build" GOENV="/root/.config/go/env" GOEXE="" GOFLAGS="" GOHOSTARCH="amd64" GOHOSTOS="linux" GONOPROXY="" GONOSUMDB="" GOOS="linux" GOPATH="/root/go" GOPRIVATE="" GOPROXY="direct" GOROOT="/usr/lib/golang" GOSUMDB="off" GOTMPDIR="" GOTOOLDIR="/usr/lib/golang/pkg/tool/linux_amd64" GCCGO="gccgo" AR="ar" CC="gcc" CXX="g++" CGO_ENABLED="1" GOMOD="/root/go/src/github.com/google/seesaw/go.mod" CGO_CFLAGS="-g -O2" CGO_CPPFLAGS="" CGO_CXXFLAGS="-g -O2" CGO_FFLAGS="-g -O2" CGO_LDFLAGS="-g -O2" PKG_CONFIG="pkg-config" GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build090985420=/tmp/go-build -gno-record-gcc-switches"

    I've setup Go successfully. go get -u golang.org/x/crypto/ssh go get -u github.com/dlintw/goconf go get -u github.com/golang/glog go get -u github.com/golang/protobuf/{proto,protoc-gen-go} go get -u github.com/miekg/dns go get -u github.com/kylelemons/godebug/pretty

    I'm having issues when I try to install seesaw.

    go get -u github.com/google/seesaw package github.com/google/seesaw: no Go files in /root/go/src/github.com/google/seesaw I get the results that it doesn't exist. Yet it does exist, when I immediately look at the folder contents of that directory. ls /root/go/src/github.com/google/seesaw CONTRIBUTING Makefile binaries common ecu etc go.sum healthcheck ncc pb test_tools LICENSE README.md cli doc engine go.mod ha ipvs netlink quagga watchdog

    I'm unable to successfully run "make test", fails on netlink/netlink.h

    make test go build ./... go: downloading github.com/dlintw/goconf v0.0.0-20120228082610-dcc070983490 go: downloading github.com/golang/protobuf v1.3.2 go: downloading github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b go: downloading github.com/miekg/dns v1.1.15 go: downloading golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4 go: extracting github.com/dlintw/goconf v0.0.0-20120228082610-dcc070983490 go: extracting github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b go: extracting github.com/golang/protobuf v1.3.2 go: extracting github.com/miekg/dns v1.1.15 go: downloading golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3 go: downloading golang.org/x/sys v0.0.0-20190412213103-97732733099d go: extracting golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4 go: extracting golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3 go: extracting golang.org/x/sys v0.0.0-20190412213103-97732733099d go: finding github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b go: finding github.com/dlintw/goconf v0.0.0-20120228082610-dcc070983490 go: finding golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4 go: finding github.com/golang/protobuf v1.3.2 go: finding github.com/miekg/dns v1.1.15 go: finding golang.org/x/sys v0.0.0-20190412213103-97732733099d go: finding golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3

    github.com/google/seesaw/netlink

    netlink/cfuncs.go:22:29: fatal error: netlink/netlink.h: No such file or directory #include <netlink/netlink.h> ^ compilation terminated. make: *** [all] Error 2

    make install also fails for me, on the netlink/netlink.h again

    make install go build ./...

    github.com/google/seesaw/netlink

    netlink/cfuncs.go:22:29: fatal error: netlink/netlink.h: No such file or directory #include <netlink/netlink.h> ^ compilation terminated. make: *** [all] Error 2

    When I run the default "seesaw_install.sh" script I get the following results.

    install: cannot stat '/bin/seesaw_cli': No such file or directory install: cannot stat '/bin/seesaw_ecu': No such file or directory install: cannot stat '/bin/seesaw_engine': No such file or directory install: cannot stat '/bin/seesaw_ha': No such file or directory install: cannot stat '/bin/seesaw_healthcheck': No such file or directory install: cannot stat '/bin/seesaw_ncc': No such file or directory install: cannot stat '/bin/seesaw_watchdog': No such file or directory Failed to set capabilities on file `/usr/local/seesaw/seesaw_ha' (No such file or directory) usage: setcap [-q] [-v] (-r|-|) [ ... (-r|-|) ]

    Note must be a regular (non-symlink) file. Failed to set capabilities on file `/usr/local/seesaw/seesaw_healthcheck' (No such file or directory) usage: setcap [-q] [-v] (-r|-|) [ ... (-r|-|) ]

    Note must be a regular (non-symlink) file.

    opened by whater39 0
  • Error while setting up

    Error while setting up

    I tried to build a docker image but while performing test i.e "make test". I got the following errors: --- FAIL: TestHTTPChecker (0.01s) healthcheck_test.go:144: Failed to get TCP listener: listen tcp6 [::1]:0: bind: cannot assign requested address --- FAIL: TestHTTPCheckerSecure (0.03s) healthcheck_test.go:144: Failed to get TCP listener: listen tcp6 [::1]:0: bind: cannot assign requested address --- FAIL: TestTCPChecker (3.10s) healthcheck_test.go:249: Failed to get TCP listener: listen tcp6 [::1]:0: bind: cannot assign requested address --- FAIL: TestUDPChecker (0.00s) healthcheck_test.go:315: Failed to get UDPConn: listen udp6 [::1]:0: bind: cannot assign requested address

    Dockerfile: FROM ubuntu:xenial LABEL maintainer="[email protected]" RUN apt-get update && apt-get -y upgrade
    libnl-3-dev libnl-genl-3-dev build-essential git wget
    net-tools
    iproute
    inetutils-ping
    curl
    python
    python-yaml RUN wget https://dl.google.com/go/go1.12.7.linux-amd64.tar.gz RUN tar -xvf go1.12.7.linux-amd64.tar.gz RUN mv go /usr/local/ ENV GOROOT=/usr/local/go ENV GOPATH=$HOME/Projects/Proj1 ENV GOBIN=$GOPATH/bin ENV PATH=$GOPATH/bin:$GOROOT/bin:$PATH

    #seesaw setup RUN go get -u golang.org/x/crypto/ssh RUN go get -u github.com/dlintw/goconf RUN go get -u github.com/golang/glog RUN go get -u github.com/miekg/dns RUN go get -u github.com/kylelemons/godebug/pretty RUN go get -u github.com/golang/protobuf/proto

    RUN mkdir -p ${GOPATH}/src/github.com/google RUN cd ${GOPATH}/src/github.com/google && git clone https://github.com/google/seesaw RUN cd ${GOPATH}/src/github.com/google/seesaw && make test


    Any help would be greatly appreciated.

    opened by arjun1638 1
  • Compile issues on Ubuntu 16.04, golang 1.10.1

    Compile issues on Ubuntu 16.04, golang 1.10.1

    I ran into a couple of compile issues on Ubuntu 16.04, golang 1.10.1

    Incorrect variable type in engine/vserver_test.go:972 - both values need to be %t instead of %s. incorrect variable type in healthcheck/dns.go:143 - rc needs to be %d instead of %s.

    opened by rnicksic 0
  • Setting up Google Seesaw

    Setting up Google Seesaw

    Hello Gents and possibly ladies.

    I have been trying to get the Seesaw up and running with little success. I have been following the github guide and ran into some issues. I hope someone can help me out with them.

    First issue. When I download the seesaw files from github and run make test I get this error:

    ? github.com/google/seesaw/common/server [no test files] ? github.com/google/seesaw/ecu [no test files]

    github.com/google/seesaw/healthcheck

    healthcheck/dns.go:143: Sprintf format %s has arg rc of wrong type int

    github.com/google/seesaw/engine

    engine/vserver_test.go:972: Errorf format %s has arg got of wrong type bool FAIL github.com/google/seesaw/engine [build failed] ok github.com/google/seesaw/engine/config 0.006s ok github.com/google/seesaw/ha (cached) FAIL github.com/google/seesaw/healthcheck [build failed] ok github.com/google/seesaw/ipvs (cached) ? github.com/google/seesaw/ncc [no test files]

    Judging from the output there is something wrong with argument types. Because of this I get 2 FAILs on the Engine and Healthcheck. Is this serious or can it be ignored? And how could I fix this if necessary.

    If I run the make install it compiles the seesaw_ files without any issues.

    Another issue I ran into was actually installing the compiled executables.

    The install script provided in the github didn't work for me, so I had to do it manually. When I do the install of the sessaw_ files and go to the destination folder I just see a copy of those files. (e.g. seesaw_engine etc.). I would expect to see a bunch of seesaw files instead, like when I install something on windows. These are some of the commands I used to install: sudo install seesaw_ha /usr/local/seesaw sudo install seesaw_healthcheck /usr/local/seesaw sudo install seesaw_ncc /usr/local/seesaw

    What am I doing wrong?

    The last question is how do I get the seesaw started? I have seen some mention of seesaw_watchdog, but when I try to run it as a service or run restart seesaw_watchdog as suggested, I get unknown job/service.

    Any help would be greatly appreciated.

    opened by Quest86 0
  • What does this error mean? Manager failed to determine haConfig

    What does this error mean? Manager failed to determine haConfig

    When starting seesaw, I saw following error in the seesaw_engine.ERROR file

    E1016 17:16:02.756551 6427 core.go:366] Manager failed to determine haConfig: node 10.145.207.151 not configured

    What does this mean? I do have seesaw.cfg and cluster.pb files and all the seesaw processes (watchdog, ncc, engine, ha, ecu, healthcheck) seem to be running.

    10.145.207.151 is the current node, the peer is 10.145.207.153. vip is configured on the lb NIC on both seesaw nodes. dummy0 is present too.

    John

    opened by johntwei 0
Releases(v1.0)
Owner
Google
Google ❤️ Open Source
Google
HTTP(S)/WS(S)/TCP Tunnels to localhost using only SSH.

An open source serveo/ngrok alternative.

Antonio Mika 1.9k Jul 23, 2021
A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet.

frp README | 中文文档 What is frp? frp is a fast reverse proxy to help you expose a local server behind a NAT or firewall to the Internet. As of now, it s

null 47k Jul 22, 2021
Fast event-loop networking for Go

evio is an event loop networking framework that is fast and small. It makes direct epoll and kqueue syscalls rather than using the standard Go net pac

Josh 5k Jul 26, 2021
支持gRPC/HTTP协议,功能丰富的Mock Server实现

PowerMock 中文 | English PowerMock是一个Mock Server的实现,它同时支持HTTP与gRPC协议接口的Mock,并提供了灵活的插件功能。 这个工具面向于前后端、测试等对有接口Mock需求的开发人员,也可以作为一个通用的Mock服务,部署在网关架构或API管理平台中

Bilibili Base 10 Jul 20, 2021
V3IO Frames ("Frames") is a Golang based remote data frames access (over gRPC or HTTP stream)

V3IO Frames ("Frames") is a multi-model open-source data-access library that provides a unified high-performance DataFrame API for working with different types of data sources (backends). The library was developed by Iguazio to simplify working with data in the Iguazio Data Science Platform ("the platform"), but it can be extended to support additional backend types.

null 22 Jul 12, 2021
An userspace SORACOM Arc client powered by wireguard-go

soratun An easy-to-use, userspace SORACOM Arc client powered by wireguard-go. For deploying and scaling Linux servers/Raspberry Pi devices working wit

Soracom, Inc. 3 Jul 22, 2021
Deskreen turns any device with a web browser into a secondary screen for your computer

Deskreen Website: https://deskreen.com ▶️ Deskreen Youtube channel (video tutorials, demos, use cases for Deskreen day to day usage) Deskreen turns an

Paul Pavlo Buidenkov 11.2k Jul 28, 2021
gobetween - modern & minimalistic load balancer and reverse-proxy for the ☁️ Cloud era.

gobetween - modern & minimalistic load balancer and reverse-proxy for the ☁️ Cloud era. Current status: Maintenance mode, accepting PRs. Currently in

Yaroslav Pogrebnyak 1.6k Jul 16, 2021
Ethr is a Comprehensive Network Measurement Tool for TCP, UDP & ICMP.

Ethr Ethr is a cross platform network performance measurement tool written in golang. The goal of this project is to provide a native tool for compreh

Microsoft 4.9k Jul 26, 2021
A terminal UI for tshark, inspired by Wireshark

Termshark A terminal user-interface for tshark, inspired by Wireshark. V2.2 is out now with vim keys, packet marks, a command-line and themes! See the

Graham Clark 6.5k Jul 23, 2021
🚀Gev is a lightweight, fast non-blocking TCP network library based on Reactor mode. Support custom protocols to quickly and easily build high-performance servers.

gev 中文 | English gev is a lightweight, fast non-blocking TCP network library based on Reactor mode. Support custom protocols to quickly and easily bui

徐旭 1.2k Jul 16, 2021
Netmaker is a tool for creating and managing virtual networks

Netmaker is a tool for creating and managing virtual networks. The goal is to make virtual/overlay/mesh networking easy for non-networking people. It should be like clicking a button. Netmaker consists of a server, an agent, and a UI.

GRAVITL 769 Jul 26, 2021
A toy MMO example built using Ebiten and WebRTC DataChannels (UDP)

Ebiten WebRTC Toy MMO ⚠️ This is a piece of incomplete hobby work and not robust. Please read the "Why does this project exist?" section. What is this

Jae Bentvelzen 8 Jun 3, 2021