暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

性能测试:pgpool做负载均衡的性能评估

1. 环境

maggie1:
IP:192.168.31.101
角色:pgpool_II + 流复制备库
maggie2:
IP::192.168.31.102
角色:流复制主库

2. 环境搭建

1. maggie2上安装pg12.2到/usr/local/hg_dist/
pg_ctl -D mnt/40g/pgdata/pgpool init
pg_hba.conf:
    host   all             all             0.0.0.0/0            trust
    host replication all 0.0.0.0/0 trust
    postgresql.conf:
      listen_addresses = '*'
      max_wal_senders = 5
      wal_level = hot_standby
      pg_ctl -D mnt/40g/pgdata/pgpool start
      2. maggie1上安装pgpool_II

      下载链接:https://pgpool.net/mediawiki/index.php/Downloads

      root用户:
        mkdir pgpool
        chown postgres:postgres pgpool
        chown postgres:postgres mnt/40g/software/pgpool-II-4.1.2.tar.gz
        postgres用户:
          cd mnt/40g/software/
          tar -xzvf pgpool-II-4.1.2.tar.gz
          cd pgpool-II-4.1.2
          ./configure --prefix='/pgpool'
          --with-pgsql-libdir="/usr/local/hg_dist/lib"
          --with-pgsql="/usr/local/hg_dist/"
          make
          make install
          3. 安装pgpool_regclass
            cd mnt/40g/software/pgpool-II-4.1.2/src/sql/pgpool-regclass/
            make
            make install
            #因为pgpool和PG不在同一台服务器,需要把library拷贝到目标服务器
              scppgpool-regclass.so postgres@maggie2:/usr/local/hg_dist/lib/postgresqlpsql -f 
              pgpool-regclass.sql -h maggie2 -p 5432 template1
              4. 官方还推荐安装pgpool_recovery和insert_lock,分别用于在线恢复和复制功能。此外,pgpool还有很多工具,比如pcp,  watchdog,  healthcheck, 可以根据需求分别配置使用。本文仅做性能测试,只用到了负载均衡和连接池的功能,配置也只配置了这两个功能。
               
              5. 在maggie1上安装备库,建立流复制
              安装pg12.2
                pg_basebackup -h 192.168.31.102 -p 5432 -U postgres -Fp -Xs -Pv -R -D /mnt/40g/pgdata/pgpool
                pg_ctl start
                6. 配置pcp.conf
                  [root@maggie1 etc]# pg_md5 -p postgres
                  password:
                  e8a48653851e28c69d0506508fb27fc5
                  按照用户名:MD5值的格式写入pcp.conf中
                  说明:pcp.conf 对于运行 pgpool-II 的用户必须可读
                   
                  7.配置pgpool.conf
                    cd usr/local/etc  #pgpool的默认安装路径
                    cp pgpool.conf.sample pgpool.conf
                    listen_addresses='*' #接受所有的链接
                    socket_dir='/var/run' #建立接受 UNIX 域套接字连接的目录,修改要重启pgpool
                    pcp_listen_addresses = '*'
                    pcp_socket_dir = '/var/run'
                    backend_hostname0 = 'maggie1'
                    backend_port0 = 5432
                    backend_weight0 = 1 #负载均衡的权限,两台backend权限相同时,做平均分配
                    backend_data_directory0 = '/mnt/40g/pgdata/pgpool'
                    backend_hostname1 = 'maggie2'
                    backend_port1 = 5432
                    backend_weight1 = 1
                    backend_data_directory1 = '/mnt/40g/pgdata/pgpool'
                    load_balance_mode = on
                    master_slave_mode = on
                    master_slave_sub_mode = 'stream'
                    sr_check_period = 2
                    sr_check_user = 'postgres'
                    sr_check_database = 'postgres'
                    delay_threshold = 10
                    replication_mode = off
                    replicate_select = off
                    num_init_children = 150 // 从客户端发起的最大并发连接数
                    max_pool = 4 //到PG的连接数为num_init_children * max_pool
                    8. 启动/停止pgpool
                      pgpool -n  > /tmp/pgpool.log 2>&1 &
                      pgpool stop

                      3. 测试数据

                      测试中使用pgbench select-only的sql语句

                      3.1相同并发

                      在相同的并发量时,通过对比各个服务器的CPU利用率

                      3.1.1 pgbench直连pgpool

                        [postgres@maggie1 ~]$ pgbench -c 300 -j 300 -M prepared -n -P 2 -S -T 200 -r -h maggie1 -p 9999
                        transaction type: <builtin: select only>
                        scaling factor: 100
                        query mode: prepare
                        dnumber of clients: 300
                        number of threads: 300
                        duration: 200 s
                        number of transactions actually processed: 2898267
                        latency average = 10.293 ms
                        latency stddev = 5.346 ms
                        tps = 14445.955582 (including connections establishing)
                        tps = 25308.963441 (excluding connections establishing) 

                        statement latencies in milliseconds:  

                              0.005  \set aid random(1,100000 * :scale)    
                          10.290 SELECT abalance FROM pgbench_accounts WHERE aid = :aid;

                          Maggie1备节点/pgpool:

                          CPU:

                          Use%

                          Sys%

                          Wai%

                          Idle%

                          CPU%

                          Avg

                          30.4

                          62.4

                          0.0

                          7.3

                          92.7

                          Max

                          34.3

                          68.7

                          0.0

                          99.6

                          100.0

                          Max:Avg

                          1.1

                          1.1

                          0.0

                          13.7

                          1.1

                          Maggie2-主节点:
                          CPU:

                          Use%

                          Sys%

                          Wai%

                          Idle%

                          CPU%

                          Avg

                          42.0

                          37.1

                          0.0

                          20.9

                          79.1

                          Max

                          45.8

                          44.4

                          0.0

                          99.8

                          87.5

                          Max:Avg

                          1.1

                          1.2

                          0.0

                          4.8

                          1.1

                          3.1.2 pgbench直连主节点

                            [postgres@maggie1 ~]$ pgbench -c 300 -j 300 -M prepared -n -P 2 -S -T 200 -r -h maggie2 -p 5432
                            transaction type: <builtin: select only>
                            scaling factor: 100
                            query mode: prepared
                            number of clients: 300
                            number of threads: 300
                            duration: 200 s
                            number of transactions actually processed: 4662318
                            latency average = 12.758 ms
                            latency stddev = 3.460 ms
                            tps = 23281.878597 (including connections establishing)
                            tps = 23473.435897 (excluding connections establishing)
                               
                              statement latencies in milliseconds:
                                 0.003  \set aid random(1100000 * :scale)    
                                 12.762  SELECT abalance FROM pgbench_accounts WHERE aid = :aid;
                              Maggie1 :

                              CPU:

                              Use%

                              Sys%

                              Wai%

                              Idle%

                              CPU%

                              Avg

                              12.2

                              16.2

                              0.0

                              71.6

                              28.4

                              Max

                              14.0

                              20.1

                              0.2

                              99.6

                              34.1

                              Max:Avg

                              1.1

                              1.2

                              100.0

                              1.4

                              1.2

                              Maggie2:
                              CPU:

                              Use%

                              Sys%

                              Wai%

                              Idle%

                              CPU%

                              Avg

                              46.2

                              26.6

                              0.0

                              27.3

                              72.7

                              Max

                              64.8

                              39.4

                              0.1

                              99.8

                              100.0

                              Max:Avg

                              1.4

                              1.5

                              52.0

                              3.7

                              1.4

                              3.2 CPU达到最满

                              在尽量把服务器的CPU打满的情况下,对比支持的并发数

                              3.2.1 pgbench直连pgpool

                                [postgres@maggie1 ~]$ pgbench -c 400 -j 300 -M prepared -n -P 2 -S -T 200 -r -h maggie1 -p 9999
                                transaction type: <builtin: select only>
                                scaling factor: 100
                                query mode: prepared
                                number of clients: 400
                                number of threads: 300
                                duration: 200 s
                                number of transactions actually processed: 2879549
                                latency average = 6.795 ms
                                latency stddev = 3.551 ms
                                tps = 14357.998016 (including connections establishing)
                                tps = 20360.802379 (excluding connections establishing)
                                statement latencies in milliseconds:    
                                    0.004  \set aid random(1, 100000 * :scale)   
                                    6.792  SELECT abalance FROM pgbench_accounts WHERE aid = :aid;

                                  Maggie1:

                                  CPU:

                                  Use%

                                  Sys%

                                  Wai%

                                  Idle%

                                  CPU%

                                  Avg

                                  25.4

                                  57.5

                                  0.0

                                  17.1

                                  82.9

                                  Max

                                  32.1

                                  70.6

                                  0.0

                                  99.5

                                  100.0

                                  Max:Avg

                                  1.3

                                  1.2

                                  0.0

                                  5.8

                                  1.2

                                   
                                  Maggie2:
                                  CPU:

                                  Use%

                                  Sys%

                                  Wai%

                                  Idle%

                                  CPU%

                                  Avg

                                  36.2

                                  37.1

                                  0.0

                                  26.7

                                  73.3

                                  Max

                                  43.4

                                  53.5

                                  0.1

                                  99.8

                                  87.1

                                  Max:Avg

                                  1.2

                                  1.4

                                  100.0

                                  3.7

                                  1.2


                                  3.2.2 pgbench直连主节点

                                    [postgres@maggie1 ~]$ pgbench -c 400 -j 400 -M prepared -n -P 2 -S -T 200 -r -h maggie2 -p 5432
                                    transaction type: <builtin: select only>
                                    scaling factor: 100
                                    query mode: prepared
                                    number of clients: 400
                                    number of threads: 400
                                    duration: 200 s
                                    number of transactions actually processed: 4523310
                                    latency average = 17.420 ms
                                    latency stddev = 4.249 ms
                                    tps = 22587.966748 (including connections establishing)
                                    tps = 22910.531557 (excluding connections establishing)

                                    statement latencies in milliseconds: 
                                          0.004  \set aid random(1, 100000 * :scale)   
                                      17.424 SELECT abalance FROM pgbench_accounts WHERE aid = :aid;

                                      Maggie1:

                                      CPU:

                                      Use%

                                      Sys%

                                      Wai%

                                      Idle%

                                      CPU%

                                      Avg

                                      11.6

                                      16.4

                                      0.0

                                      72.0

                                      28.0

                                      Max

                                      13.4

                                      20.1

                                      0.1

                                      99.5

                                      32.7

                                      Max:Avg

                                      1.2

                                      1.2

                                      100.0

                                      1.4

                                      1.2


                                      Maggie2:
                                      CPU:

                                      Use%

                                      Sys%

                                      Wai%

                                      Idle%

                                      CPU%

                                      Avg

                                      59.6

                                      39.5

                                      0.0

                                      0.9

                                      99.1

                                      Max

                                      62.8

                                      43.1

                                      0.0

                                      34.5

                                      100.0

                                      Max:Avg

                                      1.1

                                      1.1

                                      0.0

                                      38.8

                                      1.0


                                      4. 测试结论

                                      1. 在相同的并发的情况下。应用程序直连主库时,备库的CPU利用率只有28.4%,而且占用资源的主要是pgpool。应用程序通过pgpool连接主备库做负载均衡,能充分利用两台机器的资源,不会造成所有的traffic压在同一台机器上的情况,主库和备库所在的服务器CPU利用率都在80%~90%。
                                      2. 在相同的max_connections时,通过增加并发数把服务器的CPU利用到最大的情况下,使用pgpool能支持更多的并发,但是TPS会有相应损耗,网络延迟也会增加
                                      3. 使用pgpool与直连数据库主库相比TPS优势并不明显,甚至有些情况下TPS会降低。说明pgpool的主要优势不在于会显著提高TPS,而是充分利用各个主机的性能,在相对低端的硬件服务器上活得一个相对满意的性能。
                                       
                                      作者:孙惠惠
                                      瀚高基础软件研发工程师

                                      I Love PG

                                      关于我们

                                      PostgreSQLPG2017PostgreSQLPG非盈利行业协会组织。我们致力于在中国PostgreSQLPostgreSQL



                                      欢迎投稿

                                      做你的舞台,show出自己的才华 。

                                      投稿邮箱:partner@postgresqlchina.com

                                                          

                                                          ——愿能安放你不羁的灵魂


                                      技术文章精彩回顾




                                      PostgreSQL学习的九层宝塔
                                      PostgreSQL职业发展与学习攻略
                                      2019,年度数据库舍 PostgreSQL 其谁?
                                      Postgres是最好的开源软件
                                      PostgreSQL是世界上最好的数据库
                                      从Oracle迁移到PostgreSQL的十大理由
                                      从“非主流”到“潮流”,开源早已值得拥有

                                      PG活动精彩回顾




                                      创建PG全球生态!PostgresConf.CN2019大会盛大召开
                                      首站起航!2019“让PG‘象’前行”上海站成功举行
                                      走进蓉城丨2019“让PG‘象’前行”成都站成功举行
                                      中国PG象牙塔计划发布,首批合作高校授牌仪式在天津举行
                                      群英论道聚北京,共话PostgreSQL
                                      相聚巴厘岛| PG Conf.Asia 2019  DAY0、DAY1简报
                                      相知巴厘岛| PG Conf.Asia 2019 DAY2简报
                                      独家|硅谷Postgres大会简报
                                      直播回顾 | Bruce Momjian:原生分布式将在PG 14版本发布

                                      PG培训认证精彩回顾




                                      中国首批PGCA认证考试圆满结束,203位考生成功获得认证!
                                      中国第二批PGCA认证考试圆满结束,115位考生喜获认证!
                                      重要通知:三方共建,中国PostgreSQL认证权威升级!
                                      近500人参与!首次PGCE中级、第三批次PGCA初级认证考试落幕!
                                      2020年首批 | 中国PostgreSQL初级认证考试圆满结束
                                      一分耕耘一分收获,第五批次PostgreSQL认证考试成绩公布


                                      文章转载自开源软件联盟PostgreSQL分会,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                      评论