Docker(第三部分)

news2024/11/17 11:41:14

1,Docker复杂安装说明

今天的优势会被明天趋势所取代

一切在云端

安装mysql主从复制

主从复制原理,默认你懂

主从搭建步骤

1,新建主从服务器容器实例3307

docker run -p 3307:3306 --name mysql-master\

-v /mydata/mysql-master/log:/var/log/mysql\

-v /mydata/mysql-master/data:/var/lib/mysql\

-v /mydata/mysql-master/conf:/etc/mysql\

-e MYSQL_roOT_PASSWORD=root\

-d mysql:5.7

2,进入/mydata/mysql-master/conf目录下新建my.cnf

[mysql]

##设置server_id,同一局域网中需要唯一

server_id=101

##指定不需要同步的数据库名称

binlog-ignore- db=mysql

##开启二进制日志功能

log- bin=mall-mysql-bin

##设置二进制日志使用内存大小(事务)

binlog_cache_size=1M

##设置使用的二进制日志格式(mixed,statement,row)

binlog_format=mixed

##二进制日志过期清理时间。默认值为0,表示不自动清理。

expire_logs_days=7

##跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。

##如:1062错误是指一些主键重复,1032错误是因为主从数据库不一致。

slave_skip_errors=1062

3,修改完配置后重启master'实例

docker restart mysql-master

4,进入mysql-master容器

docker exec -it mysql-master /bin/bash

mysql -uroot -proot

5,master容器实例内创建数据同步用户

CREATE USER 'slave'@'%'IDENTIFIED BY '123456';

GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'slave'@'%';

6,新建从服务器容器实例3308

docker run -p 3308:3306 --name mysql-slave\

-v /mydata/mysql-slave/log:/var/log/mysql\

-v /mydata/mysql-slave/data:/var/lib/mysql\

-v /mydata/mysql-slave/conf:/etc/mysql\

-e MYSQL_ROOT_PASSWORD=root

-d mysql:5.7

7,进入/mydata/mysql-slave/conf目录下新建my.cnf

vim my.cnf

[mysqld]

##设置server_id,同一局域网中需要唯一

server_id=102

##指定不需要的数据库名称

binlog-ignore-db=mysql

##开启二进制日志功能,以备Slave作为其他数据库实例的Master是使用

log-bin=mall-mysql-slave1-bin

##设置二进制日志使用内存大小(事务)

binlog_format=mixed

##二进制日志过期清理时间。默认值为0,表示不自动清理。

expire_logs_days=7

##跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。

##如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致。

slave_skip_errors=1062

##realy_log配置中继日志

realy_log=mall-mysql-relay-bin

##log_slave_updates表示slave将复制事件写进自己的二进制日志。

log_slave_updates=1

##slave设置为只读(具有super权限的用户除外)

read_only=1

my.cnf

8,修改完配置后重启slave实例

docker restart mysql-slave

9,在主数据库中查看主从同步状态

show master status;

10,进入mysql-slave容器

docker exec -it mysql-slave /bin/bash

mysql -uroot -proot

11,在从数据库中配置主从复制

change master to master_host='宿主机ip' ,master_user='slave' , master_password='123456' , master_port=3307,

master_log_file='mall-mysql-bin.000001' , master_log_pos=617,master_connect_retry=30;

例子:

mysql > change master to master_host='192.168.111.163', master_user=' slave' , master_password='123456' , master_port=3307,

master_log_file=' mall-mysql-bin.000001', master log pos=617, master connect retry=30;

master_host:主从数据库的IP地址;

master_port主数据库的运行端口;

master_user:在主数据库创建的用于同步数据的用户账号;

master_password:在主数据库创建的用于同步数据的用户密码;

master_log_file:指定从数据库要复制数据的日志文件,通过查看主数据的状态,获取File参数;

master_log_pos:指定从数据库从哪个位置开始复制数据,通过查看主数据的状态,获取Position参数;

master_connect_retry:连接失败重试的时间间隔,单位为秒。

12,在从数据库中查看主从同步状态

show slave status \G;

13,在从数据库中开启主从同步

mysql>start slave;

Query OK, 0 rows affected  (0.01 sec)

14,查看从数据库状态发现已经同步

15,主从复制测试

主机新建库-使用库-新建表-插入数据,ok

从机使用库-查看记录,ok

安装redis集群(大厂面试题第四季-分布式存储案例真题)

书到用时方恨少,钱到月底不够花。卷起来一个比一个狠

cluster(集群)模式-docker版哈希槽分区进行亿级数据存储

面试题:

