Operator
mysql์ ์ค์นํด์ฃผ๊ณ ๋ณต์ ํด์ฃผ๊ณ ๋ชจ๋ ๊ฑธ ์๋์ผ๋ก ํด์ฃผ๋๊ฒ์ด ๋ชฉํ
pv/pvc๊ฐ ์์ด tempdir ์ด๋ hostpath๋ก๋ ํ ์คํธ๋ ๊ฐ๋ฅํ๋ ๋ฐฑ์ /๋ณต๊ตฌ ๋ฑ์ ๋ฌธ์ ๊ฐ ์๋ค.
ํ์ฌ๋ ๋ชจ๋ ์คํฌ๋ฆฝํธ๊ฐ pv/pvc๊ฐ ์๋๊ฒ์ ๊ฐ์ ํ๋๊ฒ ๊ฐ๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์์ ์ค์นํ longhorn์ ์ค์น๋ฅผ ํด๋๊ณ ์์ ํ๊ธฐ๋ฅผ ๋ฐ๋๋ค
percona-xtradb-cluster-operator
git clone -b v1.8.0 https://github.com/percona/percona-xtradb-cluster-operator
cd percona-xtradb-cluster-operator/deploy
k create namespace pxc-mysql
kcn pxc-mysql
k get pod
k apply -f crd.yaml
k apply -f rbac.yaml
k apply -f operator.yaml
# ๋๋ ํฉ์ณ์ ธ์๋ k apply -f bundle.yaml
password setting
์ด์ ๊ด๋ จ ๋น๋ฐ๋ฒํธ๋ฑ์ ์ค์ ํ์. ๋น๋ฒ์ ์ ๋ถ ๋ฐ๊พผ๋ค. ์ ์ฉํ๋ค.
cat secrets.yaml
apiVersion: v1
kind: Secret
metadata:
name: my-cluster-secrets # ์ด๋ฆ ์ค์
type: Opaque
stringData:
root: your-password
xtrabackup: your-password
monitor: your-password
clustercheck: your-password
proxyadmin: your-password
pmmserver: your-password
operator: your-password
replication: your-password
์ ์ฉํ์.
k apply -f secrets.yaml
aws์ ๋ฐฑ์ ์ ํ๊ธฐ ์ํ ๋น๋ฒ๋ ํ์ํ๋ค.
cat backup-s3.yaml
apiVersion: v1
kind: Secret
metadata:
name: backup-s3 # ์ด๋ฆ
namespace: pxc-mysql
type: Opaque
data:
AWS_ACCESS_KEY_ID: QUtJQVxxxjc=
AWS_SECRET_ACCESS_KEY: VktqdzZWTjRDMjxxxY5MUQ5OQ==
k apply -f backup-s3.yaml
๋๋น ๋ํ๋ก์ด
secretsName: my-cluster-secrets # secret.yml์ ์๋ ์ด๋ฆ์ ๋ฃ์ด์ค์ผํจ.
allowUnsafeConfigurations: true # tls ํต์ ์์ฐ๋๊ฒ์ผ๋ก ์ฒ๋ฆฌ
haproxy:
enabled: false # proxysql์ ์ฌ์ฉํ ์์
proxysql:
enabled: true
serviceType: LoadBalancer
pmm:
enabled: true
image: percona/pmm-client:2.18.0
serverHost: pxc-pmm-service # pmm-server์์์ ์๋น์ค ๋ช
serverUser: admin # ํ์ธ
backup: # backup ์ค์
storage:
s3:
bucket: S3-BACKUP-BUCKET-NAME-HERE #s3 bucket name
credentialsSecret: backup-s3 # backup-s3.yaml์ ์๋ ์ด๋ฆ
region: us-west-1 # s3 bucket ์์น
#fs-pvc: # ์ฌ์ฉํ์ง ์์
schedule: #์ค์ผ์ค์ ์ ์ฉ
- name: 'sat-night-backup'
schedule: '0 0 * * 6'
keep: 52
storageName: s3-us-west
- name: 'daily-backup'
schedule: '0 0 * * *'
keep: 7
storageName: s3-us-west
- name: 'hourly-backup'
schedule: '0 * * * *'
keep: 24
storageName: s3-us-west
proxysql์ ์ฌ์ฉํ๊ณ haproxy๋ฅผ ์ฌ์ฉํ์ง ์์.
๋ฐฑ์ ์ค์
์ ์ฉ
k apply -f cr.yaml
k get svc # loadbalance ipํ์ธ
proxysql ๋ก๋ ๋ฐ๋์ค ์์ดํผ๋ก ๋๋น์ ์ ์ํด๋ณด๋ฉด ๋๋ค. ( 172.16.4.157 )
์๋๋ฉด ๋ค์ ์ปค๋งจ๋๋ฅผ ์ฌ์ฉํ๋ค.
kubectl run -i --tty --rm percona-client --image=percona --restart=Never \
-- mysql -h cluster02-pxc.pxc-mysql.svc.cluster.local -uroot -p
#type your password
cluster02-pxc.pxc-mysql.svc.cluster.local - $service-name.$namespace.svc.cluster.local
๋๋น์ ํ ์คํธ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ด๋ณด์.
create database test;
use test;
create table movies(id int auto_increment primary key, name varchar(20) not null);
show tables;
insert into movies(name) values('hello1');
select * from movies;
์ด์ ๊ฐ๊ฐ์ pod์์ ์ ์๋ํ๋์ง ํ์ธํด๋ณด์.
k get pod
์์ ์์ดํผ๋ฅผ ์ฐพ์์ ์์ดํผ๋ก ์ ์ํด๋ณธ๋ค.
10.233.111.105
10.233.118.212
10.233.108.255
kubectl run -i --tty --rm percona-client0 --image=percona --restart=Never \
-- mysql -h 10-233-111-105.pxc-mysql.pod.cluster.local -uroot -p
#type your password
kubectl run -i --tty --rm percona-client1 --image=percona --restart=Never \
-- mysql -h 10-233-118-212.pxc-mysql.pod.cluster.local -uroot -p
#type your password
kubectl run -i --tty --rm percona-client2 --image=percona --restart=Never \
-- mysql -h 10-233-108-255.pxc-mysql.pod.cluster.local -uroot -p
#type your password
๋ชจ๋ ์ ์ํ์ฌ
select * from movies
๋ฅผ ์คํํด์ ๋ฃ์ ๋ฐ์ดํฐ๊ฐ ๋ค์ด๊ฐ ์๋์ง ํ์ธ ํ๋ค.

