可使用kubesphere,快速搭建MySQL環境。html
k8s部署有狀態服務的話就是參照上面的圖。
部署詳細說明:mysql
操做步驟:
1)、基本信息:
sql
2)、容器鏡像:
設置MySQL容器鏡像,MySQL:5.7 版本,內存設置爲2G,環境變量使用以前設置好的MySQL密鑰。
數據庫
3)、掛載存儲:
api
這裏能夠掛載配置文件或密鑰,因此,接下來另開一個窗口,在配置中心->配置
,建立配置文件:
session
①、建立配置基本信息
app
②、設置mysql配置文件my.cnf
less
[client] default-character-set=utf8 [mysql] default-character-set=utf8 [mysqld] init_connect='SET collation_connection = utf8_unicode_ci' init_connect='SET NAMES utf8' character-set-server=utf8 collation-server=utf8_unicode_ci skip-character-set-client-handshake skip-name-resolve #master-slaver repication server_id=1 log-bin=mysql-bin read-only=0 binlog-do-db=gulimall_ums binlog-do-db=gulimall_pms binlog-do-db=gulimall_oms binlog-do-db=gulimall_sms binlog-do-db=gulimall_wms binlog-do-db=gulimall_admin replicate-ignore-db=mysql replicate-ignore-db=sys replicate-ignore-db=information_schema replicate-ignore-db=performance_schema
my.cnf配置內容直接複製粘貼到以下文本框內便可,kubesphere提供了可視化界面,也提供了yaml編輯模式,咱們能夠點擊編輯模式查看yaml文件是如何寫的。tcp
mysql-master-cnf.yaml編輯模式:ide
apiVersion: v1 kind: ConfigMap metadata: namespace: gulimall labels: app: mysql-master-cnf name: mysql-master-cnf annotations: kubesphere.io/alias-name: master配置 spec: template: metadata: labels: app: mysql-master-cnf data: my.cnf: |- [client] default-character-set=utf8 [mysql] default-character-set=utf8 [mysqld] init_connect='SET collation_connection = utf8_unicode_ci' init_connect='SET NAMES utf8' character-set-server=utf8 collation-server=utf8_unicode_ci skip-character-set-client-handshake skip-name-resolve #master-slaver repication server_id=1 log-bin=mysql-bin read-only=0 binlog-do-db=gulimall_ums binlog-do-db=gulimall_pms binlog-do-db=gulimall_oms binlog-do-db=gulimall_sms binlog-do-db=gulimall_wms binlog-do-db=gulimall_admin replicate-ignore-db=mysql replicate-ignore-db=sys replicate-ignore-db=information_schema replicate-ignore-db=performance_schema
配置設置好以後,而後點擊建立就建立好了:
4)、建立存儲PVC
存儲卷->建立
①、基本信息設置
②、存儲卷設置
因爲在安裝kubesphere時沒有建立openebs存儲卷,因此,這裏只能選local,應該須要建立openebs。
經過圖形化界面建立好以後,咱們能夠看編輯模式的yaml:
apiVersion: v1 kind: PersistentVolumeClaim metadata: namespace: gulimall name: gulimall-mysql-master-pvc labels: app: gulimall-mysql-master-pvc annotations: kubesphere.io/alias-name: 主節點pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi template: metadata: labels: app: gulimall-mysql-master-pvc storageClassName: local
而後點擊建立,建立好的PVC:
5)、有狀態服務-掛載存儲
建立好配置和PVC以後,咱們再接着建立有狀態服務的掛載存儲步驟接着往下作:
配置文件掛載:
存儲卷掛載:
而後點擊添加,設置好的頁面:
而後點擊下一步,高級設置
保持默認,而後點擊建立,另外,咱們也能夠看看編輯模式的yaml文件:
apiVersion: apps/v1 kind: StatefulSet metadata: namespace: gulimall labels: app: gulimall-mysql-master name: gulimall-mysql-master-qpr2er annotations: kubesphere.io/alias-name: mysql主節點 spec: replicas: 1 selector: matchLabels: app: gulimall-mysql-master template: metadata: labels: app: gulimall-mysql-master annotations: kubesphere.io/containerSecrets: null logging.kubesphere.io/logsidecar-config: '{}' spec: containers: - name: container-jbrfx9 type: worker imagePullPolicy: IfNotPresent resources: requests: cpu: '0.01' memory: 10Mi limits: cpu: '0.98' memory: 1700Mi image: 'mysql:5.7' ports: - name: tcp-3306 protocol: TCP containerPort: 3306 servicePort: 3306 - name: tcp-33060 protocol: TCP containerPort: 33060 servicePort: 33060 env: - name: MYSQL_ROOT_PASSWORD valueFrom: secretKeyRef: name: mysql-secret key: MYSQL_ROOT_PASSWORD volumeMounts: - name: volume-vvijno readOnly: false mountPath: /etc/mysql - name: volume-dddvwk readOnly: false mountPath: /var/lib/mysql serviceAccount: default affinity: podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 100 podAffinityTerm: labelSelector: matchLabels: app: gulimall-mysql-master topologyKey: kubernetes.io/hostname initContainers: [] imagePullSecrets: null volumes: - name: volume-vvijno configMap: name: mysql-master-cnf items: - key: my.cnf path: my.cnf - name: volume-dddvwk persistentVolumeClaim: claimName: gulimall-mysql-master-pvc updateStrategy: type: RollingUpdate rollingUpdate: partition: 0 serviceName: gulimall-mysql-master --- apiVersion: v1 kind: Service metadata: namespace: gulimall labels: app: gulimall-mysql-master annotations: kubesphere.io/serviceType: statefulservice kubesphere.io/alias-name: mysql主節點 name: gulimall-mysql-master spec: sessionAffinity: ClientIP selector: app: gulimall-mysql-master ports: - name: tcp-3306 protocol: TCP port: 3306 targetPort: 3306 - name: tcp-33060 protocol: TCP port: 33060 targetPort: 33060 clusterIP: None sessionAffinityConfig: clientIP: timeoutSeconds: 10800
建立好的頁面:
能夠參考上邊建立master服務的步驟來建立從庫的服務。
①、建立從庫配置掛載文件
mysql-slaver-cnfmy.cnf
[client] default-character-set=utf8 [mysql] default-character-set=utf8 [mysqld] init_connect='SET collation_connection = utf8_unicode_ci' init_connect='SET NAMES utf8' character-set-server=utf8 collation-server=utf8_unicode_ci skip-character-set-client-handshake skip-name-resolve #master-slaver repication server_id=2 log-bin=mysql-bin read-only=1 binlog-do-db=gulimall_ums binlog-do-db=gulimall_pms binlog-do-db=gulimall_oms binlog-do-db=gulimall_wms binlog-do-db=gulimall_admin replicate-ignore-db=mysql replicate-ignore-db=sys replicate-ignore-db=information_schema replicate-ignore-db=performance_schema
②、建立存儲卷PVC
③、建立slaver有狀態服務
從節點建立好了:
上邊咱們已經經過k8s建立了主從兩個服務,下邊經過設置將主從同步起來。
進入master容器終端:
# 1.進入mysql內部 > mysql -uroot -p123456 # 2.受權 root能夠遠程訪問(主從無關,爲了方便咱們遠程鏈接MySQL) mysql> grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option; Query OK, 0 rows affected, 1 warning (0.00 sec) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec) # 3.添加用來同步的用戶 mysql> GRANT REPLICATION SLAVE ON *.* to 'backup'@'%' identified by '123456'; Query OK, 0 rows affected, 1 warning (0.01 sec) # 4.查看master狀態 mysql> show master status\G; *************************** 1. row *************************** File: mysql-bin.000003 Position: 889 Binlog_Do_DB: gulimall_ums,gulimall_pms,gulimall_oms,gulimall_sms,gulimall_wms,gulimall_admin Binlog_Ignore_DB: Executed_Gtid_Set: 1 row in set (0.00 sec)
設置好以後,記錄File文件 mysql-bin.000003
,從庫同步須要用到,而後exit退出。
進入slaver容器終端:
# 進入mysql內部 mysql -uroot -p123456 # 設置主庫鏈接 主庫 dns: gulimall-mysql-master.gulimall change master to master_host='gulimall-mysql-master.gulimall',master_user='backup',master_password='123456',master_log_file='mysql_bin.000003',master_log_pos=0,master_port=3306; # 啓動從庫同步 start slave; # 查看從從庫狀態 show slave status\G;
從庫報了這樣的一個錯誤:
mysql> show slave status\G; *************************** 1. row *************************** Slave_IO_State: Master_Host: gulimall-mysql-master.gulimall Master_User: backup Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql_bin.000003 Read_Master_Log_Pos: 4 Relay_Log_File: gulimall-mysql-slaver-5mehjw-0-relay-bin.000001 Relay_Log_Pos: 4 Relay_Master_Log_File: mysql_bin.000003 Slave_IO_Running: No Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: mysql,sys,information_schema,performance_schema Last_IO_Errno: 1236 Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file' Last_SQL_Errno: 0 Last_SQL_Error:
解決方法:
stop slave; reset slave; start slave;
而後打印從庫同步狀態:
能夠看到已經設置成功了。
主庫建立一個數據庫:
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+ 4 rows in set (0.00 sec) mysql> CREATE DATABASE `gulimall_oms` DEFAULT CHARACTER SET utf8mb4; Query OK, 1 row affected (0.01 sec) mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | gulimall_oms | | mysql | | performance_schema | | sys | +--------------------+ 5 rows in set (0.00 sec)
進入從庫:
能夠看到從庫也已經同步了剛在主庫建立的gulimall_oms
庫,至此咱們在K8S上的主從服務已經建立完成。
相關文章:
Digtime.cn-部署-92-K8S 部署 MySQL主從
K8S部署有狀態服務
Kubernetes(k8s)有狀態集羣服務部署與管理