1~2一亿条数据需要缓存,请问如何设计这个存储案例

回答

单机单台100%不可能,肯定是分布式存储,用redis如何落地?

上述问题阿里p6~p7工程案例和场景设计类必考题目,一般业界有3种解决方案。

1,哈希取余分区

2亿条记录就是2亿个k,v。我们单机不行必须要分布式多机,假设有三台机器构成一个集群,用户每次读写操作都是根据公式:

hash(key)%N个机器台数,计算出哈希值,用来决定数据映射到哪一个节点上。

优点:

简单粗暴,直接有效,只需要预估好数据规划好节点,例如3台。8台。10台,就能保证一段时间的数据支撑。使用Hash算法让固定的一部分请求落到同一台服务器上,这样每台服务器固定处理一部分请求(并维护这些请求的信息),起到负载均衡+分而治之的作用。

缺点:

原来规划好的节点,进行扩容或者缩容比较麻烦了,不管扩缩,每次数据变动导致节点有变动,映射关系需要重新进行计算,在服务器个数固定不变时没有问题,如果需要弹性扩容或故障停机的情况下,原来的取模公式就会发生变化:Hash(key)/3 会变成Hash(key)/?.此时地址经过取余运算的结果将发生很大的变化,根据公式获取的服务也会变得不可控。

某个redis机器宕机了,由于台数数量变化,会导致hash取余全部数据重新洗牌。

2,一致性哈希算法分区

一致性哈希算法在1997年由麻省理工学院中提出的,设计目标是为了解决分布式缓存数据变动和映射问题,某个机器单机了,分母数量改变了。自然取余数不OK了。

一致性哈希环

一致性哈希算法必然有个hash函数并按照算法产生hash值,这个算法的所有可能哈希值会构成一个全量集,这个集合可以成为一个hash空间[0,2^32-1],这个是一个线性空间,但是在算法中,我们通过适当的逻辑控制将它首尾相连(0 =2^32),这样让他逻辑上形成了一个环形空间。

它也是按照使用取模的方法,前面介绍的节点取模法是对节点(服务器)的数量进行取模。而一致性Hash算法是对2^32取模,简单来说,一致性Hash算法将整个哈希值空间组织成一个虚拟的圆环,如假设某哈希函数H的值空间为0-2^32-1(即哈希值是一个32位无符号整形),整个哈希环如下图:整个空间按顺时针方向组织,圆环的正上方的点代表0,0点右侧的第一个点代表1,以此类推,2,3,4------直到2^32-1,也就是说0点左侧的第一个点代表2^32-1,0和2^32-1在零点中方向重合,我们把这个由2^32个点组成的圆环成为Hash环。

节点映射:将集群中的各个IP节点映射到环上的某一个位置。

将各个服务器使用Hash进行一个哈希,具体可以选择服务器的IP或主机名作为关键字进行哈希,这样每台机器就能确定其在哈希换上的位置。假如4个节点NodeA,B,C,D,经过IP地址的哈希函数计算(hash(ip)),使用IP地址哈希后在环空间的位置如下:

优点:

缺点:

小总结

3,哈希槽分区
是什么?

哈希槽计算

服务器IP节点映射

key落到服务器的落键规则

3主3从redis集群扩缩容配置案例架构说明

processon笔记

打开步骤

3主3从redis集群配置

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?(这是docker服务没有启动)

1)关闭防火墙+启动docker后台服务

systemctl start docker

2)新建6个docker容器实例

命令分布解释

docker run -d --name redis-node-1 --net host --privileged=true -v /data/redis/share/redis-node-1:/data redis:6.0.8 --cluster

enabled yes --appendonly yes --port 6381

3)进入容器redis-node-1并为6台机器构建集群关系。

docker exec -it redis-node-1 /bin/bash

4)链接进入6381作为切入点,查看集群状态

从编号可以看出来那个是哪个的从

主从容错切换迁移案例

1,数据读写存储

1)启动6机构成的集群并通过exec进入

docker exec -it redis-node-1 /bin/bash

redis-cli -p 6381

2)对6381新增两个key

keys *

set k1 v1 

set k2 v2

set k3 v3

set k4 v4 (挂了)

docker exec -it redis-node-1 /bin/bash

redis-cli -p 6381 -c 

FLUSHALL

set k1 v1

3)防止路由失效加参数-c并新增两个key

4)查看集群信息

2,容错切换迁移

1)主6381和从机切换,先停止主机6381

docker ps 

docker stop redis-node-1

docker ps

docker exec -it redis-node-2 bash

redis-cli -p 6382 -c