์ ๋ณต์ ๋๊ณ ์๋๊ฒ์ ํ์ธํ์๋ค.
๋ฐฑ์
์๋ ๋ฐฑ์ ๋ฐฑ์ ์ค์ผ์ค์ ํด๋์์๋ก ํ์๊ฐ์ ํ๋ฒ์ฉ s3 bucket์ผ๋ก ์ ๋ก๋ ๋๋ค.
์๋ ๋ฐฑ์ ์๋์ผ๋ก ๋ฐฑ์ ์ ๋ฐ๊ณ ์ถ์ผ๋ฉด yml์ ์์ ํ๊ณ ์ ์ฉํ๋ฉด๋๋ค.
cat > backup.yaml <<EOF
apiVersion: pxc.percona.com/v1
kind: PerconaXtraDBClusterBackup
metadata:
# finalizers:
# - delete-s3-backup #์ง์ธ๋ s3 backup๊น์ง ๊ฐ์ด์ง์ฐ๊ณ ์ถ์๊ฒฝ์ฐ๋ ์ฌ์ฉํ์.
name: backup1 # ์ด๋ฆ์ ์ ์ค์ ํ์.
spec:
pxcCluster: cluster01
storageName: s3-us-west
EOF
kubectl apply -f backup/backup.yaml
s3์ ์ ๋ก๋ ๋๊ฒ์ ํ์ธํ ์ ์๋ค.
https://www.percona.com/doc/kubernetes-operator-for-pxc/backups.html#making-on-demand-backup
๋ณต๊ตฌ
cat > restore.yaml <<EOF
apiVersion: pxc.percona.com/v1
kind: PerconaXtraDBClusterRestore
metadata:
name: restore1
spec:
pxcCluster: cluster01
backupName: backup1
EOF
kubectl apply -f backup/restore.yaml
ํด๋ฌ์คํฐ๋ฅผ ํ๋์ฉ ์์ ๊ณ ๋ณต๊ตฌํ๊ณ ๋ค์ ์ฌ๋ ค์ค๋ค.
DR
์ผ๋จ ๋ ธ๋ 1๊ฐ๊ฐ ๊ณ ์ฅ๋๋ฉด ์๋์ผ๋ก ๋ค๋ฅธ๋ ธ๋์ ์ฌ๋ ค์ฃผ๊ณ ์ด ๋ ธ๋์์๋ ์๋์ผ๋ก master์์ ํ์ผ์ ๊ฐ์ ธ์์ ๋ณต๊ตฌ๋ฅผ ์๊ฐํํ ์๋์ผ๋ก ๋ถ์ฌ์ค๋ค.
๋ง์ฝ 3๊ฐ ๋ ธ๋๊ฐ ๋์์ ๊บผ์ ๋ฒ๋ฆฌ๋ฉด ๋ฌธ์ ๊ฐ ๋ ๋ฏ ๋ณด์ธ๋ค. ๊ทธ๋์ ์ฐพ์๋ดฃ๋๋ 3๊ฐ ๋ ธ๋์ค ๋ง์ง๋ง ๋ฐ์ดํฐ๊ฐ ์๋๊ณณ์ ์ฐพ์์ ๊ทธ๊ณณ์ ๋ง์คํฐ๋ก ์ง์ ํ๊ณ ๋ํ ๋๋จธ์ง 2๊ฐ ๋ ธ๋๋ฅผ ๋ค์ ์๋์ผ๋ก ์ฌ๋ ค์ค๋ค๊ณ ํ๋ ํฐ ๋ฌธ์ ๋ ์์ด ๋ณด์ธ๋ค.

