1、Lepus相關概念:php
一、Lepus簡介:html
Lepus(天兔)是一套由Python+PHP開發的數據庫企業級監控系統。監控系統由Python實現多進程數據採集和告警,PHP實現Web展現和管理。企業經過Lepus能夠對數據庫的實時健康和各類性能指標進行全方位的監控。目前已支持MySQL、Oracle、SQLServer、MongoDB、Redis數據庫的全面監控。Lepus能夠在數據庫出現故障或潛在性能問題時,根據用戶設置及時將數據庫的異常進行報警,通知數據庫管理員以進行處理和優化,幫助企業解決數據庫性能監控問題,及時發現性能和瓶頸,避免由數據庫潛在問題形成的直接經濟損失。Lepus可以查看各類實時性能狀態指標,而且對健康、性能數據進行統計分析,從運維者到決策者多個層面的視角查看相關報表,幫助決策者對將來數據庫容量進行更好的規劃,從而下降了硬件成本。node
二、Lepus目前主要有以下功能和特性:python
(1)無需Agent,遠程監視雲中數據庫mysql
(2)Web直觀的管理和監視數據庫linux
(3)實時MySQL、Oracle、SQLServer、MongoDB、Redis健康監控和告警sql
(4)實時MySQL緩存、Oracle、SQLServer、MongoDB索引、Redis性能監控shell
(5)實時MySQL複製監視和告警、資源監視和分析、InnoDB IO性能監控、表空間增加趨勢分析、慢查詢在線分析數據庫
(6)實時Oracle表空間使用監控apache
(7)實時MongoDB內存使用監控
(8)實時OS主機CPU、內存、磁盤、網絡、IO監控
三、Lepus相關網站:
(1)Lepus官方網站:http://www.lepus.cc
(2)在線手冊:http://www.lepus.cc/manual/index
備註:目前最新版本爲3.8 Beta,更新時間爲2016-05-03
2、準備工做(3個節點都須要執行以下操做):
一、演示環境:
IP |
操做系統 |
主機名 |
角色 |
數據庫版本 |
安裝方式 |
192.168.1.144 |
CentOS 7.6 x86_64 |
node1 |
master |
5.7.26-log MySQL Community Server |
rpm |
192.168.1.145 |
CentOS 7.6 x86_64 |
node2 |
slave |
5.7.26-log MySQL Community Server |
rpm |
192.168.1.146 |
CentOS 7.6 x86_64 |
node3 |
lepus |
10.1.38-MariaDB Source distribution |
Xampp |
二、關閉SELinux和firewalld
三、配置epel源
四、配置節點時間同步
五、配置主機名
六、配置/etc/hosts文件:
# vim /etc/hosts
192.168.1.144 node1
192.168.1.145 node2
192.168.1.146 node3
七、下載MySQL 5.7軟件包,https://dev.mysql.com/downloads/mysql/5.7.html#downloads
3、安裝配置MySQL GTID主從複製(如未特殊說明,在master和slave兩個節點中執行以下操做):
一、卸載CentOS 7.6自帶的MariaDB:
# rpm -qa | grep -i mariadb --> mariadb-libs-5.5.60-1.el7_5.x86_64
# rpm -e --nodeps mariadb-libs-5.5.60-1.el7_5.x86_64
二、若是以前安裝過MySQL,先卸載:# rpm -qa | grep -i mysql
三、若是存在/etc/my.cnf配置文件,先刪除:# rm -rf /etc/my.cnf
四、將軟件包上傳至主機/tmp目錄下:
mysql-community-client-5.7.26-1.el7.x86_64.rpm
mysql-community-libs-5.7.26-1.el7.x86_64.rpm
mysql-community-common-5.7.26-1.el7.x86_64.rpm
mysql-community-libs-compat-5.7.26-1.el7.x86_64.rpm
mysql-community-devel-5.7.26-1.el7.x86_64.rpm
mysql-community-server-5.7.26-1.el7.x86_64.rpm
五、安裝MySQL軟件包:# yum -y localinstall *.rpm
六、初始化MySQL:# mysqld --initialize --user=mysql --datadir=/var/lib/mysql
備註:初始化以前確保/var/lib/mysql目錄爲空
七、配置GTID主從複製:
# mv /etc/my.cnf /etc/my.cnf.bak
# vim /etc/my.cnf
master節點:
[mysqld]
port=3306
socket=/var/lib/mysql/mysql.sock
datadir=/var/lib/mysql
pid-file=/var/run/mysqld/mysqld.pid
log-error=/var/log/mysqld.log
lower_case_table_names=1
character_set_server=utf8mb4
collation_server=utf8mb4_general_ci
innodb_file_per_table=1
skip_name_resolve=1
slow_query_log=1
slow_query_log_file=mysql-slow.log
symbolic-links=0
explicit_defaults_for_timestamp=1
sync_binlog=1
innodb_flush_log_at_trx_commit=1
log_bin=mysql-bin
log_bin_index=mysql-bin.index
binlog_format=row
server_id=1
gtid_mode=on
enforce_gtid_consistency=on
備註:
(1)從MySQL 5.7版本開始,gtid_mode支持動態修改,gtid_mode的可取值爲:
a、off:不支持GTID事務,生成的是匿名事務,slave節點也只能應用匿名事務
b、off_permissive:生成的是匿名事務,slave節點能夠應用匿名事務和GTID事務
c、on_permissive:生成的是GTID事務,slave節點能夠應用匿名事務和GTID事務(此步驟操做完成後,master節點的二進制日誌就會變成GTID模式)
d、on:支持GTID事務,生成的是GTID事務,slave節點也只能應用GTID事務
注意:在生產環境中,可能有把傳統複製改成GTID複製模式的需求,gtid_mode雖然支持動態修改,但不支持跳躍式修改,好比從on_permissive修改成off是不能夠的。
(2)enforce_gtid_consistency主要用於不讓違反GTID的操做執行,可取值爲:
a、off:容許全部操做
b、on:不容許有違反GTID的操做,且報錯
c、warn:MySQL 5.7版本新增,容許全部操做,可是違反GTID的操做會提示警告
slave節點:
[mysqld]
port=3306
socket=/var/lib/mysql/mysql.sock
datadir=/var/lib/mysql
pid-file=/var/run/mysqld/mysqld.pid
log-error=/var/log/mysqld.log
lower_case_table_names=1
character_set_server=utf8mb4
collation_server=utf8mb4_general_ci
innodb_file_per_table=1
skip_name_resolve=1
slow_query_log=1
slow_query_log_file=mysql-slow.log
symbolic-links=0
explicit_defaults_for_timestamp=1
relay_log=relay-log
relay_log_index=relay-log.index
server_id=2
read_only=1
gtid_mode=on
enforce_gtid_consistency=on
備註:
(1)slave節點只能讀不能寫
(2)中繼日誌默認不存在
(3)MySQL 5.6版本中使用GTID複製模式,必需要開啓參數log_slave_updates=1,但在MySQL 5.7版本中使用gtid_executed系統表記錄已經執行的GTID集合信息,因此就不用開啓參數log_slave_updates=1,開啓的意義是把relay log中的日誌內容再次記錄到slave節點的本地binlog中。
八、啓動MySQL服務:
# systemctl start mysqld.service
# ss -tunlp | grep mysqld
# systemctl enable mysqld.service
# systemctl status mysqld.service
九、查看root@localhost用戶的初始密碼:# grep password /var/log/mysqld.log
十、配置MySQL安全向導:# mysql_secure_installation
十一、master節點建立具備複製權限的用戶repluser:
# mysql -uroot -p
mysql> create user 'repluser'@'192.168.1.%' identified by '123456';
mysql> grant replication slave on *.* to 'repluser'@'192.168.1.%';
mysql> flush privileges;
mysql> show global variables like 'server_uuid';
備註:內容和/var/lib/mysql/auto.cnf文件中的內容一致
十二、slave節點使用具備複製權限的用戶repluser鏈接至master節點:
# mysql -uroot -p
mysql> change master to master_host='192.168.1.144',master_user='repluser',master_password='123456',master_port=3306,master_auto_position=1;
mysql> show slave status\G
備註:
(1)Slave_IO_Running和Slave_SQL_Running的值,默認爲No
(2)自動在/var/lib/mysql數據目錄中建立relay-log.000001、relay-log.index和relay-log.info文件
1三、slave節點啓動複製線程:
mysql> start slave;
備註:
(1)start slave等同於分別執行start slave io_thread和start slave sql_thread
(2)stop slave表示中止主從複製線程
(3)重啓slave節點所在的主機,複製線程會自動啓動
mysql> show slave status\G
備註:
(1)只有當Slave_IO_Running和Slave_SQL_Running的值都爲Yes時,複製線程纔算啓動成功
(2)Seconds_Behind_Master的值爲0,說明slave節點沒有落後於master節點
(3)複製時的詳細信息記錄在slave節點的錯誤日誌/var/log/mysqld.log中
(4)slave節點start slave時,會計算show slave status中Retrieved_Gtid_Set和Executed_Gtid_Set的並集,而後將此GTID並集發送給master節點。master節點會使用slave節點請求的GTID集合和master節點自身的gtid_executed比較,把slave節點GTID集合裏缺失的事務所有發送給slave節點。若是slave節點缺失的GTID已經被master節點清除,則slave節點會提示1236錯誤,I/O線程中斷。
1四、master節點查看GTID相關信息:
mysql> show master status;
mysql> show slave hosts;
mysql> show global variables like '%gtid%';
備註:
(1)gtid_executed:當前實例上已經執行過的GTID集合,實際上包含了全部記錄到binlog中的事務。若是set sql_log_bin=0,執行的事務不會生成binlog事件,也不會記錄到gtid_executed中。執行reset master能夠將變量@@global.gtid_executed清空。
(2)gtid_owned:當前實例正在執行中的GTID,以及對應的線程ID
(3)gtid_purged:記錄當前實例執行過,但已被清除的GTID集合。gtid_purged是gtid_executed的子集。只有gtid_executed爲空時才能手動設置gtid_purged變量,此時會將gtid_executed更新爲和gtid_purged相同的值。
mysql> show variables like '%gtid%';
備註:gtid_next,session會話級別的變量,如何產生下一個GTID,可取值爲
(1)automatic:默認取值,在每次事務提交時自動生成新的GTID,它從當前已執行的GTID集合(即gtid_executed)中,找一個大於0的、未使用的transaction_id最小值做爲下個事務的GTID,同時在binlog的實際更新事務事件前插入一條set gtid_next事件,因此即便是同一個server_uuid,也不能經過transaction_id的大小來判斷事務的順序。
(2)anonymous:執行事務不會產生GTID
(3)顯示指定GTID:能夠指定任意合法的GTID,但不能是當前gtid_executed中已經包含的GTID
mysql> show processlist;
1五、slave節點查看GTID相關信息:
mysql> show slave status\G
mysql> show global variables like '%gtid%';
mysql> show variables like '%gtid%';
mysql> show processlist;
1六、master節點建立測試數據:
mysql> create database db;
mysql> create table db.tb(id int unsigned auto_increment primary key not null,age int not null);
mysql> desc db.tb;
mysql> insert into db.tb(age) values(35),(40);
mysql> select * from db.tb;
mysql> show master status;
1七、slave節點查看測試數據:
mysql> show databases like 'db';
mysql> select * from db.tb;
mysql> show slave status\G
mysql> show global variables like '%gtid%';
4、安裝啓動Lepus(如未特殊說明,在lepus節點中執行以下操做):
一、安裝依賴軟件包:# yum -y install openssl-devel python-devel xterm libffi-devel python-setuptools zlib-devel
二、安裝Xampp:
Lepus的安裝須要LAMP環境,此處不推薦使用yum和rpm方式安裝,建議使用Xampp集成環境包進行安裝。Xampp是一個可靠穩定的LAMP套件,目前已被諸多公司用於生產服務器的部署,目前Lepus的開發環境、測試環境及線上官網的Web環境都運行在Xampp環境下,且很是穩定。
特別說明:Lepus不支持PHP 7.x的版本,因此不能下載安裝目前最新版本xampp-linux-x64-7.3.7-0-installer.run,該軟件包集成的PHP版本爲7.3.7。
Xampp下載地址:https://www.apachefriends.org/download.html
# chmod +x xampp-linux-x64-5.6.40-1-installer.run
# ./xampp-linux-x64-5.6.40-1-installer.run
備註:
(1)Xampp默認安裝路徑:/opt/lampp
(2)Apache默認配置文件:/opt/lampp/etc/httpd.conf、/opt/lampp/etc/extra/httpd-xampp.conf
(3)PHP默認配置文件:/opt/lampp/etc/php.ini
(4)MySQL默認配置文件:/opt/lampp/etc/my.cnf
(5)ProFTPD默認配置文件:/opt/lampp/etc/proftpd.conf
(6)Web代碼默認上傳路徑:/opt/lampp/htdocs
三、啓動Xampp服務:# /opt/lampp/lampp start
# /opt/lampp/lampp --help
四、配置Xampp安全向導:# /opt/lampp/lampp security
五、測試Xampp集成環境是否正常運行:瀏覽器中輸入192.168.1.146
六、配置系統環境變量:
# vim /etc/profile.d/xampp.sh
export PATH=/opt/lampp/bin:$PATH
export LD_LIBRARY_PATH=/opt/lampp/lib:$LD_LIBRARY_PATH
# . /etc/profile.d/xampp.sh
七、查看Python版本:# python --version
特別說明:Lepus暫不支持Python 3.x版本
八、安裝Python基礎模塊:
MySQLdb爲Python鏈接和操做MySQL的類庫,若是準備使用Lepus監控MySQL數據庫,那麼該模塊必須安裝,此處使用yum方式安裝。
# yum -y install MySQL-python
備註:也可經過Python模塊地址:https://pypi.org/project/MySQL-python/,下載MySQL-python-1.2.5.zip進行安裝,或直接使用pip命令進行安裝:# easy_install pip # pip install MySQL-python
九、測試Python基礎模塊是否正常運行:
# python
>>> import MySQLdb
>>> exit()
十、下載Lepus採集器:http://www.lepus.cc/soft/index
十一、測試MySQL驅動是否正常運行:
# cd Lepus_v3.8_beta/python
# python test_driver_mysql.py
十二、建立監控數據庫,並授予相關用戶指定權限:
# /opt/lampp/bin/mysql -uroot -p
MariaDB [(none)]> create database lepus default character set utf8;
MariaDB [(none)]> grant all on lepus.* to 'lepus_user'@'192.168.1.%' identified by '123456';
MariaDB [(none)]> flush privileges;
備註:已配置系統環境變量,可直接使用命令# mysql -uroot -p
1三、導入表結構和表數據文件:
# cd Lepus_v3.8_beta/sql
# mysql -uroot -p lepus < lepus_table.sql
# mysql -uroot -p lepus < lepus_data.sql
1四、安裝Lepus採集器:
# cd Lepus_v3.8_beta/python
# chmod +x install.sh
# ./install.sh
備註:Lepus默認安裝在/usr/local/lepus目錄下,可經過install.sh腳本修改其默認安裝路徑
1五、授予腳本文件執行權限:
# cd /usr/local/lepus
# chmod +x *.sh
# chmod +x *.py
1六、修改監控機MySQL數據庫鏈接信息:
# vim /usr/local/lepus/etc/config.ini
1七、啓動Lepus採集進程:
# lepus start
# lepus --help
# tail /usr/local/lepus/logs/lepus.log
1八、將lepus_monitor腳本部署爲任務計劃:
# crontab -e
*/5 * * * * /usr/local/lepus/lepus_monitor >> /tmp/lepus_monitor.log
備註:該腳本能夠監控Lepus是否正常運行
5、配置Lepus Web管理平臺:
一、登陸Lepus Web管理平臺:
# mkdir -pv /opt/lampp/htdocs/lepus
# cd Lepus_v3.8_beta/php
# cp -rf * /opt/lampp/htdocs/lepus/
# vim /opt/lampp/htdocs/lepus/application/config/database.php
# /opt/lampp/lampp restart
輸入http://192.168.1.146/lepus,登陸Lepus Web管理平臺,默認的管理員帳號密碼是admin/Lepusadmin:
二、修改admin帳號默認密碼:右上角admin --> 我的面板 --> 保存
三、配置監控項目、告警和郵件:配置中心 --> 全局設置 --> 保存
四、測試郵件模塊是否正常運行:
# cd /usr/local/lepus
# python test_send_mail.py
五、添加MySQL主機:
(1)master節點建立監控用戶,並授予指定權限:
mysql> create user 'lepus_monitor'@'192.168.1.%' identified by '123456';
mysql> grant all on *.* to 'lepus_monitor'@'192.168.1.%';
mysql> flush privileges;
(2)配置中心 --> MySQL --> 新增 --> 保存
(3)儀表盤:
六、配置主機監控:
(1)三個節點安裝SNMP服務:# yum -y install net-snmp net-snmp-utils
(2)三個節點部署SNMP服務:# vim /etc/snmp/snmpd.conf
a、註釋com2sec notConfigUser default public,新增:com2sec notConfigUser 192.168.1.146 lepus
b、取消註釋view all included .1 80
c、註釋access notConfigGroup "" any noauth exact systemview none none
新增:access notConfigGroup "" any noauth exact all none none
(3)三個節點啓動SNMP服務:
# systemctl start snmpd.service
# systemctl enable snmpd.service
# systemctl status snmpd.service
# ss -tunlp | grep 161
(4)lepus節點執行命令:# snmpwalk -v 1 -c lepus 192.168.1.144 # snmpwalk -v 1 -c lepus 192.168.1.145
備註:獲取到信息表示SNMP服務正常運行
(5)配置中心 --> 操做系統 --> 新增 --> 保存
(6)lepus節點執行check_os.py腳本:
# cd /usr/local/lepus
# python check_os.py
(7)儀錶盤:
(8)主機監控 --> 健康監控
七、配置MySQL監控 --> 複製監控:
(1)master和slave節點分別執行操做:mysql> set global show_compatibility_56=on;
(2)lepus節點執行以下操做:
# cd /usr/local/lepus
# python check_mysql.py
會提示以下信息:
2019-07-19 17:01:35 [INFO] check mysql controller started.
2019-07-19 17:01:36 [WARNING] check mysql 192.168.1.144:3306 failure: 1055 Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'information_schema.processlist.USER' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
2019-07-19 17:01:36 [WARNING] check mysql 192.168.1.144:3306 failure: sleep 3 seconds and check again.
(3)master和slave節點分別執行以下操做:
mysql> select @@sql_mode;
mysql> set @@global.sql_mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION";
備註:去除ONLY_FULL_GROUP_BY模式,退出後從新登陸
mysql> \q
mysql> select @@sql_mode;
(4)lepus節點執行以下操做:
# cd /usr/local/lepus
# python check_mysql.py
會提示以下信息:
2019-07-19 17:07:24 [INFO] check mysql controller started.
check_mysql.py:254: Warning: 'INFORMATION_SCHEMA.GLOBAL_VARIABLES' is deprecated and will be removed in a future release. Please use performance_schema.global_variables instead
gtid_mode=cur.execute("select * from information_schema.global_variables where variable_name='gtid_mode';")
check_mysql.py:261: Warning: 'INFORMATION_SCHEMA.GLOBAL_VARIABLES' is deprecated and will be removed in a future release. Please use performance_schema.global_variables instead
read_only=cur.execute("select * from information_schema.global_variables where variable_name='read_only';")
check_mysql.py:220: Warning: 'INFORMATION_SCHEMA.GLOBAL_VARIABLES' is deprecated and will be removed in a future release. Please use performance_schema.global_variables instead
gtid_mode=cur.execute("select * from information_schema.global_variables where variable_name='gtid_mode';")
check_mysql.py:227: Warning: 'INFORMATION_SCHEMA.GLOBAL_VARIABLES' is deprecated and will be removed in a future release. Please use performance_schema.global_variables instead
read_only=cur.execute("select * from information_schema.global_variables where variable_name='read_only';")
2019-07-19 17:07:34 [INFO] check mysql controller finished.
(5)儀表盤:
(6)MySQL監控 --> 複製監控
八、配置MySQL監控 --> 慢查詢分析:
Lepus的慢查詢分析平臺是獨立於監控系統的模塊,該功能須要使用percona-toolkit工具來採集和記錄慢查詢日誌,並須要部署一個shell腳原本進行數據採集,該腳本會自動開啓數據庫的慢查詢日誌,並對慢查詢日誌進行按小時的切割操做,收集慢查詢日誌的數據到監控機數據庫,以後就能夠經過Lepus系統分析慢查詢。
(1)master和slave節點分別執行以下操做:
a、安裝依賴軟件包:# yum -y install perl-IO-Socket-SSL perl-DBI perl-DBD-MySQL perl-Time-HiRes
b、配置percona源:# yum -y install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
c、安裝percona-toolkit工具:# yum -y install percona-toolkit
(2)lepus節點執行以下操做:
a、授予lepus_slowquery.sh慢查詢分析腳本可執行權限:
# chmod +x /usr/local/lepus/client/mysql/lepus_slowquery.sh
b、修改lepus_slowquery.sh腳本中的配置信息:# vim /usr/local/lepus/client/mysql/lepus_slowquery.sh
lepus_db_host="192.168.1.146"
lepus_db_user="lepus_user"
lepus_db_password="123456"
mysql_client="/usr/bin/mysql"
mysql_host="192.168.1.144"
mysql_user="lepus_monitor"
mysql_password="123456"
slowquery_dir="/var/lib/mysql/"
lepus_server_id=1
備註:lepus_server_id的值來源於配置中心 --> MySQL列表中的ID
c、改變lepus_slowquery.sh腳本的文件格式爲unix,在vim中執行:set fileformat=unix
d、將lepus_slowquery.sh腳本分別發送至master和slave節點的/usr/local/sbin目錄下:
# scp -p /usr/local/lepus/client/mysql/lepus_slowquery.sh root@192.168.1.144:/usr/local/sbin
# scp -p /usr/local/lepus/client/mysql/lepus_slowquery.sh root@192.168.1.145:/usr/local/sbin
(3)slave節點修改lepus_slowquery.sh腳本:# vim /usr/local/sbin/lepus_slowquery.sh
mysql_host="192.168.1.145"
lepus_server_id=2
(4)master和slave節點分別將/usr/loca/sbin/lepus_slowquery.sh腳本加入任務計劃:
# crontab -e
*/10 * * * * /usr/local/sbin/lepus_slowquery.sh &> /dev/null
(5)master和slave節點分別測試MySQL慢查詢:
a、查看變量slow_query_log的值:mysql> show global variables like 'slow_query_log';
備註:慢查詢日誌已啓用
b、查看變量long_query_time的值:mysql> show global variables like 'long_query_time';
備註:超過1秒的查詢將被斷定爲慢查詢
c、執行測試查詢:
mysql> use db;
mysql> select sleep(10);
備註:
Ø 會在master和slave節點的/var/lib/mysql目錄中生成相似slowquery_2019071917.log的日誌文件
Ø pt-query-digest命令執行的日誌保存在/tmp/lepus_slowquery.log日誌文件中
(6)MySQL監控 --> 慢查詢分析
九、經常使用MySQL監控界面展現:
(1)儀表盤:
(2)配置中心 --> MySQL
(3)配置中心 --> 操做系統
(4)MySQL監控 --> 健康監控
(5)MySQL監控 --> 資源監控
(6)MySQL監控 --> 鍵緩存監控
(7)MySQL監控 --> InnoDB監控
(8)MySQL監控 --> 複製監控
(9)MySQL監控 --> 慢查詢分析
(10)MySQL監控 --> AWR報告
(11)主機監控 --> 健康監控
(12)主機監控 --> 磁盤
(13)主機監控 --> 磁盤IO