cluster nodes

2)再次查看集群信息

docker ps

docker start redis-node-1

docker ps

cluster nodes

发现宕机的主变成了slave从

3)先还原之前的3主3从

4)查看集群状态

redis-lic --cluster check 自己IP:6381

主从扩容案例

cluster nodes

1,新增机器,槽位分配

docker ps 

docker run -d --nmae redis-node-7 --net host --privileged=true -v /data/redis/share-node-7:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6387

docker ps

每一个分了点槽号给第四个

主从缩容案例

去掉从机,主机槽位分给别人

删除主机

检查3主3从

多一份实力,生活就少一分恶意

DockerFile解析

官网:https://docs.docker.com/engine/reference/builder/

构建三部曲:编写Dockerfile文件。

                      docker build命令构建镜像

                      docker run 依镜像运行容器实例。

参考tomcat8的dockerfile入门  https://github.com/docker-library/tomcat

运行

有不同的落脚点,这是为什么呢?落脚点

ADD和COPY一样,ADD有解压

CMD与ENTRYPOINT是一组,功能类似。

centosjava8

docker images

docker run -it biaohao1 /bin/bash

vim a.txt

ifconfig

java -version

docker images centos

小巧

再体会下UnionFS(联合文件系统)

虚悬镜像

构建和删除镜像的时候出现一些错误,导致出现仓库none的标签none

一定要把这个删除掉,对系统会有风险

查出所有虚悬镜像

删除虚悬镜像

自定义镜像myubuntu

构建注意加点

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1419762.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Hive(15)中使用sum() over()实现累积求和和滑动求和

目的: 三个常用的排序函数row_number(),rank()和dense_rank()。这三个函数需要配合开窗函数over()来实现排序功能。但over()的用法远不止于此,本文咱们来介绍如何实现累计求和和滑动求和。 1、数据介绍 三列数据,分别是员工的姓名、月份和…

python-自动化篇-运维-语音识别

文章目录 理论文本转换为语音使用 pyttsx使用 SAPI使用 SpeechLib 语音转换为文本 代码和效果01使用pyttsx实现文本_语音02使用SAPI实现文本_语音03使用SpeechLib实现文本_语音04使用PocketSphinx实现语音转换文本 理论 语音识别技术,也被称为自动语音识别&#xf…

SSL 证书如何工作?

SSL 的原理是确保用户和网站之间或两个系统之间传输的任何数据始终无法被读取。它使用加密算法对传输中的数据进行加密,从而防止黑客读取通过连接发送的数据。该数据包括潜在的敏感信息,例如姓名、地址、信用卡号或其他财务详细信息。 该过程如下所示&am…

Java 高并发编程——Reactor模式(多线程)

1 多线程版本的Reactor模式演进 Reactor和Handler挤在一个单线程中会造成非常严重的性能缺陷,可以使用多线程来对基础的Reactor模式进行改造。 多线程Reactor的演进分为两个方面: 1、升级Handler。既要使用多线程,又要尽可能高效率&#xff0…

springboot第53集:微服务分布式架构,docker-compose,Prometheus,mqtt监控体系周刊

从0搭建一套Prometheus监控体系 简介: Prometheus是一款开源监控系统,起源于SoundCloud的警告工具包。自2012年以来,许多公司和组织开始广泛采用Prometheus。该项目具有活跃的开发人员和用户社区,吸引越来越多的参与者。如今&…

网站地址怎么改成HTTPS?

现在,所有类型的网站都需要通过 HTTPS 协议进行安全连接,而实现这一目标的唯一方法是使用 SSL 证书。如果您不将 HTTP 转换为 HTTPS,浏览器和应用程序会将您网站的连接标记为不安全。 但用户询问如何将我的网站从 HTTP 更改为 HTTPS。在此页…

springBoot - mybatis 多数据源实现方案

应用场景: 多数据源 小型项目 或者 大项目的临时方案中比较常用.在日常开发中,可能我们需要查询多个数据库,但是数据库实例不同,导致不能通过 指定schema的方式 区分不同的库, 这种情况下就需要我们应用程序配置多数据源 实现方式: 首先自定义实现 datasource数据源 为当前…

HT UI 5.0,前端组件图扑是认真的!

为顺应数字时代的不断发展,图扑 HT UI 5.0 在原有功能强大的界面组件库的基础上进行了全面升级,融入了更先进的技术、创新的设计理念以及更加智能的功能。HT UI 5.0 使用户体验更为直观、个性化,并在性能、稳定性和安全性等方面达到新的高度。…

