대부분의 서비스가 SQL 데이터베이스에 상태를 저장한다. 공식 가이드는 MariaDB 를 컨트롤러 노드에 둔다. 컨트롤러 노드에서 수행한다.
패키지 설치
apt install mariadb-server python3-pymysql
/etc/mysql/mariadb.conf.d/99-openstack.cnf 를 만든다. bind-address 는 컨트롤러 관리용 IP 다.
[mysqld]
bind-address = 10.0.0.11
default-storage-engine = innodb
innodb_file_per_table = on
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8
서비스 재시작과 보안 설정
systemctl restart mariadb
mysql_secure_installation
Ubuntu 의 MariaDB 는 root 로컬 접속에 unix_socket 인증을 쓴다. root 셸에서 mysql 을 비밀번호 없이 실행할 수 있다.
패키지 설치
dnf install mariadb mariadb-server python3-PyMySQL
/etc/my.cnf.d/openstack.cnf 를 만든다.
[mysqld]
bind-address = 10.0.0.11
default-storage-engine = innodb
innodb_file_per_table = on
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8
서비스 등록과 보안 설정
systemctl enable mariadb.service
systemctl start mariadb.service
mysql_secure_installation
mysql_secure_installation 에서 데이터베이스 root 비밀번호를 정한다.
RHEL 계열에서 firewalld 를 쓰면 다른 노드가 붙을 수 있게 연다.
firewall-cmd --permanent --add-service=mysql
firewall-cmd --reload
mysql -u root -p -e "SHOW VARIABLES LIKE 'character_set_server'; SHOW VARIABLES LIKE 'max_connections';"
ss -ltnp | grep 3306
패키지 대신 컨테이너로 올려도 된다. 아래는 docker compose 예시다.
docker-compose.yaml
services:
db:
image: mariadb:11.4
restart: always
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
ports:
- 3306:3306
volumes:
- ./volumes/mysql/var/lib/mysql:/var/lib/mysql
- ./volumes/etc/my.cnf.d:/etc/my.cnf.d
./volumes/etc/my.cnf.d/openstack.cnf
[mysqld]
default-storage-engine = innodb
innodb_file_per_table = on
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8
CentOS Stream 8 에서는 다음 명령으로 설치했다.
yum install mariadb mariadb-server python2-PyMySQL -y