유니티 무료에셋 중에는 쓸만한 것들이 꽤 있다.
서버 관련에서는 [Mirror]와 [DarkRift Networking2 : 이하 DarkRift2] 가 쓸만한 데, 오늘은 DarkRift Networking2에 대해서 알아보겠다.
유니티 패키지 매니저로 받으면, Console 실행파일과 dll들이 잘 정리되어있다.
원래는 유료였고 Pro 버전과 일반 버전이 지원범위가 달랐지만, 올해 상반기에 무료로 전환되었다. 이는 비용 걱정을 하는 인디 개발자들에게 희소식이 아닐 수 없다. 하지만 생각보다 가이드나 언급량이 많지 않다. 그나마 유튜브에 최근 튜토리얼 이 있긴하지만 그 외에는 다소 오래 되었다. 물론 photon이 편리하긴 하지만, 여러 기능을 직접 구현하면서 공부할 수 있다. 게다가 비용 부분은 전기세를 제외하면 별도의 비용이 들지 않는다. 따라서 처음 서버를 운용함에 있어 DarkRift2 또한 photon2 만큼 쓸만한 선택지라 할 수 있다.
멀티 클라우드 서비스 연결에 적합한 프로그램이다. 올해 한국지사가 등장해서 한국 시장을 공략하겠다는 포부를 밝혔는데, 해외에서는 이미 유명한듯 하다. 관심있거나 쓸 일이 있다면 한 번 배워두면 좋을 듯 하다. 자세한 사항은 해당 사이트를 참고하자. DarkRift2는 consul을 자신들의 클러스터링 기능을 이용하기 위한 프로그램으로 추천하고 있다.
서버간 통신을 원활하게 도와주는 기능이다. consul의 서비스 레지스트리를 통해 DarkRift2 는 서버의 수평적 확장을 추구한다.
consul 입문으로도 DarkRift2는 좋다. 물론 consul 자체를 공부하려면 시간이 많이 들지만, DarkRift2에서 사용하는 범위는 비교적 단순하다. 그래서 consul을 배우는 입장이나 알아보고 싶은 입장에서는 유니티 DarkRift2 에셋이 의외로 나쁘지 않다.
윈도우에서도 사용 가능하나, 디스코드에서 개발진 글을 읽어보니 DarkRift2는 리눅스에서도 사용할 수 있다고 한다. 굳이 리눅스로 바꿀 필요는 없지만, 필자는 다른 방식으로도 접근해보고 싶은 욕심에 리눅스를 선택했다.
1.관리자 모드로 전환한다.
sudo passwd root
...
su root
...
2.몇 가지 프로그램을 설치하자.
apt-get install zip unzip net-tools vim
3.consul을 설치하자. (1.12.3 기준)
wget -O- https://apt.releases.hashicorp.com/gpg | gpg --dearmor | sudo tee /usr/share/keyrings/hashicorp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
sudo apt update && sudo apt install consul
4.consul 실행 파일을 받자 (v 1.12.3).
5.압축을 풀고 consul 파일을 옮긴다.
mv consul /usr/local/bin
6.consul 실행에 필요한 config.json 파일을 담을 디렉토리 하나를 만든다.
mkdir /etc/consul.d/server
7.consul 세팅 하기
consul keygen
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
vi /etc/consul.d/server/config.json
sudo vim /etc/consul.d/server/config.json
{
"bind_addr": "abc.def.ghi.jkl",
"client_addr": "0.0.0.0",
"datacenter": "dc1",
"data_dir": "/var/consul",
"encrypt": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"log_level": "INFO",
"ui": true,
"domain": "yourName",
"enable_script_checks":true,
"dns_config":{
"enable_truncate": true,
"only_passing":true
},
"enable_syslog": true,
"enable_debug": true,
"node_name": "YourServerNode",
"server": true,
"bootstrap_expect": 3,
"leave_on_terminate": false,
"skip_leave_on_interrupt": true,
"rejoin_after_leave": true,
"retry_join": [
"abc.def.ghi.jkl:8301",
"ABC.DEF.GHI.JKL:8301",
"123.456.789.011:8301"
]
}
bind_addr : consul을 실행한 서버 아이피 & DarkRift2 서버 아이피. 각 서버별로 자기 아이피
ui : http://bind_addr:8500 로 접속을 해보면 내가 구성하고 있는 consul 을 확인할 수 있다.
node_name : 이름을 잘 정해주자. 나중에 service 이름과 헷갈리지 않도록 정한다.
bootstrap_expect : 연결된 서버수는 홀수 권장이다. DarkRift2는 1개여도 상관없다. 다만 등록한 개수만큼 서버가 모두 켜질 때까지 로그는 에러를 뱉어낸다.
encrypt : consul keygen으로 만든 키 값을 설정해주자. consul keyring -list로 현재 설치된 키 값을 확인할 수 있는데, 만약 부트스트랩이 1 보다 큰 경우, 각 서버의 모든 키 값은 하나로 통일 되어야 한다. 여러 개의 키가 설치되어 있다면 primary 키가 동일 해야한다. 아래는 예시.
consul keyring -list
consul keyring -install=key
consul keyring -remove=key
consul keyring -use=key
8.작성한 json으로 각 서버마다 consul 실행
consul agent -config-dir /etc/consul.d/server
consul join 123.456.789.111
9.http://bind_addr:8500 으로 접속해보면 (bind_addr 대신에 등록한 아이피) UI로 현재 상황을 확인할 수 있다.
- 개발버전 consul agent -dev 로 실행한 사진이다.