1、环境准备
k8s集群,版本1.27.0
2、搭建nfs服务器
本次用的k8smaster节点作为nfs服务器,因为需要在两个工作节点上连接nfs,所以工作节点上也要安装nfs
yum install -y nfs-utils
我们直接在nfs服务器(k8s-master)当中创建这三个目录并写入 /etc/exports 文件夹中(创建的目录可以修改)
mkdir -p /data/nfs/{mysql-master,mysql-slaver-01,mysql-slaver-02}
cat >> /etc/exports << EOF
/data/nfs/mysql-master *(rw,sync,no_root_squash)
/data/nfs/mysql-slaver-01 *(rw,sync,no_root_squash)
/data/nfs/mysql-slaver-02 *(rw,sync,no_root_squash)
EOF
执行命令启动并验证目录是否暴露成功
systemctl enable --now nfs-server
showmount -e 192.168.15.21
3、安装mysql集群
(1) 创建命名空间
kubectl create namespace mysql
或
apiVersion: v1
kind: Namespace
metadata:
name: mysql
spec: {}
status: {}
(2) 创建MySQL密码的Secret
创建一个存储了MySQL密码的Secret,我们可以直接使用这行命令生成这个Secret的资源清单文件:
# 注意修改root的密码和命名空间,我的root密码设置为的是qwerty,生成后存入yaml文件执行
kubectl create secret generic hamysql-password --namespace=mysql --from-literal=mysql_root_password=qwerty --dry-run=client -o=yaml
(3) 安装MySQL主节点
创建pv和pvc
apiVersion: v1
kind: PersistentVolume
metadata:
name: deploy-mysql-master-nfs-pv
namespace: mysql
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteMany
nfs:
# 注意修改IP地址和暴露的目录(如果不一样)
server: 192.168.1.160
path: /data/nfs/mysql-master
storageClassName: "nfs"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: deploy-mysql-master-nfs-pvc
namespace: mysql
spec:
accessModes:
- ReadWriteMany
storageClassName: "nfs"
resources:
requests:
storage: 1Gi
volumeName: deploy-mysql-master-nfs-pv
创建pv和pvc kubectl apply -f xxx
kubectl get pv,pvc -n mysql
写一个my.cnf文件
[mysqld]
skip-host-cache
skip-name-resolve
datadir = /var/lib/mysql
socket = /var/run/mysqld/mysqld.sock
secure-file-priv = /var/lib/mysql-files
pid-file = /var/run/mysqld/mysqld.pid
user = mysql
secure-file-priv = NULL
server-id = 1
log-bin = master-bin
log_bin_index = master-bin.index
binlog_do_db =wvg_user
binlog_ignore_db = information_schema
binlog_ignore_db = mysql
binlog_ignore_db = performance_schema
binlog_ignore_db = sys
binlog-format = ROW
[client]
socket = /var/run/mysqld/mysqld.sock
!includedir /etc/mysql/conf.d/
注意几个配置
# server id,要注意多个mysql节点唯一
server-id = 1
# 生成的logbin的文件名
log-bin = master-bin
log_bin_index = master-bin.index
# 同步哪个数据库,这里我们为了测试之同步wvg_user这个数据库,写*/不写就是所有都同步
binlog_do_db = wvg_user
# 排除哪个数据库,可以写多行,排除的数据库不会被主从同步,这里写上mysql自带的几个数据库
binlog_ignore_db = information_schema
... # 还有几行省略
# binlog的格式
binlog-format = ROW
接下来将创建一个ConfigMap来存储这个配置文件。可以使用以下配置生成yaml资源清单文件内容:
kubectl create configmap mysql-master-cm -n mysql --from-file=my.cnf --dry-run=client -o yaml
部署mysql主节点
apiVersion: v1
data:
my.cnf: |
[mysqld]
skip-host-cache
skip-name-resolve
datadir = /var/lib/mysql
socket =