部署mysql

  • nacos连接外部mysql sts
  • 使用mysql-0.mysql.dmgeo-lib.svc.cluster.local进行连接,同一ns下可以省略后面的。
  • 需要先初始化数据:创建nacos_config数据库,并source导入如下sql:
    • https://github.com/alibaba/nacos/edit/master/distribution/conf/nacos-mysql.sql
  • 将宿主机文件拷贝进pod里面
    • sudo kubectl cp nacos-mysql.sql mysql-0:/var/lib/mysql/nacos_config -n dmgeo-lib
  • 然后在mysql-0 pod里面执行source导入操作。
[root@k8s-n0 nacos]# cat ../mysql/sts/mysql-cluster.yaml
apiVersion: v1
kind: ConfigMap
metadata:name: mysql-configmapnamespace: dmgeo-liblabels:app: mysql
data:primary.cnf: |# Apply this config only on the primary.[mysqld]log-binreplica.cnf: |# Apply this config only on replicas.[mysqld]super-read-only---
# Headless service for stable DNS entries of StatefulSet members.
apiVersion: v1
kind: Service
metadata:name: mysqlnamespace: dmgeo-liblabels:app: mysql
spec:ports:- name: mysqlport: 3306clusterIP: Noneselector:app: mysql
---
# Client service for connecting to any MySQL instance for reads.
# For writes, you must instead connect to the primary: mysql-0.mysql.
apiVersion: v1
kind: Service
metadata:name: mysql-readnamespace: dmgeo-liblabels:app: mysql
spec:ports:- name: mysqlport: 3306selector:app: mysql---
apiVersion: apps/v1
kind: StatefulSet
metadata:name: mysqlnamespace: dmgeo-lib
spec:selector:matchLabels:app: mysqlserviceName: mysqlreplicas: 3 template:metadata:labels:app: mysqlspec:initContainers:- name: init-mysqlimage: 192.168.145.28:1603/lego/mysql/mysql:5.7command:- bash- "-c"- |set -ex# Generate mysql server-id from pod ordinal index.[[ `hostname` =~ -([0-9]+)$ ]] || exit 1ordinal=${BASH_REMATCH[1]}echo [mysqld] > /mnt/conf.d/server-id.cnf# Add an offset to avoid reserved server-id=0 value.echo server-id=$((100 + $ordinal)) >> /mnt/conf.d/server-id.cnf# Copy appropriate conf.d files from config-map to emptyDir.if [[ $ordinal -eq 0 ]]; thencp /mnt/config-map/primary.cnf /mnt/conf.d/elsecp /mnt/config-map/replica.cnf /mnt/conf.d/fivolumeMounts:- name: mysql-confmountPath: /mnt/conf.d- name: mysql-configmapmountPath: /mnt/config-map- name: clone-mysqlimage: 192.168.145.28:1603/lego/mysql/twoeo/gcr.io-google-samples-xtrabackup:latestcommand:- bash- "-c"- |set -ex# Skip the clone if data already exists.[[ -d /var/lib/mysql/mysql ]] && exit 0# Skip the clone on primary (ordinal index 0).[[ `hostname` =~ -([0-9]+)$ ]] || exit 1ordinal=${BASH_REMATCH[1]}[[ $ordinal -eq 0 ]] && exit 0# Clone data from previous peer.ncat --recv-only mysql-$(($ordinal-1)).mysql 3307 | xbstream -x -C /var/lib/mysql# Prepare the backup.xtrabackup --prepare --target-dir=/var/lib/mysqlvolumeMounts:- name: mysql-datamountPath: /var/lib/mysqlsubPath: mysql- name: mysql-confmountPath: /etc/mysql/conf.dcontainers:- name: mysqlimage: 192.168.145.28:1603/lego/mysql/mysql:5.7env:#- name: MYSQL_ROOT_PASSWORD#  value: 123456- name: MYSQL_ALLOW_EMPTY_PASSWORDvalue: "1"- name: MYSQL_ROOT_PASSWORDvalue: "root"- name: MYSQL_DATABASEvalue: "nacos_config"- name: MYSQL_USERvalue: "nacos"- name: MYSQL_PASSWORDvalue: "nacos"ports:- name: mysqlcontainerPort: 3306volumeMounts:- name: mysql-datamountPath: /var/lib/mysqlsubPath: mysql- name: mysql-confmountPath: /etc/mysql/conf.dresources:requests:cpu: 500mmemory: 1GilivenessProbe:exec:command: ["mysqladmin", "ping"]initialDelaySeconds: 30periodSeconds: 10timeoutSeconds: 5readinessProbe:exec:# Check we can execute queries over TCP (skip-networking is off).command: ["mysql", "-h", "127.0.0.1", "-e", "SELECT 1"]initialDelaySeconds: 5periodSeconds: 2timeoutSeconds: 1- name: xtrabackupimage: 192.168.145.28:1603/lego/mysql/twoeo/gcr.io-google-samples-xtrabackup:latestports:- name: xtrabackupcontainerPort: 3307command:- bash- "-c"- |set -excd /var/lib/mysql# Determine binlog position of cloned data, if any.if [[ -f xtrabackup_slave_info && "x$(<xtrabackup_slave_info)" != "x" ]]; then# XtraBackup already generated a partial "CHANGE MASTER TO" query# because we're cloning from an existing replica. (Need to remove the tailing semicolon!)cat xtrabackup_slave_info | sed -E 's/;$//g' > change_master_to.sql.in# Ignore xtrabackup_binlog_info in this case (it's useless).rm -f xtrabackup_slave_info xtrabackup_binlog_infoelif [[ -f xtrabackup_binlog_info ]]; then# We're cloning directly from primary. Parse binlog position.[[ `cat xtrabackup_binlog_info` =~ ^(.*?)[[:space:]]+(.*?)$ ]] || exit 1rm -f xtrabackup_binlog_info xtrabackup_slave_infoecho "CHANGE MASTER TO MASTER_LOG_FILE='${BASH_REMATCH[1]}',\MASTER_LOG_POS=${BASH_REMATCH[2]}" > change_master_to.sql.infi# Check if we need to complete a clone by starting replication.if [[ -f change_master_to.sql.in ]]; thenecho "Waiting for mysqld to be ready (accepting connections)"until mysql -h 127.0.0.1 -e "SELECT 1"; do sleep 1; doneecho "Initializing replication from clone position"mysql -h 127.0.0.1 \-e "$(<change_master_to.sql.in), \MASTER_HOST='mysql-0.mysql', \MASTER_USER='root', \MASTER_PASSWORD='', \MASTER_CONNECT_RETRY=10; \START SLAVE;" || exit 1# In case of container restart, attempt this at-most-once.mv change_master_to.sql.in change_master_to.sql.origfi# Start a server to send backups when requested by peers.exec ncat --listen --keep-open --send-only --max-conns=1 3307 -c \"xtrabackup --backup --slave-info --stream=xbstream --host=127.0.0.1 --user=root"volumeMounts:- name: mysql-datamountPath: /var/lib/mysqlsubPath: mysql- name: mysql-confmountPath: /etc/mysql/conf.dresources:requests:cpu: 100mmemory: 100Mivolumes:- name: mysql-confemptyDir: {}- name: mysql-configmapconfigMap:name: mysql-configmapvolumeClaimTemplates:- metadata:name: mysql-dataspec:accessModes: ["ReadWriteOnce"]resources:requests:storage: 10Gi

