技术

SCRAM authentication requires libpq version 10 or above 【升级PG扩展版本】

August 25, 2022

当程序错误日志中出现
pg_connect(): Unable to connect to PostgreSQL server: SCRAM authentication requires libpq version 10 or above
这代表着当前服务器postgresql-devel版本低于10,需要安装10或以上版本并且重新编译pdo_pgsql、pgsql、pq模块。

1.安装新版本,本文安装的是10

yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-    
latest.noarch.rpm -y
yum install postgresql10-devel -y

2.备份文件,修改指向到10版本,如果此步不做重新编译安装模块还是老版本的。

mv /usr/bin/pg_config /usr/bin/pg_config_9_bak
ln -s /usr/pgsql-10/bin/pg_config /usr/bin/

3.进入php安装包中重新编译安装模块

cd /data/tmp/php7/ext/pdo_pgsql
/data/app/php7/bin/phpize
./configure --with-php-config=/data/app/php7/bin/php-config
make clean
make && make install

cd /data/tmp/php7/ext/pgsql
/data/app/php7/bin/phpize
./configure --with-php-config=/data/app/php7/bin/php-config
make clean
make && make install

wget https://pecl.php.net/get/pq-2.2.0.tgz
cd pq-2.2.0
/data/app/php7/bin/phpize
./configure --with-php-config=/data/app/php7/bin/php-config
make clean
make && make install

附php.ini配置:
extension=raphf.so #安装pq模块前必须安装此模块
extension=pq.so
extension=pgsql.so
extension=pdo_pgsql.so

技术

saltstack安装与部署

August 8, 2019

实验环境:
Centos7
saltstack版本:2019.2
1台master,3台minion。

概要:
本文从零开始安装,并包含Web UI、批量安装minion内容。

从服务器步骤:
1、安装rpm

yum install https://repo.saltstack.com/yum/redhat/salt-repo-2019.2.el7.noarch.rpm   #固定版本 2019.2版

master服务器步骤:
1、设置源与环境

curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum makecache
yum install -y epel-release
yum install https://repo.saltstack.com/yum/redhat/salt-repo-2019.2.el7.noarch.rpm  #固定版本 2019.2版
yum clean expire-cache

2、安装master服务

yum install salt-master

3、安装minion服务(可选)

yum install salt-minion

4、安装api服务

yum install salt-api

5、安装ssh(用于批量安装minion)

yum install salt-ssh

6、安装halite(web UI)

yum install python-pip -y && sudo pip install --upgrade pip
pip install -U halite -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
pip install cherrypy -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
pip install paste -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
yum install python-devel gcc -y
pip install gevent -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
pip install pyopenssl -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

PS:用国内源下载稳定一些,减少砸键盘概率
7、修改master服务配置
7.1、添加一个用于用户

useradd xiz
passwd xiz

7.2、修改配置

  external_auth:
  pam:
    xiz:            //此用户设置为系统在用的用户
      - .*
      - '@runner'
 
    halite:
      level: 'debug'
      server: 'cherrypy'
      host: '0.0.0.0'
      port: '8080'
      cors: False
      tls: False

7.3、关闭防火墙

systemctl stop firewalld && systemctl disable firewalld

7.4、参数详解
external_auth : -- 开启扩展认证系统
pam : -- 使用 pam 作为扩展的认证系统
xiz : -- 需要进行认证的系统用户名
- . * -- 认证通过后可以使用任何模块
- '@runner' -- 认证通过后可以使用 runner

halite : -- 表示开启 halite
level : -- 日志等级,默认是 info
server : -- 表示允许 halite 的 webserver ,支持 cherrypy , paste ,gevent ,使用哪个填哪个
host : -- 顾名思义监听地址
port : -- 监听端口
cors : -- 是否开启 cors 跨域请求共享
tls : -- 是否使用 TLS / SSL ( https ) 加密访问
certpath : -- CA 颁发的证书文件
keypath : -- 加密访问的私钥文件
pempath : -- 拥有证书和私钥的文件
7.5、打开访问web ui
http://IP:8080
8、对服务进行启动配置
8.1、重启服务(因为安装好后还没启动)

systemctl restart salt-master && systemctl restart salt-minion && systemctl restart salt-api

8.2、开启自启

systemctl enable salt-master && systemctl enable salt-minion && systemctl enable salt-api

9、使用salt-ssh进行批量安装minion服务
9.1、编写需要被安装的主机IP地址保存到host.txt

cat > host.txt <<EOF
192.168.0.101
192.168.0.102
192.168.0.103
EOF

9.2、利用脚本导入主机ip到/etc/salt/roster文件

#!/bin/bash
USERNAME=root
USERPASSWD=123456
PORT=22
for i in $(cat host.txt)
do
  cat >> /etc/salt/roster <<EOF
$i:
  host: $i
  user:  $USERNAME
  password:  $USERPASSWD
  port:  $PORT

EOF
done

9.3、测试SSH连接是否成功

salt-ssh \* test.ping

9.4、编写sls

mkdir /srv/salt/minions
mkdir /srv/salt/minions/conf 
mkdir /srv/salt/minions/yum.repos.d
cp /etc/yum.repos.d/CentOS-Base.repo /srv/salt/minions/yum.repos.d
cp /etc/yum.repos.d/epel.repo /srv/salt/minions/yum.repos.d

