声明:这是我在大学毕业后进入第一家互联网工作学习的内容
背景
测试人员需要对项目进行压测,有需求查看mysql在高并发的场景下各个指标数据,我问了下公司的dba,推荐pmm这个工具
要求
- mysql服务端需要以下要求:
centos:7.6
mysql:5.7.28
假设ip是172.31.26.11
- grafana服务器需要以下要求
centos:7.6
docker:19.03
假设ip是172.31.26.12
建议grafana和mysql服务端放在不同的机器上,因为一个grafana可以监控好几个mysql服务端指标
安装grafana服务器
一共就3步
拉镜像
创建持久化存储卷
创建容器的运行实例
docker pull percona/pmm-server:latest
docker create -v /opt/prometheus/data -v /opt/consul-data -v /var/lib/mysql -v /var/lib/grafana --name pmm-data percona/pmm-server:latest /bin/true
docker run -d -p 80:80 --volumes-from pmm-data --name pmm-server --restart always percona/pmm-server:latest
注意创建容器的时候要考虑到80端口是否被占用
安装percona到mysql服务端
下载percona到mysql服务端,如果有多个mysql服务端,需要每个都安装percona
pmm-admin config --server 指向grafana服务器的ip
–client-name 添加你的主机名,如果不定义就是本机的hostname
pmm-admin add 指向本机(mysql服务端)ip
wget https://www.percona.com/downloads/pmm-client/pmm-client-1.1.1/binary/tarball/pmm-client-1.1.1.tar.gz
tar -zxvf pmm-client-1.1.1.tar.gz
cd pmm-client-1.1.1
./install
pmm-admin config --server 172.31.26.12 --client-name dev-mysql
pmm-admin add mysql --user root --password '123456' --host 172.31.26.11 --port 3306
添加完成后打开http://172.31.26.12:80
选择Mysql Overview看Mysql监控大盘即可
报错
在创建容器的时候报错
[root@localhost ~]# docker run -d -p 80:80 --volumes-from pmm-data --name pmm-server --restart always percona/pmm-server:latest
e6b329a2617e13ab96d7a3a99716e1c61a2680b26682a71d1631bc17828ec739
docker: Error response from daemon: driver failed programming external connectivity on endpoint pmm-server (7cd37db8f2b05e9232058ded5237c7e5tables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 80 -j DNAT --to-destination 172.17.0.4:80 ! -i docker0: iptables: No chain/target/match
(exit status 1)).
百度了一下,大概原因就是使用的centos7服务器,在部署docker的过程中,因端口问题有启停firewalld服务,在centos7里使用firewalld代替了iptables。在启动firewalld之后,iptables还会被使用,属于引用的关系。所以在docker run的时候,iptables list里没有docker chain,重启docker engine服务后会被加入到iptables list里面。(有必要深入研究一下docker network)
解决方法
大部分说都是重启docker,我感觉很不靠谱,如果是生产环境,谁敢重启docker啊,然后再找了一下docker官网的排错指南,发现了这个问题。
答案特别简单,很有可能你意见关闭了防火墙,那么打开后再执行创建容器的命令,创建成功再关闭防火墙
[root@localhost ~]# systemctl start firewalld
[root@localhost ~]# docker run -d -p 80:80 --volumes-from pmm-data --name pmm-server --restart always percona/pmm-server:latest
e6b329a2617e13ab96d7a3a99716e1c61a2680b26682a71d1631bc17828ec739
[root@localhost ~]# systemctl stop firewalld