• k8s-mysql主从部署


    一.环境信息

    mysql版本 :8.0

    k8s 版本1.22

    使用nfs作为共享存储

    二.配置mysql主节点yaml

    1. apiVersion: v1
    2. kind: ConfigMap
    3. metadata:
    4. name: mysql-master-config
    5. namespace: mysql
    6. labels:
    7. app: mysql-master-config
    8. data:
    9. my.cnf: |+
    10. [client]
    11. default-character-set=utf8
    12. [mysql]
    13. default-character-set=utf8
    14. [mysqld]
    15. init_connect='SET collation_connection = utf8_unicode_ci'
    16. init_connect='SET NAMES utf8'
    17. character-set-server=utf8
    18. lower_case_table_names=1
    19. sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
    20. collation-server=utf8_unicode_ci
    21. skip-character-set-client-handshake
    22. skip-name-resolve
    23. pid-file = /var/run/mysqld/mysqld.pid
    24. socket = /var/run/mysqld/mysqld.sock
    25. datadir = /var/lib/mysql
    26. secure-file-priv= NULL
    27. # Disabling symbolic-links is recommended to prevent assorted security risks
    28. symbolic-links=0
    29. # 主从同步
    30. server-id = 1
    31. log-bin = mysql-bin
    32. sync_binlog = 1
    33. binlog_checksum = none
    34. binlog_format = mixed
    35. slave-skip-errors = all
    36. event_scheduler = 1
    37. max_allowed_packet = 64M
    38. # Custom config should go here
    39. !includedir /etc/mysql/conf.d/
    40. ---
    41. # headless service
    42. apiVersion: v1
    43. kind: Service
    44. metadata:
    45. name: mysql-master-svc
    46. namespace: mysql
    47. labels:
    48. app: mysql-master-svc
    49. spec:
    50. clusterIP: None
    51. ports:
    52. - name: master-port
    53. port: 3306
    54. selector:
    55. app: mysql-master
    56. ---
    57. # NodePort service
    58. apiVersion: v1
    59. kind: Service
    60. metadata:
    61. name: mysql-master-nodeport
    62. namespace: mysql
    63. labels:
    64. app: mysql-master-nodeport
    65. spec:
    66. clusterIP:
    67. ports:
    68. - name: master-port
    69. port: 3306
    70. nodePort: 31306
    71. targetPort: 3306
    72. selector:
    73. app: mysql-master
    74. type: NodePort
    75. target-port:
    76. externalTrafficPolicy: Cluster
    77. ---
    78. apiVersion: apps/v1
    79. kind: StatefulSet
    80. metadata:
    81. name: mysql-master
    82. namespace: mysql
    83. spec:
    84. serviceName: "mysql-master-svc"
    85. replicas: 1
    86. selector:
    87. matchLabels:
    88. app: mysql-master
    89. template:
    90. metadata:
    91. labels:
    92. app: mysql-master
    93. spec:
    94. containers:
    95. - name: mysql-master
    96. image: mysql:8.0.20
    97. ports:
    98. - containerPort: 3306
    99. name: master-port
    100. env:
    101. - name: MYSQL_ROOT_PASSWORD
    102. value: "root"
    103. - name: TZ
    104. value: "Asia/Shanghai"
    105. volumeMounts:
    106. - name: mycnf
    107. mountPath: /etc/mysql/my.cnf
    108. subPath: my.cnf
    109. - name: mysql-master-data
    110. mountPath: /var/lib/mysql
    111. volumes:
    112. - name: mycnf
    113. configMap:
    114. name: mysql-master-config
    115. - name: mysql-master-data
    116. nfs:
    117. server: 192.168.110.190
    118. path: /data/data/mysql-master

    三.配置mysql从节点yaml

    1. apiVersion: v1
    2. kind: ConfigMap
    3. metadata:
    4. name: mysql-slave-config
    5. namespace: mysql
    6. labels:
    7. app: mysql-slave-config
    8. data:
    9. my.cnf: |+
    10. [client]
    11. default-character-set=utf8
    12. [mysql]
    13. default-character-set=utf8
    14. [mysqld]
    15. init_connect='SET collation_connection = utf8_unicode_ci'
    16. init_connect='SET NAMES utf8'
    17. character-set-server=utf8
    18. lower_case_table_names=1
    19. sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
    20. collation-server=utf8_unicode_ci
    21. skip-character-set-client-handshake
    22. skip-name-resolve
    23. pid-file = /var/run/mysqld/mysqld.pid
    24. socket = /var/run/mysqld/mysqld.sock
    25. datadir = /var/lib/mysql
    26. secure-file-priv= NULL
    27. # Disabling symbolic-links is recommended to prevent assorted security risks
    28. symbolic-links=0
    29. # 主从同步
    30. server-id = 2
    31. log-bin = mysql-bin
    32. sync_binlog = 1
    33. binlog_checksum = none
    34. binlog_format = mixed
    35. slave-skip-errors = all
    36. event_scheduler = 1
    37. max_allowed_packet = 64M
    38. read-only=1
    39. # Custom config should go here
    40. !includedir /etc/mysql/conf.d/
    41. ---
    42. # headless service
    43. apiVersion: v1
    44. kind: Service
    45. metadata:
    46. name: mysql-slave-svc
    47. namespace: mysql
    48. labels:
    49. app: mysql-slave-svc
    50. spec:
    51. clusterIP: None
    52. ports:
    53. - name: slave-port
    54. port: 3306
    55. selector:
    56. app: mysql-slave
    57. ---
    58. # NodePort service
    59. apiVersion: v1
    60. kind: Service
    61. metadata:
    62. name: mysql-slave-nodeport
    63. namespace: mysql
    64. labels:
    65. app: mysql-slave-nodeport
    66. spec:
    67. clusterIP:
    68. ports:
    69. - name: slave-port
    70. port: 3306
    71. nodePort: 31307
    72. targetPort: 3306
    73. selector:
    74. app: mysql-slave
    75. type: NodePort
    76. target-port:
    77. externalTrafficPolicy: Cluster
    78. ---
    79. apiVersion: apps/v1
    80. kind: StatefulSet
    81. metadata:
    82. name: mysql-slave
    83. namespace: mysql
    84. spec:
    85. serviceName: "mysql-slave-svc"
    86. replicas: 1
    87. selector:
    88. matchLabels:
    89. app: mysql-slave
    90. template:
    91. metadata:
    92. labels:
    93. app: mysql-slave
    94. spec:
    95. containers:
    96. - name: mysql-slave
    97. image: mysql:8.0.20
    98. ports:
    99. - containerPort: 3306
    100. name: slave-port
    101. env:
    102. - name: MYSQL_ROOT_PASSWORD
    103. value: "root"
    104. - name: TZ
    105. value: "Asia/Shanghai"
    106. volumeMounts:
    107. - name: mycnf
    108. mountPath: /etc/mysql/my.cnf
    109. subPath: my.cnf
    110. - name: mysql-slave-data
    111. mountPath: /var/lib/mysql
    112. volumes:
    113. - name: mycnf
    114. configMap:
    115. name: mysql-slave-config
    116. - name: mysql-slave-data
    117. nfs:
    118. server: 192.168.110.190
    119. path: /data/data/mysql-slave

    三、主从配置

    主节点操作

    获取mysql的内部ip 

    kubectl get svc -n mysql

    1.登录主节点

    MySQL mysql -h 192.168.40.12 -P 31306 -u root -proot

    show master status;

    mysql> show master status;
    +------------------+----------+--------------+------------------+-------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +------------------+----------+--------------+------------------+-------------------+
    | mysql-bin.000004 |      152 |              |                  |                   |
    +------------------+----------+--------------+------------------+-------------------+
    2.创建从节点数据同步用户
    CREATE USER 'replica'@'%' IDENTIFIED WITH mysql_native_password BY 'replica123';
    GRANT REPLICATION SLAVE ON *.* TO 'replica'@'%';
    FLUSH PRIVILEGES;
     

     从节点操作

    1.登录从节点
    mysql -h 192.168.110.190 -P 31307  -u root -proot
    2.同步指向主节点
    CHANGE MASTER TO MASTER_HOST='mysql-master-svc',MASTER_USER='replica',MASTER_PASSWORD='replica123',MASTER_LOG_FILE='mysql-bin.000004',MASTER_LOG_POS=152,MASTER_PORT=3306;
    3.开启同步
    start slave;

  • 相关阅读:
    Android之播放本地视频和Url视频方法
    Java中mybatis的Mpper代理开发的详细使用步骤
    分享使用百度EasyDL实现安全帽智能识别
    JUC——Semaphore
    ubuntu18.04服务器双网口配置上外网
    elasticsearch 简单使用【php版本】
    CommonsCollections6利用链分析
    贪心算法学习——加油站
    【Unity】光照烘培-基础参数-基础设置
    springboot+vue 课程在线考试系统 java
  • 原文地址:https://blog.csdn.net/anguoan/article/details/139410228