部署nacos

all-in-one.yaml

[root@k8s-n0 nacos]# cat all-in-one.yaml
apiVersion: v1
kind: ConfigMap
metadata:name: nacos-cmnamespace: dmgeo-lib
data:mysql.host: "mysql-0.mysql"mysql.db.name: "nacos_config"mysql.port: "3306"mysql.user: "root"mysql.password: ""---
apiVersion: v1
kind: Service
metadata:name: nacos-svcnamespace: dmgeo-liblabels:app: nacos-svc
spec:type: NodePortports:- port: 8848name: nacos-svctargetPort: 8848nodePort: 8848selector:app: nacos
---
apiVersion: v1
kind: Service
metadata:name: nacos-headlessnamespace: dmgeo-liblabels:app: nacos-headless
spec:type: ClusterIPclusterIP: Noneports:- port: 8848name: servertargetPort: 8848- port: 7848name: rpctargetPort: 7848clusterIP: Noneselector:app: nacos
---
apiVersion: apps/v1
kind: StatefulSet
metadata:name: nacosnamespace: dmgeo-lib
spec:serviceName: nacos-headlessreplicas: 3template:metadata:labels:app: nacosannotations:pod.alpha.kubernetes.io/initialized: "true"spec:imagePullSecrets:           # dokcer仓库密码,不需要的可以去掉- name: registry-harborterminationGracePeriodSeconds: 65affinity:podAntiAffinity:requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchExpressions:- key: "app"operator: Invalues:- nacostopologyKey: "kubernetes.io/hostname"containers:- name: k8snacosimagePullPolicy: Alwaysimage: 192.168.145.28:1603/lego/nacos/nacos-server:latestresources:requests:memory: "2Gi"cpu: "500m"ports:- containerPort: 8848name: client- containerPort: 7848name: rpcenv:- name: NACOS_REPLICASvalue: "3"- name: MYSQL_SERVICE_HOSTvalueFrom:configMapKeyRef:name: nacos-cmkey: mysql.host- name: MYSQL_SERVICE_DB_NAMEvalueFrom:configMapKeyRef:name: nacos-cmkey: mysql.db.name- name: MYSQL_SERVICE_PORTvalueFrom:configMapKeyRef:name: nacos-cmkey: mysql.port- name: MYSQL_SERVICE_USERvalueFrom:configMapKeyRef:name: nacos-cmkey: mysql.user- name: MYSQL_SERVICE_PASSWORDvalueFrom:configMapKeyRef:name: nacos-cmkey: mysql.password- name: MODEvalue: "cluster"- name: NACOS_SERVER_PORTvalue: "8848"- name: PREFER_HOST_MODEvalue: "hostname"- name: NACOS_SERVERSvalue: "nacos-0.nacos-headless.dmgeo-lib.svc.cluster.local:8848 nacos-1.nacos-headless.dmgeo-lib.svc.cluster.local:8848 nacos-2.nacos-headless.dmgeo-lib.svc.cluster.local:8848"selector:matchLabels:app: nacos

