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

Halo数据库读写分离集群软件介绍(DLB)

原创 Halo Tech 2023-11-14
363

    在介绍数据库的读写分离集群软件之前,一起先简单回顾一下数据库安装与重要参数配置等等。

一、Halo数据库的安装

    1.安装依赖的软件包。

    2.创建用户和组。

    3.创建安装目录。

    4.解压软件包至安装目录, 以halo用户。

    5.拷贝license文件到安装目录。

    6.配置环境变量,以halo用户。

    7.创建数据库进程目录, 以root用户。

    8.调整内存与信号量参数, 以root用户。

    9.调整资源限制参数。

    10.创建数据库并初始化。

    11.修改halo参数。

二、Halo数据库的目录结构





三、Halo数据库体系结构

    postmaster:所有数据库进程的主进程(负责监听和fork子进程)。
    syslogger:记录系统日志。
    pgstat:收集统计信息。
    pgarch:如果开启了归档, 那么postmaster会fork一个归档进程。
    checkpointer:负责检查点的进程。
    bgwriter:负责把shared buffer中的脏数据写入磁盘的进程。
    autovacuum lanucher:负责回收垃圾数据的进程, 如果开启了autovacuum的话,那么postmaster会fork这个进程。
    autovacuum worker:负责回收垃圾数据的worker进程, 是lanucher进程fork出来的。



四、Halo数据库参数配置

    1.internal:只读参数,数据库创建后无法修改。

    2.postmaster:需要Halo重启修改。

    3.sighup:可以在postgresql.conf中修改,不需要重启,需要向postmaster进程发送sighup信号,然后由postmaster向子进程发送sighup信号,所有子进程都会参数生效。pg_ctl reload,select pg_reload_conf();

    4.backend:可以在postgresql.conf中修改,不需要重启,需要向postmaster进程发送sighup信号,但只是在新建连接中参数会生效,之前的连接参数不会生效。

    5.superuser:超级用户使用set来改变。向postmaster发送sighup信号只会影响新建连接,不会影响之前连接。

    6.user:普通用户使用set来影响本连接。


五、Halo数据库的重要管理命令

    数据库的启停:pg_ctl start/stop/restart/reload。
    数据库的初始化:pg_ctl init。
    psql的参数:-d 数据库名;-U 用户名;-h 主机名;-p 端口号;例如psql -d lis -U db2inst1。
    psql查看数据库对象:\? 帮助;\dt查看表;\d[S+]表名 查看表的具体信息;\db查看表空间;\dn查看schema,\dv 查看视图;\du查看用户;\dg 查看角色;\di 查看索引;\dc 查看转换;\dE 查看外部表;\des 查看外部服务器;\deu 查看用户映射;\df查看函数;\sf函数名 查看函数的内容;\l[+] 查看数据库;\do 查看操作符;\ds 查看序列;\dx查看扩展;\sv 视图名  查看视图的内容。
    使用psql执行sql文件:进入psql交互模式,\i input.sql;psql -d lis -U db2inst1 -f input.sql >output.txt 2>&1。

六、数据库常用的管理函数

    1.select pg_reload_conf();   --等同于pg_ctl reload。
    2.select pg_rotate_logfile();  --重新开始数据库日志。重要。
    3.select pg_terminate_backend(pidint);  --中止进程,运维可能需要。
    4.select pg_switch_wal();  --重新开始wal日志。
    5.select pg_column_size(any);  --列的大小。
    6.select pg_database_size(name);  --数据库的大小。
    7.select pg_indexes_size(regclass);  --索引的大小。
    8.select pg_table_size(regclass);  --表的大小,但不包括索引,包括toast,vm,fsm。
    9.selectpg_postmaster_start_time();  --查看数据库的启动时间。
以上进行简单回顾,下面一起进入正式主题!

