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

PolarDB-O主备部署及切换排雷指引

IT云鼎 2020-11-10
4043

技术

文章

PolarDB-O主备部署及切换排雷指引


安装前准备

1.环境规划


2.软件目录

    PGDATA=/opt/polardb/data #数据库的本地盘目录
    PGHOME=/usr/local/polardb_o_current #软件目录
    PFSHOME=/usr/local/polarstore/pfsd #PFS家目录
    PFSDIR=/sdb/data #PFS文件目录路径

    3.安装介质

      polardb-clustermanager-1.0.0-20200904155748.x86_64.rpm #集群管理安装包
      PolarDB-O-0200-2.0.0-20201009151903.alios7.x86_64.rpm #数据库安装包
      t-polarstore-pfsd-san-1.1.41-20200909132342.alios7.x86_64.rpm #PFS安装包

      4.关闭透明大页

      关闭透明大页,确保Hugepagesize=2048 kB:

        cat etc/default/grub #添加标红部分 
        GRUB_TIMEOUT=5
        GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' etc/system-release)"
        GRUB_DEFAULT=saved
        GRUB_DISABLE_SUBMENU=true
        GRUB_TERMINAL_OUTPUT="console"
        GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet transparent_hugepage=never"
        GRUB_DISABLE_RECOVERY="true"

        使配置生效

          grub2-mkconfig -o boot/grub2/grub.cfg
          cat /sys/kernel/mm/transparent_hugepage/enabled
          always madvise [never]

          5.配置/etc/sysctl.conf

          添加以下内容:

            vm.dirty_expire_centisecs=3000
            net.ipv4.tcp_synack_retries=2
            net.core.rmem_default=262144
            vm.dirty_background_bytes=409600000
            net.core.wmem_default=262144
            kernel.shmall=107374182
            vm.mmap_min_addr=65536
            vm.overcommit_ratio=90
            kernel.shmmni=819200
            net.core.rmem_max=4194304
            vm.dirty_writeback_centisecs=100
            fs.file-max=76724600
            net.core.somaxconn=4096
            fs.aio-max-nr=1048576
            net.ipv4.tcp_max_tw_buckets=262144
            vm.swappiness=0
            fs.nr_open=20480000
            net.ipv4.tcp_fin_timeout=5
            net.ipv4.ip_local_port_range=40000 65535
            net.ipv4.tcp_keepalive_probes=3
            net.ipv4.tcp_mem=8388608 12582912 16777216
            kernel.shmmax=274877906944
            kernel.sem=4096 2147483647 2147483646 512000
            net.ipv4.tcp_keepalive_intvl=20
            net.ipv4.tcp_keepalive_time=60
            vm.overcommit_memory=0
            net.ipv4.tcp_syncookies=1
            net.ipv4.tcp_max_syn_backlog=4096
            net.ipv4.tcp_timestamps=1
            net.ipv4.tcp_rmem=8192 87380 16777216
            net.ipv4.tcp_wmem=8192 65536 16777216
            net.core.wmem_max=4194304
            vm.dirty_ratio=80
            net.core.netdev_max_backlog=10000
            vm.zone_reclaim_mode=0
            net.ipv4.tcp_tw_reuse=1
            vm.nr_hugepages=0
            vm.nr_overcommit_hugepages=1000000
            sysctl -p使配置生效

            6.创建polardb_limits

              vi etc/security/limits.d/polardb_limits.conf
              * soft nofile 655360
              * hard nofile 655360
              * soft nproc 655360
              * hard nproc 655360
              * soft memlock unlimited
              * hard memlock unlimited
              * soft core unlimited
              * hard core unlimited

              单机部署

              1.创建polardb的组和用户

                groupadd polardb
                useradd -g polardb polardb

                赋予polardb用户sudo权限

                visudo添加

                polardb ALL=(ALL) ALL


                2.配置环境变量

                  su - polardb
                  vi ~/.bash_profile添加
                  export PGPORT=5432
                  export PGDATA=/opt/polardb/data
                  export LANG=en_US.utf8
                  export PGHOME=/usr/local/polardb_o_current
                  export PFSHOME=/usr/local/polarstore/pfsd
                  export PFSDISK=sdb
                  export PFSDIR=/sdb/data
                  export LD_LIBRARY_PATH=$PGHOME/lib:$LD_LIBRARY_PATH
                  export PATH=$PGHOME/bin:$PFSHOME/bin/:$PATH
                  export PGHOST=$PGDATA
                  export PGUSER=polardb
                  export PGDATABASE=polardb

                  注意:PFSDISK=sdb,此处为磁盘设备名,例如我的环境添加的磁盘设备为/dev/sdb

                  3.安装PolarDB-O数据库

                    sudo rpm -ivh PolarDB-O-0200-2.0.0-20201009151903.alios7.x86_64.rpm

                    4.安装PFS文件系统

                      sudo rpm -ivh t-polarstore-pfsd-san-1.1.41-20200909132342.alios7.x86_64.rpm

                      5.PFS初始化配置

                      配置安装PFS时需要占用名称为$PFSDISK的设备。在安装过程中过程中会格式化该设备,如果/dev/$PFSDISK已经挂载过了,要umount该设备。本次安装为新添加的/dev/sdb盘。依次执行以下命令初始化:

                      1) 以polardb用户登录,执行以下命令,格式化$PFSDISK设备。

                        sudo usr/local/bin/pfs -C disk mkfs -u 30 -l 1073741824 -f $PFSDISK
                        2) 等待一段时间,回显输出 pfs mkfs succeeds!后,执行以下命令,启动PFS服务。
                          sudo usr/local/polarstore/pfsd/bin/start_pfsd.sh -p $PFSDISK
                          3) 执行以下命令,创建PFS的数据库目录。

                            sudo usr/local/bin/pfs -C disk mkdir $PFSDIR

                            排雷1

                            注意:在创建完PFS数据库目录,进行后续操作时有可能会提示找不到$PFSDIR,此时需要重启PFS服务。常用PFS命令如下:

                              sudo usr/local/polarstore/pfsd/bin/stop_pfsd.sh #停止PFS服务


                              sudo usr/local/polarstore/pfsd/bin/start_pfsd.sh -p $PFSDISK #启动PFS服务


                              ps -ef |grep pfsdaemon|grep -v grep #检查pfs进程


                              排雷2:

                              注意:在最开始安装时PFS使用的磁盘我添加了一块10g大小的,在后面数据库初始化过程中会报错,在往PFS磁盘中拷贝文件的时候会缺少文件。前期规划尽量多预留空间,否则后面排错起来很耽误时间。(不该省的地儿别瞎省,领导我电脑配置还够用

                              部分报错信息:

                                [PFSD_SDK INF Oct 23 09:07:53.221552][12735]pfsd_open 517: open sdb/data//global/pg_control: no such file

                                可以先检查PFS目录下是否真的copy了如下文件,我之前的失败安装只拷贝成功了baseglobal

                                  pfs -C disk ls sdb/data #查看PFS文件系统目录
                                    Dir  1     768              Mon Nov  2 15:21:06 2020  pg_wal
                                    Dir 1 640 Fri Oct 30 10:44:47 2020 base
                                    Dir 1 9344 Fri Oct 30 10:44:53 2020 global
                                    Dir 1 0 Fri Oct 30 10:44:54 2020 pg_tblspc
                                    Dir 1 128 Fri Oct 30 10:44:54 2020 pg_logindex
                                    Dir 1 0 Fri Oct 30 10:44:54 2020 pg_twophase
                                    Dir 1 128 Fri Oct 30 10:44:54 2020 pg_xact
                                    Dir 1 0 Fri Oct 30 10:44:54 2020 pg_commit_ts
                                    Dir 1 256 Fri Oct 30 10:44:54 2020 pg_multixact
                                    Dir 1 0 Fri Oct 30 10:44:54 2020 pg_csnlog
                                    Dir 1 512 Fri Oct 30 10:44:59 2020 polar_fullpage
                                    Dir 1 0 Fri Oct 30 10:45:01 2020 pg_replslot
                                    File 1 226 Fri Oct 30 10:45:01 2020 polar_non_exclusive_backup_label
                                    total 8192 (unit: 512Bytes)

                                    注意:如果有PFS报错可以查PFS相关运行日志

                                      /var/log/pfsd-sdb.log
                                      /var/log/pfsd-sdb/pfsd.log

                                      6.PolarDB-O初始化配置

                                        su - polardb
                                        initdb -D $PGDATA -E UTF8 --locale=C -U polardb

                                        -E 参数指定数据库字符集,--locale 指定本地化参数,-U 指定初始化用户,其他的参数可以执行initdb --help 命令查看。

                                        7.初始化PFS数据

                                          sudo usr/local/polardb_o_current/bin/polar-initdb.sh $PGDATA/ $PFSDIR/ disk

                                          该步骤会将$PGDATA中polardb的一些初始化数据文件copy$PFSDIR文件系统中保存

                                          注意:可以验证下/sdb/data下文件是否copy成功后,再启动数据库

                                            sudo usr/local/bin/pfs -C disk ls $PFSDIR
                                            [PFS_TRACE_LOG] [19726 ] trace_init notify_sock_name: var/run/polartrace/polartrace.sock, 11
                                            [PFS_TRACE_LOG] [19726 ] pfs trace start flush thread [140025597523712]
                                            Dir 1 640 Tue Nov 3 11:00:10 2020 base
                                            Dir 1 9344 Tue Nov 3 11:00:14 2020 global
                                            Dir 1 0 Tue Nov 3 11:00:14 2020 pg_tblspc
                                            Dir 1 256 Tue Nov 3 11:00:17 2020 pg_wal
                                            Dir 1 128 Tue Nov 3 11:00:17 2020 pg_logindex
                                            Dir 1 0 Tue Nov 3 11:00:18 2020 pg_twophase
                                            Dir 1 128 Tue Nov 3 11:00:18 2020 pg_xact
                                            Dir 1 0 Tue Nov 3 11:00:18 2020 pg_commit_ts
                                            Dir 1 256 Tue Nov 3 11:00:19 2020 pg_multixact
                                            Dir 1 0 Tue Nov 3 11:00:19 2020 pg_csnlog
                                            total 0 (unit: 512Bytes)

                                            8.修改PolarDB-O配置文件

                                            初始化数据库集群后,数据库的参数文件 postgresql.conf 文件中都是默认参数,用户可以根据自身需要进行修改,常用修改的参数如下:

                                              listen_addresses = '*' # 监听所有连接
                                              port = 5432 # 监听端口 (后文成为$port)
                                              max_connections = 2048 # 最大连接数
                                              unix_socket_directories = '.' # socket文件地址目录
                                              timezone = 'UTC-8' # 时区
                                              log_timezone = 'UTC-8' # 日志时区
                                              log_destination = 'csvlog' # 日志文件格式
                                              logging_collector = on
                                              log_directory = 'polardb_log' # 日志存放目录
                                              polar_enable_shared_storage_mode=on
                                              polar_hostid=1
                                              polar_datadir='/sdb/data/' # PFS目录
                                              polar_disk_name='sdb' # PFS设备名称
                                              polar_storage_cluster_name=disk # PFS设备类型
                                              wal_sender_timeout=30min #初始化备库过程中拉取wal日志进程超时设置

                                              若修改postgresql.conf文件之前启动过数据库,确认$PGDATA/polar_node_static.conf是否存在,若存在则删除后再启动数据库。以后每次修改postgresql.con文件中的polar_datadirpolar_disk_namepolar_hostid参数时,均需要删除$PGDATA/polar_node_static.conf文件再重启数据库确保修改后的参数生效。


                                              9.修改pg_hba.conf访问控制文件

                                              为了实现其他机器对PolarDB数据库的访问,还需要修改访问控制文件,即

                                              pg_hba.conf,一般是放开所有的ipv4的访问,也可以根据安全要求指定ip

                                              尾部添加如下配置:

                                                vi $PGDATA/pg_hba.conf
                                                host all all 0.0.0.0/0 md5
                                                host replication all 0.0.0.0/0 md5

                                                10.启动数据库

                                                  pg_ctl start -D $PGDATA -l tmp/logfile 
                                                  tail -f tmp/logfile #查看数据库启动日志
                                                  pg_ctl stop -D $PGDATA #停库命令,此处不需要执行

                                                  11.进程检查

                                                  PolarDB-O数据库启动成功之后,会在数据库目录下生成一个postmaster.pid,其中第一行是PolarDB-O守护进程pid,用户可以通过ps -a|grep守护进程pid可以得到所有的PolarDB-O进程,其中有如下几类常见辅助进程。

                                                    /usr/local/polardb_o_current/bin/polar-postgres -D data   为PolarDB- O 的守护进程。
                                                    postgres: logger 为PolarDB-O 的打印日志进程。
                                                    postgres: checkpointer 为PolarDB-O 的周期性检查点进程。
                                                    postgres: background writer 为PolarDB-O 的周期性刷脏进程。
                                                    postgres: walwriter 为PolarDB-O 的定期WAL 日志刷盘进程。
                                                    postgres: autovacuum launcher 为PolarDB-O 的自动清理调度进程。
                                                    postgres: stats collector 为PolarDB-O 的统计信息收集进程。

                                                    12.连接测试

                                                      psql -h$PGDATA -p$PGPORT
                                                      psql -h$PGDATA -p$PGPORT -c"select version()" #版本查看
                                                      ------------------------------------------------------------------
                                                      PostgreSQL 11.2 (POLARDB Database Compatible with Oracle 11.2.9)
                                                      (1 row)

                                                      可以看到PolarDB是基于11.2版本的PG内核


                                                      主备高可用部署安装

                                                      1.初始化主节点

                                                        完成第二章单节点部署安装过程即可。

                                                      2.主节点创建复制用户

                                                        psql -h$PGDATA -p$PGPORT -c"create user replicator password '<replicat密码>' superuser;"
                                                        psql -h$PGDATA -p$PGPORT -c"create user replicator password 'replicator' superuser;"

                                                        3.初始化备节点

                                                        1) 安装过程

                                                        对软硬件环境进行安装配置,具体请参见完成第一章的安装前准备、第二章的1-5节配置。

                                                        2) 始化备库目录

                                                          polar_basebackup -h 192.168.238.130 -p 5432 -U replicator -D $PGDATA --polardata=$PFSDIR --polar_storage_cluster_name=disk --polar_disk_name=$PFSDISK --polar_host_id=2 -X stream --progress --write-recovery-conf -v

                                                          命令中各项参数解释如下:

                                                          -h  :主库ip地址。

                                                          -p  :主库polardb的端口号。

                                                          -U  :连接用户,这里使用上文创建的replicator

                                                          -D  :备库的数据目录。


                                                          --polardata  :pfsdata目录路径。

                                                          --polar_storage_cluster_name  :polardb data目录的storage cluster name

                                                          --polar_disk_name  :polardb data目录的disk home

                                                          --polar_host_id  可以任意取值,但需保证不能与主库的值相同。

                                                          -X  :拉取wal日志的方式。

                                                          --write-recovery-conf  :写recovery.conf文件。

                                                          -v  :显示详细过程。


                                                          在复制过程中报错或超时,请修改主库 postgresql.conf  中的参数 wal_sender_timeout

                                                          3) 修改postgresql.conf配置文件

                                                            vi postgresql.conf

                                                            将原polar_hostid = 1改为polar_hostid = 2

                                                            4) 启动和连接测试

                                                              pg_ctl -c start -D $PGDATA -l tmp/logfile


                                                              psql -h$PGDATA -p$PGPORT 

                                                              5) 检查主库流复制状态

                                                              在主库执行以下命令确认流复制建立成功:

                                                                psql -h$PGDATA -p$PGPORT -c"select * from pg_stat_replication;"
                                                                  Expanded display is on.
                                                                  polardb=# select * from pg_stat_replication;
                                                                  -[ RECORD 1 ]----+---------------------------------
                                                                  pid | 22449
                                                                  usesysid | 16384
                                                                  usename | replicator
                                                                  application_name | standby_3232296579_5432
                                                                  client_addr | 192.168.238.131
                                                                  client_hostname |
                                                                  client_port | 60866
                                                                  backend_start | 03-NOV-20 13:58:17.811323 +08:00
                                                                  backend_xmin |
                                                                  state | streaming
                                                                  sent_lsn | 0/41BD1648
                                                                  write_lsn | 0/41BD1648
                                                                  flush_lsn | 0/41BD1648
                                                                  replay_lsn | 0/41BD1648
                                                                  write_lag | 00:00:00.002793
                                                                  flush_lag | 00:00:00.002801
                                                                  replay_lag | 00:00:00.003894
                                                                  sync_priority | 1
                                                                  sync_state | sync

                                                                  创建个表测试下主备是否同步

                                                                    polardb=# create table t1( id int);
                                                                    polardb=# insert into t1 values(1);
                                                                    INSERT 0 1
                                                                    polardb=# insert into t1 values(2);
                                                                    INSERT 0 1
                                                                    polardb=# select * from t1;
                                                                     id
                                                                    ----
                                                                      1
                                                                      2
                                                                    (2 rows)


                                                                    4.Cluster Manager部署

                                                                    1) SSH配置

                                                                    在CM节点root用户执行以下命令:

                                                                      ssh-keygen -t rsa


                                                                      ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.238.131 #备节点IP


                                                                      ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.238.130 #主节点IP
                                                                      2) 禁用防火墙
                                                                        systemctl disable firewalld.service


                                                                        systemctl stop firewalld.service
                                                                        3) 端口说明

                                                                          PolarDB:5432/tcp


                                                                          Cluster Manager:5500,5501/tcp
                                                                          4) RPM包安装
                                                                            rpm -ivh polardb-clustermanager-1.0.0-20200904155748.x86_64.rpm

                                                                            安装后会有三个文件,如下所示:

                                                                              # usr/local/polardb_cluster_manager/bin/polardb-cluster-manager


                                                                              #/usr/local/polardb_cluster_manager/bin/polardb_cluster_manager_control.py


                                                                              #/usr/local/polardb_cluster_manager/bin/supervisor.py
                                                                              5) 置服务

                                                                              ① 在主库主机上创建aurora探测用户

                                                                                /usr/local/polardb_o_current/bin/createuser -p $PGPORT -h $PGDATA --login aurora -P -s

                                                                                密码aurora


                                                                                ② CM主机上创建配置文件,如下所示:

                                                                                排雷3:

                                                                                注意:此处注意检查双引号间一定别有空格,用户及密码跟之前步骤探测和复制用户对应上

                                                                                  mkdir -p root/polardb_cluster_manager/conf


                                                                                  vi root/polardb_cluster_manager/conf/polardb_cluster_manager.conf


                                                                                  {


                                                                                  "work_mode":"PolarPure",


                                                                                  "consensus":{ "port":5001 },


                                                                                  "account_info":{ "aurora_user":"aurora",


                                                                                  "aurora_password":"aurora",


                                                                                  "replica_user":"replicator",


                                                                                  "replica_password":"replicator" },


                                                                                  "cluster_info":{ "port":5000 }


                                                                                  }

                                                                                  consensus是内置一致性服务端口,不对外服务。

                                                                                  cluster_info是cm对外接口的服务端口。

                                                                                  aurora_user是刚创建的探测用户的账号、密码,权限为superuser

                                                                                  replica_user是刚创建的复制用户的账号密码,权限可以为replicationsuperuser


                                                                                  5.启动CM服务

                                                                                  1)启动服务

                                                                                    /usr/local/polardb_cluster_manager/bin/polardb_cluster_manager_control.py root/polardb_cluster_manager/ start

                                                                                    2)查询服务

                                                                                      /usr/local/polardb_cluster_manager/bin/polardb_cluster_manager_control.py root/polardb_cluster_manager/ status

                                                                                      输出结果应为:

                                                                                        PolarDB ClusterManager Work ON root/polardb_cluster_manager/ IS RUNNING
                                                                                         

                                                                                        如需停止服务的话执行如下命令,此处不需要执行

                                                                                        3)停止服务

                                                                                          /usr/local/polardb_cluster_manager/bin/polardb_cluster_manager_control.py root/polardb_cluster_manager/ stop

                                                                                          6.配置CM集群

                                                                                          1) 在CM节点上配置主库

                                                                                            curl -H "Content-Type:application/json" -X POST --data "{\"user\":\"polardb\",\"dataPath\":\"/opt/polardb/data\",\"ip\":\"192.168.238.130\",\"port\":\"5432\",\"type\":\"Master\",\"storage_type\":\"local_ssd\",\"sync\":\"SYNC\"}" http://127.0.0.1:5000/v1/add_ins


                                                                                            {"code":200}

                                                                                            返回结果200为正常,500为错误。

                                                                                             

                                                                                            user:部署数据库的账号,polardb

                                                                                            dataPath:部署数据库的数据目录。即$PGDATA

                                                                                            ip/port: 数据库的物理IP地址及端口。

                                                                                            type: 数据库角色,Master为主库。

                                                                                            sync: SYNC表示同步复制,采用异步复制切换可能会丢数据


                                                                                            2) 在CM节点上配置备库

                                                                                              curl -H "Content-Type:application/json" -X POST --data "{\"user\":\"polardb\",\"dataPath\":\"/opt/polardb/data\",\"ip\":\"192.168.238.131\",\"port\":\"5432\",\"type\":\"Standby\",\"storage_type\":\"local_ssd\",\"sync\":\"SYNC\"}" http://127.0.0.1:5000/v1/add_ins


                                                                                              {"code":200}

                                                                                              返回结果200为正常,500为错误。

                                                                                              type: Standby表示备库。首次添加备库时会重启备库

                                                                                               

                                                                                              3) 在CM节点上配置VIP

                                                                                              高可用方式下,对外提供数据库服务器的主机除了有一个真实IP外还有一个虚拟IP,使用这两个IP都可以连接到该主机,所有项目中数据库链接配置的都是到虚拟IP,当服务器发生故障无法对外提供服务时,动态将这个虚IP切换到备用主机。

                                                                                               
                                                                                                curl -H "Content-Type:application/json" -X POST --data "{\"vip\":\"192.168.238.133\",\"mask\":\"255.255.255.0\",\"interface\":\"ens33\"} " http://127.0.0.1:5000/v1/add_vip


                                                                                                {"code":200}

                                                                                                返回结果200为正常,500为错误。

                                                                                                vip:虚拟IP地址,通过Linux Virtual IP实现,因此需要和主备库在同一交换机下的网段,且不冲突。也不能与其他物理地址冲突

                                                                                                mask: vip的网关掩码。

                                                                                                interface: 主备库的物理IP所在的网卡。

                                                                                                 

                                                                                                排雷4:

                                                                                                在使用curl配置主备库的过程中注意参数不要写错,如果需要重新调整可以使用remove_ins接口可以将原来的配置清除掉。

                                                                                                例如:清除master节点配置

                                                                                                  curl -H "Content-Type:application/json" -X POST --data "{\"user\":\"polardb\",\"dataPath\":\"/opt/polardb/data\",\"ip\":\"192.168.238.130\",\"port\":\"5432\",\"type\":\"Master\",\"storage_type\":\"local_ssd\",\"sync\":\"SYNC\"}" http://127.0.0.1:5000/v1/remove_ins

                                                                                                  注意:

                                                                                                  CM的日志在/root/polardb_cluster_manager目录下,报错多看下log(主备切换的日志也在这里)。


                                                                                                  排雷5:

                                                                                                  CM异常关闭的时候pid文件会一直在(supervisor_pid),下次启动需要手工删掉。

                                                                                                   
                                                                                                  4) 集群状态查询

                                                                                                    curl -H "Content-Type:application/json" http://127.0.0.1:5000/v1/status?type=visual


                                                                                                    {


                                                                                                    "phase": "RunningPhase",


                                                                                                    "master": {


                                                                                                    "endpoint": "192.168.238.130:5432",


                                                                                                    "data_path": "/opt/polardb/data",


                                                                                                    "user": "polardb",


                                                                                                    "phase": "RUNNING",


                                                                                                    "start_at": "2020-11-03 11:37:07"


                                                                                                    },


                                                                                                    "standby": [


                                                                                                    {


                                                                                                    "endpoint": "192.168.238.131:5432",


                                                                                                    "data_path": "/opt/polardb/data",


                                                                                                    "user": "polardb",


                                                                                                    "phase": "RUNNING",


                                                                                                    "start_at": "2020-11-03 11:37:40",


                                                                                                    "sync_status": "SYNC"


                                                                                                    }


                                                                                                    ],


                                                                                                    "vip": [


                                                                                                    {


                                                                                                    "vip": "192.168.238.133",


                                                                                                    "interface": "ens33",


                                                                                                    "mask": "255.255.255.0",


                                                                                                    "endpoint": "192.168.238.130:5432"


                                                                                                    }


                                                                                                    ]

                                                                                                    状态为running表示正常。

                                                                                                     

                                                                                                    5) 主库查询同步状态

                                                                                                      select * from pg_stat_replication;


                                                                                                      Expanded display is on.


                                                                                                      polardb=# select * from pg_stat_replication;


                                                                                                      -[ RECORD 1 ]----+---------------------------------


                                                                                                      pid | 22449


                                                                                                      usesysid | 16384


                                                                                                      usename | replicator


                                                                                                      application_name | standby_3232296579_5432


                                                                                                      client_addr | 192.168.238.131


                                                                                                      client_hostname |


                                                                                                      client_port | 60866


                                                                                                      backend_start | 03-NOV-20 13:58:17.811323 +08:00


                                                                                                      backend_xmin |


                                                                                                      state | streaming


                                                                                                      sent_lsn | 0/41BD1648


                                                                                                      write_lsn | 0/41BD1648


                                                                                                      flush_lsn | 0/41BD1648


                                                                                                      replay_lsn | 0/41BD1648


                                                                                                      write_lag | 00:00:00.002793


                                                                                                      flush_lag | 00:00:00.002801


                                                                                                      replay_lag | 00:00:00.003894


                                                                                                      sync_priority | 1


                                                                                                      sync_state | sync

                                                                                                       

                                                                                                      新插入数据验证下:

                                                                                                        polardb=# insert into t1 values (3);
                                                                                                        INSERT 0 1
                                                                                                        polardb=# select * from t1;
                                                                                                         id
                                                                                                        ----
                                                                                                          1
                                                                                                          2
                                                                                                          3
                                                                                                        (3 rows)

                                                                                                        7.主备切换

                                                                                                        1) 手动方式切换

                                                                                                          curl -H "Content-Type:application/json" -X POST --data "{\"from\":\"192.168.238.130:5432\",\"to\":\"192.168.238.131:5432\"}" http://127.0.0.1:5000/v1/switchover


                                                                                                          {"code":200}

                                                                                                          返回结果200为正常,500为错误。

                                                                                                          执行如下命令,验证主库是否手动切换成功。

                                                                                                            curl -H "Content-Type:application/json" http://127.0.0.1:5000/v1/status?type=visual


                                                                                                            {


                                                                                                            "phase": "RunningPhase",


                                                                                                            "master": {


                                                                                                            "endpoint": "192.168.238.131:5432",


                                                                                                            "data_path": "/opt/polardb/data",


                                                                                                            "user": "polardb",


                                                                                                            "phase": "RUNNING",


                                                                                                            "start_at": "2020-11-03 11:45:15",


                                                                                                            "sync_status": "SYNC"


                                                                                                            },


                                                                                                            "standby": [


                                                                                                            {


                                                                                                            "endpoint": "192.168.238.130:5432",


                                                                                                            "data_path": "/opt/polardb/data",


                                                                                                            "user": "polardb",


                                                                                                            "phase": "RUNNING",


                                                                                                            "start_at": "2020-11-03 11:45:19",


                                                                                                            "sync_status": "SYNC"


                                                                                                            }


                                                                                                            ],


                                                                                                            "vip": [


                                                                                                            {


                                                                                                            "vip": "192.168.238.133",


                                                                                                            "interface": "ens33",


                                                                                                            "mask": "255.255.255.0",


                                                                                                            "endpoint": "192.168.238.131:5432"


                                                                                                            }


                                                                                                            ]


                                                                                                            }

                                                                                                            可以看到master和standbyip地址互换,vip也自动漂移到备节点上了。

                                                                                                            验证下

                                                                                                              select * from pg_stat_replication;


                                                                                                              pid | usesysid | usename | application_name | client_addr | client_hostname | client_port | backend_start |


                                                                                                              backend_xmin | state | sent_lsn | write_lsn | flush_lsn | replay_lsn | write_lag | flush_lag | replay_lag | sync_prior


                                                                                                              ity | sync_state


                                                                                                              ------+----------+------------+-------------------------+-----------------+-----------------+-------------+----------------------------------+-


                                                                                                              -------------+-----------+------------+------------+------------+------------+-----------------+-----------------+-----------------+-----------


                                                                                                              ----+------------


                                                                                                              7189 | 16384 | replicator | standby_3232296578_5432 | 192.168.238.130 | | 47952 | 03-NOV-20 11:45:15.677601 +08:00 |


                                                                                                              | streaming | 0/419D2FE8 | 0/419D2FE8 | 0/419D2FE8 | 0/419D2FE8 | 00:00:00.002503 | 00:00:00.002511 | 00:00:00.003535 |


                                                                                                              1 | sync


                                                                                                              (1 row)

                                                                                                              vip也漂移到备节点了

                                                                                                                ifconfig


                                                                                                                ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500


                                                                                                                inet 192.168.238.131 netmask 255.255.255.0 broadcast 192.168.238.255


                                                                                                                inet6 fe80::be05:6c57:dd7c:6856 prefixlen 64 scopeid 0x20<link>


                                                                                                                inet6 fe80::3bff:7a9d:519:41ab prefixlen 64 scopeid 0x20<link>


                                                                                                                ether 00:0c:29:58:fa:6a txqueuelen 1000 (Ethernet)


                                                                                                                RX packets 2073965 bytes 3100280275 (2.8 GiB)


                                                                                                                RX errors 0 dropped 0 overruns 0 frame 0


                                                                                                                TX packets 80015 bytes 81406434 (77.6 MiB)


                                                                                                                TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0





                                                                                                                ens33:5432: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500


                                                                                                                inet 192.168.238.133 netmask 255.255.255.0 broadcast 192.168.238.255


                                                                                                                ether 00:0c:29:58:fa:6a txqueuelen 1000 (Ethernet)
                                                                                                                2) 自动方式切换

                                                                                                                停止现在的131主库

                                                                                                                  /usr/local/polardb_o_current/bin/pg_ctl stop -D $PGDATA -mi

                                                                                                                  查看切换状态

                                                                                                                    curl -H "Content-Type:application/json" http://127.0.0.1:5000/v1/status?type=visual

                                                                                                                    自动切换中:

                                                                                                                      curl -H "Content-Type:application/json" http://127.0.0.1:5000/v1/status?type=visual


                                                                                                                      {


                                                                                                                      "phase": "SwitchingPhase",


                                                                                                                      "master": {


                                                                                                                      "endpoint": "192.168.238.131:5432",


                                                                                                                      "data_path": "/opt/polardb/data",


                                                                                                                      "user": "polardb",


                                                                                                                      "phase": "RUNNING",


                                                                                                                      "start_at": "2020-11-03 11:45:15",


                                                                                                                      "sync_status": "SYNC"


                                                                                                                      },


                                                                                                                      "standby": [


                                                                                                                      {


                                                                                                                      "endpoint": "192.168.238.130:5432",


                                                                                                                      "data_path": "/opt/polardb/data",


                                                                                                                      "user": "polardb",


                                                                                                                      "phase": "RUNNING",


                                                                                                                      "start_at": "2020-11-03 11:45:19",


                                                                                                                      "sync_status": "SYNC"


                                                                                                                      }


                                                                                                                      ],


                                                                                                                      "vip": [


                                                                                                                      {


                                                                                                                      "vip": "192.168.238.133",


                                                                                                                      "interface": "ens33",


                                                                                                                      "mask": "255.255.255.0",


                                                                                                                      "endpoint": "192.168.238.131:5432"


                                                                                                                      }


                                                                                                                      ]


                                                                                                                      }
                                                                                                                       

                                                                                                                      自动切换后:

                                                                                                                        curl -H "Content-Type:application/json" http://127.0.0.1:5000/v1/status?type=visual


                                                                                                                        {


                                                                                                                        "phase": "RunningPhase",


                                                                                                                        "master": {


                                                                                                                        "endpoint": "192.168.238.130:5432",


                                                                                                                        "data_path": "/opt/polardb/data",


                                                                                                                        "user": "polardb",


                                                                                                                        "phase": "RUNNING",


                                                                                                                        "start_at": "2020-11-03 13:58:17",


                                                                                                                        "sync_status": "SYNC"


                                                                                                                        },


                                                                                                                        "standby": [


                                                                                                                        {


                                                                                                                        "endpoint": "192.168.238.131:5432",


                                                                                                                        "data_path": "/opt/polardb/data",


                                                                                                                        "user": "polardb",


                                                                                                                        "phase": "RUNNING",


                                                                                                                        "start_at": "2020-11-03 13:58:21",


                                                                                                                        "sync_status": "SYNC"


                                                                                                                        }


                                                                                                                        ],


                                                                                                                        "vip": [


                                                                                                                        {


                                                                                                                        "vip": "192.168.238.133",


                                                                                                                        "interface": "ens33",


                                                                                                                        "mask": "255.255.255.0",


                                                                                                                        "endpoint": "192.168.238.130:5432"


                                                                                                                        }


                                                                                                                        ]


                                                                                                                        }

                                                                                                                         

                                                                                                                        验证vip自动切换

                                                                                                                        vip自动切换到130上了

                                                                                                                          ifconfig


                                                                                                                          ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500


                                                                                                                          inet 192.168.238.130 netmask 255.255.255.0 broadcast 192.168.238.255


                                                                                                                          inet6 fe80::9398:2419:9c94:b1b3 prefixlen 64 scopeid 0x20<link>


                                                                                                                          ether 00:0c:29:80:49:a0 txqueuelen 1000 (Ethernet)


                                                                                                                          RX packets 390201 bytes 106430712 (101.5 MiB)


                                                                                                                          RX errors 0 dropped 0 overruns 0 frame 0


                                                                                                                          TX packets 2307269 bytes 5939759826 (5.5 GiB)


                                                                                                                          TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0





                                                                                                                          ens33:5432: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500


                                                                                                                          inet 192.168.238.133 netmask 255.255.255.0 broadcast 192.168.238.255


                                                                                                                          ether 00:0c:29:80:49:a0 txqueuelen 1000 (Ethernet)








                                                                                                                          [polardb@dbnode1 polardb]$ psql -h 192.168.238.133 -p 5432 -Ureplicator -dpolardb -c "select pg_is_in_recovery()";


                                                                                                                          Password for user replicator:


                                                                                                                          pg_is_in_recovery


                                                                                                                          -------------------


                                                                                                                          f


                                                                                                                          (1 row)

                                                                                                                          若显示此结果,表示vip切换成功。


                                                                                                                          总结

                                                                                                                          PolarDB的安装包括集群部署相对还是比较便捷,在安装中暴露的一些问题一部分和初步上手不熟悉有关,也有一部分因素是目前PolarDB的相关工具文档资料都相对较少,大家也都是摸着石头过河,后续还会做更多测试将生产迁移上的经验分享给大家,最后祝所有国产数据库大展宏图!


                                                                                                                          扫描二维码

                                                                                                                          关注我们

                                                                                                                          国内最大IT云-移动IT云IAAS产品、云管服务介绍、新鲜消息、产品体验、运营推广、前沿技术、精华文章分享



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

                                                                                                                          评论