实验环境:
server5:MHA管理节点 172.25.66.5
server6:myslq master 172.25.66.6
server7:mysql Candicate slave 172.25.66.7
server8:mysql slave 172.2.66.8
1.安装数据库,搭建主从复
一、sshd简介
1.ssh协议
SSH 为 Secure Shell 的缩写 , 是应用层的安全协议。 SSH是目前较可靠 , 专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题
2.连接方式
ssh username@ip ##文本模式的链接
ssh -X username@ip ##可以在链接成功后开机图形
注意:
第一次链接陌生主机是要建立认证文件, 所以会询问是否建立,需要树入yes
在次链接此台主机时,因为已经生成~/.ssh/know_hosts文件所以不需要再次输入yes
远程复制:
scp file root@ip:dir ##上传
scp root@ip:file dir ##下载
3.设定ip
如果设客户端ip为172.25.254.100,服务端ip为172.25.254.200
4.查看本台虚拟机的ip
二、sshd的key认证
1.生成锁和钥匙
[root@localhost Desktop]# ssh-keygen ##生成密钥的命令
Generating public/private rsa key pair. ##提示生成公钥私钥的存放路径和文件名
Enter file in which to save the key (/root/.ssh/id_rsa): ##通常不用改,回车
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): ##通常直接回车
Enter same passphrase again: ##回车
Your identification has been saved in /root/.ssh/id_rsa. ##私钥(钥匙)
Your public key has been saved in /root/.ssh/id_rsa.pub. ##公钥(锁)
The key fingerprint is:
aa:1c:25:78:7d:40:57:64:7e:5f:17:da:45:03:34:e6 root@localhost
The key's randomart image is:
+–[ RSA 2048]—-+
| o . |
| o o o o |
| + * . = |
| . = = . = |
| . S . o . |
| o .. .E |
| .+ . |
| ..o |
| .. |
+—————–+
2.加密ssh用户的认证
在服务端
ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.254.200
ssh-copy-id ##加密命令
-i ##指定密钥
/root/.ssh/id_rsa.pub ##密钥
root ##加密用户
172.25.254.200 ##主机ip
[root@server .ssh]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.254.200 ##加密sshd服务
The authenticity of host '172.25.254.200 (172.25.254.200)' can't be established.
ECDSA key fingerprint is eb:24:0e:07:96:26:b1:04:c2:37:0c:78:2d:bc:b0:08.
Are you sure you want to continue connecting (yes/no) yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed — if you are prompted now it is to install the new keys
root@172.25.254.200's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'root@172.25.254.200'"
and check to make sure that only the key(s) you wanted were added.
[root@localhost Desktop]# ls -l /root/.ssh ##查看/root/.ssh中有没有生成密钥
total 16
-rw——-. 1 root root 396 4月 12 05:21 authorized_keys(此文件出现表示加密完成)
-rw——-. 1 root root 1679 4月 12 05:20 id_rsa(钥匙)
-rw-r–r–. 1 root root 396 4月 12 05:20 id_rsa.pub(锁)
-rw-r–r–. 1 root root 176 4月 12 05:20 known_hosts(历史记录)
3.分发钥匙
scp /root/.ssh/id_rsa root@172.25.254.100:/root/.ssh/
[root@localhost Desktop]# scp /root/.ssh/id_rsa root@172.25.254.100:/root/.ssh
root@172.25.254.100's password:
id_rsa 100% 1679 1.6KB/s 00:00
4.测试
在客户主机中(172.25.254.100)
ssh root@172.25.254.200 ##连接时发现直接登陆不需要root登陆系统的密码认证
5.在服务端删除加密的文件
rm -fr /root/.ssh/authorized_keys ##当此文件被删除,客户端解密文件失效
[root@localhost Desktop]# rm -fr /root/.ssh/authorized_keys
[root@localhost Desktop]# systemctl restart sshd.service ##一定要刷新服务器
[root@localhost Desktop]# ll /root/.ssh
total 12
-rw——-. 1 root root 1679 4月 12 05:20 id_rsa
-rw-r–r–. 1 root root 396 4月 12 05:20 id_rsa.pub
-rw-r–r–. 1 root root 352 4月 12 05:24 known_hosts
此时,在客户端连接需要密码
cp /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys ##从新生成锁文件,解密文件功能恢复
三、sshd的安全配置
vim /etc/ssh/sshd_config ##更改
systemctl restart sshd.service ##刷新
1.禁止原始认证方式
78 PasswordAuthentication no|yes ##开启或关闭ssh的默认认证方式
–
客户端,在服务端关闭ssh的默认认证方式后,任何用户都不能登录服务端。
48 PermitRootLogin yes|no ##是否允许root用户通过sshd服务的认证
52 Allowusers student westos ##设定用户白名单,白名单出现默认不在名单中的用户不能使用sshd
53 Denyusers westos ##设定用户黑名单,黑名单出现默认不在名单中的用户可以使用sshd
注意:1.在做这个黑白名单的实验时,黑白名单不能同时出现
2.改完文件一定一定!要用“systemctl restart ssh.service”刷新文件
3.登录完一个用户要先退出才能进行下一个用户的登录
四、添加sshd登陆登陆信息
vim /etc/motd ##文件内容就是登陆后显示的信息
五、用户的登陆审计
1.w ##查看正在使用当前系统的用户
-f ##查看使用来源
-i ##显示IP
/var/run/utmp
2.last ##查看使用过并退出的用户信息
/var/log/wtmp
3.lastb ##试图登陆但没成功的用户
/var/log/btmp
制:(server6、7、8)
以server6为例:
vim /etc/my.cnf
重启服务并初始化数据库
/etc/init.d/mysqld start
grep password /var/log/mysqld.log
mysql -p
进入数据库首先需要重置root用户密码
查看master的状态,并授权slave能通过repl用户,使用‘Yuanxiaoxi+007‘的密码从master端进行数据同步
两个slave端的配置:
vim /etc/my.cnf
问题:SQL线程显示为NO,错误提示中有“PRIMARY'
解决:在master端 reset master
在slave端:
测试两个slave是否可以和master保持数据同步
在master端插入数据
slave端数据同步
MHA端的配置:
检查ssh连接
masterha_check_ssh
原因:MHA manager通过ssh访问所有的node节点,各个node节点同样也需要ssh来相互发送不同的relay log文件,所以有必要在每一个node和manager之间配置ssh无密码登陆
ssh-keygen
ssh-copy-id 172.25.66.5
scp -r .ssh/ 172.25.66.6:
scp -r .ssh/ 172.25.66.7:
scp -r .ssh/ 172.25.66.8:
检查repl环境
解决方法:在master上
在检测时可能还会出现报错:
slave节点配置:
在sever7和server8上配置slave为只读,但不要写入配置文件,因为master机down掉后可能随时升级为master
set global read_only=1;
测试:
在server5开启MHA监控模式:
启动参数介绍:
–remove_dead_master_conf 该参数代表当发生主从切换后,老的主库的ip将会从配置文件中移除。
–manger_log 日志存放位置
–ignore_last_failover 在缺省情况下,如果MHA检测到连续发生宕机,且两次宕机间隔不足8小时的话,则不会进行Failover,之所以这样限制是为了避免ping-pong效应。该参数代表忽略上次MHA触发切换产生的文件, 默认情况下,MHA发生切换后会在日志目录下产生app1.failover.complete文件,下次再次切换的时候如果发现该目录下存在该文件将不允许触发切换,除非在第一次切换后手动删除该文件,为了方便,这里设置为–ignore_last_failover。
将Master的服务down掉
在server5查看日志:
server7变为了master
server8的状态
为了后续的实验,将server6的服务恢复
/etc/init.d/mysqld start
在线切换:在许多情况下, 需要将现有的主服务器迁移到另外一台服务器上。 比如主服务器硬件故障,RAID 控制卡需要重建,将主服务器移到性能更好的服务器上等等。
server7上变为了slave
server6变为了master
手动切换:手动failover,这种场景意味着在业务上没有启用MHA自动切换功能,当主服务器故障时,人工手动调用MHA来进行故障切换操作
将server6的mysql服务down掉,在server5上手动切换到server7上
server7已经变为了master
通过脚本的方式管理VIP:
vim master_ip_failover
vim master_ip_online_change
vim /etc/masterha/app1.cnf
第一次需要添加虚拟ip
在客户端测试:可以访问服务器
将server7的mysql服务down掉,看是否server6能否接替
客户端使用虚拟ip访问不受影响,并且虚拟ip自动调转到了server6上
发送告警邮件
server5:
vim root/MHA/send_report
cp send_report /usr/local/bin/
cd /usr/local/bin/
chmod +x send_report
vim /etc/masterha/app1.cnf
测试:
mysql binlog日志优化
在数据库安装完毕,对于binlog日志参数设置,有一些参数的调整,来满足业务需求或使性能最大化。Mysql日志主要对io性能产生影响,本次主要关注binlog日志。binlog日志会记录下数据库的所以增删改操作,当不小心删除、清空数据,或数据库系统出错,这时候就可以使用binlog日志来还原数据库,简单来说就是一个记录备份的东西
参数binlog_row_image 控制着这种image类型,默认为FULL(log all columns),即记录before&after images。
该参数还有两种,minimal和noblob,minimal表示只记录after更改后的值,并且如果有主键或者非空唯一索引,则只以该字段作为where条件判断;noblob同full,只是不记录blob、text列。
慢查询日志 slow_query_log,这个东西是用来记录查询比较慢的sql语句,通过查询日志来查找哪条sql语句比较慢,然后就可以进行数据库或sql语句或程序上的优化,简单来说就是一个优化辅助工具
1.开启慢查询日志
如果想关闭慢查询日志,只需要执行 set global slow_query_log = off
2.查询慢查询时间临界点:查询时间高于这个临界点的都会被记录到慢查询日志中
3.设置慢查询时间临界点:所有执行时间超过1秒的sql都将被记录到慢查询文件中
set long_query_time = 1;
4.查看慢查询日志
比如上面,就表示 sql语句select sleep(10); 执行时间为10.001548秒,超出了我们设置的慢查询时间临界点10s,所以被记录下来了。
5.我们通过查看慢查询日志可以发现,很乱,数据量大的时候,可能一天会产生几个G的日志,根本没有办法去清晰明了的分析。所以,这里,我们采用工具进行分析。