高并发集群,eleme后端的登录模块
1.数据库
1.主从复制(高可用)
2.传统的主从复制
3.gtids事务型的主从复制
4.注意
1.server_id唯一
2.8.x版本需要get_aal_pub_key
3.5.x不需要
4.change master to
5.stop | start slave
5.非交互
import pymysql
conn=pymysql.connect(hoat=xxx,user=xxx,password=xxx,port=xx,database=xxxx)
cursor=conn.cursor()
sql="insert|dalete|update|select..."
cursor.execute(sql)
#查询不需要提交,直接使用fectch就可以得到结果
#增删改需要提交
conn.commint()
mysql -h192.168.1.11 << EOF
create database if not exits test charset utf8mbs;
use test;
create tables....
quit
EOF
6.数据库的负载均衡,阿里巴巴的mycat
<!---
/usr/local/mycat/conf/server.xml
对外的账号 密码 数据库
-->
<user name="yjj">
<properties name="password">yjj</properties>
<properties name="database">test</properties>
</user>
<!---
vim /usr/local/mycat/conf/schema.xml
--->
<mycat:schema>
<schema name="test" dataNode="abc"></schema>
<dataNode name="abc" dataHost="efg" database="test"/>
<datahHost name="efg" ...>
<writeHost
host="hs01"
url="192.168.1.10:3306"
user="yjj"
password="1"
/>
<readHost
host="hs02"
url="192.168.1.11:3306"
user="yjj"
password="1"
/>
</writeHost>
</dataHost>
</mycat:schema>
如果出现启动异常 8066端口没有打开,可以检查两个日志文件
vim /usr/local/mycat/logs/wrapper.log
vim /usr/local/mycat/logs/mycat.log
2.后端服务器 java|python|php|asp
vim /etc/profile
export JAVA_HOME=/usr/local/jdk
export PATH=$PATH_HOME/bin
source /etc/profile
使用jar包启动服务
# 配置applicayion.properties |yml
修改 yml中的端口或者数据源
url=jdbc:mysql://ip:port/databasename
username=dbuser
password=dbpass
java -jar eleme_server.xxx.jar
3.负载均衡
lvs
dr模式
1.挂载vip(对外) ens33:0
ifconfig ens33:0 vipxx broascast=vipxx netmaast=255.255.255.255 up
route add vip dev ens33:0
yum -y install ipvsadm
# 添加规则
ipvsadm -A -t vipxx:port -s rr
ipvsadm -a -t vipxx:port -r ripxx -g
ipvsadm -a -t vipxx:port....
rs主机
ifconfig lo:0 vipxx broadcast... netmask xxx up
route add vipxx dev lo:0
抑制接受请求
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
nginx配置 代理 负载均衡
http {
upstream javagroup {
server ip:port weight=99;
server ip:port weight=1;
}
server
}
docker
一、介绍docker
1.Docker和虚拟机在以下八个方面存在差异
1.启动速度:Docker 启动速度非常快,属于秒级别,而虚拟机通
常需要几分钟去启动。
2.资源消耗:Docker 需要的资源更少,它直接运行在宿主机的内
核上,以一系列进程的结合形式存在。而虚拟机则需要消耗更多
的资源,因为它在操作系统级别进行虚拟化。
3.轻量级:Docker 更轻量,它的架构可以共用一个内核与共享应
用程序库,所占内存极小。而虚拟机则相对较重,需要消耗更多
的内存。
4.隔离性:虚拟机可以实现系统级别的隔离,而 Docker 则属于进
程之间的隔离,隔离性相对较弱。
5.安全性:Docker 的全性也更弱。
6.可管理性:Docker 的集中化管理工具还不算成熟。
7.兼容性:开发人员不需要关系具体是哪个 Linux 操作系统,基
本市面上主流系统都可使用Docker。
8.数据持久性:Docker 无法存储数据,当容器重启后,数据会消
失;而虚拟机可以存储各种数据,包括日志、数据库等。
2.docker的优缺点
1.优点
1.体积小:减小系统的开销值,一台主机可以运行上千
个容器。 2.启动迅捷:更快速的交付和部署,docker容器,比传
统虚拟机要快很多,docker核心解决的问题就是利用容器实现VM
类似的功能。
3.操作方便:通过配置 dockerfile 便支持灵活的自动化
创建和部署。 4.更轻松的扩展:可以实现更简单的、更可靠的迁移,
避免了兼容性等问题。
5.更强的可扩展性和可移植性。
2.缺点
1.安全问题:如果没有正确配置,一个容器中的恶意代
码可能会影响到主机上的其他容器以及主机本身的安全。
2.存储问题:当使用大量容器时,存储和管理容器映像
可以变得非常困难。这可能需要使用分布式存储或其他解决方
案来管理大量容器的存储。
3.性能问题:在某些情况下,容器和虚拟机相比会导致
性能损失。这些性能问题越来越少,但是仍然需要考虑。
4.网络问题:Docker 可能会在网络配置上存在一些问
题,这可能需要更多的时间来诊断和解决
5.复杂性:Docker 是一个非常灵活的系统,但这同时也
让它更加复杂。长时间使用 Docker 会产生大量的脚本和配置文
件,这些可能变得难以维护。
6.资源消耗:使用 Docker 必须占用一些资源,包括
CPU、内存、磁盘等等。如果运行容器的主机资源不足,可能会
导致性能问题。
7.学习曲线:Docker 是一个相对新的技术,相比传统环
境需要一定的学习曲线。需要了解Docker基本概念、命令和配置
文件等。需要花费时间配置和管理:使用 Docker 需要花时间配置
和管理容器集群和应用程序。
8.需要配置:每个容器,管理Jenkins、Kubernetes 等
运行 Docker 容器的工具。 9.映像构建复杂:构建Docker映像需要按照特定格式编
写 Dockerfile 脚本,需要遵循一定的规范和9.流程,这可能需要
更多的时间和精力。
3.docker架构
1.用 docker pull 命令 hub.docker.com 官网上卜载 images (镜
像)。2.可以用 docker save 命令将镜像保存到本地 tar 文件,也可以
用 docker load 命令将本地tar 文件导入镜像。
3.可以用 docker build 构建 Dockerfile 镜像。
4.可以用 docker run 和 docker create 将镜像运行成 container
(容器),容器内可以安装所需要的APP
5.可以用 docker commit/export 将容器做成镜像反复的使用!
6.可以将自己制作的镜像发布到 hub.docker.com 网站,需要注
册账号。
4.docker的核心概念
1.镜像(images):一个面向 docker 容器引擎的只读模板,也是容
器的基础,非似子 iso 镜像文件。
2.容器(container):基于镜像所创建的虚拟实例,相当于一个简
易的 Linux 环境,可启停,且多个容器之间互相隔离。
3.仓库(Repository):集中存放 docker 镜像的位置,可使用
docker pul 或 push 命令下载或上传到私有或公有仓库。
4.仓库注册服务器(registry):存放仓库的地方,如果没有私有仓
库,则使用公共仓库 dockerhub .
5.docker特性
1.文件系统隔离:每个进程容器运行在一个完全独立的根文件系
统里。
2.资源隔离:实现不同的容器的资源配额和调度,cgroup。
3.网络隔离:每个进程容器运行在自己的网络空间,拥有虚拟接
口和IP地址
4.日志记录:Docker将收集到和记录的每个进程容器的标准流
(stdout/stder/stdin),用于实时检索或者批量检索。
5.变更管理:容器文件系统的变更可以提交到新的镜像中,并可
重复使用以创建更多的容器
6.交互式shell:Docker可以分配一个虚拟终端并且关联到任何容
器的标准输出上,例如运行一个一次性交互shell。
二、配置docker环境,安装docker客户端和服务器
1.overay:是一种文件系统层叠技术,常用于容器化平台(比如 Docker)中。它允许将多个文件系统叠加在一起,从而创建一个统一可见的文件系统。通过加载 overlay 模块,可以在 Linux 系统中使用 overlay 文件系统,并且它将提供一些额外的功能,比如联合挂载、文件层叠等
2.br_netfilterY:Linux 肉核中的一个模块,它提供了桥接设备 (bridge device) 和网络过滤器(netfilter) 之个的集成。它允许在桥接设备上使用网络过滤器功能,如防火墙规则、网络地址转换(NAT)等。通过加载 br_netfilter 模块,你可以在 Linux 系统中的桥接设备上应用网络过滤规则对网络流量进行管理和控制。
3.device-mapper-persistent-data:一个Linux内核模块,它为Device Mapper设备提供持久存储功能。DMPD提供了一个用于存储映射关系的数据库,使得Device Mapper可以持久化存储映射数据,以便在系统重新启动后仍然可以恢复之前的映射关系。
4.Ivm2:Linux系统下的逻辑卷管理工具,LVM 的升级版,它是对磁盘分区进行管理的一种机制建立在硬盘和分区之上的一个逻辑层,用来提高磁盘管理的灵活性。
1.配置环境
[root@docker ~]# vim /etc/modules-load.d/k8s.conf
[root@docker ~]# vim /etc/sysctl.d/k8s.conf
[root@docker ~]# cat << EOF |tee /etc/modules-load.d/k8s.conf
> overlay
> br_netfilter
> EOF
overlay
br_netfilter
[root@docker ~]# modprobe overlay
[root@docker ~]# modprobe br_netfilter
[root@docker ~]# cat << EOF | tee /etc/sysctl.d/k8s.conf
> net.bridge.bridge-nf-call-iptables = 1
> net.bridge.bridge-nf-call-ip6tables = 1
> net.ipv4.ip_forward = 1
> EOF
[root@docker ~]# sysctl --system
[root@docker ~]#yum install -y yum-utils device-mapper-persistent-data lvm2
[root@docker ~]# yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
2.启动关闭服务
[root@docker ~]# systemctl start docker.service
3.查看镜像
[root@docker ~]# docker imagespowershell
4.搜索镜像
[root@docker ~]# docker search centos|Tomcat
5.下载镜像
[root@docker ~]# vim /etc/docker/daemon.json
{
"registry-mirrors": [
"https://do.nark.eu.org",
"https://dc.j8.work",
"https://docker.m.daocloud.io",
"https://dockerproxy.com",
"https://docker.mirrors.ustc.edu.cn",
"https://docker.nju.edu.cn"
]
}
[root@71dbcffe7ad9 ~]# cat /etc/redhat-release #查看当前镜像版本
CentOS Linux release 8.4.2105
6.基础应用
镜像是模版,容器是实例
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 5d0da3dc9764 2 years ago 231MB
#第一次创建容器
[root@docker ~]# docker run -i -t --name=c0 centos:latest /bin/bash #run启动,-i交互,-t终端,--name=xx命名,centos应用,latest镜像版本,/bin/bash指令
#配置阿里云yum仓库
yum clean all && yum makecache
yum -y install httpd
[root@71dbcffe7ad9 ~]# echo "docker_httpd_server" > /var/www/html/index.html
#systemctl start httpd
httpd -k start
curl localhost:80
#在宿主机访问
curl 172.17.0.2:80
#无法在物理机上访问,也无法ping到这个主机
#如果没有指令正在执行,容器就会停止
exit
#当前运行的进程
ps
#重启容器
docker start c0 #容器名称
#将c0的终端附加到当前的终端
docker attach c0
#httpd停止,期望退出,服务继续停止
按住ctrl不松手,按p再q
[root@71dbcffe7ad9 ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
#查看docker进程
docker ps --all
[root@71dbcffe7ad9 ~]# systemctl start httpd
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down
[root@71dbcffe7ad9 ~]# httpd -k start
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
[root@71dbcffe7ad9 ~]# curl localhost
docker_httpd_server
[root@71dbcffe7ad9 ~]# curl http://localhost:80
docker_httpd_server
[root@71dbcffe7ad9 ~]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.2 netmask 255.255.0.0 broadcast 172.17.255.255
外层访问:
[root@docker ~]# curl http://172.17.0.2:80
docker_httpd_server
外层真机不能访问
退出容器后镜像不存在,需要重新启动
[root@docker ~]# docker attach c0 #将c0终端的界面挂到当前终端
[root@71dbcffe7ad9 ~]# httpd -k start
[root@71dbcffe7ad9 ~]# curl localhost
docker_httpd_server
[root@docker ~]# curl http://172.17.0.2:80 #外层访问
docker_httpd_server
7.远程管理
启动、查看服务
[root@docker ~]# systemctl status docker
[root@docker ~]# docker images
1.状态
#查看sock套接字
ls -l /var/run/docker.sock
#允许远程连接,需要有一个服务,使用端口体现
netstat -lnput|grep 2375
2.设置允许远程管理
1.停用docker服务 2.修改/usr/lib/systemd/system/docker.service
[root@docker ~]# vim /usr/lib/systemd/system/docker.service
13 ExecStart=/usr/bin/dockerd #修改
3.修改daemon.json
[root@docker ~]# vim /etc/docker/daemon.json #添加
{
"registry-mirrors": [
"https://do.nark.eu.org",
"https://dc.j8.work",
"https://docker.m.daocloud.io",
"https://dockerproxy.com",
"https://docker.mirrors.ustc.edu.cn",
"https://docker.nju.edu.cn"
] #镜像
,
"hosts":[
"tcp://0.0.0.0:2375",
"unix:///var/run/docker.sock"
]
}
4.加载daemon.json
systemctl daemon-reload
5.启动服务
[root@docker ~]# ls -lh /var/run/
srw-rw----. 1 root docker 0 8月 22 14:15 docker.sock
[root@docker ~]# systemctl stop docker
[root@docker ~]# systemctl start docker #正常!!!
Warning: docker.service changed on disk. Run 'systemctl daemon-reload' to reload units.
Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.
[root@docker ~]# systemctl daemon-reload
[root@docker ~]# systemctl start docker
[root@docker ~]# ls -lh /var/run/
srw-rw----. 1 root docker 0 8月 22 16:10 docker.sock
6.查看状态
#查看sock套接字
ls -l /var/run/docker.sock
##允许远程连接,需要有一个服务,使用端口体现
netstat -lnput|grep 2375
7.与昂管理
[root@docker ~]# docker -H 192.168.1.50 images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 5d0da3dc9764 2 years ago 231MB