修改/srv/salt/minions/yum.repos.d/epel.repo文件[epel]中的gpgcheck=1为0

cat > /srv/salt/minions/install.sls <<EOF
minion_yum:
  file.recurse:
    - name: /etc/yum.repos.d
    - source: salt://minions/yum.repos.d
    - user: root
    - group: root
    - file_mode: 644
    - dir_mode: 755
    - include_empty: True
minion_install:
  pkg.installed:
    - pkgs:
      - salt-minion
    - require:
      - file: minion_yum
    - unless: rpm -qa | grep salt-minion
minion_conf:
  file.managed:
    - name: /etc/salt/minion
    - source: salt://minions/conf/minion
    - user: root
    - group: root
    - mode: 640
    - template: jinja
    - defaults:
      minion_id: {{ grains['fqdn_ip4'][0] }}
    - require:
      - pkg: minion_install
minion_service:
  service.running:
    - name: salt-minion
    - enable: True
    - require:
      - file: minion_conf
EOF

目录结构

srv
└── salt
    └── minions
        ├── conf
        │   └── minion
        ├── install.sls
        └── yum.repos.d
            ├── CentOS-Base.repo
            └── epel.repo

/srv/salt/minions/conf/minion文件配置内容
master: 192.168.0.104
9.5、执行批量安装命令

salt-ssh -i '*' state.sls minions.install

9.6、查看与授权

salt-key -L
salt-key -A -y

saltstack.png

技术

Spring 微服务监控解决方案 - pinpoint

July 25, 2019

Pinpoint是一款全链路分析工具,提供了无侵入式的调用链监控、方法执行详情查看、应用状态信息监控等功能。基于GoogleDapper论文进行的实现,与另一款开源的全链路分析工具Zipkin类似,但相比Zipkin提供了无侵入式、代码维度的监控等更多的特性。 Pinpoint支持的功能比较丰富,可以支持如下几种功能:

服务拓扑图:对整个系统中应用的调用关系进行了可视化的展示,单击某个服务节点,可以显示该节点的详细信息,比如当前节点状态、请求数量等
实时活跃线程图:监控应用内活跃线程的执行情况,对应用的线程执行性能可以有比较直观的了解
请求响应散点图:以时间维度进行请求计数和响应时间的展示,拖过拖动图表可以选择对应的请求查看执行的详细情况
请求调用栈查看:对分布式环境中每个请求提供了代码维度的可见性,可以在页面中查看请求针对到代码维度的执行详情,帮助查找请求的瓶颈和故障原因。
应用状态、机器状态检查:通过这个功能可以查看相关应用程序的其他的一些详细信息,比如CPU使用情况,内存状态、垃圾收集状态,TPS和JVM信息等参数。

emmmm...这文章上个月就写好了 忘记发布了...

Pinpoint 主要由 3 个组件外加 Hbase 数据库组成,三个组件分别为:Agent、Collector 、Web UI。

需求简介:采用微服务架构后一个功能问题会牵扯到很多模块,所以需要一个无侵式的服务监控工具来高效的诊断问题。
部署方案:Collector 、Web UI在同一台服务器,Agent部署在容器内部。
实验环境:centos7

1. 安装Collector(docker方式)

yum -y install git epel-release python-pip
git clone https://github.com/naver/pinpoint-docker.git
cd pinpoint-docker
vi docker-compose.yml #修改hbbase和zookeeper映射文件路径
setup-1.png
mkdir -p /usr/local/pinpoint/hbase && mkdir -p /usr/local/pinpoint/zookeeper
docker-compose pull && docker-compose up -d
访问 http://IP:8079

2. 给容器安装pinpoint-Agent(仅适用于Java项目)

访问 https://github.com/naver/pinpoint/releases 下载与Collector同版本的Agent压缩包
解压压缩包,编辑pinpoint.config文件 配置Collector地址。
sed -i "s/profiler.collector.ip=127.0.0.1/profiler.collector.ip=你的IP地址/g" /解压后的路径/pinpoint.config
重新打个压缩包,然后再dockerfile中写入下图
dockerfile.png
ADD pinpoint-agent-1.8.4.tar.gz /usr/local/pinpoint-agent/
docker run 的时候加入下面的参数
-javaagent:/usr/local/pinpoint-agent/pinpoint-bootstrap-1.8.4.jar -Dpinpoint.applicationName=标识符 -Dpinpoint.agentId=唯一ID
docker run 参考命令
docker run -d -v /etc/localtime:/etc/localtime -e JAVA_OPTS="-javaagent:/usr/local/pinpoint-agent/pinpoint-bootstrap-1.8.4.jar -Dpinpoint.applicationName=标识符 -Dpinpoint.agentId=唯一ID -XX:+UseG1GC" --privileged=true --restart=always --log-opt max-size=50m --log-opt max-file=1 --restart=on-failure:1 --oom-score-adj -1000 --name 容器名称 jdk:1.8 --spring.profiles.active=test

最后大功告成!(PS:Pinpoint也可以做到监控异常后发送邮件通知,以后有空再写了)
Pinpoint.png