python、Linux、MySQL学习笔记

3 篇文章 0 订阅
2 篇文章 0 订阅

git操作

1.git init [project-name]

2.git clone url  克隆文件

3.git status 查看目前状态

4.git add .  添加

5.git commit -m "[descriptive message]"  提交更改

6.git push [alias] [branch]  推送文件

7.git pull  获取文件

 

Mysql

一、Mac系统下安装mysql及可视化工具:

《可视化工具使用Sequel Pro

配置mysql:

touch .bash_profile

vim .bash_profile  添加路径:PATH=/usr/local/mysql/bin:$PATH

source .bash_profile

mysql修改密码:SET PASSWORD FOR 'root'@'localhost' = PASSWORD('你的新密码');

FLUSH PRIVILEGES;》

数据库授权:grant all on *.* to root@”IP”identified by “数据库密码”

数据库导出:mysqldump -uroot -p test >test.sql

数据库导入:mysql -uroot -p test < test.sql

二、linux中MySql相关操作

安装:

1、由于CentOS 的yum源中没有mysql,需要到mysql的官网下载yum repo配置文件。

下载命令:

wget https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm

2、然后进行repo的安装:

rpm -ivh mysql57-community-release-el7-9.noarch.rpm

执行完成后会在/etc/yum.repos.d/目录下生成两个repo文件mysql-community.repo mysql-community-source.repo

3、使用yum命令即可完成安装

注意:必须进入到/etc/yum.repos.d/目录后再执行以下脚本

3.1安装命令:

yum install mysql-server

3.2启动msyql:

systemctl start mysqld #启动MySQL

3.3获取安装时的临时密码(在第一次登录时就是用这个密码):

grep 'temporary password' /var/log/mysqld.log

3.4倘若没有获取临时密码,则删除原来安装过的mysql残留的数据

rm -rf /var/lib/mysql

再启动mysql

systemctl start mysqld #启动MySQL

unbantu

1、安装mysql

       apt update  //更新仓库

       apt install -y mysql-server mysql-client  //安装mysql服务端、客护短

       设置密码:

---------------------------------

①连接数据库

mysql -uroot -p

密码

②查看所有的库

show databases

---------------

③mysql的管理命令:重启、停止、开始

service mysql stop

service mysql start

service mysql restart

-----------------------

④mysql的配置

二进制安装目录:vi/etc/mysql/my.cnf  或者路径:/etc/mysql/mysql.conf.d/mysqld.cnf

[mysqld]

basedir         = /usr/     --mysqls

程序安装位置

datadir          = /var/lib/mysql    --数据存放位置

port                      = 3306          --端口

bind-address    = 127.0.0.1    --绑定地址,127.0.0.1地址只可在本机连接,

max_connections = 100            --最大连接数

slow_query_log    = 1         --慢查询,查询慢的sql记录到文件中,方便查询,1是开机

slow_query_log_file     = slow.log     --记录位置

long_query_time         = 2         --执行超过2,秒的就是慢查询

innodb_buffer_pool_size = 3G           --缓存控制,默认安装值是最低,总内存的70%(专用),两种引型:InnoDb

 

查询配置文件:

vi /etc/mysql/my.cnf

真实地址:/etc/mysql/mysql.conf.d/mysqld.cnf

查看mysql状态:

查看最大连接:show variables like 'max_connections';

查看正在来接数:show global status like 'max_used_connections';

查看配置的空间:show variables like 'innodb_buffer_pool_size';   

各种操作数量:show status like 'innodb_rows_%';

 \s 查看状态

mysql手册:https://dev.mysql.com/doc/refman/5.7/en/

-----------------

备份数据库:

       创建数据库:create database test;

       show tables;

       use test;

       exit;退出

       mysqldump -uroot -p密码test >test.sql  备份

       mysql -uroot -p密码test <test.sql  恢复

2、用户授权

mysql默认情况不可以远程连接,查看当前用户:

select host,user from mysql.user;  

       用户授权:all、select、update、*.*不限制任何数据库和表,%位置代表主机IP地址

grant all on *.* to root@"%" identified by "letmein"

----------------

创建远程连接,

       授权用户

  • ,配置文件中注释掉  本地地址172.0.0.1

重启数据库

Service mysql restart

1、 >mysql -h localhost -u root -p // localhost:主机名(如果访问本机数据库则不用输入 -h localhost,-u root用户名 -p密码)

2、 >mysql \c  // 退出当前命令并重新回到命令提示行。

3、 >mysql help; // 查看帮助信息

4、 >mysql \q || quit|| exit  // 退出mysql客户端

5、 >mysql show databases;     // 查看当前mysql客户端所有数据库

6、 >mysql use 数据库名; // 使用数据库

7、 >mysql select database();    // 查看当前使用库

