首页
归档
朋友
关于我
留言
【Wiki知识库】
Search
1
虚拟机无法ping不通百度,并无法访问浏览器
4,450 阅读
2
mysql使用or条件使索引失效
3,347 阅读
3
mysql如何在一对多查询时选取时间最近的一条记录
2,699 阅读
4
根据MySQL获取当天,昨天,本周,本月,上周,上月,本月的起始时间
2,163 阅读
5
git常用命令大全
1,564 阅读
PHP
面向对象
设计模式
知识汇总
常用函数
PHP框架知识
数据库
MySQL
服务器
Docker
虚拟机
Nginx
缓存相关
Redis
前端
中间件
RabbitMQ
网络编程
HTTP相关
Swoole
Workerman
工具软件
Git
Typecho
杂乱无章
面试指南
PHP相关
MySQL面试汇总
中间件相关
开发技巧 | 优化
Search
标签搜索
php
mysql
代码片段
linux
Thinkphp
Redis
nginx
mysql优化
docker
面试指南
面向对象
git
Laravel框架
http协议
RabbitMQ
Redis性能优化
设计模式
linux命令
编译安装
PhpSpreadsheet
黎明强
累计撰写
70
篇文章
累计收到
58
条评论
首页
栏目
PHP
面向对象
设计模式
知识汇总
常用函数
PHP框架知识
数据库
MySQL
服务器
Docker
虚拟机
Nginx
缓存相关
Redis
前端
中间件
RabbitMQ
网络编程
HTTP相关
Swoole
Workerman
工具软件
Git
Typecho
杂乱无章
面试指南
PHP相关
MySQL面试汇总
中间件相关
开发技巧 | 优化
页面
归档
朋友
关于我
留言
搜索到
3
篇与
docker
的结果
2022-04-27
Docker搭建Replication分布式集群
什么是Replication集群Replication集群是MySQL自带的数据同步机制原理:MySQL通过读取、执行另外一个MySQL的bin_log日志,实现数据同步。流程:首先要开启MySQL的二进制文件 (bin_log)我们所使用MySQL的命令操作都会被记录到bin_log日志里。另外一个MySQL通过读取bin_log文件,就知道第一个MySQL节点执行了哪些操作。第二个MySQL操作还会在本地也执行一边,因为执行的操作都是相同的,所以2个MySQL的内容完全相同。这就是replication的数据同步原理。总结:Rep集群异步传输的,数据只要在一个节点写入,就算成功了,至于能不能同步到其他节点Replication不做任何保证。Rep集群数据同步是单向的,只能从主节点数据同步到从节点,不能从从节点同步到主节点。如果业务系统是读多写少非常大。我们可以给一个Master设置多个Slave。所有的读操作发送给Slave从节点执行。写操作 发送给Master主节点执行,就可实现数据读写分离的功能注意: 读写分离功能需要配置MyCat才能实现的实例演示这里先实例演示Replication集群的MyCat路由转发因为本地环境,首先先准备2台服务器,分了4个端口,做为4个虚拟主机,我这边使用Vragnt生成了2台Linux服务器。192.168.205.10 (作为主节点)192.168.205.11 (从节点)一、搭建服务器环境Vgrant搭配2台服务相关配置,不熟悉的同学可以查看下Vgrant官网文档,或者用其他虚拟机搭建都可。创建Vagrantfile 文件# -*- mode: ruby -*- # vi: set ft=ruby : Vagrant.require_version ">= 1.6.0" boxes = [ { :name => "swarm-manager", :eth1 => "192.168.205.10", :mem => "1024", :cpu => "1" }, { :name => "swarm-worker1", :eth1 => "192.168.205.11", :mem => "1024", :cpu => "1" } ] Vagrant.configure(2) do |config| config.vm.box = "centos/7" boxes.each do |opts| config.vm.define opts[:name] do |config| config.vm.hostname = opts[:name] config.vm.provider "vmware_fusion" do |v| v.vmx["memsize"] = opts[:mem] v.vmx["numvcpus"] = opts[:cpu] end config.vm.provider "virtualbox" do |v| v.customize ["modifyvm", :id, "--memory", opts[:mem]] v.customize ["modifyvm", :id, "--cpus", opts[:cpu]] end config.vm.network :private_network, ip: opts[:eth1] end end #config.vm.synced_folder "./labs", "/home/vagrant/labs" # config.vm.provision "shell", privileged: true, path: "./setup.sh" end :::然后在当前Vgrantfilefile同目录下,运行启动vagrant up启动完成,输入ssh xxx进入虚拟主机里vagrant ssh swarm-manager进入主机后,配置下SSH,在外部的ssh终端也可远程连接。(进入虚拟主机是Vgrant角色,我们需要用root角色)切换到root账号 (root默认密码是vagrant) ,进入ssh目录,配置sshd_config ,修改root也可远程登录PermitRootLogin yes #root可登录 PubkeyAuthentication yes PasswordAuthentication yes以上这几个注释解开,并且重启sshd服务systemctl restart sshd这样就可以用xhsell 或iTimer2 、Termius等工具去远程连接了。配置Docker环境下载并安装dockeryum install -y docker因为仓库在国外,有些镜像下载比较慢,我们还需要配置镜像加速curl -sSL https://get.daocloud.io/daotools/set-mirror.sh | sh -s http://f1361db2.m.daocloud.io编辑/ect/docker/daemon.json文件,把结尾的逗号去掉(不然启动会报错)集群MySQL需要分布式部署环境,Docker Swarm技术可以自动把异地的Dcoker虚拟机组成一个局域网我们只需要在主节点里,输入docker swarm init --advertise-addr=192.168.205.10如果我们之前有连接相关的集群,需要强制解散swarm集群(包括从节点也要输入 ),输入:docker swarm leave -f 创建个共享网络,作为MySQL的集群网络docker network create -d overlay --attachable swarm_mysql下载Replication镜像 (Oracle没有提供官网镜像,用第三方封装的镜像)docker pull mishamx/mysql docker tag mishamx/mysql rep docker rmi mishamx/mysql搭建Replication集群环境开放防火墙端口,并且重启docker服务firewall-cmd --zone=public --add-port=9003/tcp --permanent firewall-cmd --zone=public --add-port=9004/tcp --permanent firewall-cmd --reload创建主节点容器docker run -d -p 9003:3306 --name rn1 -e MYSQL_MASTER_PORT=3306 -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_REPLICATION_USER=backup -e MYSQL_REPLICATION_PASSWORD=backup123456 -v rnv1:/var/lib/mysql --privileged --net=swarm_mysql rep 创建主节点容器,去客户端尝试连接是否成功?创建从节点容器docker run -d -p 9003:3306 --name rn2 -e MYSQL_MASTER_HOST=rn1 -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_REPLICATION_USER=backup -e MYSQL_REPLICATION_PASSWORD=backup123456 -v rn2:/var/lib/mysql --privileged --net=swarm_mysql rep 注意事项: 从节点需要与主节点同步,没有主节点不能创建从节点也去客户端数据库工具尝试是否连接成功。验证主从节点是否同步先去主节点rn1下,创建一个逻辑库,并且创建一个user表,写入数据, 从节点是否有同步过来?数据果真同步过来了。从节点写入数据,主节点会不会同步数据 ? 答案不会,因为rep集群是单向同步的,数据同步必须是由主节点同步给从节点搭建MyCat环境(读写分离)去官网进行下载最新版或者稳定版的Mycat http://dl.mycat.org.cn/2.0/ ,得到一个mycat.tar.gz包安装JavaJDK镜像,因为安装MyCat需要运行在java环境docker pull adoptopenjdk/openjdk8 docker tag adoptopenjdk/openjdk8 openjdk8 docker rm adoptopenjdk/openjdk8创建java容器docker run -d -it --name mycat1 -v mycat1:/root/server --privileged --net=host openjdk8把Mycat包,解压到java目录下/root/server/开放mycat需要用到的端口firewall-cmd --zone=public --add-port=9066/tcp --permanent #数据处理 (传入sql) firewall-cmd --zone=public --add-port=8066/tcp --permanent #获取mycay运行信息 firewall-cmd --reloadMyCat的主要配置目录查看Mycat目录下的文件,MyCat主要的配置文件,一共有3个重要的文件,分别: server.xml 、schema.xml 、rule.xmlserver.xml : 配置MyCat端口、全局主键生成方式,虚拟逻辑库和账户Schema.xml : 配置数据库连接,以及数据表用什么切分规则 (最重要)rule.xml : 用户定制规则切分MyCat配置 Replication集群,需要把写操作发送给主节点执行,读操作发送给从节点执行。配置server.xml可以配置端口号、账户信息、全局主键方式等等<user name="root" defaultAccount="true"> <property name="password">123456</property> <property name="schemas">test</property> </user>需要多个逻辑库就可以设置为<user name="root" defaultAccount="true"> <property name="password">123456</property> <property name="schemas">test,shop,db1,db2</property> </user>MyCat不会保存到真实的库里,只会记录MyCat自己的配置文件。只需要配置<user>段,把多余的user删除,要不然启动报错user name : 启动的角色property password : 启动登录的密码property schemas : 需要用到的库 (根据你实际业务看,我这用test库)配置schema.xml在这个文件里,要对每个MySQL节点的连接信息做设置,MyCat管理那么多个节点,首先要对这个节点做好工作上的划分。把读写任务分别发送给不同的节点执行,可以降低单一节点的负载PXC集群不需要设置读写分离,做好负载均衡即可Replication集群主从节点功能明确,需要做读写分离配置虚拟机逻辑库和关系表<schema>标签可以设置虚拟逻辑库,<table>标签可以设置虚拟关系表<schema name="test"> <table name="admin1" dataNode="dn1,dn2" type="global"></table> <table name="user" dataNode="dn1,dn2" type="mod-long"></table> </schema>user表配置了rule主键求模的切分数据。配置dataHost标签这个标签可以配置数据库集群的。 <dataHost name="rep1" maxCon="1000" minCon="10" balance="3" balanceType="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <writeHost host="r1w1" url="192.168.168.205.10:9003" user="root" password="123456"> <readHost host="r1r1" url="192.168.205.11:9003" password="123456" user="root" /> </writeHost> </dataHost>name : 取别名maxCon 跟 minCon : 代表最大连接数和最小连接数balance : 设置3,代表写节点和读节点功能分开,写节点负责写入请求,读节点负责读取请求。writeType : 读写请求是否发送可用的写节点 (1-是),MyCat自带心跳检测功能会想mysql定期发送sql语句,如果某一个节点没有响应了,那么会认为这个节点宕机了,就不会向宕机节点发送请求。dbType : 代表什么数据库的集群dbDriver : 使用mysql自带的native驱动SwitchType : 会根据自身带有的心跳检测结果去判断哪一个mysql节点宕机了?slaveThreshold : 跟rep集群有关,主从复制同步的,设置100代表100秒,如果从库超过主库的100秒就剔除从节点,不会从这个从节点读取数据。Heartbeat : 监察心跳,连接是否正常的SQL,有返回响应就代表没宕机。writeHost : 配置mysql写节点的 (有多少个节点就配置多个标签),图上有2个节点。<readHost> : writeHost嵌套一个3个<readHost> ,代表3个读节点host: 读节点名称url : 读节点mysql 地址user : 读节点用户Password:读节点密码host : 是节点的别名url : 节点请求mysql url地址user : 登录用户名Password : 用户密码注意事项: 读节点一定要放入写节点里,如果有多个读节点,那么第一个读节点不能是闭合< />状态。3、配置多个集群分片配置多个集群分片就复制多个<dataHost> ,相当于多个集群。4、配置虚拟库和关系表因为Mycat并不存储数据,只是SQL语句的路由器,并不默认接管MySQL所有的数据表,所有必须要配置可以使用的虚拟逻辑库和关系表。<dataNode name="dn1" dataHost="rep1" database="test"> <dataNode name="dn2" dataHost="rep2" database="test" />意思就是要使用rep1节点的test数据库,并且起名为dn1。意思就是要使用rep2节点的test数据库,并且起名为dn2。我这用到2个分片,一个作为同步,一个作为切分转发配置rule.xmlMyCat默认的mod-long是按照3个分片切分数据,所以我们要求该这个默认值。设置成2个。<function name="mod-long" class="io.mycat.route.function.PartitionByMod"> <!-- how many data nodes --> <property name="count">2</property> </function>全局预览图由于我是用2台服务,用端口作为4个不同的虚拟主机节点。注意查看,我这有2个 dataHost 表示部署2个集群(2个分片),rep1=作为同步的, rep2=作为数据切分的rep1集群:<writeHost>写节点是192.168.205.10:9003 是之前容器生成的主节点。从节点是访问192.168.205.11:9003rep2集群192.168.205.10:9004是主启动MycatMyCat日志文件主要有console.log和mycat.log ,存放在logs目录 (不存在就手动创建)。为MyCat/bin 目录中所有的sh命令设置最高权限。chmod -R 777 ./*.sh启动./startup_nowrap.sh查看是否启动成功ps -a 因为mycat是基于是java, 如果包含java就表示启动成功
2022年04月27日
128 阅读
0 评论
0 点赞
2022-04-21
快速熟悉Docker的一些基本操作流程
前文可能刚接触Docker的同学,上手Docker看到很多命令、或者操作一脸懵,需要了解docker安装、镜像容器啊,docker上的网络,容器之间的端口映射以及network网络空间、数据持久化等等...太多知识点了!!接下来我就整理快速熟悉下Docker的一些基本操作流程 ~~ (不包含配置dockerCompose、Swarm等编排操作)方便快速上手。流程比如写好一个Dockerfile文件 ,可以通过命令build出一个镜像。不要自己写的,可以下载远程仓库的镜像可以用search命令去远程仓库pull下来。也可以把自己创建的镜像push到自己的仓库。(原理跟git一样)查看本地多少个镜像可以用images ,删除镜像就rmi (前提必须把运行相关镜像的容器停止删除)想要把宿机的目录映射到容器里,就在执行run加上参数-v [本地目录]:[容器目录]有些服务需要跟本地端口互通,也在执行run 加上参数-p 3306:3306把镜像导出到本地的压缩文件,使用执行save命令把本地镜像文件导入本地Docker虚拟机,使用load命令想要创建容器,那么就可以执行run 命令,run命令创建的容器是运行的状态的。想要访问正在运行的容器。使用exec/attach 进入容器内部。想要暂停容器,使用pause命令 ,恢复容器使用unpause命令想要停止容器,可以执行stop命令,重新启动容器使用start命令。查看Docker里有多少容器,使用ps命令。想要删除容器,执行rm命令。如果想要把容器转换成镜像,我们使用commit命令
2022年04月21日
221 阅读
1 评论
0 点赞
2021-11-26
Docker常用命令整理
基本命令docker version #查看版本 docker login #登录dockerID docker build -t [DockerId/自定义名称] [文件目录] #打包构建dockerfile文件,制成镜像 (docker build -t limingqiang/hello-world . ) docker commit [原容器名] [新镜像名] #容器制回镜像 (不推荐) docker --help #帮助镜像操作(Image)docker image ls 或 docker images #查看本地所有的镜像(简写) docker image pull [Image] 或 docker pull #拉取某个仓库的镜像 docker image push [Image] 或 docker push #将本地的镜像上传到镜像仓[要登录才能推送] docker image rm [镜像名] 或 docker rmi [镜像名] #删除本地镜像 docker image build 或 docker build #通过Dcokerfile文件构造新的镜像容器操作(Container)docker run [镜像名|镜像ID] #镜像-创建一个新容器并执行 docker run -it [镜像名|镜像ID] #交互式运行镜像的容器 docker run -d [镜像名] #容器运行在后台服务 docker run -d --name [别名] [镜像名] #给指定运行的容器起别名并挂载后台 docker run -d --name [别名]] --link [另容器别名] [镜像名] #容器A跟容器B之间的可以通过容器名进行访问互通 docker run -d --name [别名] --network [bridge网络] [镜像名] #当前容器加入到另一个namespace网络中 docker run -e [环境变量] [镜像名] # 容器启动前加入环境变量( docker run -e USERNAME=lmq centos ) docker exec [镜像名] #在运行的容器中执行命令 docker exec -it [镜像名] /bin/bash #以bash命令并交互式进入运行中的容器里 docker exec [镜容ID|别名] ip a #查看容器里的网络信息 docker container ls 或 docker ps #查看运行中的容器 docker container ls -a 或 docker ps -a #查看运行/停止的容器 docker container rm [容器ID] 或 docker rm [容器ID] #删除容器(可多个 空格隔开) docker container commit [镜像名] 或 docker commit #修改后的容器commit成新的镜像 docker container inspect [容器ID|容器名] #查看容器的详细信息 docker start [容器ID | 别名] #启动容器 docker stop [容器ID|别名] #停止已运行的容器 docker inspect [容器ID] #打印容器的详情信息 docker logs [容器ID] #查看容器的一些日志 docker ps -aq #获取所有容器的ID docker rm $(docker ps -aq) #删除所有容器 docker rm $(docker ps -a -f "status=exited" -q) #删除所有已停止的容器网络操作(network)docker network ls #查看网络空间 docker network inspect [NetWorkID] #查看容器的详情网络信息 docker network connect [NetWorkID] [容器名] #容器切换其他网络上数据卷操作(Volume)docker volume ls #查看容器挂载的volume数据 docker volume inspect [volume Name] #查看某个Volume的详细信息 docker volume rm [volume Name] #删除某个/多个Data VolumeDocker-Compose操作 docker-compose --version #查看compose版本 docker-compose up #启动compose(默认启动docker-compose.yaml文件) docker-compose up -d #启动compose并且后台运行 docker-compose up -f docker-compose2.yamlup #启动compose(别的文件配置) docker-compose ps #查看状态 docker-compose imags #查看compose中所有的镜像 docker-compose start #启动compose服务 docker-compose stop #停止compose服务 docker-compose rm #删除停止的容器 docker-compose down #停止并删除compose的容器、镜像、网络、数据卷 docker-compose exec [service_name] #进入compose服务中的其中一个容器,server_name指的是容yml配置的器名集群操作(Docker-Swarm)docker swarm --help #帮助 docker swarm init --advertise-addr=[本机IP] #创建manager主节点。其他机器通过d这个节点连接 docker swarm join --token [worker|manager机器] #加入某台机器的节点 docker node ls #Manager下查看哪些节点已连接 docker service --help #帮助 docker service create --name demo centos7 #创建sevice容器 (跟docker run类似) docker service ls #查看service容器列表 docker service ps [service_name | 别名] #查看service容器下所有的容器 docker service scale [servie_name]=[number] #水平扩展机器多少个 (docker service scale web=3) docker service rm [servie_name] #删除service上所有容器 多容器多机集群管理操作(Docker Stack)类似docker-compose管理组的概念,不过docker-compose是管理本地多容器的,而docker stack 是管理swarm集群涉及多台机器多容器的。可以理解为docker run --->docker-compose 进行统一管理,而docker service -->docker stack进行统一组管理。docker stack --help #帮助 docker stack deploy --compose-file=docker-compose.yml #部署创建Service生成Stack docke stack ls #查看stack列表 docker stack ps <stack名> #某个Stack具体的Service应用(部署多少台,在哪台机器等?) docker stack service wordpress #Stack下的Service具体情况 (端口映射情况等) docker stack rm <stack名> #删除stack (包含删除正在运行容器、网络、服务等)
2021年11月26日
143 阅读
1 评论
0 点赞