【Spring实战】32 Spring Boot3 集成 Nacos 服务注册中心 并在 Gateway 网关中应用

文章目录 1. 定义2. 背景3. 功能和特性4. 下载安装5. 服务启动6. 使用示例1)服务提供者2)服务消费者3)测试 7. 代码参考结语 1. 定义 Nacos 是 Dynamic Naming and Configuration Service 的首字母简称,一个更易于构建云原生应用…

自动化测试——selenium工具(web自动化测试)

1、自动化测试 优点:通过自动化测试有效减少人力的投入,同时提高了测试的质量和效率。 也用于回归测试。随着版本越来越多,版本回归的压力越来越大,仅仅通过人工测试 来回归所以的版本肯定是不现实的,所以…

薅运营商羊毛?封杀!

最近边小缘在蓝点网上看到一则消息 “浙江联通也开始严格排查PCDN和PT等大流量行为 被检测到可能会封停宽带”。 此前中国联通已经在四川和上海等多个省市严查家庭宽带 (部分企业宽带也被查) 使用 PCDN 或 PT,当用户的宽带账户存在大量上传数据的情况,中…

MySQL安全(一)权限系统

一、授权 1、创建用户 在MySQL中,管理员可以通过以下命令创建用户: namelocalhost IDENTIFIED BY password; name是要创建的用户名,localhost表示该用户只能从本地连接到MySQL,password是该用户的密码。如果要允许该用户从任何…

明亮成长:新生儿补充维生素A的关键

引言: 新生儿时期是生命最为脆弱而又充满希望的阶段,而维生素A作为生命的必需营养素之一,在新生儿的成长中扮演着至关重要的角色。本文将深入探讨维生素A的作用、补充时机,以及在补充维生素A时应该注意的事项,为家长提…

uniapp H5 touchstart touchend 切换背景会失效,或者没用

uniapp H5 touchstart touchend 切换背景会失效&#xff0c;或者没用 直接上代码 &#xff08;使用 class 以及 hover-class来设置样式&#xff09; class 设置默认的背景图或者样式 hover-class 来设置按下的背景图 或者样式 抬起 按下 <view class"mp_zoom_siz…

如何在群晖中本地部署WPS Office并实现公网远程访问

文章目录 1. 拉取WPS Office镜像2. 运行WPS Office镜像容器3. 本地访问WPS Office4. 群晖安装Cpolar5. 配置WPS Office远程地址6. 远程访问WPS Office小结 7. 固定公网地址 wps-office是一个在Linux服务器上部署WPS Office的镜像。它基于WPS Office的Linux版本&#xff0c;通过…

工业交换机厂家:社区和行业的坚实支柱

工业交换机厂家在现代社会中扮演着重要的角色&#xff0c;不仅在技术创新和产品质量上起着关键作用&#xff0c;而且在社区和整个行业中承担着诸多责任和义务。作为一家致力于服务社区和推动行业发展的工业交换机厂家&#xff0c;厚石网络深知自己的责任和使命&#xff0c;不断…

JVM系列——垃圾收集器

对象存活判断 引用计数法 在对象中添加一个引用计数器&#xff0c;每当有一个地方引用它时&#xff0c;计数器值就加一&#xff1b;当引用失效时&#xff0c;计数器值就减一&#xff1b;任何时刻计数器为零的对象就是不可能再被使用的。 可达性分析算法 通过一系列称为“GC …

Flask框架小程序后端分离开发学习笔记《5》简易服务器代码

Flask框架小程序后端分离开发学习笔记《5》 Flask是使用python的后端&#xff0c;由于小程序需要后端开发&#xff0c;遂学习一下后端开发。 简易服务器代码 接口解析那一块很关键&#xff0c;学后端服务器这一块&#xff0c;感觉主要就是学习相应地址的接口怎么处理。 然后…

30s学会JAVA几个关键词

1.final&#xff08;最终&#xff09; 修饰类-》此类无法被继承 修饰方法-》该方法不可被重写 修饰属性和局部变量-》看作常量&#xff0c;赋值位置&#xff1a;显式初始化&#xff0c;代码块初始化&#xff0c;构造器初始化 2.super(继承子类可用) 1.在子类方法或构造器中…

Python+uiautomator2 框架搭建

一、安装整体步骤 01 开发环境安装 jdk安装&#xff08;version "1.8.0_361"&#xff09;python安装 &#xff08;Python37&#xff09;python编辑器安装 &#xff08;PyCharm2021&#xff09; 02 运行环境安装 adb安装 &#xff08;Android Debug Bridge versio…