- 一直以来的服务器开发都会使用
PostgreSQL
做为数据库.有人会问为什么不用 MySQL?这个是个人喜好.Postgresql 与 MySQL 也是一些区别的.Postgresql 有一些特性是 MySQL 没有具备的.有人会说:在中国为什么 MySQL 的使用会比 PostgreSQL 流行.可能其中一个原因是 PostgreSQL 没有服务好 PHP.PostgreSQL 与 MySQL 的连接方式有很大不同,PostgreSQL 是 fork 进程,MySQL 是线程连接.所以在高并发下 PostgreSQL 的连接数会很快被用完.这时就需要一个连接池处理客户端的连接. - Pgbouncer,pgpool,PostgreSQL-XL
安装主机系统
- 本文的系统是基于
Debian 8
,安装 qemu-kvm 虚拟机.并于一些相关的软件.
1 | # apt-get install qemu-kvm openvswitch-{switch,common} libvirt-bin virtinst virt-manager |
安装基础系统
- 本文的做实验的虚拟机系统是基于
Centos 7
的环境. 通过virsh dumpxml vhost0
,配置如下:
- 两个 CPU,8G 内存,eth0 192.168.120/24, eth1 192.168.25.0/24, eth0 是桥接主机的 openvswitch 的虚拟网卡用作于 HostOnly 内部网络.eth1 是桥主机的物理网卡,可以连接到互联安装软件
1 | # virsh dumpxml vhost0 |
配置基础系统
- 在虚拟机里安装相关的软件并配置好环境,配置好各虚拟机之间自动使用证书登录 SSH 的功能.
1 | # ip addr |
- 安装如下的软件包:
1 |
|
- 修改内核参数,系统限制,有些参数要根据需求修改
1 | vm.swappiness = 0 |
编译 PostgreSQL-XL
- 使用 git clone clone 下载源代码postgresql-xl,或者下载源码包.
1 | # curl -O http://files.postgres-xl.org/postgres-xl-9.5r1.4.tar.gz |
设置 postgres 用户的变量
1 | $ cat .bashrc |
配置 PostgreSQL-XL
- 上面的操作配置了一台虚拟机环境并且编译好了
Postgresql-XL
,现在此基础上克隆 5 台虚拟机出来,并修它们的网卡与主机名
1 | // 确保做好SSH公钥认证登录 |
1 | # virsh list |
- 所有虚拟机都修改主机名与 IP,并且可以相互自动登录.现在到
gtmnode
这台机上的postgres
用户下去部署 Postgresql-XL 集群了.
- 使用命令
pgxc_ctl prepare config minimal
,生成默认配置文件.里面配置比较多.这里要相应的修改.
1 | tree /home/postgres/ |
- 这里根据前面定的虚拟机数量,做了如下修改:
1 |
|
- 请注意这里面配置的主机名要与机器一一对应上,关闭防火墙,初始化集群.
1 | [postgres@gtmnode ~]$ pgxc_ctl init all |
调优数据库
- 这里是参考Postgres XL 压力测试与性能调优做的调整
- Coordinator 节点的 postgresql.conf
1 | max_connections = 200 # 允许的最大并发连接数 |
- Datanode 节点 postgresql.conf
1 | max_connections = 1600 |
- GtmProxy 节点 gtm_pxy.conf
1 | worker_threads = 2 |
Gtm 节点 gtm.conf
1 | keepalives_idle = 120 |
安装 Pgbouncer 连接池
pgbouncer 是 PostgreSQL 的一个轻量级连接池,可以给客户端提供一个统一的视图.
pgbouncer 的作用:
a)pgbouncer 可以在后端数据库和前端应用间简历连接的桥梁,由 pgbouncer 去处理和后端的连接关系.
b)对客户端的连接进行限制,防止过多的恶意连接.pgbouncer 的特点:
a)内存消耗低.(默认 2k/连接)
b)可以把不同的数据库连接到一个机器上,而对客户端保持透明.
c)支持在线的重行配置而无需重启.
谢谢支持
- 微信二维码: