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