https://youtu.be/V3ko5NpTMPA?t=895
longhorn์์ ์คํ ๋ฆฌ์ง์ ๋ฆฌํ๋ฆฌ์นด๋ฅผ ์ง์์ ํ๋ฏ๋ก 3๊ฐ ์ ๋ ํด๋๊ฑฐ๋ ์ ์ฒด ๋ ธ๋ ๋์์ ํด๋๋ฉด ์ ์ฒด ๋ ธ๋์ ๊ฐ์ ๋ฐ์ดํฐ๊ฐ ์๋๊ฒ์ด๋ฏ๋ก ์ด๋ ๋ ธ๋์์ ์คํ์ด ๋๋๋ผ๋ ์๋์ผ๋ก ๋ถ์ฌ์ ์ฌ๋ผ์ฌ๊ฒ์ผ๋ก ๋ณด์ธ๋ค.
๊ฒฐ๋ก
์ด 3๋์ mysql ํด๋ฌ์คํฐ๊ฐ ๊ตฌ์ฑ์ด ๋์๊ณ longhorn์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๊ฐ ์ฟ ๋ฒ ํด๋ฌ์คํฐ์ ์ ์ฅ์ด ๋๋ค. ๋ฐฑ์ ์ s3๋ก ์๋์ผ๋ก ์ ๋ก๋๊ฐ ๋๋ค. pmm์ผ๋ก ๋ชจ๋ํฐ๋ง์ด ๊ฐ๋ฅํ๋ค.
์๊ณ ์๋ ๋ฌธ์
๊ฐ๋ ํ ์คํธํ๊ฒ๋ค์ ์ง์ฐ๋ ค๊ณ ํ ๋ ํ๊ฑธ๋ฆฌ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค. backup์ด ์์ง์์ ธ์ ๊ทธ๋ฐ ๊ฒฝ์ฐ๊ฐ ์์
pxc-backups๋ก ๊ฒ์ํด์ edit ํด์ finalize๋ฅผ ์ง์์ค์ผ ํ๋ค.
์ธ๋ถ ์คํ ๋ฆฌ์ง๋ฅผ ์ง์ฐ์ง ๋ชปํด์ ํ์ด ๊ฑธ๋ฆฌ๋๊ฑด๋ฐ ์ด ๋ถ๋ถ์ ๋ฌด์ํ๊ณ ์ง๋ ์ ์๋ค.
Last updated
Was this helpful?