8、 >mysql create database 数据库名;                 // 创建数据库

9、 >mysql create database if not exists 数据库名 charset = 字符集(utf8) collate = utf8_general_ci;    // 创建数据库和设置字符集并设置排序规则

10、>mysql drop database 数据库名;     // 删除数据库 (会将该数据库里的表和表数据全部删除)

11、字段类型

       整型

              int(长度)

              smallint(长度)

              tinyint(长度)

       字符串

              varchar(100)  // 变长字符串

              char(长度) // 定长字符串

 

       时间日期

              date // 年月日

              datetime // 年月日时分秒

              year // 年

              time // 时分秒                    查询工资大于6000小于10000的教师名称和工资并且按照工资高低进行逆向排序

       文本类型

              text // 最大64K

              BLOB      // 最大64K

    约束[选项]

              auto_increment    // 自动增长

              primary key   // 主键

              default          // 默认值

              not null // 非空

              null        // 为空

              default          // 默认值

                                unsigned  //无符号(正数)

                                unique  //唯一性(可以为null但不重复)

                                index  //常规索引

12、 >mysql drop table 表名;   // 删除数据表(数据表里的内容也会被删除)

13、 >mysql describe || desc 表名;  // 查看表结构

14、 >mysql create table if not exists 表名(

              id     类型(长度) 选项,            // 主键的选项一般为 auto_increment(自增长) primary key(主键) not null(非空)

              字段1  类型(长度) 选项,

              ....

              );

15、>mysql alter table 表名 add 字段 类型 约束;             // 添加一列(添加字段)

16、>mysql alter table 表名 change 旧字段 新字段 类型 约束;      // 修改一列(修改字段)

17、>mysql alter table 表名 drop 字段;               // 删除一列(删除字段)

18、>mysql insert into 表名(`字段1`,`字段2`,`字段....`) values('字段1的值','字段2的值','字段值...');             // 添加数据(如果要添加多条数据则在values值后边接着写即可);

       >mysql insert into 表名 values('字段1的值','字段2的值','字段值...');    //字段值按顺序写

19、>mysql select 查询字段(可以起别名) from 表名(可以起别名);          // 查询表数据( * 查询所有 如果不想查询所有直接写想查询字段即可,多个字段的话中间用逗号隔开)

20、>mysql as 关键字 // 起别名(任何表,任何字段都可以起别名)

21、>mysql insert into 表1(`字段`,`字段1`,`...`) slect 字段,字段1,... from 表2;           // 插入从其他表选择的行(将一个表中的数据插入到另一个表中);

22、>mysql update 表名 set `字段` = '值' where 条件;        // 更新数据(如果不加where条件则会更新该表所有数据);

23、>mysql delete from 表名 where 条件;                         // 删除数据(如果不加where条件则会删除该表所有数据);

24、>mysql order by 字段(主键[id]) asc || desc  // 排序 asc正序(默认) desc 倒序

25、>mysql limit 值1,值2;               // 控制结果显示条数,参数1:从哪里开始显示 参数2:显示几条

eg: mysql> select * from users order by cdate asc limit 10;

26.mysql> show create table 表名\G        --查看表的建表语句。

 

django

官网:www.djangoproject.com

安装:pip install django==1.11.11

1、新建项目:cmd窗口命令:django-admin startproject myweb

2、启动项目:1,cd myweb

               python manage.py runserver(只能localhost:8000访问)

              2,python manage.py runserver 0:8000(任意电脑访问)

            settings.py文件里添加:ALLOWED_HOSTS = ['IP地址']

3、创建应用

python manage.py startapp myapp

4.

生成数据库迁移文件:python manage.py makemigrations

model数据库迁移:python manage.py migrate

5.创建管理用户:python manage.py createsuperuser

爬虫scrapy

创建项目:scrapy startproject demo

创建爬虫:

scrapy genspider fang fang.5i5j.com

执行爬虫:

scrapy crawl fang

结果另存格式:

scrapy crawl fang -o fang.xml

爬虫常用请求库

Urllib

Python3 urllib库官方链接:https://docs.python.org/3/library/urllib.html

  • urllib中包括了四个模块,包括:
  • urllib.request:可以用来发送request和获取request的结果
  • urllib.error:包含了urllib.request产生的异常
  • urllib.parse:用来解析和处理URL
  • urllib.robotparse:用来解析页面的robots.txt文件