k8s部署nacos集群:3个pod、连接外部mysql读写分离集群相关推荐

  1. 【华为云CCE】 k8s部署nacos集群

    业务场景: 华为CCE,根据自己的nacos镜像,部署nacos集群.由于公司使用的是华为云CCE内网环境,不能通过外网下载镜像,只能根据公司自己的镜像进行部署.看了网上华为云CCE部署nacos集群 ...

  2. Maxscale Keepalived MySQL实现高可用读写分离集群

    图片是模拟两个从节点down是否正常提供服务 访问http://ip:8989端口,登录名admin,密码mariadb 环境说明: IP地址 数据库服务 读写分离代理服务 负载均衡服务 虚拟IP 1 ...

  3. MySQL8读写分离集群

    文章目录 前言 MySQL读写分离原理 搭建MySQL读写分离集群 MySQL8.0之前 MySQL8.0之后 后记 前言 上一期介绍并实现了MySQL的主从复制,由于主从复制架构仅仅能解决数据冗余备 ...

  4. K8S 部署rabbitmq集群

    K8S 部署rabbitmq集群 版本介绍 名称 版本 k8s 1.18 rabbitmq 3.8 命名空间:rabbitmq 我这里已经建立 configmap 配置文件 [root@k8s-mas ...

  5. docker 部署rabbitmq,k8s部署rabbitmq集群,跟踪和监控rabbitmq

    全栈工程师开发手册 (作者:栾鹏) 架构系列文章 rabbit原理和架构可以参考https://blog.csdn.net/luanpeng825485697/article/details/8208 ...

  6. Maxscale读写分离集群过渡PXC集群

    一.实验环境 第一次写博客,欢迎大家交流指正!!! 不喜勿喷!!! 操作系统 : Centos7.5虚拟机 数据库软件 : mysql-5.7.17 主机名 ip地址 角色 web33 192.168 ...

  7. Windows 2012 always on 读写分离集群搭建配置

    Windows 2012 always on 读写分离集群搭建配置. Always on简介 AlwaysOn 可用性组 (SQL Server) AlwaysOn 可用性组功能是一个提供替代数据库镜 ...

  8. 金仓数据库KingbaseES主备和读写分离集群使用手册(日常运维管理)

    对应10小节作的整改,包括但不限于一键启动的检查项目.对属于一键启动的检查项作个说明即可,比如 本检查属于一键启动默认检查项. 目录 7.1. 集群启停 ¶ 7.1.1. 一键启停方式 ¶ 7.1.2 ...

  9. 达梦-主备与读写分离集群

    DM8-主备与读写分离集群 文章目录 DM8-主备与读写分离集群 1. 基本概念 1.1 DM集群 1.2 DM归档类型 2. 数据守护集群 2.1 概念 2.2 数据守护集群架构及原理 2.3 守护 ...

最新文章

  1. 工作流引擎的硬功夫之1-表单自定义
  2. springboot @value启动报错_打造一个 Spring Boot 注解启动控制开关
  3. mysql 备份还原
  4. opencv︱图片与视频的读入、显示、写出、放缩与基本绘图函数介绍
  5. 现代软件工程团队项目贝塔阶段_大规模测试结果_2018.02.08
  6. JAVA学习-----容器和数据结构
  7. VBA玩转系统剪贴板
  8. html svg矩形添加文字,SVG 矩形
  9. linux删除mysql用户_如何删除MySQL用户帐户
  10. 分享几个简单的HTML网页特效代码
  11. RN版UiTableView(带sessionHeaderView)并加载多层json数据
  12. Mybatis之choose(where,otherwise)标签
  13. 同一个基站连接两个核心网AMF POOL的场景分析及带AMF重选的注册流程
  14. 混合索引java代码,Elasticsearch 实现拼音,中文,首字母混合搜索
  15. 计算机房里面味道很大,搞笑段子:我负责单位的计算机房,同事的计算机有问题来向我讨教...
  16. 傅盛认知三部曲后记:到底什么是认知?
  17. UVa Problem 10254 The Priest Mathematician (牧师数学家)
  18. 北漂家乡买房记:6年至少亏了50% 还无法脱手!
  19. spp worker 源码分析
  20. Flask 生成pdf并下载

热门文章

  1. python flask(1)
  2. 趣学python3(30)-字典
  3. (视频+图文)机器学习入门系列-第4章 朴素贝叶斯
  4. 【小白学习PyTorch教程】七、基于乳腺癌数据集​​构建Logistic 二分类模型
  5. 【科普】什么是Docker?看这一篇干货文章就够了!
  6. Kaggle | Bengali 比赛总结(孟加拉字符分类 )
  7. AI基础:深度学习论文阅读路线(127篇经典论文下载)
  8. 第一份工作是选择安逸,还是勇敢尝试?
  9. 网易云信被纳入 Gartner 2021年《CPaaS 市场指南》研究报告
  10. 一张图搞懂容器所有操作 - 每天5分钟玩转 Docker 容器技术(26)