[MongoDB] replica set ①
OS : Rocky Linux 9
MongoDB 에서 replica set 을 구성하려면
우선 replica set 을 구성하는 서버들의 conf 파일 내용 중
'security' 와 'replication' 세팅이 같아야 한다.
그리고 primay로 사용할 서버에 먼저 root 계정 등
root role 을 갖고 있는 계정을 생성하고 세팅하는게 좋다.
맞춰줘야 할 conf 내용은 다음과 같다.
security:
authorization: "enabled"
clusterAuthMode: "keyFile"
keyFile: "/etc/mongod/mongodb-keyfile"
replication:
replSetName: "replName"
replication 설정을 활성화 하고 security 설정을 하려면
반드시 keyFile 이 있어야 하므로 keyfile 을 생성해준다.
openssl rand -hex 32 > /etc/mongod/mongodb-keyfile
해당 keyfile 은 반드시 replica set 을 설정할 모든 서버에 동일한 파일을 생성해야 한다.
각 서버에 해당 명령어로 keyfile 을 만드는게 아닌,
한 서버에서 keyfile 을 만들고 같은 값으로 keyfile 을 생성하거나, 복사해서 이동해야 한다.
keyfile 은 권한을 제한해야 한다.
권한이 과도하게 들어있으면 MongoDB에서 실행 시 에러가 발생한다.
# chown mongod:mongod /etc/mongod/mongodb-keyfile
# chmod 600 /etc/mongod/mongodb-keyfile
통신을 위해 서로의 MongoDB 서비스 포트를 열어준다.
해당 글에서는 primary 서버는 123.123.123.123 secondary 서버는 456.456.456.456 이라고 가정한다.
# firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address=123.123.123.123 port port="57017" protocol="tcp" accept'
primary 로 사용할 서버에서 mongosh 로 접속한다.
# mongosh -u root -p --port 57017
admin DB로 전환한다.
Primary test> use admin
replica set 을 초기화 한다.
초기화 시 secondary 로 사용할 서버도 한 번에 등록해주자.
Primary admin> rs.initiate({_id: "replName",members: [{ _id: 0, host: "123.123.123.123:57017", priority: 2 },{ _id: 1, host: "456.456.456.456:57017", priority: 1 }]})
만약 초기화 시 추가하지 못했다면 나중에 추가해도 된다.
Primary admin> rs.add("456.456.456.456:57017")
priority 값이 높은 서버가 primary 서버가 되며,
낮은 서버가 secondary 서버가 된다.
primary 서버에서 replica set 의 상태롤 조회할 수 있다.
Primary admin> rs.status()
정상적으로 등록이 되었다면
health 값이 1,
stateStr 값이 각각 PRIMARY, SECONDARY 로 확인된다.
MongoDB의 replica set 은 홀수를 기본으로 하는데,
다음 글에서 arbiter를 활용한 구성을 추가해보겠다.