urllib.request

  • urllib.request 模块提供了最基本的构造HTTP 请求方法,可以模拟浏览器的一个请求发起过程。同时它还带有处理authenticaton(授权验证),redirections(重定向),cookies(浏览器Cookies)以及其它内容。
  • urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)
  • 参数:url地址
    • data:可选附加参数,字节流编码格式(bytes() 可转换),请求方式会变为POST
    • timeout (超时时间)单位为秒,若请求超出了设置时间还没有响应,则抛异常
  • 返回HTTPResposne类型的对象:
  • response.read() 就可以得到返回的网页内容,可使用decode("utf-8")解码字符串
  • response.status 就可以得到返回结果的状态码,如200代表请求成功,404代表网页未找到

 urllib.request.Request

  • 利用urlopen()方法可以实现最基本的请求发起,但这几个简单的参数并不足以构建一个完整的请求。
  • 使用强大的Request类可以在请求中加入需要的headers等信息。
    class urllib.request.Request(url, data=None, headers={}, origin_req_host=None,    
          unverifiable=False, method=None)
  • 第一个参数是请求链接,这个是必传参数,其他的都是可选参数
  • data 参数如果要传必须传bytes (字节流)类型的,如果是一个字典,可以先用urllib.parse.urlencode() 编码。
  • headers 参数是一个字典,你可以在构造Request 时通过headers 参数传递,也可以通过调用Request 对象的add_header() 方法来添加请求头。
  • origin_req_host 指的是请求方的host 名称或者IP 地址。
  • unverifiable 指的是这个请求是否是无法验证的,默认是False 。意思就是说用户没有足够权限来选择接收这个请求的结果
  • method 是一个字符串,它用来指示请求使用的方法,比如GET POST PUT 等等。

 

mongodb:

1.创建一个数据目录文件夹 c:\data\db

2.打开mongodb服务

mongod --dbpath c:\data\db

3.打开一个终端连接mongodb服务器

命令:mongo

 

 

 

自动化运维

 

1 Linux基础

1.1目录和文件操作

 pwd 打印当前工作目录 

 cd 切换目录

      cd   宿主目录

      cd - 上次的目录

      cd .. 上级目录(.代表当前目录)

         cd /home/

 ls 列出目录中的文件

      ls -l 详细信息

      ls -a 显示所有文件(包含以点开头的文件)

      ls -F 目录后加斜线显示(文件夹后加/)

      ls -lh 人性化单位显示大小

 mkdir 创建目录  

touch 创建文件

touch readme.txt    ||  touch hello 文件

 

写数据到文件

