• Centos在NAT模式下的设置


    一.使用NAT连接

    创建虚拟机之后,我们要设置一下虚拟机网卡的工作模式。 最推荐的是桥接模式,这种模式下,虚拟主机的网卡有独立的IP地址,跟本地局域网里面的真实主机差不多。但是缺点也很明显,就是不能用在校园网当中。因为校园网基本都采用了局域网设备隔离技术,你这个虚拟出来的主机跟本地Windows电脑相互ping不通,所以你在虚拟机上安装各种程序,在Windows 上一个都调用不了。还有就是有些人经常更换网络环境,白天用公司的网络,晚上用家庭网络,这就导致电脑的局域网IP经常切换,Linux的IP地址也经常变化。环境-变化, 你就得修改程序代码,才能通过新的IP地址访问到Linux系统的程序,确实很麻烦。

    这里我建议大家选择NAT网络模式,虽然不如桥接网络功能强大,但是却能胜任校园网和.上班族的需要。点击虚拟机上的设置按钮。
    设置如下:
    在这里插入图片描述

    1.1 安装Centos镜像

    在这里插入图片描述
    在这里插入图片描述

    1.2 ssh进行远程连接

    在这里插入图片描述
    5022端口将会映射到linux的22端口。

    二、Docker

    2.1 防火墙关闭

    1.查看防火墙状态

    systemctl status firewalld
    
    • 1

    2、直接设置永久关闭防火墙

    systemctl disable firewalld #永久关闭,即设置开机的时候不自动启动
    
    • 1

    3.关闭 selinux:

    修改配置文件(永久关闭selinux可以使用vi命令打开/etc/sysconfig/selinux 文件将SELINUX=disabled)
    
    • 1

    4、重启linux

    reboot
    
    • 1

    2.2 更新yum程序

    yum命令是CentOS自带的软件包管理器,我们安装Docker之前,最好能先更新一下yum命令, 然后等上十分钟左右与, yum就更新好了。

    yum update -y
    
    • 1

    2.3、安装Docker

    执行安装命令, Docker就自动安装好了。

    yum install docker -y
    
    • 1

    2.4 管理docker

    启动和关闭Docker服务,可以通过下面的命令完成。办Linux系统,别忘了要运行Docker服务,切记!

    service docker start
    service docker stop
    
    • 1
    • 2

    查看Docker中的镜像列表,可以执行下面的命令。

    docker images
    
    • 1

    想要删除某个镜像可以用下面的命令。

    docker rmi 镜像名字
    
    • 1

    三、部署MySQL集群

    使用的数据库是MySQL 8.0.23版本,所以我们需要往Docker中导入MySQL镜像,然后用命令就能创建出四个MySQL节点了。

    3.1、导入MySQL镜像

    找到MySQL.tar.gz 镜像文件,然后把这个文件上传到Linux系统,执行命令导入MySQL镜像。

    docker load < MySQL.tar.gz
    
    
    • 1
    • 2

    3.2、设置虚拟机端口转发

    因为四个MySQL容器的端口都是3306,所以我们要把这四个3306端口,映射到Linux系统的不同端口上(12001-12005) ,然后还要把Linux的这些个端映射到Windows.上面(12001~12005) ,我们才能用Navicat连接到MySQL容器。(前四个做集群处理,第五个是分布式事务处理)
    在这里插入图片描述
    设置好端口转发,是立即生效的,你不需要重启虚拟机和CentOS系统。

    3.3 创建五个MySQL节点

    为了给Docker中的容器分配固定的Docker内网IP地址,而且还跟其他现存的Docker容器IP不冲突,所以我们新创建一个Docker内网的网段。网络名字叫做mynet,网段是172.18.0.X, 以后我们创建的容器都分配这个网段的IP。
    需要注意,172.18.0.1是网关的IP, 我们不能用。

    docker network create -- subnet=172.18.0.0/18 mynet
    
    • 1

    docker run命令是创建容器的,配合上相应的参数, MySQL容器就能创建出来了。

    docker run -it -d --name mysql_1 -p 12001:3306 \
    --net mynet --ip 172.18.0.2 \
    -m 400m -v /root/mysql_1/data:/var/lib/mysql \
    -v /root/mysql_1/config:/etc/mysql/conf.d \
    -e MYSQL_ROOT_PASSWORD=abc123456 \
    -e TZ=Asia/Shanghai --privileged=true \
    mysql:8.0.23 \
    --lower_case_table_names=1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    执行后等上十几秒,再执行下一段

    docker run -it -d --name mysql_2 -p 12002:3306 \
    --net mynet --ip 172.18.0.3 \
    -m 400m -v /root/mysql_2/data:/var/lib/mysql \
    -v /root/mysql_2/config:/etc/mysql/conf.d \
    -e MYSQL_ROOT_PASSWORD=abc123456 \
    -e TZ=Asia/Shanghai --privileged=true \
    mysql:8.0.23 \
    --lower_case_table_names=1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    docker run -it -d --name mysql_3 -p 12003:3306 \
    --net mynet --ip 172.18.0.4 \
    -m 400m -v /root/mysql_3/data:/var/lib/mysql \
    -v /root/mysql_3/config:/etc/mysql/conf.d \
    -e MYSQL_ROOT_PASSWORD=abc123456 \
    -e TZ=Asia/Shanghai --privileged=true \
    mysql:8.0.23 \
    --lower_case_table_names=1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    docker run -it -d --name mysql_4 -p 12004:3306 \
    --net mynet --ip 172.18.0.5 \
    -m 400m -v /root/mysql_4/data:/var/lib/mysql \
    -v /root/mysql_4/config:/etc/mysql/conf.d \
    -e MYSQL_ROOT_PASSWORD=abc123456 \
    -e TZ=Asia/Shanghai --privileged=true \
    mysql:8.0.23 \
    --lower_case_table_names=1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    运行docker ps -a命令看一下各个MySQL 节点的运行状态,如果是Exited状态, 说明该节点创建失败。

    对于创建失败的MySQL节点,你运行docker rm 容器名字这个命令,把该MySQL删除,然后检查创建容器的命令是不是有错误,再重新创建该MySQL容器。

    我们要创建的第五个MySQL节点是给事务中间件用的,并不存储业务数据,所以并不算MySQL集群中的节点。

    docker run -it -d --name mysql_5 -p 12005:3306 \
    --net mynet --ip 172.18.0.6 \
    -m 300m -v /root/mysql_5/data:/var/lib/mysql \
    -v /root/mysql_5/config:/etc/mysql/conf.d \
    -e MYSQL_ROOT_PASSWORD=abc123456 \
    -e TZ=Asia/Shanghai --privileged=true \
    mysql:8.0.23 \
    --lower_case_table_names=1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    四、MySQL集群概念

    4.1 数据的切分

    MySQL单表数据超过两千万, CRUD性能就会急速下降,所以我们需要把同一张表的数据切分到不同的MySQL节点中。这需要引入MySQL中间件,其实就是个SQL路由器而已。这种集群中间件有很多,比如MyCat、ProxySQL、ShardingSphere等等。 因为MyCat弃管 了,所以我选择了ShardingSphere,功能不输给MyCat,而且还是Apache负责维护的,国内也有很多项目组在用这个产品,手册资料相对齐全,所以相对来说是个主流的中间件。
    在这里插入图片描述
    我们在MySQL .1和MySQL 2两个节点上分别创建订单表,然后在ShardingSphere做好设置。 如果INSERT语句主键_值对2求模余0,这个INSERT语句就路由给MySQL _1节点:如果余数是1, INSERT语句就被路由给MySQL_2执行。

    五、配置ShardingSphere

    ShardingSphere是开源免费的数据库集群中间件,自带了各种切分数据的算法和雪花主键生成算法,甚至我们自己也可以写代码订制新的算法,相对来说比MyCat’展性更强。更多介绍,大家可以去官网自己查阅。

    我这里使用的是ShardingSphere 5.0版本,属于最新的版本。5.0版本的配置文件和4.0版本有很大的区别,所以大家百度的时候尽量看清楚ShardingSphere的版本号,目前百度上大多数帖子讲ShardingSphere配置,都是基于4.0版本的。

    5.1 设置端口转发

    ShardingSphere默认使用3307端口,稍后我会把容器的3307端口映射到Linux的3307端口上,现在我们要把Linux的3307端口映射到Windows的3307端口上。
    在这里插入图片描述

    5.2导入JDK镜像

    因为ShardingSphere是基于Java技术的中间件,所以我们需要先导入JDK镜像,然后创建容器,再放入
    ShardingSphere程序。将jdk. tar.gz这个镜像文件上传到Linux系统(root目录下)。

    docker load < JDK.tar.gz
    
    • 1

    5.3 创建容器

    我们导入的JDK镜像里面包含的JDK版本是15.0.2的,然后我们用这个镜像创建Java容器。

    docker run -it -d --name ss -p 3307:3307 \
    --net mynet --ip 172.18.0.7 \
    -m 300m -v /root/ss:/root/ss \
    -e TZ=Asia/Shanghai --privileged=true \
    jdk bash
    
    • 1
    • 2
    • 3
    • 4
    • 5

    5.4.运行ShardingSphere

    CentOS系统的/root/ss 目录(即docker安装后的jdk映射目录下)是让我们放入ShardingSphere程序的,所以你将ShardingSphere. zip文件,上传到该目录之下。接下来我们要解压缩ZIP文件,那就需要安装UNZIP命令。

    yum install unzip -y
    
    • 1

    先解压缩ZIP文件,然后进入到bin目录,给bin目录中的脚本文件赋权限。
    在这里插入图片描述

    # 进入文件目录
    cd ss  或  cd /root/ss
    
    #解压缩文件
    unzip ShardingSphere.zip
    
    #进入bin目录
    cd ShardingSphere/bin
    
    #给脚本文件赋权限(目录所有文件都给 777最高权限)
    chmod -R 777 ./*
    
    #进入容器
    docker exec -it ss bash
    
    #进入bin目录
    cd /root/ss/ShardingSphere/bin
    
    #启动ShardingSphere
    ./start.sh
    
    # 退出容器
    exit
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    在这里插入图片描述

    等待10秒钟,然后进入到ShardingSphere的logs目录,看一下stdout . log文件的内容。如果只有这些警告信息,说明ShardingSphere启动成功了。(此时navict去连接3307端口的mysql)
    在这里插入图片描述
    此时ShardingSphere的虚拟库和虚拟表如下:
    在这里插入图片描述

    等你重新启动虚拟机的时候,要把ss容器启动,然后进入到容器运行这个start. sh脚本才可以。不是只把ss容器运行就可以了,切记! ! !

    6、逻辑库的划分

    6.1 分库

    我们的项目划分出十几个微服务模块,模块之间为了彻底解耦,连逻辑库都是各用各的。如果每个MySQL分片都对应一个逻辑库,那么至少需要十几个分片,每个分片最少也得有6个MySQL节点。这样算下来,我们一共得需要超过60个MySQL节点,你觉得你的电脑能运行起来吗?所以我们必须现实一点,在四个MySQL分片上创建不同的逻辑库,给不同的微服务模块。
    在这里插入图片描述

    6.2管理逻辑库

    虽然我们只有四个分片,但是每个分片上都有几个逻辑库,因此我们在ShardingSphere. 上就要创建JDBC连接,去连接这些逻辑库。你可以打开ShardingSphere的 config/config- sharding. yaml文件,阅读这些配置信息。

    此时我配置的情况如下:
    在mysql集群库中有tb_customer表,当表中的id除以2余0时,数据存放在mysql_1的库中,余1时,存mysql_2中
    在这里插入图片描述
    在这里插入图片描述
    根据切分规则,将mysql语句路由给对应的mysql节点执行。mysql集群这个库是虚拟表数据,从两个实体表中加载数据汇总到虚拟表中
    在这里插入图片描述

  • 相关阅读:
    SQL学习之增删改查
    增强团队创新力需要打造多样性团队
    可编程渲染管线(Scriptable Render Pipeline, SRP)
    逻辑运算介绍
    Qt学习总结之单选框QRadioButton和QButtonGroup
    Word格式处理控件Aspose.Words for .NET教程——使用DOM插入字段
    我用Cypress做了前端自动化测试
    文件存储空间管理(空闲表法,空闲链表法,位示图法,成组链表法)
    [Python] Pathlib 使用
    nodejs 简单介绍一下四种流(stream)的知识
  • 原文地址:https://blog.csdn.net/qq_41876182/article/details/126592581