七、读写分离DLB实例介绍

     读写分离的原理:halo读写分离原理是在主服务器上写,在从服务器上读。主服务器负责一切写操作的负载,而读的操作分摊在所有主从服务器上,通过读写分离来提升数据库的并发和负载能力。一般设置一台数据库服务器作为主服务器,主要承担数据的增、删和改的任务,配置N台数据库服务器为从服务器,主要承担数据的查询任务。从服务器实时复制主服务器中同步数据,以此实现数据的一致性。

    读写分离实现方式:应用程序通过在连接halo应用中配置主库与从库等地址,dlb会自动将读请求发送给从库,将写请求发送给主库,此外,halo的dlb驱动还能够实现多个从库的负载均衡。




    环境准备及安装:

    1.网络规划 

网络规划:
主库:192.168.137.31
备库:192.168.137.32
备库:192.168.137.33
DLB主机:192.168.137.34



    2.配置/安装DLB
1)修改主备机器上postgresql.conf的密码校验方式
     vi viPGDATA/postgresql.base.conf
     password_encryption = md5 
     加载参数
      $ pg_ctlreload

2)在主库halo131上创建用户halo_dlb
      $ psql
       CREATE ROLE halo_dlbsuperuser PASSWORD 'halo_dlb' login;

3)修改数据库集群机器上的配置文件pg_hba.conf
      vi $PGDATA/pg_hba.conf
     添加
     host   all         all         0/0             md5

4)配置pgpool.conf
    $ cp pgpool.conf.sample pgpool.conf
    修改如下
    listen_addresses = '*'
    port = 1922
    backend_hostname0 = 'halo131'
    backend 0
    backend_port0 = 1921
    backend_weight0 = 1
    backend_data_directory0 = '/data'
    backend_flag0 = 'DISALLOW_TO_FAILOVER'
    DISALLOW_TO_FAILOVER
    backend_application_name0 = 'server0'
   "showpool_nodes" command
    backend_hostname1 = 'halo132'
    backend_port1 = 1921
    backend_weight1 = 1
    backend_data_directory1 = '/data'
    backend_flag1 = 'DISALLOW_TO_FAILOVER'
    backend_application_name1 = 'server1'
    backend_hostname2 = 'halo133'
    backend_port2 = 1921
    backend_weight2 = 1
    backend_data_directory2 = '/data'
    backend_flag2 = 'DISALLOW_TO_FAILOVER'
    backend_application_name2 = 'server2'
    pid_file_name = '/var/run/halo/halo.pid'
    sr_check_user = 'halo_dlb'
   sr_check_password = 'halo_dlb'
   pool_passwd file before using the empty password
   sr_check_database = 'haloroot'

5)添加用户环境/home/halo/.bash_profile
   $ vi /home/halo/.bash_profile
   export PATH=/u01/app/halo/product/dlb/4.3/bin:$PATH
   执行生效
   $ source /home/halo/.bash_profile

6)生成秘钥pass
   $ /u01/app/halo/product/dlb/4.3/bin/pg_md5 -m -u halo_dlb halo_dlb
   $ cat /u01/app/halo/product/dlb/4.3/etc/pool_passwd
   halo_dlb:md546172933bfb1d5d2207389730f8d5ec0

7)添加生成密钥到pcp.conf
   $ cp pcp.conf.sample pcp.conf
   $ vi pcp.conf
   # USERID:MD5PASSWD
   halo_dlb:md546172933bfb1d5d2207389730f8d5ec0

8)配置DLB访问地址
   $cp pool_hba.conf.sample pool_hba.conf
   $ vi pool_hba.conf
   添加
   host    all        all         0.0.0.0/0             md5

9)启动DLB
    创建软链接
   $ ln -s pgpool dlb
    后台进程启动
    $ nohup dlb -n -d >   /u01/app/halo/product/dlb/4.3/logs/dlb.log 2>&1 &
     建议:创建启动脚本

10)校验读写分离
       $ psql -h 192.168.231.134 -p 1922 -U halo_dlb
         Password for user halo_dlb:
          psql(14.5 (221014))
         Type "help" for help.
          # show pool_nodes;
校验成功就可以使用读写分离功能啦!


最后修改时间:2023-11-14 16:43:45
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论