echo "1234" >>readme.txt

 

 rm 删除文件

       rm -r 删除目录 -r 递归删除

       rm -i 删除前提示

       rm -f 删除文件不提示

       rm -rf 删除目录(不提示)

       rm -rf ./* 删除当前目录所有文件

 mv 移动文件

       例:

       复制:touch test

       创建:mkdir demo

       移动: mv test demo/

       修改名字: mv demo/test demo/abc   test修改成abc

cp  复制copy

       cp /etc/issue ./     讲/etc/issue文件复制到当前目录

       cp -r 递归复制目录

 

 

 

find 搜索

       find /etc -name init 在/etc目录精确查找init文件

       find /etc -name 'init*' 在/etc目录找init开头的文件

       find /etc -name '?init' 在/etc目录找以init结尾,前面只有一个字符

       find /usr/bin -size +3M 在/use/bin目录查找大于3M的文件

 

which 显示命令路径

       which python3

cat 显示文件内容

       cat /etc/hosts

more

       more /etc/services 查看/etc/services件

       空格 翻页

       回车  下一行

       b 上一页

       q退出

head 查看文件头几行

       head -n 5 /etc/services

 

tail 查看文件最后几行

       tail -n 5 /etc/services  显示/etc/services文件最后5行

       tail -f 监视文件变化

 

 

ln 创建连接

 

       ln -s 源文件 新文件  (创建ls软连接)  

              例:ln -s readme.txt install.txt  (写任何东西到软连接都会同步到源文件中,写到源文件中的数据不会同步到软连接)

       ln 源文件 新文件      (创建硬链接)

       (硬链接没有任何区别,相当于拷贝了一份,不管谁发生变化,另一方都会变化,不可以跨文件创建)

1.2解压和打包

tar.gz 格式

        打包 tar -zcvf test.tar.gz test

         将test目录打包,生成test.tar.gz文件

        解压 tar -zxvf test.tar.gz

         将test.tar.gz文件解压

 

 .bz2格式

      ·打包tar -cjf test.bz2 text

         将test目录打包,生成test.bz2

       ·解压tar -xjf test.bz2

         将test.bz2解压

  打包 zip -r test.zip test

         将test目录打包,生成test.zip文件

 

 解压 unzip test.zip

         ContOS 下安装zip: yum -y install zip

         Ubuntu 下安装zip: sudo apt install zip

Windows下,推荐用WinRAR压缩为ZIP格式,不要用"好压

file 查看文件类型

file test  查看test是什么文件

1.3 vi编辑器使用

---------------------

:wq 存盘并退出 (write and quit)

:w 存盘

:q 退出

:q! 不存盘强制退出

:wq! 强制存盘退出

 

ESC返回命令模式

 

:set nu 显示行号

:15 跳到第15行

G 定位到最后一行

gg 到第一行

/str 搜索str字符串,按n键到下一处

 

dd 删除一行(剪切)

5dd 删除5行(剪切)

yy  复制

5yy 复制5行

P   粘贴

u   撤销

ctrl + r 恢复上一步撤销操作

 

1.4 Linux的用户与权限管理

文件权限

       read    可读     4

       write   可写     2

       execute 可执行   1

       r 读权限 可查看文件内容, 可列出目录内容

       w 写权限 可以修改文件内容, 可以再目录中创建,删除文件

       x 执行权限 可以执行文件, 可以进入目录

 

用户分类

       user 所有者

       group 所属组

       other 其它人

       第一个字符D代表目录

 

用户组管理命令

       groupadd 添加用户组

       groupdel 删除用户组

       删除用户和组步骤:

              1、删除 /homo/目录下的用户目录: rm -rf /home/名称/

              2、userdel 用户

              3、groupdel 用户组完成

 

用户管理命令

       useradd 添加用户

       -g      指定用户组

       -m  自动创建宿主目录(ubuntu)

       -r   连同宿主目录一起删除

       passwd修改用户密码(没有参数时修改自己的密码)

              设置密码:password jack

 

权限操作:

       chown jack testfile   改变文件的所有者,把testfile文件所有者改成jack

       chgrp group1 testfile  改变文件的组

       chmod u+x ./start.sh    改变文件的权限

              例子:chmod g+w python/   对组权限中加入w权限

       chmod -R 777 /data/www

    (7:4+2+1,5:4+1)

 

------------------------ 案例:---------------------

1、创建两个小组

       python  :  groupadd python

 

       php  :  groupadd python

 

      

 

2、创建3个用户

       python组:jack mary

              useradd -m -g  python jack   //创建用户,并加到python组中,宿主目录中会创建文件夹

              useradd -m -g  python mary

 

              查看jack : id jack

              查看组目录: ls /home/  查看所有的用户

              删除 /homo/目录下的用户目录: rm -rf /home/名称/

 

       php组: lily  tom

              useradd -g -m php lily

              useradd -g -m php tom

      

 

3、创建目录

       /data/python

              创建文件夹(加-p才能创建两层目录):mkdir /data/python -p

       /data/php

              创建文件夹(加-p才能创建两层目录):mkdir /data/python

 

4、配置权限目录:

       python 组的同事允许再 /data/python 目录中工作

             

       php组的同事允许再 /data/php 目录下工作

 

       转让文件权限:

              chown jack python/  吧python文件夹转让给jack

              chgrp python python 把python文件所属组给到python 组,要在文件主目录中操作.

       文件权限配置:

              chmod u+x 1.py

 

创建文件  touch 文件

 

1.5 Linux的进程管理

程序 是指令和数据的有序集合,是一个静态的概念

进程 代表一个正在运行的程序的实例

线程 通常在一个进程中可以包含若干个线程

 

在命令末尾加上 & 符号,就可以让程序在后台运行

程序正在前台运行,可以使用 Ctrl+Z 把程序暂停

 jobs 查看运行的程序

 bg 把暂停的程序放到后台运行

 fg 把一个程序掉到前台运行

 

执行:python3 ./test.py &

----------------------------------

查看进程

 

       ps -ef | grep httpd

       ps -aux |

UID 程序被该 UID 所拥有

PID 就是这个程序的进程ID

PPID  则是其上级父程序的进程ID

C  表示CPU使用的资源百分比

STIME 表示进程启动时间

TTY  登入者的终端机位置

TIME 使用掉的 CPU 时间。

CMD 所下达的指令为何

----------------------------------

查看进程的CPU和内存占用:

ps aux

ps -aux | grep httpd

 

USER: 行程拥有者

PID: pid

%CPU: 占用的 CPU 使用率

%MEM: 占用的记忆体使用率

VSZ: 占用的虚拟记忆体大小

RSS: 占用的记忆体大小

TTY: 终端的次要装置号码 (minor device number of tty)

STAT: 该行程的状态,linux的进程有5种状态:

D 不可中断 uninterruptible sleep (usually IO)

R 运行 runnable (on run queue)

S 中断 sleeping

T 停止 traced or stopped`

Z 僵死 a defunct (”zombie”) process

注: 其它状态还包括W(无驻留页), <(高优先级进程), N(低优先级进程), L(内存锁页).

START: 行程开始时间

TIME: 执行的时间

COMMAND:所执行的指令

 

-------------------------------------

top命令:

PID — 进程id

USER — 进程所有者

PR — 进程优先级

NI — nice值。负值表示高优先级,正值表示低优先级

VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES

RES — 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA

SHR — 共享内存大小,单位kb

S — 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程

%CPU — 上次更新到现在的CPU时间占用百分比

%MEM — 进程使用的物理内存百分比

TIME+ — 进程使用的CPU时间总计,单位1/100秒

COMMAND — 进程名称(命令名/命令行)

 

----------------------------------------------

结束进程:

 结束前台进程CTRL+C

 kill 结束指定进程ID

-9 强制

 pkill 进程名 pkill http

 

-----------------------------

查看硬盘空间:

df -h

 

-----------------------------

查看当前登录用户

w

pkill -9 -t pts/1 把终端pts/1的用户踢出去

 

2 服务器软件安装与管理

2.1、二进制软件包管理

 

ubuntu

       apt update  //更新软件仓库信息

       apt install -y zip    //安装zip软件

       apt remove zip     //删除zip

      

centos 

       yum yodate   //更新软件仓库

       yum install -y zip  //安装zip软件

       yum remove zip  //删除zip

 

2.2源码编译准备工作

apt install -y gcc g++ make (ubuntu)

yum install -y gcc gcc-c++ make (CentOS)

安装编译所需工具

 

wget http://example.com/xxx.tar.gz

下载软件源码包到服务器上

 

源码编译基本步骤

 解压软件包,阅读安装说明README、INSTALL等

 ./configure --prefix=/usr/local/path(设置安装路径)

 make

 make install

 

编译nmap

https://nmap.org/

2.3 linux中MySql相关操作

1、安装mysql

       apt update  //更新仓库

       apt install -y mysql-server mysql-client  //安装mysql服务端、客护短

       设置密码:

---------------------------------

①连接数据库

mysql -uroot -p

密码

②查看所有的库

show databases

---------------

③mysql的管理命令:重启、停止、开始

service mysql stop

service mysql start

service mysql restart

-----------------------

④mysql的配置

二进制安装目录: vi/etc/mysql/my.cnf  或者路径:/etc/mysql/mysql.conf.d/mysqld.cnf

[mysqld]

basedir         = /usr/     --mysqls

程序安装位置

datadir          = /var/lib/mysql   --数据存放位置

port                      = 3306          --端口

bind-address    = 127.0.0.1    --绑定地址,127.0.0.1地址只可在本机连接,

max_connections = 100            --最大连接数

slow_query_log    = 1         --慢查询,查询慢的sql记录到文件中,方便查询,1是开机

slow_query_log_file      = slow.log     --记录位置

long_query_time         = 2         --执行超过2,秒的就是慢查询

innodb_buffer_pool_size = 3G           --缓存控制,默认安装值是最低,总内存的70%(专用),两种引型:InnoDb

 

查询配置文件:

vi /etc/mysql/my.cnf

真实地址:/etc/mysql/mysql.conf.d/mysqld.cnf

查看mysql状态:

查看最大连接: show variables like 'max_connections';

查看正在来接数:show global status like 'max_used_connections';

查看配置的空间: show variables like 'innodb_buffer_pool_size';  

各种操作数量: show status like 'innodb_rows_%';

 \s 查看状态

mysql手册:https://dev.mysql.com/doc/refman/5.7/en/

 

-----------------

备份数据库:

       创建数据库:create database test;

       show tables;

       use test;

       exit;退出

       mysqldump -uroot -p密码 test >test.sql  备份

       mysql -uroot -p密码 test <test.sql  恢复

 

2、用户授权

mysql默认情况不可以远程连接,查看当前用户:

select host,user from mysql.user; 

       用户授权:all、select、update、*.*不限制任何数据库和表,%位置代表主机IP地址

grant all on *.* to root@"%" identified by "letmein"

 

----------------

创建远程连接,

       授权用户

  • ,配置文件中注释掉  本地地址172.0.0.1

重启数据库

Service mysql restart

2.4 Linux中Django框架安装和启用

1、linux 下安装Django框架

       apt update

       python -V  查看版本

       apt install Python3

---------------------------------

       pip -V

       pip3 -v

       apt install python3-pip

---------------

pip3 install django  安装框架

clear

安装 指定版本的 Django 命令如下:

Pip3 install django==1.10.3

卸载:

Pip3 uninstall django

-----------------

django-admin startproject demo  创建项目

发布项目

python3 manage.py runserver 0.0.0.0:8080

 

python3 manage.py runserver 0.0.0.0:80   --就可以访问项目

---------

 

python -m django --version  查看版本

 

2.5 uWSGI 服务器的使用和Django项目的发布

pip3 install uwsgi  //安装命令

 

启动命令:(--chdir指定项目目录)(--module哪一个模块 demo项目下的wsgi)(--daemonize/var/log/uwsgi.log指定日志文件)

//设置了默认端口就不用再加9090

uwsgi --http:9090 --chdir /root/demo  --module demo.wsgi

uwsgi --http:9090 --module demo.wsgi --daemonize /var/log/uwsgi.log

--程序后台运行命令 项目目录下:

uwsgi --http :9090 --chdir /root/demo1 --module demo1.wsgi --daemonize /var/log/uwsgi.log

 

日志路径:/var/log/uwsgi.log

 

搜索

 

--------------结束进程---------------

ps -ef |grep uwsgi

结束进程(只结束父进程就可以):

kill -9 父线程号

 

-----

把uwsgi加到配置中,开机自启

vi /etc/rc.local

 

把下面的放进去:(which uwsgi 查看地址)

uwsgi地址 --http :80 --chdir /root/demo --module demo.wsgi --daemonize /var/log/uwsgi.log

 

2.6性能测试

 吞吐率(Requests per second)

 并发连接数(The number of concurrent connections)

 并发用户数(The number of concurrent users,Concurrency Level)

 用户平均请求等待时间(Time per request)

 服务器平均请求等待时间(Time per request: across all concurrent requests

 

 

----ab---工具

 ab (apache bench)

 apache提供的一个压力测试工具

 apt install apache2-utils

 ab -c 20 -n 10000 http://exampl.co

3 高并发下的web架构一

3.1反向代理与负载均衡

1. 了解反向代理与负载均衡技术

 

什么是负载均衡

通过某种负载分担技术,将外部发送来

的请求均匀分配到对称结构中的某一台服务器

上,而接收到请求的服务器独立地回应客户的

请求。

负载均衡的实现

硬件负载均衡、软件负载均衡,DNS

 

软件负载均衡

Nginx

轻量级的Web服务器/反向代理服务器

特点

工作在网络的7层之上

对网络的依赖非常小

并发大,性能不俗

 

  • 熟悉Nginx安装与配置

 

apt update

apt install –y nginx

service nginx start

service nginx stop

service nginx restart

nginx -t

nginx -s reload      //平滑的重启。配置重载。

 

---说明,这时候,启动Nginx后,通过页面就可以访问IP地址

 

②Nginx主配置文件

 

vi /etc/nginx/nginx.conf

 

user       www-data;  //代表nginx以什么身份运行;

worker_processes        auto;    //工作进程数,默认,根据CPU数量来设置;

pid /run/nginx.pid;       //会将启动文件放到这个文件中

events {

       worker_connections 768;            //代表一个owrk能处理多少个并发; 进程数*worker连接数=并发数

}

http {   

       gzip on;  //网页压缩,on是开启

       access_log /var/log/nginx/access.log;     //成功日志

       error_log /var/log/nginx/error.log;     //错误日志

       include /etc/nginx/conf.d/*.conf; //配置文件,每个配置文件已分号结束。

       include /etc/nginx/sites-enabled/*;

}

③Nginx的server配置

 

vi /etc/nginx/sites-enabled/default

 

server {

       listen 80; //监听端口

       root /var/www/html;    //指定网站根目录在什么地方,默认访问此网页

       index index.html index.htm; //默认去访问的文件

       server_name _;             //_中通常填写域名

       location / {

       try_files $uri $uri/ =404;       //尝试输入的数据当成文件去查看,没有加/当目录查找,没有报错;

       }

}

 

3. 了解Nginx反向代理与负载均衡

 

④Nginx反向代理

server {

       ......

       location / {

       proxy_pass http://192.168.88.3:81;     //一旦有访问Linux地址,就跳转到这里

       proxy_set_header Host $host;

       proxy_set_header X-Real-IP $remote_addr;

       }

}

⑤Nginx负载均衡

 

upstream backend {

       server 192.168.8.3:80 weight=1;

       server 192.168.8.4:80 weight=1;

}

location / {

       proxy_pass http://backend;

}

 

 

3.2-Memcached缓存

1. 了解什么是缓存

缓存为王

DNS、浏览器、App、代理缓存、服务端缓存

 

*内存缓存

RDB Memory

随机访问情况下,内存访问速度比硬盘访问速度快上10万倍以上

 

*缓存算法

1. LRU(Least Recently Used)

       最近最少使用

2. LFU(Least Frequently Used)

       根据数据的历史访问频率来淘汰数据

 

 

①安装

 

apt install -y memcached

service memcached stop

service memcached start

service memcached restart

 

②参数配置

vi /etc/memcached.conf

-d 守护进程

-m 内存,default 64MB

-u 运行用户

-l 监听的服务器IP地址

-p 监听端口,默认是11211

-c 并发连接数,默认是1024

 

③安装

apt install -y memcached

service memcached stop

service memcached start

service memcached restart

telnet 127.0.0.1 11211

version

stats

 

④状态

telnet 127.0.0.1 11211

stats

 

STAT pid 237784 # 进程ID

STAT uptime 2070631 # 运行秒数

STAT version 1.4.25 # 版本

STAT libevent 2.0.21-stable # libevent 版本

STAT pointer_size 64 # 系统指针(32bit/64bit)

STAT curr_items 50237 # 当前实例存储的 items数量

STAT total_items 1337400 # 实例启动以后存储的 items总数量

STAT bytes 35169108 # 实例存储 items占用的字节数

STAT curr_connections 349 # 当前打开的连接数

STAT total_connections 108429 # 实例启动后打开的连接总数

STAT cmd_get 14005676 # get 命令总请求次数

STAT cmd_set 1337400 # set 命令总请求次数

STAT get_hits 12596511 # 总命中次数

STAT get_misses 1409165 # 总未命中次数

STAT evictions 0 # 为获取空闲内存而删除的 items数

STAT bytes_read 4918928094 # 总读取字节数(请求字节数)

STAT bytes_written 46027378599 # 总发送字节数(结果字节数)

STAT limit_maxbytes 1572864000 # 分配的缓存大小

STAT threads 4 # 当前线程数

 

⑤Python中使用

# pip install python-memcached

import memcache

# 链接

mc = memcache.Client(['127.0.0.1:11211'])

# 存入

mc.set('name', 'python', 60) # 过期时间秒

# 读取

res = mc.get('name')

# 删除

mc.delete('name'))

 

4 高并发下的web架构二

4.1理解同步与异步

    1. RabbitMQ是异步处理数据的;

 

 

 

同步:处理时间长

 

异步:

 

常见的消息队列软件:

RabbiteMQ、Redis

 

4.2安装RabbitMQ消息队列

    1. 基础概念:

 

 

    1. 安装管理:

步骤①:安装

安装:   Apt install -y rabbitmq-server

启动:   service rabbitmq-server stop  /start   /restart

 

步骤②启动rabbitmq的web管理界面;

启动rabbitmq的web管理界面;

*在linux服务器中执行:启用management plugin    web管理插件:

命令:rabbitmq-plugins enable rabbitmq_management

 

*在浏览器中输入服务器的IP地址和端口:

http://39.96.84.227:15672/

*添加用户

 

创建用户命令:rabbitmqctl add_user jack 密码    //此密码是访问rabbitmq网站的密码,qq=734428630

 

给用户指定角色:

 

 

给用户指定角色命令:

rabbitmqctl set_user_tags jack administrator    //指定为超级管理员

这时候可以去网页中登录 jack账户

 

↓↓↓↓↓↓

 

 

说明:rabbitMQ中有很多的交换机,交换机可以连接很多的队列;

数据发送给交换机,交换机把数据放到应该放的队列中;

4.3. 在Python中使用RabbitMQ

Python中操作RabbitMQ需要安装一个扩展:pip3 install pika

(在Windows中使用就在win中安装)

*创建连接→创建通讯信道→声明交换机→

*运行python文件,发现失败,是因为jack的权限还不够,解决:

Linux中执行:rabbitmqctl set_permissions -p / jack ".*" ".*" ".*"

 

------------------------写Python程序-----------------

4.3.1真实的项目中怎么使用rabbitMQ:

安装模块: pip install celery 

删除模块: pip uninstall celery

指定版本安装(支持windows): pip install celery==3.*

 

使用celery的程序后台执行:celery -A bankend worker

 

 

5自动化运维基础(psutil、ipy、dnspython)

5.1通过命令查看linux任务管理器相关命令

  • top命令:查看cpu、内存kib、进程相关信息

Top中按1,可以对cpu排序;

  • 查看硬盘情况:df -h
  • 当前登录用户: W
  • 网络流量: watch cat /proc/net/dev

⑤当前的cup情况、:cat /proc/cpuinfo info

 

5.2Python的piutil模块查看管理器

①使用psutil模块查看CPU相关命令:

安装:pip3 install psutil

进入Python3:直接输入  Python3

导入psutil: import psutil

 

查看CPU数量:         psutil.cpu_count()

 

只显示物理核心CPU:              psutil.cpu_count(logical=False)

 

Cup从开机以来使用的情况:             Psutil.cpu_times()

 

Cpu当前的使用率:           psutil.cpu_percent()

Cpu持续占有率特别高,则需报警

 

分别查看每个CPU使用情况:         psutil.cpu_percent(percpu=True)

 

查看3秒钟CPU的使用率:             psutil.cpu_percent(percpu=True,interval=3)

 

②使用psutil模块查看内存相关命令:

查看内存使用情况:Psutil.virtual_memory()   或者:根目录下 free -m

 

查看交换分区:psutil.swap_memory()

当前服务器有几个分区:Psutil.disk_partitions()

查看每个分区可用空间:psutil.disk_usage(‘/’)    //根分区

硬盘的读写情况  :psutil.disk_io_counters()     //可计算硬盘时间内写了多少,

③网络相关情况:

发送数据包和接收数据包: psutil.net_io_counters()      //监控计算机流量状态

多块网卡,每块网卡情况:psutil.net_io_counters()

 

 

5.3psutil获取进程的相关信息

①psutil查看进程命令

拿到所有的进程ID: psutil.pids()

进程的详细信息:P = psutil.Process(1)

P.name()   //输出进程名称

进程的可执行文件:p.exe()

进程的工作目录:p.cwd()

进程状态:p.status()

进程创建时间: p,creat_time()

查看进程由哪个用户创建: p.uids()     p.gids()

进程所占用的CPU时间: p.cpu_time()

内存的利用率:p.io_counters()

进程有几个线程:p.num_threads()

 

②和联网相关的进程能看到网络信息

查看SSH和网络相关的连接: ps -ef |grep ssh

P = psutil.Process(进程ID)

P.name()  //输出进程名

P.connections()    //打印网络信息

可以用来分析进程有没有和别的网络连接

查看开机时间:psutil.boot_time()

对开机时间转换:

当前登录用户: psutil.users()

 

退出psutil : exit()

 

5.4 IPy模块的使用

用来处理IP信息相关的信息。

 

①IPy的安装和使用:

安装: Pip3 install ipy

进入Python:python3

查看是IPV几的IP地址:

 

网段的IP地址全部列出来:

 

判断IP是公网IP还是私网IP:

Ip = IPy.IP(“IP地址”)

Ip.iptype()

 

IP换成整数:ip.int()

16进制:ip.strHex   二进制:ip.strBin()

根据IP和子网掩饰码生成网段:

或:

IPy.IP(“192.168.1.0/255.255.255.248”,make_net=True)

 判断一个IP地址和网段是否包含在另一个网段中:

‘IP地址’ in IPy.IP(“IP地址/网段”)

判断两个网段是否存在IP重复的情况:

 

5.5 dnsPython域名解析

安装:    pip3 install dnspython

进入Python3,导入 import dns.resolver

 

*对域名A记录进行查询:

 

 

查询域名的MX邮件解析记录:

Res = dns.resolver.query(“qq.com”,”MX”)

[item for item in res

 

查看域名的NS记录(用一级域名):

Res = dns.resolver.query(“qq.com”,”NS”)

[item for item in res

 

 

作用:可以对网站或者项目进行域名监控,python脚本,每隔十分钟对IP地址解析,并访问

 

 

 

 

6发布windows中的项目到云服务中

①通过pscp来传输文件,使用方法如下:

 

pscp简要说明 
pscp
windowLinux之间的文件传输工具,使用和Linuxscp命令相似。
pscp 安装

下载pscp 放到C:\WINDOWS\system32中,然后就可以在任何地方调用

参考:https://www.jianshu.com/p/101d42cd686b

远程传输到本地

pscp [options] [user@]host:source target

user:远程主机的用户名
host:远程主机的ip
source:远程主机上的文件, 只能是单个。
target:本地的存放路径可指定文件名。如:./test.txt, 若不指定则默认原文件名。

例:从172.17.1.100:22 机器的home/ubuntu/.ssh/id_rsa.pub文件copy文件到window的E盘根下

pscp -P 22 ubuntu@172.17.1.100:/home/ubuntu/.ssh/id_rsa.pub E:/

本地传输到远程

pscp [options]source [source....] [user@]host:target
source:本地的文件,多个文件用“空格”隔开
user:远程主机的用户名
host:远程主机的ip
target:远程的存放路径可指定文件名。如:/root/test.txt, 若不指定则默认原文件名

例:复制本地test.txt 和a.zip文件到远端主机

pscp -v test.txt, a.zip root@192.168.1.245:/root/


注意:

云服务中需要安装的包要全部安装好,开发环境和生产环境的python版本、Django版本要一致;

 

 

  • 使用pscp 传,传输项目到云服务;

②使用uwsgi发布项目

③使用Nginx做反向代理

 

 

**静态文件重定位,settings文件中:

 STATIC_ROOT =os.path.join(BASE_DIR,”静态文件的路径”)

STATICFILES_DIRS = [

    os.path.join(BASE_DIR, '/data/www/pro'),

]

 

 

 

监控及报警

1.使用python脚本自动化监控服务器资源及邮件和微信提示报警

2.使用python脚本自动化安装

3.自动化部署项目:

   a.创建git仓库

b.开发测试环境部署

c.创建git账户,使用git账户创建共有仓库

d.使用git将Windows上的web项目推送到共有仓库

e.开发测试服务器使用root账户创建新项目目录,通过git克隆共有仓库的文件到新建项目目录

f.使用uwsgi发布项目

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值