{"id":34122315,"url":"https://github.com/sippy/go-rtp_cluster","last_synced_at":"2025-12-14T22:00:30.894Z","repository":{"id":81900803,"uuid":"187235955","full_name":"sippy/go-rtp_cluster","owner":"sippy","description":"GoLang version of the rtp_cluster","archived":false,"fork":false,"pushed_at":"2025-01-10T22:49:35.000Z","size":198,"stargazers_count":10,"open_issues_count":0,"forks_count":2,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-01-10T23:27:54.538Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-2-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sippy.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2019-05-17T15:00:12.000Z","updated_at":"2025-01-10T22:49:39.000Z","dependencies_parsed_at":"2025-12-14T22:00:20.885Z","dependency_job_id":null,"html_url":"https://github.com/sippy/go-rtp_cluster","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/sippy/go-rtp_cluster","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sippy%2Fgo-rtp_cluster","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sippy%2Fgo-rtp_cluster/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sippy%2Fgo-rtp_cluster/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sippy%2Fgo-rtp_cluster/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sippy","download_url":"https://codeload.github.com/sippy/go-rtp_cluster/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sippy%2Fgo-rtp_cluster/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":27737690,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-12-14T02:00:11.348Z","response_time":56,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-12-14T22:00:13.452Z","updated_at":"2025-12-14T22:00:30.884Z","avatar_url":"https://github.com/sippy.png","language":"Go","funding_links":[],"categories":["Interconnect"],"sub_categories":["SBC, IMS"],"readme":"[![Test Status](https://travis-ci.com/sippy/go-rtp_cluster.svg?branch=master)](https://travis-ci.com/sippy/go-rtp_cluster)\n\n# RTP Cluster - a front-end for the distributed RTPproxy network\n\n## Overview \n\nRTP Cluster is software that sits between SIP signaling component (such as\nOpenSIPS, B2BUA, Kamailio etc.) and one or more RTPproxy instances. The\nsoftware monitors availability of each individual RTPproxy and distributes\nload between them based on that availability and parameters defined by the\nadministrator (weight and max capacity).\n\nFrom the point of view of the signaling component, the RTP Cluster appears\nto be a normal RTPproxy running locally. \n\nOne process can support more than one cluster, each on different control\nsocket.\n\nThe following diagram illustrates the high level design of the software.\n\n![Alt text](https://docs.google.com/drawings/d/1FNrR8uRY5TeNBhVDLRM2eNYX363QD9aYMLb8GsALHdk/pub?w=800\u0026h=600 \"RTP Custer, high-level diagram\")\n \n## Build\n\nCheck out the code:\n\n```\n$ git checkout https://github.com/sippy/go-rtp_cluster.git\n$ cd go-rtp_cluster\n```\n\nMake sure Go environment is installed and initialized, them run:\n\n```\n$ go build -o rtp_cluster\n```\n\nOr simply:\n\n```\n$ make\n```\n\n## Installation and configuration\n\nInstallation currently consists of unpacking rtp_cluster tar package into\ndesignated directory. \n\nConfiguration is performed by the `rtp_cluster.xml` file. Example is\navailable in the rtp_cluster directory of the package. Default location of\nthe configuration file is `/usr/local/etc/rtp_cluster.xml`.\n\nThe server can be started as follows:\n\n```\n$ rtp_cluster\n```\n\nBy default the software will become a daemon and run in background. All\nerror messages and exceptions can be found in the\n`/var/log/rtp_cluster.log`. In order to run in the foreground mode one has\nto specify `-f` flag when starting `rtp_cluster.py`.\n\nOpenSIPS configuration remains the same as in the case of stand-alone\nlocal RTPproxy. \n\n## Run-time configuration adjustments\n\nRTP Cluster provides administration CLI interface allowing to change\ncluster configuration on the fly. In order to connect to that interface\none can either use telnet utility (only works on systems where telnet can\nconnect to unix domain sockets), or using the supplied\n`rtp_cluster_client.py` script. Following commands are supported:\n\n* `ls` \n * list all configured clusters;\n* `ls \u003ccluster name\u003e` \n * show detailed information about the cluster with the matching name;\n* `modify \u003ccluster name\u003e add name=\u003crtpproxy name\u003e,protocol=\u003cprotocol\u003e,address=\u003caddress\u003e,capacity=\u003ccapacity\u003e,weight=\u003cweight\u003e`\n  * add new RTPproxy into the cluster with matching name;\n* `modify \u003ccluster name\u003e delete \u003crtpproxy name\u003e`\n * gracefully remove specified RTPproxy from the cluster. The software\n   will check if there any sessions already in progress and will wait for\n   them to finish before removing the entry completely;\n* `modify \u003ccluster name\u003e suspend \u003crtpproxy name\u003e`\n * temporary suspend specified RTPproxy and do not create any new sessions\n   in it. The proxy remains in the cluster configuration;\n* `modify \u003ccluster name\u003e resume \u003crtpproxy name\u003e`\n * resume previously suspended proxy.\n\n## Example:\n\n1. Get list of configured clusters:\n\n```\n$ ./rtp_cluster_client.py ls\nCluster: #0\n    name = Supercluster#1\n    address = /var/run/rtpproxy.sock\n    active members = 2\n    inactive members = 0\n\nCluster: #1\n    name = Supercluster#2\n    address = /var/run/rtpproxy1.sock\n    active members = 0\n    inactive members = 2\nOK\n```\n\n\n2. Get detailed information about `Supercluster#1` cluster:\n\n\n```\n$ ./rtp_cluster_client.py 'ls Supercluster#1'\nActive members of the cluster #0:\n    RTPproxy: #0\n        name = RTPPROXY1\n        address = [u'127.0.0.1', 22222]\n        weight = 100\n        capacity = 2500\n        state = online\n        active sessions = 0\n        status = ACTIVE\n\n    RTPproxy: #1\n        name = RTPPROXY2\n        address = [u'127.0.0.1', 22223]\n        weight = 0\n        capacity = 1500\n        state = online\n        active sessions = 0\n        status = ACTIVE\n\nInactive members of the cluster #0:\n\nOK\n```\n\n3. Add new proxy to the `Supercluster#2`:\n\n```\n$ ./rtp_cluster_client.py 'modify Supercluster#2 add name=another_proxy,protocol=udp,address=1.2.3.4:567,capacity=120,weight=300'                 \nOK\n```\n\n4. Gracefully remove `RTPPROXY2` node from `Supercluster#1`:\n\n```\n$ ./rtp_cluster_client.py 'modify Supercluster#1 delete RTPPROXY2'\nOK\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsippy%2Fgo-rtp_cluster","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsippy%2Fgo-rtp_cluster","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsippy%2Fgo-rtp_cluster/lists"}