一. mysql安装和基本操作
1.安装mysql包5.7版本(不能于mariadb共存)默认端口3306
yum -y install perl-Data-Dumper perl-JSON perl-Time-HiRes(依赖包)
再安装mysql包(官网下载)
2.启服务,开机自启mysqld
3.查看服务:
systemctl status mysqld 查看服务状态
netstat -antpu | grep mysql 查看服务端口
ps -C mysqld 查进程
ps aux | grep -i mysqld 查看进程所有者
4.本地登入数据库;
初次登陆需手动查看mysql随机密码 grep 'temporary password' /var/log/mysqld.log
用该密码登录到服务端后,必须马上修改密码,不然会报错;
修改密码前先修改密码规则:
mysql>set global validate_password_policy=0; (关闭密码策略)
mysql<set global validate_password_length=6; (修改密码长度)
以上修改为临时修改,永久生效要修改配置文件/etc/my.cnf
[mysqld](手动添加)
validate_password_policy=0
validate_password_length=6
--------------------------------------------------------------
修改密码:mysql -uroot -p"123456"
5.查看,添加,删除操作
show databases; 查看有那些库
select database();
create database nsd; 创建库
drop database nsd; 删除库
use nsd; 使用进入库
show tables; 查看库里的表
desc 库名.表名; 查看表的字段结构
create table 表名(
字段名1 字段类型(宽度),
字段名2 字段类型(宽度); 创建表
drop table 表名; 删除表
insert into 库.表 values(内容); 插入表
select * from 库.表; 查看表的内容
------------------------------------------------------------------------------------------------------------------------
二. Mysql数据类型
1.数值类型:整数,小数
tinyint (unsigned) 1字节 范围(-128~127) 范围(0~255) 微小整数
int 4字节 大整数
float 4字节 单精度浮点数(小数)
double 8字节 双精度浮点数(小数)
1)整数型:指定的宽度仅显示宽度,存数值的大小由类型决定,数值不够指定宽度时,
在左边填空格补位
2)浮点型:定义格式:float(总宽度,小数位数)
当字段值与类型不匹配时,字段值作0处理
当数值超出范围,进保存最大/最小值
2.字符类型:
1)定长:char(字符数) 最大长度255字符
不够指定字符数时,在右边用空格补齐
字符数超出范围时,无法写入数据
2)变长:varchar(字符数)
按实际大小分配储存空间
字符数超出范围时,无法写入数据
3)大文本类型:text/blob
字符数大于36635储存使用
3.日期时间类型:
年 year YYYY 2017
日期date YYYYMMDD 20170713
时间 time hhmmss 155548
日期时间
timestamp yyyymmddhhmmss 20170713155548
datetime yyyymmddhhmmss 20170713155548
时间函数
year() date() month() day() time() now()
年 日期 月 几号 时间 当前日期时间
create table t8(
name char(5),
homeaddr varchar(20),
age tinyint unsigned,
pay float(7,2),
s_year year,
birthday date,
up_time time,
meettint datetime
);
yesr 2017
date 20170713
time 163600
datetime 20170713163700
mysql>select year(20190823);
mysql>select now();
mysql>select year( now() );
mysql>select month( now() );
等等。。。。
insert into t8 values("lucy","shanghai",21,18880,year(20130918),date
(now()),time(now()),now() );
4.枚举类型:从给定的集合中选择值,分两种:
1)选择单个值:
create table t1(
name enun("lisi","zhangsan")
);
2)选择多个值:
create table t1(
class set("nsd","it","uid")
);
-------------------------------------------------------------------------------------------------------------------------------------
三.表格结构的调整
1.修改表的字段:alter table 表名 执行动作;
1)添加新字段:add 字段名 类型(宽度) 约束条件; (可以选择位值,after 字段名,first)
alter table t4 add name char(4) not null after pay;
2)删除字段:drop 字段名;
alter table t4 drop name;
3)修改字段类型:modify 字段名 新类型(宽度) 约束条件; (可以用来修改位值)
alter table t4 modify pay int(4) not null default 2000 after age;
4)修改字段名:change 源字段名 新字段名 类型(宽度) 约束条件;
alter table t4 change pay name int(4);
2.修改表名:alter table 源表明 rename 新表名;
一.MySql 索引类型
优点:可以创建唯一性索引,保证数据每一行的唯一性;
缺点:改变数据时,索引也要对应变化,降低维护速度;索引需要占用物理空间;
1.index普通索引:
可以有多个index字段,字段允许有重复;标志是key--> MUL
1)建表的时候指定索引字段
create table 表名(
字段 类型(宽度) 约束条件;
index(字段),index(字段)
);
2)在已有表中设置index字段
create index 索引名 on 表名(字段名);
3)删除索引
drop index 索引名 on 表名;
4)查看索引信息,两种方法:
show index from 表名\G;
2.主键primary key
只能有一个primary key字段,key标志---> pri
对应的字段值不允许有重复,且不允许赋null
primary key 与 auto_increment 连用字段的值自动增长i++
如果有多个字段都位primary key 则称位“复合主键”
1)建表的时候指定索引字段
create table 表名(
字段 类型(宽度) 约束条件;
primary key(字段)
);
或
create table 表名(
字段 类型(宽度) 约束条件 primary key;
);
2)在已有表里创建
alter table 表名 add primary key(字段);
3)删除primary key字段
alter table 表名 drop primary key;
4)复合主键的使用
建表时创建
create table db1.xfb(
name char(10),
class char(7),
pay enum("yes","no") default "no",
primary key(name,class)
);
在已有表里添加复合主键。
alter table 表名 add primary key(字段名列表);
删除复合主键 alter table 表名 drop primary key;
5)primary key 与 auto_increment 连用
create table t1(
id int(2) zerofill primary key auto_increment
);
3.unique 唯一索引
可以有多个unique字段 key标志---> uni
对应字段值不可以重复,可以位null,如果将其修改为not null,则此字段限制与主键相同
1)建表的时候指定unique字段
create table 表名(
字段 类型(宽度) 约束条件;
unique(字段),unique(字段)
);
2)在已有表中创建
create unique index 索引名 on 表名(字段名);
3)删除
drop index 索引名 on 表名;
4.foreign key 外键
1)创建外键
foreign key(字段名) references 表名(字段名)
on update cascade on delete cascade
2)在已有表里创建外键
alter table bjb add foreign key(bjb_id) references jfb(jfb_id)
on update cascade on delete cascade
3)删除外键
alter table 表名 drop foreign key 外键;
4)查看外键名称 show create table 表名;
总结外键:外键是关联其他表作为自己表的参考限制,启到一定约束作用;
外键表的储存引擎必须是innodb才可以,被参照的字段必须是索引类型的一种(一般为主键),当被关联的字段发生变化时,自己的表也会同时改变;被关联表的字段无法被删除;
MySQL存储引擎
1.一个为mysql服务自带的功能程序,引擎;还有一个时表自己的引擎;
2.查看表使用的存储引擎 show create table 表名;
3.查看mysql服务使用的引擎show engines;
4.服务的引擎就是表创建时默认的引擎
5.修改表使用的引擎alter table 表名 engines=引擎名
6.建表时指定表使用的存储引擎?
create table 表名(
字段名列表
.....
)engine=存储引擎名;
7.修改服务引擎
vim /etc/my.cnf
[mysqld]
default-storage-engine=引擎
8.生产环境中常用存储引擎及特点
myisam特点:支持表级锁,不支持外键 、事务、事务回滚;接收查访问多的表,适合使用myisam存储引擎,节省系统资源
innodb特点:支持行级锁、 外键 、事务、事务回滚,接收写访问多的表,适合使用innodb存储引擎,并发访问量大。(事务回滚:事务执行过程,任意一步执行不成功,会恢复所有的操作。)
9.锁的作用:解决并发访问的冲突问题
1.数据导入,要注意,只能从指定默认路径里导入(需关闭selinux) :
load data infile “指定目录名/文件名” into table 库.表 fields terminated by “列的间隔符号” lines terminated by “行的间隔符号”
2.查看导入数据时,指定的系统的目录:
show variables like “secure_file_priv”
3.修改导入数据时,指定的系统的目录:(记着要给自己设置的文件一个权限)
vim /etc/my.cnf
[mysqld]
secure_file_priv=”自己指定路径”
4.数据导出:
select 字段 from 表 条件 into outfile “目录名/文件名” fields terminated by “列隔符号” lines terminated by “行间隔符号”;
-------------------------------------------------------------
管理表记录(增 删 改 查)
1.给表字段赋值:
insert into 表名 values(值),(值);
2.查询表记录
select 字段名 from 表名 where 匹配条件;
3.匹配条件的表示方式:
数值比较:= , != , < ,> , <=,>=
字符比较:=, !=
范围内匹配:
where 字段名 between 值1 and 值2; 在。。。之间
in (列表值); 在。。。里
not in ()
4.逻辑匹配:
逻辑与 and 条件都成立才可以
逻辑或 or 某一个条件成立就可以
逻辑非 ! 取反(select name,uid from user where name!="lucy";)
5.匹配空 is null (select id ,name,shell from user where shell is null;)
匹配非空 is not null
6.distinct 查询时,字段的重复值不显示,只显示第一次出现的值;
select distinct shell from user;
7.查询时作运算操作+ - * / %
select uid,gid,uid+gid as sum,(uid+gid)/2 as avg from user;
8.糢糊查询 like
where 字段名 like ‘表达式’
% 表示0个或多个字符
_ 表示一个字符
select id,name from user where name like ‘%a’;
select name from user where name like ‘____’;
9.正则匹配:. ^ $ [ ] *
where 字段名 regexp ‘正则表达式’
select name from user where name regexp ‘[0-9]’
select name from user where name regexp '^[0-9]';
select name,uid from user where name regexp '^r.*t$';
10.统计函数(对字段的值作统计)
sum(字段)求和
avg(字段)求平均值
max(字段)求最大值
min(字段) 求最小值
count(字段) 统计个数
select avg(uid) from user where sex="girl";
select avg(uid) ,sum(uid) from user;
select min(uid),max(uid) from user;
select count(id) from user;
select count(name) from user;
select count(name),count(id) from user;
select count(name) from user where uid >1000;
11.查询结果分组(和distinct 查询差不多)
sql查询 group by 字段名;
select shell from user where uid<=100 group by shell;
12.查询结果排序
sql查询 order by 字段名 asc(从小到大)/desc;默认为asc
select name,uid from user where uid<100 order by uid desc;
13.查询结果限制显示记录行数
sql查询 limit 数字 ;显示查询结果的前几行;(注意行数从0开始)
select id,name,uid,shell from user where id<=10 limit 2,3;
select id,name,uid,shell from user where id<=10 limit 2;
14.总结:
条件匹配:
数值比较 = != > >= < <=
字符比较 = !=
逻辑比较 and or !
范围内匹配 between...and \ in \ not in
空 is null
非空 is not null
模糊查询 like '表达式' % _
正则匹配 regexp '正则表达式' . ^ $ [] *
数学计算 + - * / % ( )
统计函数 sum() avg() max() min() count()
不显示字段的重复值 distinct 字段名
查询分组 group by 字段名
查询排序 order by 字段名 asc/desc
限制显示查询记录的行数 limit 数字;
limit 数字1,数字2; limit 0,1
limit 2,2
1.修改表记录字段的值
update 库.表 set 字段名=“值” where 条件;
update studb.user set uid=uid+5 where uid<10;
2.删除表记录
删除全部表记录 delete from 库.表;
删除指定的记录 delete from 库.表 where 条件;
3.where嵌套:把内层查询结果作为外查询的查询条件
select 字段名列表 from 库.表 where 条件 (select 字段名列表 from 库.表 where 条件);
select name ,liunxsys from user where uid>=10 and uid<=50 and liunxsys < (select avg(liunxsys) from user where uid>=10 and uid<=50);
select name from studb.user where name in (select user from mysql.user where host="localhost" and user="root");
4.复制表:
命令格式 create table 库.表 sql查询;
create table studb.user2 select * from studb.user;
create table studb.user3 select * from studb.user order by uid desc limit 5;
5.多表 查询
select t1.name,t1.uid,t2.homedir from t1,t2;
select t1.*,t2.homedir from t1,t2 where t1.name = t2.name and t1.uid = t2.uid;
6.连接查询
左连接查询
select 字段名列表 from 表A left join 表B on 条件;
右连接查询
select 字段名列表 from 表A right join 表B on 条件;
一 、管理root用户密码(*操作系统管理员有权限管理)
1. 修改本机登录密码
#mysqladmin -hlocalhost -uroot -p password "新密码"
2. 恢复本机登录密码(忘记密码这样操作)
#vim /etc/my.cnf
[mysqld]
skip-grant-tables
#validate_password_policy=0
#validate_password_length=6
wq
mysql>update mysql.user set authentication_string=password("123456") where host="localhost" and user="root";
mysql> flush privileges;
#vim /etc/my.cnf
[mysqld]
#skip-grant-tables
validate_password_policy=0
validate_password_length=6
3.授权用户登录后,修改自己的登录密码?
SET PASSWORD=PASSWORD("新密码");
数据库管理员重置授权用户的登录密码?
SET PASSWORD
FOR 用户名@'客户端地址'=PASSWORD('新密码');
二、用户授权与权限撤销
1.授权 (在数据库服务器上添加新的连接用户)
授权命令语法格式
mysql> grant 权限列表 on 库名 to 用户名@"客户端地址" identified by "密码" with grant option;
权限列表:
all
select ,insert ,update(字段名)
usage
库名:
*.*
库名.*
库名.表名
用户名 : 连接数据库服务器时使用的名字授权时自定义即可要有标识
客户端地址:
%
192.168.4.12
192.168.4.%
pc100.tedu.cn
%.tedu.cn
localhost
identified by "密码" 登录密码
with grant option 有授权权限 (可选项)
2.mysql>select @@hostname; 查看所连数据库主机名
mysql> select user(); 查看当前数据库登陆的用户
mysql> show processlist ; 服务器端显示当前运行的程序访问用户的信息
show grants for 用户名@"客户端地址"; 查看已有的授权用户访问权
3.撤销权限(数据库服务器上执行)
MySQL> revoke 权限 on 库名 from 用户名@"客户端地址";
mysql> revoke grant option on *.* from root@'%';
mysql> show grants for root@'%';
4.删除授权用户:
mysql> delete from mysql.user where user="root" and
host="192.168.4.254"; flush privileges;
mysql> drop user root@"192.168.4.254";
---------------------------------------------------
默认的4个库
sys
information_schema 虚拟库
performance_schem
mysql 授权库(存储授权信息)
mysql.user 存储已有的授权用户
mysql.db 存储授权用户对库的访问权限
mysql.tables_priv 存储授权用户对表的访问权限
mysql.columns_priv 存储授权用户对字段的访问权限
----------------------------------------------------------------
三 安装mysql服务图形管理工具
phpmyadmin
#yum -y install httpd php php-mysql
#tar -zxvf phpMyAdmin-2.11.11-all-languages.tar.gz -C /var/www/html/
#cd /var/www/html/
#mv phpMyAdmin-2.11.11-all-languages phpmyadmin
#cd /var/www/html/phpmyadmin
#cp config.sample.inc.php config.inc.php
#vim config.inc.php
17 $cfg['blowfish_secret'] = 'plj123';
31 $cfg['Servers'][$i]['host'] = 'localhost';
:wq
客户端访问
#ping 192.168.4.55
#firefox http://192.168.4.55/phpmyadmin
一.数据备份与恢复
1.数据备份方式:
物理备份:直接拷贝库后表对应的文件。
cp -r /var/lib/mysql/mysql /opt/mysql.bak
tar -zcvf /opt/mysql.tar.gz /var/lib/mysql/mysql/*
逻辑备份:执行备份命令时,根据已有的库、表、记录生成对应的sql命令,把sql命令保存到指定的文件里。
2.备份策略
完全备份:备份所有数据(一台服务器 一个库 一张表)
增量备份:备份"上一次"后,所有新产生数据
差异备份:备份自"完全备份"后,所有新产生数据。
3.完全备份:备份所有数据(一台服务器 一个库 一张表)
mysqldump -uroot -p123456 数据库名 > 目录名/名.sql
数据库名表示方式?
--all-databases 一台服务器
库名 一个库
库名 表名 一张表
-B 库名1 库名2 库名n 一起备份多个库
恢复数据:
#mysql -uroot -p123456 数据库名 < 目录名/名.sql
编写完全备份脚本
#mkdir /shell
#vim /shell/allteadb.sh
#!/bin/bash
day=`date +%F`
if [ ! -e /mydata ];then
mkdir /mydata
fi
mysqldump -uroot -p123456 teadb > /mydata/${day}-
teadb.sql
:wq
#chmod +x /shell/allteadb.sh
#crontab -e
00 03 * * 1 /shell/allteadb.sh
:wq
#/shell/allteadb.sh
#ls /mydata
增量备份
一、启用binlog日志 实现 实时增量备份
1. binlog日志介绍:二进制日志, 是MySQL数据库服务日志文件中的一种,记录执行的除查询之外的sql命令。默认没有启用。
2. 启用binlog日志
vim /etc/my.cnf
[mysqld]
server_id=50 #1-255
log-bin
binlog-format="mixed" #ROW
....
:wq
#systemctl restart mysqld
日志文件默认存储位置: 数据库目录 /var/lib/mysql/
日志文件的默认名称:主机名-bin.编号 500M
日志索引文件 host50-bin.index
3 查看日志文件内容
#mysqlbinlog 目录名/日志文件名
#mysqlbinlog /var/lib/mysql/host50-bin.000001
4 自定定义日志文件的名字和存储目录
#mkdir /logdir
#chow mysql /logdir
#setenforce 0
#vim /etc/my.cnf
[mysqld]
server_id=50 #1-255
#log-bin
log-bin=/logdir/plj
binlog-format="mixed"
....
:wq
#systemctl restart mysqld
#ls /logdir/
5 日志文件记录sql命令的方式
时间点
--start-datetime="yyyy-mm-dd hh:mm:ss"
--stop-datetime="yyyy-mm-dd hh:mm:ss"
偏移量(pos)
--start-position=数字 --stop-position=数字
6 执行日志文件内的sql命令恢复数据
#mysqlbinlog [选项] 目录名/日志文件名 | mysql -uroot -p123456
mysqlbinlog --start-position=293 --stop-position=1490 /logdir/plj.000001 | mysql -uroot -p123456
7 手动创建新的binlog日志文件
mysql> flush logs;
#mysql -uroot -p123456 -e "flush logs"
#mysqldump -uroot -p123456 --flush-logs db4 > /root/db4.sql
8 删除已有的binlog日志文件
mysql> reset master;
mysql> purge master logs to "日志文件名";
mysql> purge master logs to "plj.000006";
二、使用第3方软件提供的命令做增量备份---
1 percona 介绍:
Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写)
Xtrabackup有两个主要的工具:xtrabackup、innobackupex
(1)xtrabackup只能备份InnoDB和XtraDB两种数据表,而不能备份MyISAM数据表
(2)innobackupex-1.5.1则封装了xtrabackup,是一个脚本封装,所以能同时备份处理innodb和myisam,但在处理myisam时需要加一个读锁
2.安装percona
#yum -y install perl-Digest-MD5 perl-DBD-MySQL
#rpm -ivh libev-4.15-1.el6.rf.x86_64.rpm
#rpm -ivh percona-xtrabackup-24-2.4.7-1.el7.x86_64.rpm
3.命令语法格式:
#innobackupex <选项>
选项?
--user 用户名
--password 密码
--databases 库名
--no-timestamp 不使用系统日期做备份目录的子目录名
--apply-log 恢复日志
--copy-back 恢复数据
A、使用innobackupex命令只做完全 和完全恢复?
A.1 完全备份
#innobackupex --user root --password 123456 --databases="mysql performance_schema sys db66" /allbak --no-timestamp
#ls /allbak
A.2 完全恢复
#innobackupex --user root --password 123456 --databases="mysql performance_schema sys db66" --apply-log /allbak
#rm -rf /var/lib/mysql
#mkdir /var/lib/mysql
#innobackupex --user root --password 123456 --databases="mysql performance_schema sys db66" --copy-back /allbak
#ls /var/lib/mysql
#chown -R mysql:mysql /var/lib/mysql
#systemctl stop mysqld
#systemctl start mysqld
#mysql -uroot -p123456
mysql> show databases;
/var/lib/mysql
++++++++++++++++++++++++++++++++++++++
增量备份
--incremental 目录名 #增量备份数据存储目录
--incremental-basedir=目录名 #上次备份数据存储目录
1 先要有一次完全备份 /onedir
#innobackupex --user root --password 123456 --databases="mysql performance_schema sys db66" /onedir --no-timestamp
2 增量备份
第一次增量备份 存储目录/new1dir
#innobackupex --user root --password 123456
--databases="mysql performance_schema sys db66"
--incremental /new1dir --incremental-basedir=/onedir --no-timestamp
第二增量备份数据存储的目录 /new2dir
#innobackupex --user root --password 123456
--databases="mysql performance_schema sys db66"
--incremental /new2dir --incremental-basedir=/new1dir --no-timestamp
增量备份的工作原理:
innobackupex 命令 -----> innodb 存储引擎的表
数据库目录/var/lib/mysql 下
事务日志文件 记录 执行的sql 操作 和 数据信息
ib_logfile1 ib_logfile0 ibdata1
LSN 日志序列号
备份目录的文件说明: /onedir /new1dir /new2dir
cat xtrabackup_checkpoints
xtrabackup_logfile
增量恢复(要求数据库目录必须是空的)
--redo-only 合并日志
--incremental-dir=目录名 #增量恢复时,指定使用哪个备份目录的恢复数据。
1 #rm -rf /var/lib/mysql
2 恢复日志
#innobackupex --user root --password 123456
--databases="mysql performance_schema sys db66"
--apply-log --redo-only /onedir
#innobackupex --user root --password 123456
--databases="mysql performance_schema sys db66"
--apply-log --redo-only /onedir --incremental-dir=/new1dir
#innobackupex --user root --password 123456
--databases="mysql performance_schema sys db66"
--apply-log --redo-only /onedir --incremental-dir=/new2dir
3 恢复数据
#innobackupex --user root --password 123456
--databases="mysql performance_schema sys db66"
--copy-bak /onedir
4 修改文件所有者
# chown -R mysql:mysql /var/lib/mysql
5 重启数据库服务
#systemctl restart mysqld
6 查看数据
#mysql -uroot -p123456
mysql>
++++++++++++++++++++++++++++++++++++++++
恢复完全备份数据中的某张表
innobackupex 命令信息:
--export 导出表信息
import 导入表空间
删除表空间
mysql> alter table 库.表 discard tablespace;
db66.a
db66.b
完全备份:
#innobackupex --user root --password 123456
--databases="db66" /db66bak --no-timestamp
#ls /db66bak
mysql> use db66;
mysql> drop table a;
mysql> create table a(id int);
#ls /var/lib/mysql/db66/
a.frm a.ibd
导出表信息
#innobackupex --user root --password 123456
--databases="db66" --apply-log --export /db66bak
#ls /db66bak/db66/
删除表空间
mysql> alter table db66.a discard tablespace;
#ls /var/lib/mysql/db66/
把备份目录下导出的表信息文件拷贝到数据库目录下
# cp /db66bak/db66/a.{cfg,exp,ibd} /var/lib/mysql/db66/
# chown mysql /var/lib/mysql/db66/a.*
导入表空间
mysql> alter table db66.a import tablespace;
mysql> select * from a;
mysql> select * from b;
++++++++++++++++++++++++++++++++++++++++
innobackupex 增量备份
选项:
--user --password --databases
--incremental
--incremental-basedir
--apply-log --redo-only --incremental-dir
--export import
mysql> alter table 库.表 discard tablespace;
完全备份完全恢复
增量备份增量恢复 (增量备份原理)
使用完全备份文件恢复某张表的数据
mysql主从同步
一.主服务器配置:
1.用户授权,在主服务器上给从服务器授权
mysql> grant replication slave on *.* to yaya@"192.168.4.55" identified by "123456";
2.启用binlog日志(主服务器)
vim /etc/my.cnf
server_id=54
log-bin=master54
binlog-format="mixed"
3.重启数据库服务器
4 查看正在使用binlog日志文件。
mysql> show master status;
二.从库角色主机的配置
1.显示自己是否是从数据库服务器
mysql> show slave status;
2.测试主库授权的用户是否有效
#mysql -h192.168.4.54 -uyaya -p123456
mysql> show grants;
mysql> quit
3.修改配置文件指定server_id
#vim /etc/my.cnf
[mysqld]
server_id=55
:wq
#systemctl restart mysqld
4.在本机数据管理员登录指定主库信息。
mysql> change master to
-> master_host="192.168.4.54",
-> master_user="yaya",
-> master_password="123456",
-> master_log_file="master54.000001",
-> master_log_pos=154;
mysql> start slave;
mysql> show slave status\G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
验证主从同步配置:结果
客户端连接主库服务器 产生的新数据,在从角色的主机上都能够查看到。
5.主从工作原理
IO线程: 把master 库的 binlog日志内容 记录到本机的relay-binlog日志里。
SQL线程:执行本机relay-binlog日志里的sql命令 把数据写进本机的库。
从角色主机的数据库目录下会多出如下文件:
master.info 存储主数据库的信息
slave55-relay-bin.XXXXXX
中继日志文件 记录本机产生新数据的sql命令
slave55-relay-bin.index 中继日志文件索引文件
relay-log.info 记录当前数据库服务器使用的中继日志文件
6.主从同步配置排错,修改配置的时候要先stop slave
IO线程报错: 从库指定主库的信息错误; 安全限制(firewall selinux);
7.把从库 还原成独立的数据库服务器?
#rm -rf master.info slave55-relay-bin.* relay-log.info
#systemctl restart mysqld
# mysql> show slave status;
8.主库角色主机的配置参数
[mysqld]
binlog_do_db=数据库名,数据库名 #只允许同步的库
binlog_ignore_db=数据库名,数据库名 #只不允许同步的库
mysql> show master stauts;
9.从库角色主机的配置参数
[mysqld]
log_slave_updates 级联复制
replicate_do_db=数据库名,数据库名 #只同步的库
replicate_ignore_db=数据库名,数据库名 #只不同步的库relay_log=文件名 #设置中继日志文件名称
一.数据读写分离:把客户的查询记录的操作和写数据的操作在不同的数据库服务器上执行。
减轻单台数据库服务器的并发访问压力和提供服务器硬件资源的利用率。
1.实现读写分离要安装第三方软件maxscale
libev-4.15-1.el6.rf.x86_64.rpm 依赖包
maxscale-2.1.2-1.rhel.7.x86_64.rpm
2.修改配置文件
vim /etc/maxscale.cnf
9 [maxscale]
10 threads=1
18 [server1]
19 type=server
20 address=192.168.4.54
21 port=3306
22 protocol=MySQLBackend
23
25 [server2]
26 type=server
27 address=192.168.4.55
28 port=3306
29 protocol=MySQLBackend
38 [MySQL Monitor]
39 type=monitor
40 module=mysqlmon
41 servers=server1, server2
42 user=scalemon # 监控数据库服务服务的运行状态和主从状态
43 passwd=123456
44 monitor_interval=10000
66 [Read-Write Service]
67 type=service
68 router=readwritesplit
69 servers=server1, server2
70 user=maxscale #检查接收客户端连接请求时,连接的用户名和密码在数据库服务器上是否存在
71 passwd=123456
72 max_slave_connections=100%
78 [MaxAdmin Service]
79 type=service
80 router=cli
94 [Read-Write Listener]
95 type=listener
96 service=Read-Write Service
97 protocol=MySQLClient
98 port=4006
100 [MaxAdmin Listener]
101 type=listener
102 service=MaxAdmin Service
103 protocol=maxscaled
104 socket=default
105 port=4010
3.根据配置文件的设置在数据库服务器上添加对应的授权用户。
mysql> grant replication slave, replication client on *.* to scalemon@'%' identified by "123456";
mysql> grant select on mysql.* to maxscale@'%' identified by "123456";
4.启动服务
[root@003 ~]# maxscale -f /etc/maxscale.cnf
[root@003 ~]# netstat -utnalp | grep :4010
[root@003 ~]# netstat -utnalp | grep :4006
5.访问本机的管理服务 查看监控主机的状态
[root@003 ~]# maxadmin -P4010 -uadmin -pmariadb
MaxScale>list servers
6.停止maxscale 服务
#ps -C maxscale
#kill -9 pid号
7.在客户端测试配置
#mysql -P4006 -h192.168.4.53 -ustudent -p123456
三. mysql优化
1 硬件配置低:查看应用设备的使用率CPU 内存 存储(硬盘)
top uptime free -m wa
2. 网络带宽: 使用网络测速软件 网速
3. 提供数据库服务软件版本低:
查看数据库服务运行时的运行参数配置(常用配置参数)
a. 建立连接时,三次握手的超时时间connect_timeout
建立连接后,等待断开连接的超时时间 wait_timeout
mysql> show variables like "connect_timeout";
mysql> show variables like "wait_timeout";
b.允许重复使用的线程的数量
mysql> show variables like "thread_cache_size";
c.为所有线程缓存打开表的数量。
mysql> show variables like "table_open_cache";
d.查询缓存相关参数设置
MySQL> show variables like "query_cache%";
e.查询缓存写锁有效 存储引擎(MYISAM)
query_cache_wlock_invalidate | OFF
query_cache_type 0|1|2
0 关闭 不存储
1 开启 无条件存储
2 开启 指定存储才存储
f.查询查询缓存统计信息
MySQL> show global status like "qcache%";
Qcache_hits 0
Qcache_inserts 0
Qcache_lowmem_prunes 0
g.并发连接数:
mysql> show variables like "max_connections";
曾经有过的最大连接数
mysql> show global status like "Max_used_connections";
公式:
曾经有过的最大连接数/并发连接数=0.85 * 100% = 85%
3000/ X = 0.85
3.查看参数的值
MySQL> show variables like "%关键字%";
mysql> show variables like "%password%";
mysql> show variables like "old_passwords";
临时定义 mysql> set [global] 变量名=值;
永久定义
vim /etc/my.cnf
[mysqld]
变量名=值
....
4 程序编写的查询数据库的sql查询命令不合理 ,导致数据库处理慢
在数据库服务器上启用"慢查询日志":记录超过指定时间显示查询结果的sql命令.
5 数据存储架构设置有数据传输瓶颈。
部署MySQL高可用集群
高可用集群介绍: 主备模式 当主不能提供服务的时候备用主机接替它提供服务,这个过 程对于客户端是透明的。
一 配置MySQL主从同步
主主结构
主从从
一主多从
二配置MySQL-mmm perl
mmm_monitor 监控服务 运行在管理节点主机上。
mmm_agentd 代理服务 运行在所有的数据节点主机上。
writer-vip : 192.168.4.100
read -vip : 192.168.4.101/102
2.1 在所有主机上安装mysql-mmm-2.2.1.tar.gz软件包
#yum -y install perl-*
#unzip mysql-mmm.zip
#cd mysql-mmm
#tar -zxf mysql-mmm-2.2.1.tar.gz
#cd mysql-mmm-2.2.1
#make install
#ls /etc/mysql-mmm/
mmm_agent.conf //mmm_agentd服务主配置文件
mmm_common.conf //公共配置文件(管理主机和数据节点主机)
mmm_mon.conf //mmm_monitor服务主配置文件
mmm_tools.conf
2.2 修改配置
2.2.1 修改数据节点主机mmm_agentd服务的配置文件
#vim /etc/mysql-mmm/mmm_agent.conf
include mmm_common.conf
this 主机名 (master51)
2.2.2 修改管理节点主机mmm_monitor服务的配置文件
# vim /etc/mysql-mmm/mmm_mon.conf
include mmm_common.conf
<monitor>
ip 192.168.4.55
pid_path /var/run/mmm_mond.pid
bin_path /usr/lib/mysql-mmm/
status_path /var/lib/misc/mmm_mond.status
ping_ips 192.168.4.51, 192.168.4.52, 192.168.4.53, 192.168.4.54
</monitor>
<host default>
monitor_user monitor
monitor_password 123456
</host>
debug 0
[root@005 ~]#
1.passwd -S tom 查看tom的密码信息
2.chage -l tom 查看详细信息
3.passwd -l tom 锁定用户
4.passwd -u tom 解锁用户
5.grep tom /etc/shadow 在文件中查看密码
6.chage -d 0 tom 修改最近一次修改密码的时间(首次登陆用户必须修改密码)
7.chage -E 2018/01/31 tom 修改密码过期时间
8.grep -v "^#" /etc/login.defs 查看默认配置文件
9.ls /etc/skel/ -a 用户家目录默认环境模版文件(-a显示隐藏文件(根据需要可添加文件)
10.隐藏内核和操作系统信息
本地连接:cat /etc/issue (修改里面内容)
网络连接:cat /etc/issue.net
11.修改历史记录记录条数
sed -i '45s/1000/500/' /etc/profile
source /etc/profile 刷新文件,生效
cat ~/.bash_history 查看历史命令
12.给历史命令添加执行时间
临时生效:#HISTTIMEFORMAT='%F %T '
永久生效的全局配置:vim/etc/profile
....
export HISTTIMEFORMAT='%F %T'
13.mount挂载defaults的选项应用
命令行挂载 mount -t 文件系统类型 选项 分区名 目录名
defaults默认挂载 包括哪些挂载项?
#man mount 搜索defaults
defaults
Use default options: rw, suid, dev, exec, auto,
nouser, and async.
suid 允许在挂载目录下执行suid 和sgid权限的文件
exec 允许在挂载目录下执行二进制文件
1)nosuid不允许在挂载目录下执行suid和sgid权限文件
noexec不允许在挂载目录下执行二进制文件
14.给文件加特殊属性(加锁 解锁)
i 对文件没有移动 编辑 删除的权限
a 只能一追加的方式访问
查看 lsattr 文件名
添加 chattr +属性 文件名
删除 chattr -属性 文件名
chattr +i /etc/passwd
chattr +a /etc/passwd
15.用户切换
su 切换到root用户
su - 用户
su 用户 只切换到用户的身份,不切换到用户的环境
su - -c "命令" 用户 切换到用户身份后执行命令
16.用户提权:/etc/sudoers
用户提权: 系统root用户让系统的普通用户可以执行自己可以使用的命令。
用户名 主机名列表=命令列表 // 给单个用户提权
%用户组 主机名列表=命令列表 //给用户组用提权
*命令列表中的命令,必须要写命令的绝对路径
#vim /etc/sudoers
webadmin localhost, host50=/usr/bin/systemctl * httpd, /usr/bin/ vim /etc/httpd/conf/httpd.conf, NOPASSWD: ALL
mike localhost,host50=/sbin/*, !/sbin/ifconfig eth0
:wq!
%webgrp localhost, host50=/usr/bin/systemctl * httpd, /usr/bin/ vim /etc/httpd/conf/httpd.conf
验证时:
sudo -l 查看权限并验证
sudo + 绝对命令
17.使用别名提权
定义用户别名
User_Alias 别名名称 = 用户名列表
User_Alias HTTPUSERS = webamdin, webadmin2
定义主机别名
Host_Alias 别名名称 = 主机名列表
Host_Alias MYPC=localhost, host50
定义命令别名
Cmnd_Alias 别名名称 = 命令列表
Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum
用户别名名称 主机别名=命令别名名称
HTTPUSER MYPC=SOFTWARE
启用日志记录提权用户执行过的命令
vim /etc/sudoers
Defaults logfile="/var/log/sudo"
18.ssh服务访问控制:
vim /etc/ssh/sshd_config
17 Port 22022 (访问端口)
19 ListenAddress 192.168.4.51 (访问这个ip)
配置白名单:
AllowUsers 用户名1 用户名2@客户端地址
AllowGroups 用户组名1 用户组名2
配置黑名单 : 只有在黑名单列表里的用户不可以访问
DenyUsers 用户名1 用户名2@客户端地址
DenyGroups 用户组名1 用户组名2
19.配置ssh服务仅允许密钥对认证登录
1)创建密钥对: ls ~/.ssh/
[root@room9pc17 ~]#rm -rf ~/.ssh
[root@room9pc17 ~]#ssh-keygen // 创建密钥对
[root@room9pc17 ~]# ls ~/.ssh/
id_rsa id_rsa.pub
2)ssh-copy-id root@192.168.4.50 //上传密钥对
3)client端禁用密码认证登录
vim /etc/ssh/sshd_config
81 PasswordAuthentication no //禁用密码认证登录
:wq
#systemctl restart sshd
1.sestatus 查看当前系统selinux的状态
2. 查看安全上下文
查看进程 ps aux -Z
查看文件 ls -lZ 文件名
查看目录 ls -ldZ 目录名
3.安全上下文的组成
system_u:object_r:net_conf_t:s0
用户:角色:访问类型:参数
4.SELinux启用后的一般操作规律:
创建新文件时,新文件继承父目录的安全上下文。
移动文件时,保持原有的安全上下文不变
拷贝文件时,继承目标目录的安全上下文
5.修改访问类型
]# chcon -R -t 访问类型 目录名 //递归修改
]# chcon -t 访问类型 文件名
]# chcon -t httpd_sys_content_t /var/www/html/test1.html
6.恢复文件访问类型?
]# restorecon -R 目录名 //递归恢复
]# restorecon 文件名
]# restorecon /var/www/html/test2.html
7.selinux布尔值 (功能开关)
查看bool值
#getsebool -a
#getsebool -a | grep -i ftp
修改bool值
#setsebool -P 选项=1|0
#setsebool -P 选项 on|off
8.配置vsftpd服务允许匿名ftp用户, 可以上传和下载文件
1)装包vsftpd
2)修改配置文件
sed -n '29p' /etc/vsftpd/vsftpd.conf anon_upload_enable=YES 开启上传功能
3)创建共享文件
mkdir /var/ftp/shardir
chmod o+w /var/ftp/shardir
systemctl restart vsftpd
4)修改seliunx
setsebool -P ftpd_anon_write=1
setsebool -P ftpd_full_access on
5)客户端
安装访问ftp软件:yum -y install ftp
lcd 切换到本机目录
get 下载
put 上传
6)启用selinux日志程序记录报错信息:
cat /var/log/messages
[root@host50 ~]# sealert -l a9db74ee-ff0d-45c7-8a4d-34d4bf5bc3c4
1.数据 加密 解密 方式:
对称加密: 加密和解密使用相同的计算规则
非对称加密:加密和解密使用不相同的计算规则
对称加密算法: DES AES
非对称加密算法: RSA DSA
Hash散列技术,保证数据的完整性。 md5sum shasum
2.gpg 对称加密
加密 gpg -c 文件名
解密 gpg -d 文件名
3.gpg 非对称加密(使用密钥对)
1) 创建密钥对 ~/.gnupg/
#gpg --gen-key
#ls ~/.gnupg/
2) 导出公钥 并把公钥文件传给usera
[userb@room9pc17 ~]$ gpg --export -a > /tmp/userb.pub
[ userb@room9pc17 ~]$ cat /tmp/userb.pub
usera(加密)
3) 导入公钥文件~/.gnupg
[usera@room9pc17 ~]$ gpg --import /tmp/userb.pub
[usera@room9pc17 ~]$ ls ~/.gnupg
4) 使用公钥加密文件 ,把加密后的文件给userb
[usera@room9pc17 ~]$ gpg -e -r usera b.txt
[usera@room9pc17 ~]$ mv b.txt.gpg /tmp/
5) userb解密
调用私钥解密 解密文件
[userb@room9pc17 ~]$ gpg -d /tmp/b.txt.gpg > u.txt
cat u.txt
4.gpg数字签名 功能验证数据完整性
userb
私钥签名
vim c.txt
gpg -b c.txt
ls c.*
cp c.* /tmp/
gpg --fingerprint
usera
公钥验证签名
#gpg --verify /tmp/c.txt.sig
#cat /tmp/c.txt
root# sed -i '1s/^/aaa/' /tmp/c.txt
usera
#cat /tmp/c.txt
#gpg --verify /tmp/c.txt.sig
抓包与扫描
一.nmap扫描软件
1.装包:yum -y install nmap
2.作用:
1):探测一组主机是否在线
2):扫描 主机端口,嗅探所提供的网络服务
3):推断主机所用的操作系统
3.功能参数:man nmap 参考
语法格式:nmap [扫描类型] [选项] <ip地址>
扫描类型:
⑴ TCP connect()端口扫描(-sT参数)。
⑵ TCP同步(SYN)端口扫描(-sS参数)。
⑶ UDP端口扫描(-sU参数)。
⑷ Ping扫描(-sP参数)。
选项有哪些: -A -n -p
ip地址表示方式:
192.168.4.53
192.168.4.100-200
192.168.4.53,57,68
应用:
# nmap -n -sP 172.40.55.100-200 --excludefile /root/ip.txt
脚本:
vim /root/web.sh
#/bin/bash
for ip in 180 143 158
do
nmap -n -sS -p 80 172.40.55.$ip | grep -q open
if [ $? -eq 0 ];then
echo " 172.40.55.$ip 80 open"
else
echo " 172.40.55.$ip 80 closed"
fi
done
:wq
把这个脚本变成系统可执行的命令
1):#mkdir /myself
#mv /root/web.sh /myself/checkweb
#chmod +x /myself/checkweb
2):vim /etc/profile
....
export PATH=/myself:$PATH
:wq
#resource /etc/profile
#echo $PATH
#cd /usr/local/
#checkweb
二.抓包工具tcpdump:(默认都安装了)
1.语法格式:tcpdump [选项] [过滤条件]
选项
-i 网络接口名 //不指定接口名时,默认抓eth0 接口进出的包
-c 数字 //指定抓包个数,不指定的话会一直抓包
-A //以可阅读的方式抓取数据包
-w 文件名.cap //把抓到的数据信息存储到文件里。默认会输出到屏幕上。
-r 文件名.cap //读取抓包文件的内容
过滤条件: 抓包时,不加过滤条件,会抓所有到达的数据包。反之,只抓复合条件的数据包。
tcpdump -i eth0 -A tcp port 8090 and host 192.168.4.53
tcpdump -i eth0 -A tcp port 22 and net 192.168.4.0/24
tcpdump -i eth0 -A tcp port 8090 and host 192.168.4.53 or host 192.168.4.54
tcpdump -i eth0 -A tcp port 8090 and \(host 192.168.4.53 or host 192.168.4.54\)
tcpdump -i eth0 -A tcp port 25 -w /tmp/mail2.cap
tcpdump -A -r /tmp/mail2.cap
三.协议分析软件wireshark (宿主机)图形界面的软件
安装软件包
# yum -y install wireshark wireshark-gnome
打开图形界面
应用程序->互联网->软件名 ---> 文件菜单->打开文件/root/mail2.cap
tcp 传输协议 标记位
SYN 新连接
ACK 确认连接
FIN 断开连接
push( P) 传输数据
RST 重新建立连接
应用层 http smtp ftp
传输层 tcp upd
网络层 ip包
物理层 数据流 (0101)
一.部署CA服务器
1.部署证书签发环境
1)# vim /etc/pki/tls/openssl.cnf
40 [ CA_default ]
42 dir = /etc/pki/CA
43 certs = $dir/certs
45 database = $dir/index.txt *
50 certificate = $dir/my-ca.crt *
51 serial = $dir/serial *
55 private_key = $dir/private/my-ca.key *
128 [ req_distinguished_name ]
130 countryName_default = CN 国家
135 stateOrProvinceName_default = beijing 省
138 localityName_default = beijing 城市
141 0.organizationName_default = tarena 公司名称
148 organizationalUnitName_default = ope 部门名称
84 [ policy_match ] // 匹配策略
85 countryName = match
86 stateOrProvinceName = match
87 organizationName = match
88 organizationalUnitName = optional
89 commonName = supplied
90 emailAddress = optional
2)根据配置文件的设置创建对应的文件
echo 01 > /etc/pki/CA/serial 创建流水文件
chmod 600 /etc/pki/CA/serial 安全考虑修改文件权限
touch /etc/pki/CA/index.txt 创建记录文件
chmod 600 /etc/pki/CA/index.txt
3)创建私钥文件
#cd /etc/pki/CA/private
# openssl genrsa -des3 2048 > my-ca.key (密码123456)
#cat my-ca.key
#chmod 600 my-ca.key
4)创建根证书文件
#cd /etc/pki/CA
# openssl req -new -x509 -key ./private/my-ca.key -days 365 > my-ca.crt
Country Name (2 letter code) [CN]:
State or Province Name (full name) [beijing]:
Locality Name (eg, city) [beijing]:
Organization Name (eg, company) [tarena]:
Organizational Unit Name (eg, section) [ope]:
Common Name (eg, your name or your server's hostname) []:ca.tedu.cn
Email Address []:plj@163.com
二.配置网站加密https
配置网站服务器 192.168.4.53 www.tedu.cn
1. 创建私钥文件
#cd /etc/pki/tls/private/
#openssl genrsa 2048 > www.key
2. 创建证书请求文件
# openssl req -new -key www.key > /root/www.csr
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:beijing
Locality Name (eg, city) [Default City]:beijing
Organization Name (eg, company) [Default Company Ltd]:tarena
Organizational Unit Name (eg, section) []:ope
Common Name (eg, your name or your server's hostname) []:www.tedu.cn
Email Address []:jim@163.com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
3. 提交证书请求文件给CA服务器
4. 配置CA服务器,审核证书请求文件并签发数字证书文件
#cd /etc/pki/CA/certs
#openssl ca -in /tmp/www.csr > www.crt
5. 下发数字证书文件给网站服务器
6. 在网站服务器配置,调用私钥文件和数字证书文件,然后重启网站服务
yum -y install mod_ssl
vim /etc/httpd/conf.d/ssl.conf
100 SSLCertificateFile /etc/pki/tls/certs/www.crt
107 SSLCertificateKeyFile /etc/pki/tls/private/www.key
:wq
7.在浏览器里访问
http://www.tedu.cn/test.html
https://www.tedu.cn/test.html (不信任)
想要信任网站需要在CA服务器下载根证书
下载根证书文件并安装
http://192.168.4.55/ca
在浏览器里访问
https://www.tedu.cn/test.html (验证通过 )
8.配置网站服务器,访问80端口的请求,自动跳转到本机的443端口。
(端口重定向)
[root@53 ~]# vim /etc/httpd/conf/httpd.conf
<ifmodule ssl_module>
sslrandomseed startup builtin
sslrandomseed connect builtin
</ifmodule>
rewriteengine on
rewritecond %{server_port} !^443$
rewriterule (.*) https://%{server_name}/$1 [R]
[root@53 ~]# systemctl restart httpd
一.做邮件服务器 (在主机52)
1.运行postfix服务 能够发邮件(端口25)
#yum -y install postfix
#systemctl start postfix ; systemctl enable postfix
#netstat -utnalp | grep :25
#ps -C master 邮件服务进程
# vim /etc/postfix/main.cf
113 inet_interfaces = all
116 #inet_interfaces = localhost
419 home_mailbox = Maildir/
:wq
#systemctl restart postfix
2.客户端51 测试能否发送邮件
yum -y install telnet
# telnet 192.168.4.52 25 //连接邮件服务器
helo pc51 //客户定义主机名
mail from:lili@localhost //发件人
rcpt to:jerry@localhost //收件人
data //写邮件内容
邮件内容
. //提交邮件
quit //断开连接
3.查看邮件是否被投递到用户的邮箱里
#cd /home
#cat jerry/Maildir/new/1517275339.Vfd02I4000084M202939.host52
4.能够收邮件(运行dovecot服务110端口)
# yum -y install dovecot
#cd /etc/dovecot/
#vim conf.d/10-mail.conf
24 mail_location = maildir:~/Maildir 定义从那个文件读取邮件
:wq
#vim conf.d/10-auth.conf
10 disable_plaintext_auth = no 启用明文显示
:wq
systemctl start dovecot
systemctl enable dovecot
5.测试能否收邮件
#yum -y install telnet
#telnet localhost 110 //连接本机收邮件的服务
user jerry //收件人用户名
pass 123456 //邮箱密码
list //列出邮件
retr 1 //查看第1封邮件的内容
quit //断开连接
----------------------------------------------------------------------------------------
二.配置邮件加密
配置邮件服务器 192.168.4.52 mail.tedu.cn
1.创建私钥文件
# cd /etc/pki/tls/private/
]# openssl genrsa 2048 > mail.key
2.创建证书请求文件
]#openssl req -new -key mail.key > /root/mail.csr
3 提交证书请求文件给CA
]#scp /root/mail.csr 192.168.4.55:/root/
4.CA服务器审核证书请求文件并签发
cd /etc/pki/CA/certs
openssl ca -in /root/mail.csr > mail.crt
5.下发数字证书文件给邮件服务器
]# scp mail.crt 192.168.4.52:/root/
6.在邮件服务器配置收邮件服务器运行时,调用私钥文件和数字证书文件
vim /etc/dovecot/conf.d/10-ssl.conf
14 ssl_cert = </etc/pki/dovecot/certs/mail.crt
15 ssl_key = </etc/pki/dovecot/private/mail.key
]# cp /root/mail.crt /etc/pki/dovecot/certs/
]# cp /etc/pki/tls/private/mail.key /etc/pki/dovecot/private/
]# systemctl restart dovecot
]# netstat -utnalp | grep dovecot
7.配置发邮件服务器运行时,调用私钥文件和数字证书文件
#vim /etc/postfix/main.cf
smtpd_use_tls = yes
#smtpd_tls_auth_only = yes
smtpd_tls_key_file = /etc/pki/tls/private/mail.key
smtpd_tls_cert_file = /etc/pki/tls/certs/mail.crt
:wq
#systemctl restart postfix
#netstatus -utnalp | grep master
一.监控对象
网络流量: eth (进出的流量)----------------》ping
硬件资源的使用情况: cpu(sar,uptime), 内存(free), 储存 (df)
服务运行状态: 运行 停止 休眠 僵尸 ---------------->systemctl status
操作系统运行情况:
进程数量(ps aux | wc -l) 用户数量(wc -l users ,wc -l /etc/passwd)
--------------------------------------------------------------------------------------
二.搭建Nagios监控服务器
1.部署Nagios服务运行环境
yum -y install httpd php
2.源码安装Nagios软件 (nagios-4.2.4 )
yum -y install gcc gcc-c++ 安装编译工具
useradd nagios (创建进程用户)
groupadd nagcmd (创建组)
usermod -G nagcmd nagios (因为某些文件需要此用户权限)
----------------------------------------------------------------
cd nagios-4.2.4
./configure --with-nagios-user=nagios --with-nagios-group=nagcmd --with-
command-user=nagios --with-command-group=nagcmd (根据help)
make all
make install
make install-init
make install-commandmode
make install-config
make install-webconf
make install-exfoliation
软件的安装路径:ls /usr/local/nagios/
3.源码安装监控插件
cd nagios-plugins-2.1.4
./configure
make
make install
插件安装位置: ls /usr/local/nagios/libexec/
4.启动监控服务
/etc/init.d/nagios start
5.设置访问监控网页的用户名和密码
htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
/etc/init.d/nagios restart
systemclt restart httpd
6.访问监控服务器查看监控信息
其他电脑访问URL http:192.168.4.56/nagios/ 输入用户和密码
nagios默认监控本机资源,资源如下:
CPU负载 check_load
系统用户登陆数量 check_users
系统网站服务运行状态 check_http
ping check_ping
根分区空闲空间 check_disk
ssh服务 check_ssd
交换分区使用 check_swap
系统总进程数量 check_procs
监控显示状态:ok warning unknown(配置错误) critical(报错) pending(监控中)
7.nagios监控过程:
nagios服务运行时,调用监控插件,并设置监控的阀值,分别是警告值和错误值。nagios服务
把插件获取到的数据和设置的阀值比较,然后显示监控状态。
显示 unknown 状态 表示nagios服务配置文件有问题。
显示 pending 状态 表示正在获取被监控资源的数据
-----------------------------------------------------------------------------
三.配置Nagios监控服务器
1.配置文件说明
nagios.cfg 主配置文件 启动时加载的文件
resource.cfg 宏定义文件 设置nagios服务使用的变量
cgi.cfg 定义CGI访问权限
templates.cfg //定义监控模板配置文件
timeperiods.cfg //定义监控时间模板配置文件
contacts.cfg //定义接收报警邮件的配置文件
commands.cfg //定义监控命令
define command {
command_name check_local_disk //命令名称
command_line $USER1$/check_disk -w $ARG1$ -c $ARG2$ -p $ARG3$ //监控插件
}
localhost.cfg //监控本机配置文件
define host{ //定义监控主机
use linux-server //定义监控主机使用的模板
host_name localhost //定义主机
alias localhost //定义描述信息 可选项
address 127.0.0.1 //被监控主机的ip 地址
}
define service { //定义监控主机资源
use local-service //监控资源使用的模板
host_name localhost //主机名
service_description root_paticion //设置监控资源显示名称
check_command check_local_disk!20%!10%!/ //调用的监控命令
}
2.检测配置文件是否配置错误(方便操作,可作别名)
# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
vim ~/.bashrc
alias checknagios='/usr/local/nagios/bin/nagios -v /usr/local/nagios/
etc/nagios.cfg'
:wq
3.监控插件的使用
#cd /usr/local/nagios/libexec/
./插件名 --help //查看插件的帮助信息
CPU负载 check_load
系统登录用户数量 check_users
网站服务运行状态 check_http
PING check_ping
根分区空闲空间 check_disk (监控磁盘的空闲空间)
ssh服务 check_ssh
交换分区使用量 check_swap
系统总进程数量 check_procs
]# ./check_users -w 1 -c 2
]# ./check_http -I 192.168.4.51 -p 8090
]# ./check_ssh -H 192.168.4.51 -p 22122
]# ./check_disk -w 50% -c 25% -p /boot
]# ./check_procs -w 20 -c 21 -s R
]# ./check_procs -w 10 -c 11 -s Z (pid 0-65535)
]# ./check_procs -w 20 -c 21 -s S
]# ./check_procs -w 100 -c 101
]# ./check_load -w 0.5,1.0,1.5 -c 1.0,2.0,2.5
]# ./check_ping -H 192.168.4.51 -w 10,50% -c 15,75%
]# ./check_swap -w 50% -c 25%
]# ./check_tcp -H 192.168.4.51 -p 80
]# ./check_tcp -H 192.168.4.51 -p 3306
--------------------------------------------------------------------------------------------
一.监控主机的配置步骤:
1 定义监控命令 commands.cfg
2 创建监控主机的配置文件 vim ser51.cfg
3 在服务主机配置文件nagios.cfg 文件里 加载监控主机的配置文件ser51.cfg
4 检查配置是否有错误 checknagios
5 重启nagios监控服务
6 访问监控页面查看监控信息
7 若监控项有警告状态或严重错误状态的 查看是否收到报警邮件
------------------------------------------------------------------------------------------
二.监控远端主机公有资源 192.168.4.51
1.监控远端主机的公有资源(各种服务 httpd mysql ssh )
1)定义监控命令 commands.cfg
vim commands.cfg
#monitor mysqld
define command {
command_name check_51_mysqld
command_line $USER1$/check_tcp -H 192.168.4.51 -p 3306
}
#monitor httpd
define command {
command_name check_51_httpd
command_line $USER1$/check_http -H 192.168.4.51 -p 8090
}
#monitor sshd
define command {
command_name check_51_sshd
command_line $USER1$/check_ssh -H 192.168.4.51
}
2)创建监控主机的配置文件 vim ser51.cfg
define host{
use linux-server
host_name ser51
address 192.168.4.51
}
define service{
use local-service
host_name ser51
service_description httpd
check_command check_51_httpd
}
define service{
use local-service
host_name ser51
service_description mysqld
check_command check_51_mysqld
}
define service{
use local-service
host_name ser51
service_description sshd
check_command check_51_sshd
}
3)在服务主机配置文件nagios.cfg 文件里 加载监控主机的配置文件ser51.cfg
vim nagios.cfg
cfg_file=/usr/local/nagios/etc/objects/ser51.cfg
4)检查配置是否有错误
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
5)重启nagios监控服务
/etc/init.d/nagios restart
---------------------------------------------------------------------------------------
三.监控远端主机的私有资源(系统运行情况,磁盘使用量 登录用户数量 进程数量)
1.配置被监控端 51
1)安装获取私有资源的插件 ,并使用插件
]# tar -zxf nagios-plugins-2.1.4.tar.gz
]# cd nagios-plugins-2.1.4/
]# rpm -q gcc gcc-c++ || yum -y install gcc gcc-c++
]# ./configure && make && make install
]# ls /usr/local/nagios
2)运行nrpe服务(端口号5666)
#yum -y install openssl-devel
#useradd nagios
]# tar -zxf nrpe-3.0.1.tar.gz
]# cd nrpe-3.0.1/
]# ./configure
]# make all
make install-daemon
make install-config
make install-init
make install-plugin
3)修改配置文件
]# vim /usr/local/nagios/etc/nrpe.cfg
98 allowed_hosts=127.0.0.1, 192.168.4.56 添加允许远程访问的主机
command[nrpe_51_users]=/usr/local/nagios/libexec/check_users -w 1 -c 2
command[nrpe_51_root]=/usr/local/nagios/libexec/check_disk -w 20% -
c 10% -p /
command[nrpe_51_boot]=/usr/local/nagios/libexec/check_disk -w 20% -
c 10% -p /boot
command[nrpe_51_prun]=/usr/local/nagios/libexec/check_procs -w 10 -c
11 -s R
command[nrpe_51_pzbi]=/usr/local/nagios/libexec/check_procs -w 5 -c
6 -s Z
command[nrpe_51_psum]=/usr/local/nagios/libexec/check_procs -w 100 -
c 101 (定义命令参数)
4)启动nrpe服务
]# systemctl enable nrpe ; systemctl start nrpe
]#netstat -utnalp | grep :5666
5) 测试nrep服务配置
[root@PC51 ~]# /usr/local/nagios/libexec/check_nrpe -H 127.0.0.1 -p
5666 -c nrpe_51_users
2.配置监控服务器:192.168.4.56
1)安装连接nrpe服务的插件check_nrpe 并测试
#yum -y install openssl-devel
]# tar -zxf nrpe-3.0.1.tar.gz
]# cd nrpe-3.0.1/
]# ./configure
]# make all
]# make install-plugin
]#ls /usr/local/nagios/libexec/check_nrpe
[root@mon56 nrpe-3.0.1]# /usr/local/nagios/libexec/check_nrpe -H
192.168.4.51 -p 5666 -c nrpe_51_users
2)定义监控远端主机私有资源的监控命令
vim commands.cfg
define command {
command_name check_51_user
command_line $USER1$/check_nrpe -H 192.168.4.51 -p 5666 -c
nrpe_51_users
}
3)监控远端主机时,调用定义的监控命令
vim ser51.cfg
define service{
use local-service
host_name ser51
service_description users
check_command check_51_user
}
:wq
4)配置nagios服务运行时,加载监控远端主机的配置文件
5)检查配置并重启nagios服务
#checknagios
#systemctl restart nagios
6)登录监控页面查看监控信息
----------------------------------------------------------------------------------------
配置监控报警nagios服务会给指定的邮箱发邮件
1.]# grep email /usr/local/nagios/etc/objects/contacts.cfg
email nagios@localhost
2. vim /etc/hosts
127.0.0.1 mon56
3.echo 123456 | passwd --stdin nagios
4.systemctl restart postfix
----------------------------------------------------------------------------------------------
扩展知识:
配置nagios服务监控时,调用自定义监控脚本(shell脚本)
配置nagios服务使用短信的方式接收报警消息。
配置nagios主机依赖监控
配置nagios服务依赖监控
配置nagios绘制监控图像
部署Cacti监控
一.部署cacti 运行环境LAMP
1.安装运行依赖软件:
yum -y install httpd mariadb mariadb-server mariadb-devel php php-mysql gcc gcc-c++
systemctl restart httpd mariadb
systemctl enable httpd mariadb
安装绘图工具yum -y install rrdtool
安装cacti连接远端主机的网络管理协议yum -y install net-snmp*
2.设置数据库管理员本机登陆密码
mysqladmin -hlocalhost -uroot password “123456”
mysql -uroot -p123456
3.创建储存cacti配置信息的库, 授权连接时的连接用户。
mysql> create database cactidb ;
mysql> grant all on cactidb.* to yaya@"localhost" identified by "123456";
4.测试PHP能否连接本机的数据库服务
vim /var/www/html/linkdb.php
<?php
$db=mysql_connect("localhost","yaya","123456");
if($db){ echo "ok"; }else{ echo "err"; };
?>
:wq
访问该网页时,出现ok即环境配置ok
二.安装Cacti软件 cacti-0.8.8h.tar.gz
tar -zxf cacti-0.8.8h.tar.gz -C /var/www/html/
cd /var/www/html/
mv cacti-0.8.8h/ cacti
chown -R apache:apache cacti
三、做初始化配置
1.还原cacti自带数据库内容
#cd /var/www/html/cacti
#mysql -hlocalhost -uyaya -p123456 cactidb < cacti.sql
2.修改cacti配置文件,配置cacti使用数据库的库名,用户,和密码
]# vim /var/www/html/cacti/include/config.php
26 $database_type = "mysql";
27 $database_default = "cactidb";
28 $database_hostname = "localhost";
29 $database_username = "yaya";
30 $database_password = "123456";
31 $database_port = "3306";
32 $database_ssl = false;
3.访问管理页面做初始化配置,登录监控页面的帐号密码都是:admin
URL http://192.168.4.56/cacti
四.cacti软件的使用
1.安装数据高速采集器spine
tar -zxf cacti-spine-0.8.8h.tar.gz
cd cacti-spine-0.8.8h/
./configure --with-mysql
make
make install
ls /usr/local/spine/
2.修改配置文件(此配置文件需要手动cp),指定访问的数据库名,和用户密码
]# cp /usr/local/spine/etc/spine.conf.dist /etc/spine.conf
vim /etc/spine.conf
33 DB_Host localhost
34 DB_Database cactidb
35 DB_User yaya
36 DB_Pass 123456
37 DB_Port 3306
:wq
3.登录cacti管理页面配置 使用spine采集器程序
/usr/local/spine/bin/spine
五、配置Cacti监控服务,监控远端主机 192.168.4.51
1 。运远端主机行snmpd服务:装包 修改配置文件 启动服务 查看端口号
]# yum -y install net-snmp*
]# vim /etc/snmp/snmpd.conf
]# sed -i '41s/default/192.168.4.56/' /etc/snmp/snmpd.conf
]# sed -i '62s/systemview/all/' /etc/snmp/snmpd.conf
]# sed -i '85s/^#//' /etc/snmp/snmpd.conf
]# systemctl start snmpd ; systemctl enable snmpd
[root@a51 ~]# systemctl stop firewalld
[root@a51 ~]# setenforce 0
2.配置监控服务器192.168.4.56
1) 登录管理页面
2) 添加监控新主机,并选择监控模板和监控项
3) 给监控项创建图像
4) 创建图像树,并把图像添加到图像树里
5) 编写抓取数据的计划任务
[root@mon56 ~]# sed -n '878p' /etc/php.ini
date.timezone = Asia/Shanghai
]#crontab -e
*/5 * * * * php /var/www/html/cacti/poller.php &> /dev/null
:wq
]# systemctl enable crond
3.监控本机 192.168.4.56
1) 运行snmpd服务:装包 修改配置文件 启动服务 查看端口号
#rpm -qa | grep -i net-snmp
]# sed -i '41s/default/127.0.0.1/' /etc/snmp/snmpd.conf
]# sed -i '62s/systemview/all/' /etc/snmp/snmpd.conf
]# sed -i '85s/^#//' /etc/snmp/snmpd.conf
]# systemctl start snmpd
]# systemctl enable snmpd
]# ps -C snmpd
]# netstat -utnalp | grep snmpd
2) 添加监控新主机,并选择监控模板和监控项
3) 给监控项创建图像
4) 创建图像树,并把图像添加到图像树里
5) 查看监控信息
5.监控报警 (在监控服务器端配置)
1)安装支持报警功能的插件 并 激活
tar -zxf monitor-v1.3-1.tgz
mv monitor /var/www/html/cacti/plugins/
tar -zxf settings-v0.71-1.tgz
mv settings /var/www/html/cacti/plugins/
tar -zxf thold-v0.5.0.tgz
mv thold /var/www/html/cacti/plugins/
2)准备邮件服务器
#rpm -q postfix
#systemctl restart postfix
]# netstat -utnalp | grep :25
[root@mon56 ~]# useradd cactiuser
[root@mon56 ~]# echo 123456 | passwd --stdin cactiuser
3)配置监控报警
创建消息列表 定义收件人
创建监控报警项
指定发邮件服务
测试监控报警配置(当监控报警项被触发时给邮箱发邮件)
部署搭建Zabbix监控服务器
1.部署Zabbix监控服务运行环境 LAMP
yum -y install httpd mariadb mariadb-server mariadb-devel php php-mysql gcc gcc-c++
useradd zabbix
2.安装软件包
]# tar -zxf zabbix-3.2.3.tar.gz
]# cd zabbix-3.2.3/
]# ./configure --prefix=/usr/local/zabbix --enable-server
--enable-agent --with-mysql
]#make install
]#ls /usr/local/zabbix
3.创建web页面:
]#cd zabbix-3.2.3
]# cp -r frontends/php /var/www/html/zabbix
4.创建存储配置信息的库和表,并授权用户
]# mysql -uroot -p123456
mysql> create database zabbixdb;
mysql> grant all on zabbixdb.* to yaya2@"localhost" identified by "123456";
mysql>quit;
5.还原备份数据库中的表(一定要按照以下顺序还原)
cd zabbix-3.2.3/database/mysql
]#mysql -uyaya2 -p123456 zabbixdb < schema.sql
]#mysql -uyaya2 -p123456 zabbixdb < images.sql
]#mysql -uyaya2 -p123456 zabbixdb < data.sql
6.在web界面安装软件时,会有提示报错内容,需要先完成以下配置方可安装
]# vim /etc/php.ini
672 post_max_size = 16M
384 max_execution_time = 300
394 max_input_time = 300
]#yum -y install php-gd php-xml
]#rpm -ivh --nodeps php-bcmath-5.4.45-13.el7.remi.x86_64.rpm
]#rpm -ivh --nodeps php-mbstring-5.4.45-13.el7.remi.x86_64.rpm
]#systemctl restart httpd
]# chmod o+w /var/www/html/zabbix/conf
7.访问web页面做初始化配置
URL http://192.168.4.56/zabbix
二.修改配置
1.修改服务配置文件
vim /usr/local/zabbix/etc/zabbix_server.conf
87 DBName=zabbixdb
103 DBUser=yaya2
111 DBPassword=123456
2.创建启动脚本
cd cd zabbix-3.2.3
cp misc/init.d/fedora/core/zabbix_agentd /etc/init.d/
chmod +x /etc/init.d/zabbix_agentd
vim /etc/init.d/zabbix_agentd
BASEDIR=/usr/local/zabbix (修改22行,告诉zabbix的位置)
3.启动zabbix服务,查看端口
/etc/init.d/zabbix_server start
netstat -antpu |grep 10051
三.配置监控
1.配置被检控端vh01
创建zabbix用户;安装gcc-c++软件
2.在vh01安装zabbix软件
tar -xf zabbix-3.2.3.tar.gz
cd zabbix-3.2.3
./configure --prefix=/usr/local/zabbix --enable-agent
make install
3.修改服务配置文件
vim /usr/local/zabbix/etc/zabbix_agentd.conf
30 LogFile=/tmp/zabbix_agentd.log
91 Server=127.0.0.1, 192.168.4.3
132 ServerActive=192.168.4.3:10051
4.创建启动配置文件
cp misc/init.d/fedora/core/zabbix_agentd /etc/init.d/
chmod +x /etc/init.d/zabbix_agentd
5.修改脚本文件启动服务时,加载程序的目录
vim /etc/init.d/zabbix_agentd
22 BASEDIR=/usr/local/zabbix
6.启动被检控端服务
/etc/init.d/zabbix_agentd start
netstat -utnalp | grep :10050
三.在web管理界面添加被检控主机
1.添加监控主机 选择监控模板 查看监控信息
四.自定义监控项
A:使用软件自带的命令创建新的监控项
1.创建模版 atmp
2.创建应用集 services
3.创建监控项 名称 --》键值
4.监控主机时调用创建的模版 atmp
5.查看监控信息
B:自定义监控命令创建新的监控项
要求监控主机2 能够登陆系统的用户的个数
1.配置被检控端vh02
1)启用自定义命令监控功能
vim /usr/local/zabbix/etc/zabbix_agentd.conf
263 Include=/usr/local/zabbix/etc/zabbix_agentd.conf.d/*.conf
278 UnsafeUserParameters=1 (下面可以看到监控命令模版)
2)定义监控命令
vim /usr/local/zabbix/etc/zabbix_agentd.conf.d/getusers.conf
UserParameter=get_login_users,grep "/bin/bash" /etc/passwd | wc -l
3)重启zabbix_agentd服务
/etc/init.d/zabbix_agentd stop
/etc/init.d/zabbix_agentd start
4)测试配置(--help 可以查看帮助)
/usr/local/zabbix/bin/zabbix_get -s 127.0.0.1 -p 10050 -k get_login_users
2.配置监控服务器
1)测试被检控的自定义命令
/usr/local/zabbix/bin/zabbix_get -s 192.168.4.2 -p 10050 -k getusers
2)在web页面创建新的监控项,调用被监控主机自定义的命令(同上)
3)在web页面查看监控信息
五.配置监控报警
监控2主机能登录系统的用户数量大于4个时发送报警邮件给zabbix@localhost 邮箱。
1.在监控服务器端配置邮件服务器和邮箱帐号
2.配置监控报警
1)创建触发器
2)创建动作
3)创建邮箱账号
4)指定邮件服务器
5)当触发器被触发后查看zabbix@localhost 邮箱是否收到邮件
一、使用LVS部署 网站LB集群
LVS工作模式: LVS/NAT LVS/DR LVS/TUN
LVS调度算法: 10种 常用4种(RR WRR LC WLC)。
NAT:通过网络地址的转换实现的虚拟服务器,大并发访问时,调度器的性能成为瓶颈
1.LVS/NAT环境准备
service iptables stop ;chkconfig iptables off
setenforce 0 关闭防火墙和selinux
2.配置所有网关,使服务器和客户端都能ping通
客户端250:
配置网关地址: sed -i ‘7s/0/1/’ /etc/sysctl.conf
route -n
route add default gw 192.168.2.100
A配置网站服务器101/102 :
配置网关地址: route -n
route add default gw 192.168.4.100
route del default gw 192.168.4.100
B配置分发器100
开启内核的路由转发功能
]# sed -i '7s/0/1/' /etc/sysctl.conf
]# sysctl -p 刷新确认
3.安装软件包
]#yum -y install ipvsadm
4.配置LVS
]# ipvsadm -Ln 列出已经添加的配置
]# ipvsadm -C 清除所有配置
]# ipvsadm -A -t 192.168.2.100:80 -s rr 添加虚拟服务
添加real server
]# ipvsadm -a -t 192.168.2.100:80 -r 192.168.4.101:80 -m
]# ipvsadm -a -t 192.168.2.100:80 -r 192.168.4.102:80 -m
保存配置
]# /etc/init.d/ipvsadm save
]# cat /etc/sysconfig/ipvsadm 查看配置
]# /etc/init.d/ipvsadm restart ;chkconfig ipvsadm on重启设置自启
watch -n 1 ipvsadm -Ln --stats 查看使用状态
5.在客户端250主机 测试分发器配置:
#elinks --dump http://192.168.2.100/test.html
6.]# ipvsadm -d -t 192.168.2.100:80 -r 192.168.4.103:80 删除realserver
]# ipvsadm -E -t 192.168.2.100:80 -s wrr 修改虚拟服务的调度算法
# ipvsadm -e -t 192.168.2.100:80 -r 192.168.4.102:80 -w 3 -m 修改权重值
]# /etc/init.d/ipvsadm save 保存修改
-----------------------------------------------------------------------------------------
二.LVS/DR 网站 LB集群
real server 的ip地址要和 vip 地址是一个网段的。
1.配置网站服务器101/102
修改网络接口运行参数
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
绑定vip地址
#ifconfig lo:1 192.168.4.253/32
永久配置,需要写入到开机自启文件中
vim /etc/rc.local
ifconfig lo:1 192.168.4.253/32
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
:wq
2.配置分发器100
#yum -y install ipvsadm
绑定vip地址
# ifconfig eth0:1 192.168.4.253/32
永久配置
#vim /etc/rc.local
ifconfig eth0:1 192.168.4.253/32
:wq
3.添加虚拟服务 ,和realserver.
ipvsadm -A -t 192.168.4.253:80 -s rr
ipvsadm -a -t 192.168.4.253:80 -r 192.168.4.101:80 -g
ipvsadm -a -t 192.168.4.253:80 -r 192.168.4.102:80 -g
/etc/init.d/ipvsadm save
ipvsadm -Ln --stats (只有进来的包 没有出去的包)
4.客户端192.168.4.250测试
#arping 192.168.4.253 (显示的是分发器eth0接口的mac地址)
#elinks --dump http://192.168.4.253/test.html
5.思考?
LVS 默认不对realserver 不做健康性检查。基于四层负载均衡集群软件
编写脚本 检查realserver 主机上网站服务的状态,当网站服务没运行时 ,把realserver 主机从虚拟服务里删除。
一、使用Haproxy软件部署网站LB集群
1.普通LB集群
客户端 192.168.4.250
haproxy服务器 192.168.4.100
网站服务器 192.168.4.101/102
2.配置 haproxy服务器:192.168.4.100
1)装包yum -y install haproxy
2)修改配置文件
cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak 备份配置文件
vim /etc/haproxy/haproxy.cfg 把59行以下的全部删除,手动写入以下内容
[global]
..........
[default]
.......
stats uri /admin 定义访问健康查询界面
listen lbweb 0.0.0.0:80
cookie SERVERID rewrite
balance roundrobin 定义算法为轮询访问
server webA 192.168.4.101:80 cookie app101a check inter 2000 rise 2 fall 5
server webB 192.168.4.102:80 cookie app102b check inter 2000 rise 2 fall 5
3.启动服务#service haproxy start ; chkconfig haproxy on
4.客户端250 测试
#elinks --dump http://192.168.4.100/test.html
查看web页面显示健康性检查信息 http://192.168.4.100/admin
----------------------------------------------------------------------------------------------------
1. 区分业务的LB集群(七层)
客户端 192.168.4.250
haproxy服务器 192.168.4.100
网站服务器 192.168.4.101/102
2.修改配置文件
]# vim haproxy.cfg
stats uri /admin
frontend weblb 192.168.4.100:80
acl pathhtml path_end -i .html
acl pathphp path_end -i .php
use_backend htmlgrp if pathhtml
use_backend phpgrp if pathphp
default_backend htmlgrp
backend htmlgrp
balance roundrobin
server app101 192.168.4.101:80 check
server app102 192.168.4.102:80 check
backend phpgrp
balance roundrobin
server app103 192.168.4.103:80 check
server app104 192.168.4.104:80 check
]# service haproxy start
二、使用keepalived软件部署网站HA集群
能够实现任意单故障节点的高可用集群
配置网站高可用集群 103 和 104
1 在主机上都安装keepalived软件
yum -y install keepalived
2 修改服务的主配置文件/etc/keepalived/keepalived.conf
2.1修改主服务器192.168.4.103
state MASTER
priority 150
2.2修改备用服务器192.168.4.104
vim /etc/keepalived/keepalived.conf
....
state BACKUP
priority 100
3 启动服务
/etc/init.d/keepalived start
chkconfig keepalived on
4 查看是否获取到vip 地址
#ip addr show | grep 192.168.4.
4测试
250: elinks --dump http://vip/teset.php
思考: HA 集群中 主服务器没有宕机,但是应用服务(httpd)停止了,为问主服务器 是否会是否vip地址?
192.168.4.253
------------------------------------------------------------------------------
三、使用keepalvied 做lvs分发器的HA集群
3.1 配置KVS/DR模式的LB集群(网站)
3.1.1、配置网站服务器101 、 102
运行网站服务 并编辑网页文件
修改网络接口运行参数 、绑定vip 地址
3.1.2、在做分发器的主机100、200上安装提供lvs服务的软件ipvsadm
3.2 配置分发器的HA集群 100、200
3.2.1 在2台分发器主机上分别安装keepalived软件
3.2.2 分别修改2台分发器主机上keepalived服务配置文件
3.2.3 分别启动2台分发器主机上的keepalived服务
3.2.4 查看是否获取到VIP地址 和 虚拟服务及realserver
3.3 测试HA集群的配置
把主服务器宕机后,客户端仍然能够正常访问网站服务。
elinks --dump http://192.168.4.253/test.html
vip 地址
---------------------------------------------------------------------------------------
rhel6 下搭建nfs服务
一、配置存储服务器192.168.4.105
1.1 准备存储空间: 分区 、 格式化 、 挂载
fdisk /dev/vdd -> n -> p ->1 ->2次回车->w
mkfs.ext4 /dev/vdd1
blkid /dev/vdd1
mkdir /webdir
mount /dev/vdd1 /webdir
df -h /webdir/
设置开机挂载 /etc/fstab
UUID=3f505f56-b559-4f95-9d99-8f99d9318e3c /webdir ext4 defaults 0 0
]# mount -a
]# mount | grep /webdir
1.2 共享存储存储空间: 装包 、修改配置文件、启动服务
yum -y install nfs-utils
yum -y install rpcbind
]# vim /etc/exports
/webdir *(rw)
:wq
]# chmod o+w /webdir/
/etc/init.d/rpcbind start
/etc/init.d/nfs start
#chkconfig rpcbind on
#chkconfig nfs on
1.3 在本机查看共享信息
[root@storage105 ~]# rpm -qf /usr/sbin/showmount
nfs-utils-1.2.3-64.el6.x86_64
]# showmount -e localhost
二、配置应用服务器192.168.4.101/102
2.1 挂载nfs共享目录
]# yum -y install nfs-utils
]# showmount -e 192.168.4.105
]# rm -rf /var/www/html/*
]# mount -t nfs 192.168.4.105:/webdir /var/www/html/
2.2 在105主机上编写网页文件
vim /webdir/test.html
aaaa
cccc
:wq
2.3 客户端 250 访问 lb集群能够看到网页内容
elinks --dump http://192.168.4.253/test.html
存储技术? DAS NAS SAN
一、配置iscsi (rhel6)
把本机的/dev/vdb 和/dev/vdc 两块盘共享给 网站服务器103和104主机。
A、配置后端存储 105
1 准备磁盘
2 装包 yum list | grep scsi
yum -y install scsi-target-utils
rpm -qc scsi-target-utils 查看配置文件位置
3 修改配置文件
]# cd /etc/tgt/
]# cp targets.conf targets.conf.bak
]# vim targets.conf
<target iqn.2018-02.cn.tedu:storage105.diskb>
backing-store /dev/vdb
write-cache off
vendor_id tarena
product_id disktwo
#initiator-address 192.168.4.103
#initiator-address 192.168.4.104
</target>
<target iqn.2018-02.cn.tedu:storage105.diskc>
backing-store /dev/vdc
write-cache off
vendor_id tarena
product_id diskthr
#initiator-address 192.168.4.103
#initiator-address 192.168.4.104
</target>
:wq
4 启动服务
service tgtd start
chkconfig tgtd on
netstat -utnalp | grep :3260
5 查看共享信息
tgt-admin --show
++++++++++++++++++++++++++++++
B、配置前端应用 103/104
yum -y install iscsi-initiator-utils
2 发现设备 (man iscsiadm)
]#iscsiadm --mode discoverydb --type sendtargets --portal 192.168.4.105 --discover
简写
]# iscsiadm -m discovery -t sendtargets -p 192.168.4.105:3260
3 登入设备 --login
iscsiadm --mode node --targetname iqn名称 --portal 192.168.4.105:3260 --login
简写
]# iscsiadm -m node -T iqn名称 -p 存储服务器ip地址:3260 -l
4 在本机查看是否多出新的磁盘
登出设备 --logout -u
]# iscsiadm -m node -T iqn名称 -p 存储服务器ip地址:3260 -u
------------------------------------------------------------------------------------------
二、配置udev
2.1 获取内核识别的硬件设备的参数信息(--help)
]# udevadm info --query=path --name=磁盘名
]# udevadm info --attribute-walk --path=路径名
]# udevadm info --query=path --name=/dev/sda
]# udevadm info --attribute-walk --path=/devices/platform/host8/session7/target8:0:0/8:0:0:1/block/sda
2.2 编写udev配置文件
]#cd /etc/udev/rules.d/
]#vim 70-iscsi.rules
SUBSYSTEM=="block", ATTR{size}=="6291456", ATTRS{vendor}=="tarena ", ATTRS{model}=="disktwo ", SYMLINK+="iscsi/diskb"
SUBSYSTEM=="block", ATTR{size}=="6291456", ATTRS{vendor}=="tarena ", ATTRS{model}=="diskthr ", SYMLINK+="iscsi/diskc"
:wq
2.3 测试配置
]#start_udev
]# ls -l /dev/iscsi/
C、前端应用使用共享存储介质
分区 格式化 挂载 (在一台上格式化 另一台可以直接挂载)
fdisk /dev/iscsi/diskb
mkfs.ext4 /dev/sda1 (gfs 全局文件系统)
blkid /dev/sda1
rm -rf /var/www/html/*
#vim /etc/fstab
uuid=xxxxxxx /var/www/html ext4 defaults 0 0
:wq
#mount -a
#mount | grep /var/www/html
#echo 123 > /var/www/html/test.html
104 :
#ls /dev/sd*
若没有看到分区信息,把登入设备全部登出一下,再重新登录。
#ls /dev/sd*
#blkid 分区名
#vim /etc/fstab
uuid=xxxxxxx /var/www/html ext4 defaults 0 0
:wq
#mount -a
#mount | grep /var/www/html
#cat /var/www/html/test.html
* iscsi设备不能够同时挂载。
-------------------------------------------------------------------------------
三、配置多路径
106 存储服务器 ,把本机/dev/vdb 3G 空间的裸盘只共享给前端web应用服务器 107
eth0 192.168.4.106
eth1 192.168.2.106
二、web应用服务器 107
eth0 192.168.4.107 eth1 192.168.2.107
2.1 发现并登录设备
]#iscsiadm --mode discoverydb --type sendtargets --portal 192.168.2.106 --discover
]# iscsiadm -m node -T iqn.2018-02.cn.tedu:storage106.diskb -p 192.168.2.106:3260 -l
[root@web107 ~]# ls /dev/sd*
/dev/sda
]#iscsiadm --mode discoverydb --type sendtargets --portal 192.168.4.106 --discover
]# iscsiadm -m node -T iqn.2018-02.cn.tedu:storage106.diskb -p 192.168.4.106:3260 -l
[root@web107 ~]# ls /dev/sd*
/dev/sda /dev/sdb
2.2 配置多路径服务:装包 修改配置文件 启动服务 验证配置
]# yum -y install device-mapper-multipath
获取 wwid 全球识别符 全球唯一
]# scsi_id --whitelisted --device=/dev/sda
]# vim /etc/multipath.conf
25 defaults {
26 user_friendly_names no
getuid_callout "/lib/udev/scsi_id --whitelisted --device=/dev/%n"
27 }
//在文件末尾添加
103 multipaths {
104 multipath {
105 wwid "1IET 00010001"
106 alias mpatha //别名名称 自定义
107 }
108 }
:wq
]# /etc/init.d/multipathd start
]# chkconfig multipathd on
]# ls /dev/mapper/mpatha
使用共享存储介质: 分区 格式化 挂载
fdisk /dev/mapper/mpatha
mkfs.ext4 /dev/mapper/mpatha
UUID=27e8ab35-4c78-4914-a1ed-d71c2e4ab788 /var/www/html ext4 defaults 0 0
验证多路径配置:107
1 查看多路径信息 ]# multipath -ll
ifdow eth1
2 重载多路径信息 ]# multipath -rr
]# multipath -ll
部署分布式存储服务 rhel6
二、配置分布式存储服务fastdfs
2.1 配置主控节点(111) 装包 修改配置文件 启动服务 查看端口
]# yum -y install gcc gcc-c++ libevent
rpm安装三个libevent依赖包
源码安装主包fastdfs
]#tar -zxf FastDFS_v4.06.tar.gz
]#cd FastDFS
]#./make.sh
]#./make.sh install
]# ls /etc/fdfs/ #配置文件存放目录
]# ls /usr/local/bin/ #命令文件存放目录
]# vim /etc/fdfs/tracker.conf //服务主配置文件
base_path=/data/fastdfs
max_connections=4096
store_group=group1
use_storage_id = true
storage_ids_filename = storage_ids.conf
]# mkdir -p /data/fastdfs
]# cd FastDFS
]# cp conf/storage_ids.conf /etc/fdfs/
]# vim /etc/fdfs/storage_ids.conf
100001 group1 192.168.4.108
100002 group1 192.168.4.109
]#cd FastDFS
]# cp init.d/fdfs_trackerd /etc/init.d/
]# chmod +x /etc/init.d/fdfs_trackerd
]# /etc/init.d/fdfs_trackerd status
fdfs_trackerd 停止
]# netstat -utnalp | grep :22122
++++++++++++++++++++++++++++++++++
2.2 配置数据节点 108 109
准备存储空间:分区 格式化 配置开机挂载到/data/fastdfs
fdisk /dev/vdb
mkfs.ext4 /dev/vdb1
mkdir -p /data/fastdfs
blkid /dev/vdb1
vim /etc/fstab
UUID=f2853b35-13d3-48b1-8c3f-9b9e5f225fca /data/fastdfs ext4 defaults 0 0
]# mount -a
装包 修改配置文件 启动服务 查看端口
yum -y install gcc gcc-c++ libevent
]#tar -zxf FastDFS_v4.06.tar.gz
]#cd FastDFS
]#./make.sh
]#./make.sh install
]# ls /etc/fdfs/ #配置文件存放目录
]# ls /usr/local/bin/ #命令文件存放目录
]# vim /etc/fdfs/storage.conf
base_path=/data/fastdfs
max_connections=4096store_path0=/data/fastdfs
subdir_count_per_path=256
tracker_server=192.168.4.111:22122
++++++++++++++++++++++++++++++++
2.3 启动服务
2.3.1 启动主控节点主机上的服务trackerd
/etc/init.d/fdfs_trackerd start
2.3.2 启动数据节点主机上的storaged服务
cd FastDFS
cp init.d/fdfs_storaged /etc/init.d/
chmod +x /etc/init.d/fdfs_storaged
/etc/init.d/fdfs_storaged start
#netstat -utnalp | grep :23000
2.3 在客户端测试配置 250
创建连接主控服务器111的配置文件
]# scp 192.168.4.108:/etc/fdfs/client.conf /root/
]# vim /root/client.conf
10 base_path=/data/fastdfs
14 tracker_server=192.168.4.111:22122
:wq
]# mkdir -p /data/fastdfs
108:
把命令行,操作文件的命令传给客户端
]# scp fdfs_test 192.168.4.254:/root/bin/
]# scp fdfs_upload_file 192.168.4.254:/root/bin/
]# scp fdfs_download_file 192.168.4.254:/root/bin/
]# scp fdfs_delete_file 192.168.4.254:/root/bin/
250:
上传文件:
显示上传文件过程fdfs_test
不显示上传文件过程 fdfs_upload_file
]# fdfs_test 配置文件 上传 文件名
]# fdfs_test /root/client.conf upload foo.sh
]#fdfs_upload_file /root/client.conf /etc/passwd
删除文件
]# fdfs_test /root/client.conf delete group1 M00/00/00/wKgEbVp7fh-AdtHSAAAJ6YX0WVM0035120
下载文件
在存储服务器上配置web服务,让客户端访问存储服务器的web服务上传和下载文件
108 109
1 运行nginx网站服务: 装包 修改配置文件 启动服务 查看端口
]# yum -y install gcc gcc-c++
]# useradd nginx
]# yum -y install pcre-devel zlib-devel
]#tar -zxf fastdfs-nginx-module_v1.16.tar.gz
]#tar -zxf nginx-1.7.10.tar.gz
]#cd nginx-1.7.10
]# ./configure --prefix=/usr/local/nginx --user=nginx
--group=nginx --add-module=../fastdfs-nginx-module/src/
]# make && make install
]# ls /usr/local/nginx/
conf html logs sbin
]# cp fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/
]# vim /etc/fdfs/mod_fastdfs.conf
40 tracker_server=192.168.4.111:22122
53 url_have_group_name = true
47 group_name=group1
57 store_path_count=1
62 store_path0=/data/fastdfs/:wq
]#vim /usr/local/nginx/conf/nginx.conf
43 location / {
44 #root html;
45 #index index.html index.htm;
ngx_fastdfs_module;
46 }
:wq
[root@web108 ~]# /etc/init.d/fdfs_storaged stop
[root@web108 ~]# /etc/init.d/fdfs_storaged start
[root@web108 ~]# /usr/local/nginx/sbin/nginx -t 检测配置文件是否有误
/usr/local/nginx/sbin/nginx 启动服务
客户端访问:
254: 上传文件
]# fdfs_upload_file /root/client.conf ./tedu.jpg
254: 通过访问web页面下载文件
]#firefox http://192.168.4.108/group1/M00/00/00/wKgEbFp7nlWABtXMAACwEV-ILDc616.jpg
http://192.168.4.108
80 -----> nginx----->连接tracked服务的模块->模块读取配置文件---> 访问taracked服务器--->配置文件
RHEL6 操作系统防火墙服务iptables
1.iptables 的组成:
内核态:集成在内核里的功能
用户态:安装服务的软件包后提供的管理命令
[root@web103 ~]# man iptables
iptables 命令的功能 : 查看/修改/删除/添加规则
iptables 命令格式:
2.]#iptables -t 表名 管理选项 链名 匹配规则 -j 处理动作
3.iptables服务的功能:
功能 表
ip包过滤 filter
网络地址转换 nat
对ip包打标记 mangle
做状态跟踪 raw
4.ip包传输的路径(方向)(以防护墙主机位参照物)
方向 链
进入防火墙主机的 INPUT
从防火墙本机出去 OUTPUT
经过防火墙主机的 FORWARD
路由前 PREROUTING
路由后 POSTROUTING
管理选项 -L -F -D -A -I -P
5.查看指定表中有哪些链
iptables -t 表 -L
]# iptables -t filter -L
]# iptables -t nat -L
]# iptables -t mangle -L
]# iptables -t raw -L
6.查看表中指定链的所有规则并给规则加编号
]# iptables -t filter -nL INPUT --line-numbers
7.查看链中规则是显示行号
]# iptables -t filter -nL --line-numbers
删除表中指定链的某1条规则
]# iptables -t filter -D INPUT 2
]# iptables -t filter -nL --line-numbers
删除表中指定链的所有规则
]# iptables -t filter -F INPUT
删除表中所有链的规则
]# iptables -t filter -F
让设置永久生效
]# service iptables save
]# cat /etc/sysconfig/iptables //保存到的文件
处理动作
ACCEPT 允许
DROP 丢弃
REJECT 拒绝
修改链的默认规则 (ACCEPT 或丢弃 DROP)
]#iptables -t filter -P INPUT DROP
]#iptables -t filter -L INPUT
匹配条件选项
-p 协议 udp tcp
--sport 源端口号
--dport 目标端口
--source / -s 源地址
--destination / -d 目标地址
主机型防火墙 (自己保护自己)
]#iptables -t filter -P INPUT DROP
]#iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT
]#iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
]#iptables -t filter -Ln INPUT --line-numbers
]#service iptables save
]# iptables -t filter -I INPUT 1 --source 192.168.4.104 -p tcp --dport 22 -j DROP
]#iptables -t filter -Ln INPUT --line-numbers
]# iptables -t filter -I INPUT 1 --source 192.168.4.254 -p tcp --dport 22 -j ACCEPT
]#iptables -t filter -Ln INPUT --line-numbers
]#iptables -t filter -D INPUT 2
]#iptables -t filter -Ln INPUT --line-numbers
]#iptables -t filter -D INPUT 2
]#service iptables save
]#iptables -t filter -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
---------------------------------------------
在108主机上设置如下防火墙规则。并在客户端测试。
允许所有主机访问本机的网站服务,只允许从254主机连接本机的ssh服务,可以ping其他主机,其他主机不可以ping 自己。INPUT链默认策略是DROP.
108:
]#service iptables start ; chkconfig iptables on
]#iptables -t filter -nL --line-numbers
]#iptables -t filter -F
]#service iptables save
]#iptables -t filter -P INPUT DROP
]#iptables -t filter -A INPUT -s 192.168.4.254 -p tcp --dport 22 -j ACCEPT
]#iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
]#iptables -t filter -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
]#service iptables save
]#iptables -t filter -nL --line-numbers
---------------------------------------------------
网络型防火墙 (架设在2个网络之间的服务器,提供防火墙服务。保护内网网络)
iptables 103:
#eth0 192.168.4.103
#eth1 192.168.2.103
#sed -i '7s/0/1/' /etc/sysctl.conf
#sysctl -p
]#iptables -t filter -P INPUT ACCEPT
]#iptables -F
]#service iptables save
host250 :
ifdown eth0
eth1 192.168.2.250
route add default gw 192.168.2.103
host104
eth0 192.168.4.104
route add default gw 192.168.4.103
host250 : ping -c 2 192.168.4.104
host104 : ping -c 2 192.168.2.250
103 编写防火墙规则
]#iptables -t filter -P FORWARD DROP
]#iptables -t filter -A FORWARD -p tcp --dport 22 -j ACCEPT
]#iptables -t filter -A FORWARD -p tcp --sport 22 -j ACCEPT
]#iptables -t filter -A FORWARD -p tcp --dport 80 -j ACCEPT
]#iptables -t filter -A FORWARD -p tcp --sport 80 -j ACCEPT
host105
eth0 192.168.4.105
route add default gw 192.168.4.103
yum -y install elinks
elinks --dump http://192.168.2.250/test.html
iptables 103 : 不允许105主机访问 250主机上的web服务
]# iptables -nL FORWARD --line-numbers
]# iptables -t filter -I FORWARD 3 -s 192.168.4.105 -p tcp --dport 80 -j DROP
-----------------------------------------------------------------------------------
]#iptables -F
iptables -t filter -P FORWARD ACCEPT
service iptables save
nat表 (转换源地址 转换目标地址)
转换源地址:让内网所有主机共享一个公网ip地址上网
host250 #yum -y install httpd
# echo web250 > /var/www/html/test.html
#service httpd start ;chkconfig httpd on
tail -1 /etc/httpd/log/access.log
iptables103
//允许192.168.4.0/24网段的所有主机上网。(思考:但 不允许主机192.168.4.105上网)
#iptables -t nat -A POSTROUTING -s 192.168.4.0/24 -p tcp --dport 80 -o eth1 -j SNAT --to-source 192.168.2.103
]# iptables -t nat -nL POSTROUTING --line-numbers
]#service iptables save
host104/105
#route add default gw 192.168.4.103
# elinks --dump http://192.168.2.250/test.html
--------------------------------------------------------------------------------------------------------
转换目标地址,发布内网服务器。
104/105 是内网网站服务器
iptables103]#
]# service httpd stop
]# chkconfig httpd off
]# iptables -t nat -A PREROUTING
-i eth1 -d 192.168.2.103 -p tcp --dport 80
-j DNAT --to-destination 192.168.4.104
]# iptables -t nat -nL PREROUTING --line-numbers
]#service iptables save
思考:编写转换22222端口的请求给192.168.4.104 主机的规则
]#iptables -t nat -A PREROUTING -i eth1 -d 192.168.2.103 -p tcp --dport 22222 -j DNAT --to-destination 192.168.4.104
]#service iptables save
host250]# elinks --dump http://192.168.2.103/test.html
host250]# ssh -p 22222 192.168.2.103 //可以连接到104主机
来源:oschina
链接:https://my.oschina.net/u/4311839/blog/3221328