實驗環(huán)境:
server5:MHA管理節(jié)點 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.安裝數(shù)據庫,搭建主從復
一、sshd簡介
1.ssh協(xié)議
SSH 為 Secure Shell 的縮寫 , 是應用層的安全協(xié)議。 SSH是目前較可靠 , 專為遠程登錄會話和其他網絡服務提供安全性的協(xié)議。利用 SSH 協(xié)議可以有效防止遠程管理過程中的信息泄露問題
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(此文件出現(xiàn)表示加密完成)
-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.分發(fā)鑰匙
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 ##連接時發(fā)現(xiàn)直接登陸不需要root登陸系統(tǒng)的密碼認證
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 ##設定用戶白名單,白名單出現(xiàn)默認不在名單中的用戶不能使用sshd
53 Denyusers westos ##設定用戶黑名單,黑名單出現(xiàn)默認不在名單中的用戶可以使用sshd
注意:1.在做這個黑白名單的實驗時,黑白名單不能同時出現(xiàn)
2.改完文件一定一定!要用“systemctl restart ssh.service”刷新文件
3.登錄完一個用戶要先退出才能進行下一個用戶的登錄
四、添加sshd登陸登陸信息
vim /etc/motd ##文件內容就是登陸后顯示的信息
五、用戶的登陸審計
1.w ##查看正在使用當前系統(tǒng)的用戶
-f ##查看使用來源
-i ##顯示IP
/var/run/utmp
2.last ##查看使用過并退出的用戶信息
/var/log/wtmp
3.lastb ##試圖登陸但沒成功的用戶
/var/log/btmp
制:(server6、7、8)
以server6為例:
vim /etc/my.cnf
重啟服務并初始化數(shù)據庫
/etc/init.d/mysqld start
grep password /var/log/mysqld.log
mysql -p
進入數(shù)據庫首先需要重置root用戶密碼
查看master的狀態(tài),并授權slave能通過repl用戶,使用‘Yuanxiaoxi+007‘的密碼從master端進行數(shù)據同步
兩個slave端的配置:
vim /etc/my.cnf
問題:SQL線程顯示為NO,錯誤提示中有“PRIMARY'
解決:在master端 reset master
在slave端:
測試兩個slave是否可以和master保持數(shù)據同步
在master端插入數(shù)據
slave端數(shù)據同步
MHA端的配置:
檢查ssh連接
masterha_check_ssh
原因:MHA manager通過ssh訪問所有的node節(jié)點,各個node節(jié)點同樣也需要ssh來相互發(fā)送不同的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環(huán)境
解決方法:在master上
在檢測時可能還會出現(xiàn)報錯:
slave節(jié)點配置:
在sever7和server8上配置slave為只讀,但不要寫入配置文件,因為master機down掉后可能隨時升級為master
set global read_only=1;
測試:
在server5開啟MHA監(jiān)控模式:
啟動參數(shù)介紹:
–remove_dead_master_conf 該參數(shù)代表當發(fā)生主從切換后,老的主庫的ip將會從配置文件中移除。
–manger_log 日志存放位置
–ignore_last_failover 在缺省情況下,如果MHA檢測到連續(xù)發(fā)生宕機,且兩次宕機間隔不足8小時的話,則不會進行Failover,之所以這樣限制是為了避免ping-pong效應。該參數(shù)代表忽略上次MHA觸發(fā)切換產生的文件, 默認情況下,MHA發(fā)生切換后會在日志目錄下產生app1.failover.complete文件,下次再次切換的時候如果發(fā)現(xiàn)該目錄下存在該文件將不允許觸發(fā)切換,除非在第一次切換后手動刪除該文件,為了方便,這里設置為–ignore_last_failover。
將Master的服務down掉
在server5查看日志:
server7變?yōu)榱薽aster
server8的狀態(tài)
為了后續(xù)的實驗,將server6的服務恢復
/etc/init.d/mysqld start
在線切換:在許多情況下, 需要將現(xiàn)有的主服務器遷移到另外一臺服務器上。 比如主服務器硬件故障,RAID 控制卡需要重建,將主服務器移到性能更好的服務器上等等。
server7上變?yōu)榱藄lave
server6變?yōu)榱薽aster
手動切換:手動failover,這種場景意味著在業(yè)務上沒有啟用MHA自動切換功能,當主服務器故障時,人工手動調用MHA來進行故障切換操作
將server6的mysql服務down掉,在server5上手動切換到server7上
server7已經變?yōu)榱薽aster
通過腳本的方式管理VIP:
vim master_ip_failover
vim master_ip_online_change
vim /etc/masterha/app1.cnf
第一次需要添加虛擬ip
在客戶端測試:可以訪問服務器
將server7的mysql服務down掉,看是否server6能否接替
客戶端使用虛擬ip訪問不受影響,并且虛擬ip自動調轉到了server6上
發(fā)送告警郵件
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日志優(yōu)化
在數(shù)據庫安裝完畢,對于binlog日志參數(shù)設置,有一些參數(shù)的調整,來滿足業(yè)務需求或使性能最大化。Mysql日志主要對io性能產生影響,本次主要關注binlog日志。binlog日志會記錄下數(shù)據庫的所以增刪改操作,當不小心刪除、清空數(shù)據,或數(shù)據庫系統(tǒng)出錯,這時候就可以使用binlog日志來還原數(shù)據庫,簡單來說就是一個記錄備份的東西
參數(shù)binlog_row_image 控制著這種image類型,默認為FULL(log all columns),即記錄before&after images。
該參數(shù)還有兩種,minimal和noblob,minimal表示只記錄after更改后的值,并且如果有主鍵或者非空唯一索引,則只以該字段作為where條件判斷;noblob同full,只是不記錄blob、text列。
慢查詢日志 slow_query_log,這個東西是用來記錄查詢比較慢的sql語句,通過查詢日志來查找哪條sql語句比較慢,然后就可以進行數(shù)據庫或sql語句或程序上的優(yōu)化,簡單來說就是一個優(yōu)化輔助工具
1.開啟慢查詢日志
如果想關閉慢查詢日志,只需要執(zhí)行 set global slow_query_log = off
2.查詢慢查詢時間臨界點:查詢時間高于這個臨界點的都會被記錄到慢查詢日志中
3.設置慢查詢時間臨界點:所有執(zhí)行時間超過1秒的sql都將被記錄到慢查詢文件中
set long_query_time = 1;
4.查看慢查詢日志
比如上面,就表示 sql語句select sleep(10); 執(zhí)行時間為10.001548秒,超出了我們設置的慢查詢時間臨界點10s,所以被記錄下來了。
5.我們通過查看慢查詢日志可以發(fā)現(xiàn),很亂,數(shù)據量大的時候,可能一天會產生幾個G的日志,根本沒有辦法去清晰明了的分析。所以,這里,我們采用工具進行分析。